Rename variable 'row_tuple' to 'db_row'; Improve some docstrings
This commit is contained in:
		
							parent
							
								
									d71d7b03c2
								
							
						
					
					
						commit
						c3a4fa443b
					
				
					 5 changed files with 80 additions and 66 deletions
				
			
		|  | @ -171,13 +171,13 @@ class GroupableMixin: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Album(ObjectBase, GroupableMixin): | class Album(ObjectBase, GroupableMixin): | ||||||
|     def __init__(self, photodb, row_tuple): |     def __init__(self, photodb, db_row): | ||||||
|         self.photodb = photodb |         self.photodb = photodb | ||||||
|         if isinstance(row_tuple, (list, tuple)): |         if isinstance(db_row, (list, tuple)): | ||||||
|             row_tuple = {constants.SQL_ALBUM_COLUMNS[index]: value for (index, value) in enumerate(row_tuple)} |             db_row = {constants.SQL_ALBUM_COLUMNS[index]: value for (index, value) in enumerate(db_row)} | ||||||
|         self.id = row_tuple['id'] |         self.id = db_row['id'] | ||||||
|         self.title = row_tuple['title'] |         self.title = db_row['title'] | ||||||
|         self.description = row_tuple['description'] |         self.description = db_row['description'] | ||||||
|         self.name = 'Album %s' % self.id |         self.name = 'Album %s' % self.id | ||||||
|         self.group_getter = self.photodb.get_album |         self.group_getter = self.photodb.get_album | ||||||
| 
 | 
 | ||||||
|  | @ -285,27 +285,25 @@ class Album(ObjectBase, GroupableMixin): | ||||||
|         else: |         else: | ||||||
|             return total |             return total | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     def walk_photos(self): |     def walk_photos(self): | ||||||
|         yield from self.photos() |         yield from self.photos() | ||||||
|         children = self.walk_children() |         children = self.walk_children() | ||||||
|         # The first yield is itself |         # The first yield is itself | ||||||
|         next(children) |         next(children) | ||||||
|         for child in children: |         for child in children: | ||||||
|             print(child) |  | ||||||
|             yield from child.walk_photos() |             yield from child.walk_photos() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Bookmark(ObjectBase): | class Bookmark(ObjectBase): | ||||||
|     def __init__(self, photodb, row_tuple): |     def __init__(self, photodb, db_row): | ||||||
|         self.photodb = photodb |         self.photodb = photodb | ||||||
|         if isinstance(row_tuple, (list, tuple)): |         if isinstance(db_row, (list, tuple)): | ||||||
|             row_tuple = {constants.SQL_BOOKMARK_COLUMNS[index]: value for (index, value) in enumerate(row_tuple)} |             db_row = {constants.SQL_BOOKMARK_COLUMNS[index]: value for (index, value) in enumerate(db_row)} | ||||||
| 
 | 
 | ||||||
|         self.id = row_tuple['id'] |         self.id = db_row['id'] | ||||||
|         self.title = row_tuple['title'] |         self.title = db_row['title'] | ||||||
|         self.url = row_tuple['url'] |         self.url = db_row['url'] | ||||||
|         self.author_id = row_tuple['author_id'] |         self.author_id = db_row['author_id'] | ||||||
| 
 | 
 | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         return 'Bookmark:{id}'.format(id=self.id) |         return 'Bookmark:{id}'.format(id=self.id) | ||||||
|  | @ -339,34 +337,34 @@ class Photo(ObjectBase): | ||||||
|     Photo objects cannot exist without a corresponding PhotoDB object, because |     Photo objects cannot exist without a corresponding PhotoDB object, because | ||||||
|     Photos are not the actual image data, just the database entry. |     Photos are not the actual image data, just the database entry. | ||||||
|     ''' |     ''' | ||||||
|     def __init__(self, photodb, row_tuple): |     def __init__(self, photodb, db_row): | ||||||
|         self.photodb = photodb |         self.photodb = photodb | ||||||
|         if isinstance(row_tuple, (list, tuple)): |         if isinstance(db_row, (list, tuple)): | ||||||
|             row_tuple = {constants.SQL_PHOTO_COLUMNS[index]: value for (index, value) in enumerate(row_tuple)} |             db_row = {constants.SQL_PHOTO_COLUMNS[index]: value for (index, value) in enumerate(db_row)} | ||||||
| 
 | 
 | ||||||
|         self.real_filepath = helpers.normalize_filepath(row_tuple['filepath'], allowed=':\\/') |         self.real_filepath = helpers.normalize_filepath(db_row['filepath'], allowed=':\\/') | ||||||
|         self.real_path = pathclass.Path(self.real_filepath) |         self.real_path = pathclass.Path(self.real_filepath) | ||||||
| 
 | 
 | ||||||
|         self.id = row_tuple['id'] |         self.id = db_row['id'] | ||||||
|         self.created = row_tuple['created'] |         self.created = db_row['created'] | ||||||
|         self.author_id = row_tuple['author_id'] |         self.author_id = db_row['author_id'] | ||||||
|         self.filepath = row_tuple['override_filename'] or self.real_path.absolute_path |         self.filepath = db_row['override_filename'] or self.real_path.absolute_path | ||||||
|         self.basename = row_tuple['override_filename'] or self.real_path.basename |         self.basename = db_row['override_filename'] or self.real_path.basename | ||||||
|         self.extension = row_tuple['extension'] |         self.extension = db_row['extension'] | ||||||
|         self.tagged_at = row_tuple['tagged_at'] |         self.tagged_at = db_row['tagged_at'] | ||||||
| 
 | 
 | ||||||
|         if self.extension == '': |         if self.extension == '': | ||||||
|             self.dot_extension = '' |             self.dot_extension = '' | ||||||
|         else: |         else: | ||||||
|             self.dot_extension = '.' + self.extension |             self.dot_extension = '.' + self.extension | ||||||
| 
 | 
 | ||||||
|         self.area = row_tuple['area'] |         self.area = db_row['area'] | ||||||
|         self.bytes = row_tuple['bytes'] |         self.bytes = db_row['bytes'] | ||||||
|         self.duration = row_tuple['duration'] |         self.duration = db_row['duration'] | ||||||
|         self.width = row_tuple['width'] |         self.width = db_row['width'] | ||||||
|         self.height = row_tuple['height'] |         self.height = db_row['height'] | ||||||
|         self.ratio = row_tuple['ratio'] |         self.ratio = db_row['ratio'] | ||||||
|         self.thumbnail = row_tuple['thumbnail'] |         self.thumbnail = db_row['thumbnail'] | ||||||
| 
 | 
 | ||||||
|         self.mimetype = helpers.get_mimetype(self.real_filepath) |         self.mimetype = helpers.get_mimetype(self.real_filepath) | ||||||
|         if self.mimetype is None: |         if self.mimetype is None: | ||||||
|  | @ -736,12 +734,12 @@ class Tag(ObjectBase, GroupableMixin): | ||||||
|     ''' |     ''' | ||||||
|     A Tag, which can be applied to Photos for organization. |     A Tag, which can be applied to Photos for organization. | ||||||
|     ''' |     ''' | ||||||
|     def __init__(self, photodb, row_tuple): |     def __init__(self, photodb, db_row): | ||||||
|         self.photodb = photodb |         self.photodb = photodb | ||||||
|         if isinstance(row_tuple, (list, tuple)): |         if isinstance(db_row, (list, tuple)): | ||||||
|             row_tuple = {constants.SQL_TAG_COLUMNS[index]: value for (index, value) in enumerate(row_tuple)} |             db_row = {constants.SQL_TAG_COLUMNS[index]: value for (index, value) in enumerate(db_row)} | ||||||
|         self.id = row_tuple['id'] |         self.id = db_row['id'] | ||||||
|         self.name = row_tuple['name'] |         self.name = db_row['name'] | ||||||
|         self.group_getter = self.photodb.get_tag |         self.group_getter = self.photodb.get_tag | ||||||
|         self._cached_qualified_name = None |         self._cached_qualified_name = None | ||||||
| 
 | 
 | ||||||
|  | @ -913,13 +911,13 @@ class User(ObjectBase): | ||||||
|     ''' |     ''' | ||||||
|     A dear friend of ours. |     A dear friend of ours. | ||||||
|     ''' |     ''' | ||||||
|     def __init__(self, photodb, row_tuple): |     def __init__(self, photodb, db_row): | ||||||
|         self.photodb = photodb |         self.photodb = photodb | ||||||
|         if isinstance(row_tuple, (list, tuple)): |         if isinstance(db_row, (list, tuple)): | ||||||
|             row_tuple = {constants.SQL_USER_COLUMNS[index]: value for (index, value) in enumerate(row_tuple)} |             db_row = {constants.SQL_USER_COLUMNS[index]: value for (index, value) in enumerate(db_row)} | ||||||
|         self.id = row_tuple['id'] |         self.id = db_row['id'] | ||||||
|         self.username = row_tuple['username'] |         self.username = db_row['username'] | ||||||
|         self.created = row_tuple['created'] |         self.created = db_row['created'] | ||||||
| 
 | 
 | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         rep = 'User:{id}:{username}'.format(id=self.id, username=self.username) |         rep = 'User:{id}:{username}'.format(id=self.id, username=self.username) | ||||||
|  |  | ||||||
|  | @ -541,14 +541,16 @@ class PDBPhotoMixin: | ||||||
|         ''' |         ''' | ||||||
|         PHOTO PROPERTIES |         PHOTO PROPERTIES | ||||||
|         area, width, height, ratio, bytes, duration: |         area, width, height, ratio, bytes, duration: | ||||||
|             A hyphen_range string representing min and max. Or just a number for lower bound. |             A hyphen_range string representing min and max. Or just a number | ||||||
|  |             for lower bound. | ||||||
| 
 | 
 | ||||||
|         TAGS AND FILTERS |         TAGS AND FILTERS | ||||||
|         authors: |         authors: | ||||||
|             A list of User objects, or usernames, or user ids. |             A list of User objects, or usernames, or user ids. | ||||||
| 
 | 
 | ||||||
|         created: |         created: | ||||||
|             A hyphen_range string respresenting min and max. Or just a number for lower bound. |             A hyphen_range string respresenting min and max. Or just a number | ||||||
|  |             for lower bound. | ||||||
| 
 | 
 | ||||||
|         extension: |         extension: | ||||||
|             A string or list of strings of acceptable file extensions. |             A string or list of strings of acceptable file extensions. | ||||||
|  | @ -558,16 +560,20 @@ class PDBPhotoMixin: | ||||||
|             Including '*' will forbid all extensions |             Including '*' will forbid all extensions | ||||||
| 
 | 
 | ||||||
|         filename: |         filename: | ||||||
|             A string or list of strings which will be split into words. The file's basename |             A string or list of strings in the form of an expression. | ||||||
|             must include every word, NOT case-sensitive. |             Match is CASE-INSENSITIVE. | ||||||
|  |             Examples: | ||||||
|  |             '.pdf AND (programming OR "survival guide")' | ||||||
|  |             '.pdf programming python' (implicitly AND each term) | ||||||
| 
 | 
 | ||||||
|         has_tags: |         has_tags: | ||||||
|             If True, require that the Photo has >=1 tag. |             If True, require that the Photo has >=1 tag. | ||||||
|             If False, require that the Photo has no tags. |             If False, require that the Photo has no tags. | ||||||
|             If None, not considered. |             If None, any amount is okay. | ||||||
| 
 | 
 | ||||||
|         mimetype: |         mimetype: | ||||||
|             A string or list of strings of acceptable mimetypes. 'image', 'video', ... |             A string or list of strings of acceptable mimetypes. | ||||||
|  |             'image', 'video', ... | ||||||
| 
 | 
 | ||||||
|         tag_musts: |         tag_musts: | ||||||
|             A list of tag names or Tag objects. |             A list of tag names or Tag objects. | ||||||
|  | @ -582,8 +588,11 @@ class PDBPhotoMixin: | ||||||
|             Photos MUST NOT have ANY tag in the list. |             Photos MUST NOT have ANY tag in the list. | ||||||
| 
 | 
 | ||||||
|         tag_expression: |         tag_expression: | ||||||
|             A string like 'family AND (animals OR vacation)' to filter by. |             A string or list of strings in the form of an expression. | ||||||
|             Can NOT be used with the must, may, forbid style search. |             Can NOT be used with the must, may, forbid style search. | ||||||
|  |             Examples: | ||||||
|  |             'family AND (animals OR vacation)' | ||||||
|  |             'family vacation outdoors' (implicitly AND each term) | ||||||
| 
 | 
 | ||||||
|         QUERY OPTIONS |         QUERY OPTIONS | ||||||
|         limit: |         limit: | ||||||
|  | @ -598,13 +607,15 @@ class PDBPhotoMixin: | ||||||
|             Descending is assumed if not provided. |             Descending is assumed if not provided. | ||||||
| 
 | 
 | ||||||
|         warning_bag: |         warning_bag: | ||||||
|             Invalid search queries will add a warning to the bag and try their best to continue. |             If provided, invalid search queries will add a warning to the bag | ||||||
|             Otherwise they may raise exceptions. |             and try their best to continue. The generator will yield the bag | ||||||
|  |             back to you as the final object. | ||||||
|  |             Without the bag, exceptions may be raised. | ||||||
| 
 | 
 | ||||||
|         give_back_parameters: |         give_back_parameters: | ||||||
|             If True, the generator's first yield will be a dictionary of all the cleaned up, normalized |             If True, the generator's first yield will be a dictionary of all the | ||||||
|             parameters. The user may have given us loads of trash, so we should show them the formatting |             cleaned up, normalized parameters. The user may have given us loads | ||||||
|             we want. |             of trash, so we should show them the formatting we want. | ||||||
|         ''' |         ''' | ||||||
|         start_time = time.time() |         start_time = time.time() | ||||||
| 
 | 
 | ||||||
|  | @ -791,7 +802,6 @@ class PDBPhotoMixin: | ||||||
|                     #print('Failed has_tags=True') |                     #print('Failed has_tags=True') | ||||||
|                     continue |                     continue | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|                 if tag_expression: |                 if tag_expression: | ||||||
|                     success = expression_tree.evaluate( |                     success = expression_tree.evaluate( | ||||||
|                         photo_tags, |                         photo_tags, | ||||||
|  | @ -819,7 +829,6 @@ class PDBPhotoMixin: | ||||||
|             if limit is not None and photos_received >= limit: |             if limit is not None and photos_received >= limit: | ||||||
|                 break |                 break | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|             photos_received += 1 |             photos_received += 1 | ||||||
|             yield photo |             yield photo | ||||||
| 
 | 
 | ||||||
|  | @ -1383,7 +1392,7 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs | ||||||
| 
 | 
 | ||||||
|         things = cur.fetchall() |         things = cur.fetchall() | ||||||
|         for thing in things: |         for thing in things: | ||||||
|             thing = thing_map['class'](self, row_tuple=thing) |             thing = thing_map['class'](self, db_row=thing) | ||||||
|             yield thing |             yield thing | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -153,7 +153,6 @@ def normalize_filename(filename_terms): | ||||||
|         filename_terms = ' '.join(filename_terms) |         filename_terms = ' '.join(filename_terms) | ||||||
| 
 | 
 | ||||||
|     filename_terms = filename_terms.strip() |     filename_terms = filename_terms.strip() | ||||||
|     filename_terms = shlex.split(filename_terms) |  | ||||||
| 
 | 
 | ||||||
|     if not filename_terms: |     if not filename_terms: | ||||||
|         return None |         return None | ||||||
|  | @ -280,6 +279,11 @@ def normalize_tag_expression(expression): | ||||||
|     if not isinstance(expression, str): |     if not isinstance(expression, str): | ||||||
|         expression = ' '.join(expression) |         expression = ' '.join(expression) | ||||||
| 
 | 
 | ||||||
|  |     expression = expression.strip() | ||||||
|  | 
 | ||||||
|  |     if not expression: | ||||||
|  |         return None | ||||||
|  | 
 | ||||||
|     return expression |     return expression | ||||||
| 
 | 
 | ||||||
| def normalize_tag_mmf(tags, photodb, warning_bag=None): | def normalize_tag_mmf(tags, photodb, warning_bag=None): | ||||||
|  |  | ||||||
|  | @ -484,16 +484,19 @@ def get_search_core(): | ||||||
|     # The search has converted many arguments into sets or other types. |     # The search has converted many arguments into sets or other types. | ||||||
|     # Convert them back into something that will display nicely on the search form. |     # Convert them back into something that will display nicely on the search form. | ||||||
|     join_helper = lambda x: ', '.join(x) if x else None |     join_helper = lambda x: ', '.join(x) if x else None | ||||||
|     tagname_helper = lambda tags: [tag.qualified_name() for tag in tags] if tags else None |  | ||||||
|     filename_helper = lambda fn: ' '.join('"%s"' % part if ' ' in part else part for part in fn) if fn else None |  | ||||||
|     search_kwargs['extension'] = join_helper(search_kwargs['extension']) |     search_kwargs['extension'] = join_helper(search_kwargs['extension']) | ||||||
|     search_kwargs['extension_not'] = join_helper(search_kwargs['extension_not']) |     search_kwargs['extension_not'] = join_helper(search_kwargs['extension_not']) | ||||||
|     search_kwargs['mimetype'] = join_helper(search_kwargs['mimetype']) |     search_kwargs['mimetype'] = join_helper(search_kwargs['mimetype']) | ||||||
|     search_kwargs['filename'] = filename_helper(search_kwargs['filename']) | 
 | ||||||
|  |     tagname_helper = lambda tags: [tag.qualified_name() for tag in tags] if tags else None | ||||||
|     search_kwargs['tag_musts'] = tagname_helper(search_kwargs['tag_musts']) |     search_kwargs['tag_musts'] = tagname_helper(search_kwargs['tag_musts']) | ||||||
|     search_kwargs['tag_mays'] = tagname_helper(search_kwargs['tag_mays']) |     search_kwargs['tag_mays'] = tagname_helper(search_kwargs['tag_mays']) | ||||||
|     search_kwargs['tag_forbids'] = tagname_helper(search_kwargs['tag_forbids']) |     search_kwargs['tag_forbids'] = tagname_helper(search_kwargs['tag_forbids']) | ||||||
| 
 | 
 | ||||||
|  |     #quoted_helper = lambda text: '"%s"' % text if ' ' in text else text | ||||||
|  |     #filename_helper = lambda fn: ' '.join(quoted_helper(part) for part in fn) if fn else None | ||||||
|  |     #search_kwargs['filename'] = filename_helper(search_kwargs['filename']) | ||||||
|  | 
 | ||||||
|     search_results = list(search_generator) |     search_results = list(search_generator) | ||||||
|     warnings = set() |     warnings = set() | ||||||
|     photos = [] |     photos = [] | ||||||
|  |  | ||||||
|  | @ -37,7 +37,7 @@ def upgrade_3_to_4(sql): | ||||||
|     ''' |     ''' | ||||||
|     cur = sql.cursor() |     cur = sql.cursor() | ||||||
|     cur.execute('ALTER TABLE photos ADD COLUMN author_id TEXT') |     cur.execute('ALTER TABLE photos ADD COLUMN author_id TEXT') | ||||||
|     cur.execute('CREATE INDEX IF NOT EXISTS index_photo_author on photos(author_id)') |     cur.execute('CREATE INDEX IF NOT EXISTS index_photo_author ON photos(author_id)') | ||||||
| 
 | 
 | ||||||
| def upgrade_4_to_5(sql): | def upgrade_4_to_5(sql): | ||||||
|     ''' |     ''' | ||||||
|  | @ -52,8 +52,8 @@ def upgrade_4_to_5(sql): | ||||||
|         author_id TEXT |         author_id TEXT | ||||||
|     ) |     ) | ||||||
|     ''') |     ''') | ||||||
|     cur.execute('CREATE INDEX IF NOT EXISTS index_bookmark_id on bookmarks(id)') |     cur.execute('CREATE INDEX IF NOT EXISTS index_bookmark_id ON bookmarks(id)') | ||||||
|     cur.execute('CREATE INDEX IF NOT EXISTS index_bookmark_author on bookmarks(author_id)') |     cur.execute('CREATE INDEX IF NOT EXISTS index_bookmark_author ON bookmarks(author_id)') | ||||||
| 
 | 
 | ||||||
| def upgrade_all(database_filename): | def upgrade_all(database_filename): | ||||||
|     ''' |     ''' | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue