Cache objects for faster re-access; Cache album.sum_bytes result
This commit is contained in:
		
							parent
							
								
									55ed6a6d28
								
							
						
					
					
						commit
						13040d559b
					
				
					 3 changed files with 23 additions and 7 deletions
				
			
		|  | @ -146,8 +146,8 @@ DEFAULT_DATADIR = '.\\_etiquette' | |||
| DEFAULT_CONFIGURATION = { | ||||
|     'log_level': logging.DEBUG, | ||||
| 
 | ||||
|     'cache_size_album': 200, | ||||
|     'cache_size_photo': 1000, | ||||
|     'cache_size_album': 1000, | ||||
|     'cache_size_photo': 100000, | ||||
|     'cache_size_tag': 1000, | ||||
|     'cache_size_user': 200, | ||||
| 
 | ||||
|  |  | |||
|  | @ -210,6 +210,8 @@ class Album(ObjectBase, GroupableMixin): | |||
|         self.description = db_row['description'] | ||||
|         self.name = 'Album %s' % self.id | ||||
|         self.group_getter = self.photodb.get_album | ||||
|         self._sum_bytes_photos = None | ||||
|         self._sum_bytes_albums = None | ||||
| 
 | ||||
|     def __hash__(self): | ||||
|         return hash(self.id) | ||||
|  | @ -324,12 +326,14 @@ class Album(ObjectBase, GroupableMixin): | |||
|             self.photodb.commit() | ||||
| 
 | ||||
|     def sum_bytes(self, recurse=True, string=False): | ||||
|         if recurse: | ||||
|             photos = self.walk_photos() | ||||
|         else: | ||||
|             photos = self.photos() | ||||
|         if self._sum_bytes_photos is None: | ||||
|             self._sum_bytes_photos = sum(photo.bytes for photo in self.photos()) | ||||
|         total = self._sum_bytes_photos | ||||
| 
 | ||||
|         total = sum(photo.bytes for photo in photos) | ||||
|         if recurse: | ||||
|             if self._sum_bytes_albums is None: | ||||
|                 self._sum_bytes_albums = sum(a.sum_bytes(recurse=True) for a in self.children()) | ||||
|             total += self._sum_bytes_albums | ||||
| 
 | ||||
|         if string: | ||||
|             return bytestring.bytestring(total) | ||||
|  |  | |||
|  | @ -1410,6 +1410,17 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs | |||
|         if isinstance(thing_id, thing_map['class']): | ||||
|             thing_id = thing_id.id | ||||
| 
 | ||||
|         cache = { | ||||
|             'album': self._album_cache, | ||||
|             'photo': self._photo_cache, | ||||
|             'tag': self._tag_cache, | ||||
|         }[thing_type] | ||||
|         try: | ||||
|             val = cache[thing_id] | ||||
|             return val | ||||
|         except KeyError: | ||||
|             pass | ||||
| 
 | ||||
|         query = 'SELECT * FROM %s WHERE id == ?' % thing_map['table'] | ||||
|         cur = self.sql.cursor() | ||||
|         cur.execute(query, [thing_id]) | ||||
|  | @ -1417,6 +1428,7 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs | |||
|         if thing is None: | ||||
|             raise thing_map['exception'](thing_id) | ||||
|         thing = thing_map['class'](self, thing) | ||||
|         cache[thing_id] = thing | ||||
|         return thing | ||||
| 
 | ||||
|     def get_things(self, thing_type, orderby=None): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue