From 564518f4d8f1bce80d186c6da946659af72f5180 Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Fri, 23 Dec 2016 19:49:51 -0800 Subject: [PATCH] Add early author search; Load Photo.mimetype on instantiation --- constants.py | 2 +- etiquette.py | 22 ++++++++++++++++------ jsonify.py | 2 +- objects.py | 17 +++++++---------- phototagger.py | 18 ++++++++++++++++-- static/Highlander_Normal.ttf | Bin 70132 -> 0 bytes static/common.css | 9 ++++----- templates/album.html | 6 +++--- templates/photo.html | 12 ++++++------ templates/photo_card.html | 2 +- templates/search.html | 24 +++++++++++++----------- templates/tags.html | 1 + 12 files changed, 69 insertions(+), 46 deletions(-) delete mode 100644 static/Highlander_Normal.ttf diff --git a/constants.py b/constants.py index 897bdf0..e81a5a5 100644 --- a/constants.py +++ b/constants.py @@ -121,7 +121,7 @@ DEFAULT_CONFIGURATION = { 'min_username_length': 2, 'max_username_length': 24, - 'valid_username_chars': string.ascii_letters + string.digits + '~!@#$%^&*()[]{}:;,.<>/\\-_+=', + 'valid_username_chars': string.ascii_letters + string.digits + '~!@#$%^*()[]{}:;,.<>/\\-_+=', 'min_password_length': 6, 'id_length': 12, diff --git a/etiquette.py b/etiquette.py index 19cdf10..9b719ba 100644 --- a/etiquette.py +++ b/etiquette.py @@ -404,8 +404,8 @@ def get_search_core(): limit = 50 # OFFSET - offset = request.args.get('offset', None) - if offset: + offset = request.args.get('offset', '') + if offset.isdigit(): offset = int(offset) else: offset = None @@ -421,6 +421,15 @@ def get_search_core(): tag_mays = [qualname_map.get(tag, tag) for tag in tag_mays if tag != ''] tag_forbids = [qualname_map.get(tag, tag) for tag in tag_forbids if tag != ''] + # AUTHOR + authors = request.args.get('author', None) + if authors: + authors = authors.split(',') + authors = [a.strip() for a in authors] + authors = [P.get_user(username=a) for a in authors] + else: + authors = None + # ORDERBY orderby = request.args.get('orderby', None) if orderby: @@ -430,11 +439,11 @@ def get_search_core(): orderby = None # HAS_TAGS - has_tags = request.args.get('has_tags', '') - if has_tags == '': - has_tags = None - else: + has_tags = request.args.get('has_tags', None) + if has_tags: has_tags = helpers.truthystring(has_tags) + else: + has_tags = None # MINMAXERS area = request.args.get('area', None) @@ -454,6 +463,7 @@ def get_search_core(): 'bytes': bytes, 'duration': duration, + 'authors': authors, 'created': created, 'extension': extension_list, 'extension_not': extension_not_list, diff --git a/jsonify.py b/jsonify.py index 3418a38..779c577 100644 --- a/jsonify.py +++ b/jsonify.py @@ -38,7 +38,7 @@ def photo(p, include_albums=True, include_tags=True): 'has_thumbnail': bool(p.thumbnail), 'created': p.created, 'filename': p.basename, - 'mimetype': p.mimetype(), + 'mimetype': p.mimetype, } if include_albums: j['albums'] = [album(a, minimal=True) for a in p.albums()] diff --git a/objects.py b/objects.py index 73c30a7..ebb509a 100644 --- a/objects.py +++ b/objects.py @@ -300,6 +300,8 @@ class Photo(ObjectBase): self.ratio = row_tuple['ratio'] self.thumbnail = row_tuple['thumbnail'] + self.mimetype = helpers.get_mimetype(self.real_filepath) + def __reinit__(self): ''' Reload the row from the database and do __init__ with them. @@ -392,8 +394,7 @@ class Photo(ObjectBase): hopeful_filepath = self.make_thumbnail_filepath() return_filepath = None - mime = self.mimetype() - if mime == 'image': + if self.mimetype == 'image': self.photodb.log.debug('Thumbnailing %s' % self.real_filepath) try: image = PIL.Image.open(self.real_filepath) @@ -413,7 +414,7 @@ class Photo(ObjectBase): image.save(hopeful_filepath, quality=50) return_filepath = hopeful_filepath - elif mime == 'video' and constants.ffmpeg: + elif self.mimetype == 'video' and constants.ffmpeg: #print('video') probe = constants.ffmpeg.probe(self.real_filepath) try: @@ -495,9 +496,6 @@ class Photo(ObjectBase): hopeful_filepath = os.path.join(folder, basename) + '.jpg' return hopeful_filepath - def mimetype(self): - return helpers.get_mimetype(self.real_filepath) - @decorators.time_me def reload_metadata(self, *, commit=True): ''' @@ -510,8 +508,7 @@ class Photo(ObjectBase): self.ratio = None self.duration = None - mime = self.mimetype() - if mime == 'image': + if self.mimetype == 'image': try: image = PIL.Image.open(self.real_filepath) except (OSError, ValueError): @@ -521,7 +518,7 @@ class Photo(ObjectBase): image.close() self.photodb.log.debug('Loaded image data for {photo:r}'.format(photo=self)) - elif mime == 'video' and constants.ffmpeg: + elif self.mimetype == 'video' and constants.ffmpeg: try: probe = constants.ffmpeg.probe(self.real_filepath) if probe and probe.video: @@ -531,7 +528,7 @@ class Photo(ObjectBase): except: traceback.print_exc() - elif mime == 'audio': + elif self.mimetype == 'audio': try: probe = constants.ffmpeg.probe(self.real_filepath) if probe and probe.audio: diff --git a/phototagger.py b/phototagger.py index 90e8db4..8c0442c 100644 --- a/phototagger.py +++ b/phototagger.py @@ -452,6 +452,8 @@ class PDBPhotoMixin: elif author is not None: # Just to confirm author_id = self.get_user(id=author).id + else: + author_id = None extension = os.path.splitext(filename)[1] extension = extension.replace('.', '') @@ -524,6 +526,7 @@ class PDBPhotoMixin: bytes=None, duration=None, + authors=None, created=None, extension=None, extension_not=None, @@ -541,11 +544,14 @@ class PDBPhotoMixin: orderby=None ): ''' - PHOTO PROPERTISE + PHOTO PROPERTIES area, width, height, ratio, bytes, duration: A hyphen_range string representing min and max. Or just a number for lower bound. TAGS AND FILTERS + authors: + A list of User object or users IDs. + created: A hyphen_range string respresenting min and max. Or just a number for lower bound. @@ -615,6 +621,11 @@ class PDBPhotoMixin: extension_not = helpers._normalize_extensions(extension_not) mimetype = helpers._normalize_extensions(mimetype) + if authors is not None: + if isinstance(authors, str): + authors = {authors, } + authors = set(a.id if isinstance(a, objects.User) else a for a in authors) + if filename is not None: if not isinstance(filename, str): filename = ' '.join(filename) @@ -669,10 +680,13 @@ class PDBPhotoMixin: #print('Failed extension_not') continue - if mimetype and photo.mimetype() not in mimetype: + if mimetype and photo.mimetype not in mimetype: #print('Failed mimetype') continue + if authors and photo.author_id not in authors: + continue + if filename and not _helper_filenamefilter(subject=photo.basename, terms=filename): #print('Failed filename') continue diff --git a/static/Highlander_Normal.ttf b/static/Highlander_Normal.ttf deleted file mode 100644 index 00bf36cd05d3648776b29b183137cd1d05a74d31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70132 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 O*!Yq)ZEXU-n*CqMMgp<` diff --git a/static/common.css b/static/common.css index 342239a..2e5de5e 100644 --- a/static/common.css +++ b/static/common.css @@ -154,6 +154,10 @@ li bottom: 0; right: 0; } +.photo_card_grid_filename +{ + word-break:break-word; +} .photo_card_grid_tags { position: absolute; @@ -195,8 +199,3 @@ li { background-color: #faa; } - -@font-face { - font-family: 'Highlander'; - src: url('/static/Highlander_Normal.ttf'); -} \ No newline at end of file diff --git a/templates/album.html b/templates/album.html index 805370a..a3aa873 100644 --- a/templates/album.html +++ b/templates/album.html @@ -47,12 +47,12 @@ p {% endfor %} {% endif %} + {% set photos = album.photos() %} Download: - These files - {% if sub_albums %} | Include children{% endif %} + {% if photos %}These files{% endif %} + {% if sub_albums %}Include children{% endif %} - {% set photos = album.photos() %} {% if photos %}

Photos

    diff --git a/templates/photo.html b/templates/photo.html index 73de407..708df23 100644 --- a/templates/photo.html +++ b/templates/photo.html @@ -8,7 +8,6 @@ {% set filename = photo.id + "." + photo.extension %} {% set link = "/file/" + filename %} - {% set mimetype=photo.mimetype() %}