Add Album.add_photos for batch adding with less savepoint waste.
Because each call to add_photo opens a savepoint, it is wasteful to use it for a large number of photos that belong together.
This commit is contained in:
		
							parent
							
								
									8fcaf15fbe
								
							
						
					
					
						commit
						94e518068f
					
				
					 2 changed files with 25 additions and 9 deletions
				
			
		|  | @ -282,6 +282,15 @@ class Album(ObjectBase, GroupableMixin): | |||
|             self.photodb.log.debug('Committing - add associated directory') | ||||
|             self.photodb.commit() | ||||
| 
 | ||||
|     def _add_photo(self, photo): | ||||
|         self.photodb.log.debug('Adding photo %s to %s', photo, self) | ||||
|         data = { | ||||
|             'albumid': self.id, | ||||
|             'photoid': photo.id, | ||||
|         } | ||||
|         self.photodb.sql_insert(table='album_photo_rel', data=data) | ||||
|         self._uncache_sums() | ||||
| 
 | ||||
|     @decorators.required_feature('album.edit') | ||||
|     @decorators.transaction | ||||
|     def add_photo(self, photo, *, commit=True): | ||||
|  | @ -290,18 +299,26 @@ class Album(ObjectBase, GroupableMixin): | |||
|         if self.has_photo(photo): | ||||
|             return | ||||
| 
 | ||||
|         self.photodb.log.debug('Adding photo %s to %s', photo, self) | ||||
|         data = { | ||||
|             'albumid': self.id, | ||||
|             'photoid': photo.id, | ||||
|         } | ||||
|         self.photodb.sql_insert(table='album_photo_rel', data=data) | ||||
|         self._add_photo(photo) | ||||
| 
 | ||||
|         self._uncache_sums() | ||||
|         if commit: | ||||
|             self.photodb.log.debug('Committing - add photo to album') | ||||
|             self.photodb.commit() | ||||
| 
 | ||||
|     @decorators.required_feature('album.edit') | ||||
|     @decorators.transaction | ||||
|     def add_photos(self, photos, *, commit=True): | ||||
|         existing_photos = set(self.get_photos()) | ||||
|         photos = set(photos) | ||||
|         photos = photos.difference(existing_photos) | ||||
| 
 | ||||
|         for photo in photos: | ||||
|             self._add_photo(photo) | ||||
| 
 | ||||
|         if commit: | ||||
|             self.photodb.log.debug('Committing - add photos to album') | ||||
|             self.photodb.commit() | ||||
| 
 | ||||
|     # Photo.add_tag already has @required_feature | ||||
|     @decorators.transaction | ||||
|     def add_tag_to_all(self, tag, *, nested_children=True, commit=True): | ||||
|  |  | |||
|  | @ -1294,8 +1294,7 @@ class PhotoDB( | |||
|             current_album = create_or_fetch_current_album(albums_by_path, current_directory) | ||||
|             orphan_join_parent_album(albums_by_path, current_album, current_directory) | ||||
| 
 | ||||
|             for photo in photos: | ||||
|                 current_album.add_photo(photo, commit=False) | ||||
|             current_album.add_photos(photos, commit=False) | ||||
| 
 | ||||
|         if commit: | ||||
|             self.log.debug('Committing - digest_directory') | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue