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.required_feature('album.edit') | ||||||
|     @decorators.transaction |     @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. |         Add a directory from which this album will pull files during rescans. | ||||||
|         These relationships are not unique and multiple albums |         These relationships are not unique and multiple albums | ||||||
|         can associate with the same directory if desired. |         can associate with the same directory if desired. | ||||||
|         ''' |         ''' | ||||||
|         filepath = pathclass.Path(filepath) |         path = pathclass.Path(path) | ||||||
|         if not filepath.is_dir: |  | ||||||
|             raise ValueError(f'{filepath} is not a directory') |  | ||||||
| 
 | 
 | ||||||
|         try: |         if not path.is_dir: | ||||||
|             existing = self.photodb.get_album_by_path(filepath) |             raise ValueError(f'{path} is not a directory.') | ||||||
|         except exceptions.NoSuchAlbum: |  | ||||||
|             existing = None |  | ||||||
| 
 | 
 | ||||||
|         if existing is None: |         if self.has_associated_directory(path): | ||||||
|             pass |  | ||||||
|         elif existing == self: |  | ||||||
|             return |             return | ||||||
|         else: |  | ||||||
|             raise exceptions.AlbumExists(filepath) |  | ||||||
| 
 | 
 | ||||||
|         data = { |         self.photodb.log.debug('Adding directory %s to %s.', path, self) | ||||||
|             'albumid': self.id, |         data = {'albumid': self.id, 'directory': path.absolute_path} | ||||||
|             'directory': filepath.absolute_path, |  | ||||||
|         } |  | ||||||
|         self.photodb.sql_insert(table='album_associated_directories', data=data) |         self.photodb.sql_insert(table='album_associated_directories', data=data) | ||||||
| 
 | 
 | ||||||
|         if commit: |         if commit: | ||||||
|  | @ -448,7 +438,7 @@ class Album(ObjectBase, GroupableMixin): | ||||||
| 
 | 
 | ||||||
|     def has_any_photo(self, recurse=False): |     def has_any_photo(self, recurse=False): | ||||||
|         row = self.photodb.sql_select_one( |         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] |             [self.id] | ||||||
|         ) |         ) | ||||||
|         if row is not None: |         if row is not None: | ||||||
|  | @ -458,17 +448,26 @@ class Album(ObjectBase, GroupableMixin): | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
|     def has_any_subalbum_photo(self): |     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()) |         return any(child.has_any_photo(recurse=True) for child in self.get_children()) | ||||||
| 
 | 
 | ||||||
|     def has_photo(self, photo): |     def has_associated_directory(self, path): | ||||||
|         if not isinstance(photo, Photo): |         path = pathclass.Path(path) | ||||||
|             raise TypeError(f'`photo` must be of type {Photo}, not {type(photo)}.') |         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 == ?', |             'SELECT 1 FROM album_photo_rel WHERE albumid == ? AND photoid == ?', | ||||||
|             [self.id, photo.id] |             [self.id, photo.id] | ||||||
|         ) |         ) | ||||||
|         return rel_row is not None |         return row is not None | ||||||
| 
 | 
 | ||||||
|     @decorators.required_feature('album.edit') |     @decorators.required_feature('album.edit') | ||||||
|     # GroupableMixin.remove_child already has @transaction. |     # GroupableMixin.remove_child already has @transaction. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue