Fix Album.add_associated_directory not letting duplicates.
The docstring and the actual code were disagreeing.
This commit is contained in:
parent
30e3aa9c6f
commit
fb052a2d56
1 changed files with 22 additions and 23 deletions
|
@ -293,32 +293,22 @@ class Album(ObjectBase, GroupableMixin):
|
|||
|
||||
@decorators.required_feature('album.edit')
|
||||
@decorators.transaction
|
||||
def add_associated_directory(self, filepath, *, commit=True):
|
||||
def add_associated_directory(self, path, *, commit=True):
|
||||
'''
|
||||
Add a directory from which this album will pull files during rescans.
|
||||
These relationships are not unique and multiple albums
|
||||
can associate with the same directory if desired.
|
||||
'''
|
||||
filepath = pathclass.Path(filepath)
|
||||
if not filepath.is_dir:
|
||||
raise ValueError(f'{filepath} is not a directory')
|
||||
path = pathclass.Path(path)
|
||||
|
||||
try:
|
||||
existing = self.photodb.get_album_by_path(filepath)
|
||||
except exceptions.NoSuchAlbum:
|
||||
existing = None
|
||||
if not path.is_dir:
|
||||
raise ValueError(f'{path} is not a directory.')
|
||||
|
||||
if existing is None:
|
||||
pass
|
||||
elif existing == self:
|
||||
if self.has_associated_directory(path):
|
||||
return
|
||||
else:
|
||||
raise exceptions.AlbumExists(filepath)
|
||||
|
||||
data = {
|
||||
'albumid': self.id,
|
||||
'directory': filepath.absolute_path,
|
||||
}
|
||||
self.photodb.log.debug('Adding directory %s to %s.', path, self)
|
||||
data = {'albumid': self.id, 'directory': path.absolute_path}
|
||||
self.photodb.sql_insert(table='album_associated_directories', data=data)
|
||||
|
||||
if commit:
|
||||
|
@ -448,7 +438,7 @@ class Album(ObjectBase, GroupableMixin):
|
|||
|
||||
def has_any_photo(self, recurse=False):
|
||||
row = self.photodb.sql_select_one(
|
||||
'SELECT photoid FROM album_photo_rel WHERE albumid == ? LIMIT 1',
|
||||
'SELECT 1 FROM album_photo_rel WHERE albumid == ? LIMIT 1',
|
||||
[self.id]
|
||||
)
|
||||
if row is not None:
|
||||
|
@ -458,17 +448,26 @@ class Album(ObjectBase, GroupableMixin):
|
|||
return False
|
||||
|
||||
def has_any_subalbum_photo(self):
|
||||
'''
|
||||
Return True if any descendent album has any photo, ignoring whether
|
||||
this particular album itself has photos.
|
||||
'''
|
||||
return any(child.has_any_photo(recurse=True) for child in self.get_children())
|
||||
|
||||
def has_photo(self, photo):
|
||||
if not isinstance(photo, Photo):
|
||||
raise TypeError(f'`photo` must be of type {Photo}, not {type(photo)}.')
|
||||
def has_associated_directory(self, path):
|
||||
path = pathclass.Path(path)
|
||||
row = self.photodb.sql_select_one(
|
||||
'SELECT 1 FROM album_associated_directories WHERE albumid == ? AND directory == ?',
|
||||
[self.id, path.absolute_path]
|
||||
)
|
||||
return row is not None
|
||||
|
||||
rel_row = self.photodb.sql_select_one(
|
||||
def has_photo(self, photo):
|
||||
row = self.photodb.sql_select_one(
|
||||
'SELECT 1 FROM album_photo_rel WHERE albumid == ? AND photoid == ?',
|
||||
[self.id, photo.id]
|
||||
)
|
||||
return rel_row is not None
|
||||
return row is not None
|
||||
|
||||
@decorators.required_feature('album.edit')
|
||||
# GroupableMixin.remove_child already has @transaction.
|
||||
|
|
Loading…
Reference in a new issue