From 733a443835c5e6318f5ed43efa95f54d51b8d28e Mon Sep 17 00:00:00 2001 From: Fluffy-Bean Date: Mon, 20 Mar 2023 17:57:47 +0000 Subject: [PATCH] PyLint wasnt done with me --- gallery/__init__.py | 2 +- gallery/db.py | 2 +- gallery/routes/api.py | 35 +++++------ gallery/routes/groups.py | 94 ++++++++++++++++++------------ gallery/routes/routing.py | 33 ++++++----- gallery/utils/metadata/__init__.py | 4 +- gallery/utils/theme_manager.py | 2 +- 7 files changed, 99 insertions(+), 73 deletions(-) diff --git a/gallery/__init__.py b/gallery/__init__.py index f159b8a..103f76e 100644 --- a/gallery/__init__.py +++ b/gallery/__init__.py @@ -40,7 +40,7 @@ def create_app(test_config=None): # Get config file with open(os.path.join(USER_DIR, 'conf.yml'), encoding='utf-8') as file: - conf = safe_load(file, loader=FullLoader) + conf = safe_load(file) print("Loaded gallery config") # App configuration diff --git a/gallery/db.py b/gallery/db.py index 48c60fc..fc68d75 100644 --- a/gallery/db.py +++ b/gallery/db.py @@ -66,7 +66,7 @@ class Thumbnails (base): # pylint: disable=too-few-public-methods, C0103 Thumbnail table """ __tablename__ = 'thumbnails' - + id = Column(Integer, primary_key=True) file_name = Column(String, unique=True, nullable=False) file_ext = Column(String, nullable=False) diff --git a/gallery/routes/api.py b/gallery/routes/api.py index 2b8aa8c..000042c 100644 --- a/gallery/routes/api.py +++ b/gallery/routes/api.py @@ -38,17 +38,8 @@ def get_file(file_name): """ # Get args res = request.args.get('r', default=None, type=str) # Type of file (thumb, etc) - filtered = request.args.get('f', default=False, type=bool) # Whether to apply filters + filtered = request.args.get('f', default=False, type=bool) # Whether to apply filters # pylint: disable=W0612 blur = request.args.get('b', default=False, type=bool) # Whether to force blur - - # Idea: instead if specifying the height and width, pass in a string like "200x200" or "200x" or "x200" - # This would remove the need for the if statements below and would be possible to pass in a string - # like 'thumb' to get the thumbnail size instead of having to specify the width and height - # This would also allow for more flexibility in the future if I wanted to add more sizes - # Another idea is to pass in a list of filters to apply to the image - # such as "blur,grayscale" or "blur,grayscale,sepia". But this would require a lot more work to implement - # and would be a lot more complicated to use, would also implement the risk of the server being overloaded - # with requests to apply a lot of filters to a lot of images at once file_name = secure_filename(file_name) # Sanitize file name @@ -77,12 +68,12 @@ def get_file(file_name): img = ImageOps.exif_transpose(img) # Rotate image based on EXIF data - # Todo: If type is thumb(nail), return from database instead of file system + # Todo: If type is thumb(nail), return from database instead of file system pylint: disable=W0511 # as it's faster than generating a new thumbnail on every request if res: - if res == 'thumb' or res == 'thumbnail': + if res in ['thumb', 'thumbnail']: width, height = 400, 400 - elif res == 'prev' or res == 'preview': + elif res in ['prev', 'preview']: width, height = 1920, 1080 else: try: @@ -94,7 +85,7 @@ def get_file(file_name): img.thumbnail((width, height), Image.LANCZOS) - # Todo: If the image has a NSFW tag, blur image for example + # Todo: If the image has a NSFW tag, blur image for example pylint: disable=W0511 # if filtered: # pass @@ -245,10 +236,16 @@ def modify_group(): abort(403) if request.form['action'] == 'add': - if db_session.query(db.GroupJunction).filter_by(group_id=group_id, post_id=image_id).first() is None: - db_session.add(db.GroupJunction(group_id=group_id, post_id=image_id, date_added=dt.utcnow())) + if not db_session.query(db.GroupJunction)\ + .filter_by(group_id=group_id, post_id=image_id)\ + .first(): + db_session.add(db.GroupJunction(group_id=group_id, + post_id=image_id, + date_added=dt.utcnow())) elif request.form['action'] == 'remove': - db_session.query(db.GroupJunction).filter_by(group_id=group_id, post_id=image_id).delete() + db_session.query(db.GroupJunction)\ + .filter_by(group_id=group_id, post_id=image_id)\ + .delete() db_session.commit() @@ -262,7 +259,7 @@ def metadata(img_id): """ img = db_session.query(db.Posts).filter_by(id=img_id).first() - if img is None: + if not img: abort(404) img_path = os.path.join(current_app.config['UPLOAD_FOLDER'], img.file_name) @@ -279,7 +276,7 @@ def logfile(): """ log_dict = {} - with open('only.log', encoding='utf-8') as file: + with open('only.log', encoding='utf-8', mode='r') as file: for i, line in enumerate(file): line = line.split(' : ') diff --git a/gallery/routes/groups.py b/gallery/routes/groups.py index 753e982..0c5f170 100644 --- a/gallery/routes/groups.py +++ b/gallery/routes/groups.py @@ -1,12 +1,9 @@ """ Onlylegs - Image Groups -Why groups? Because I don't like calling these albums, sounds more limiting that it actually is +Why groups? Because I don't like calling these albums +sounds more limiting that it actually is in this gallery """ -import logging -import json -from datetime import datetime as dt - -from flask import Blueprint, abort, jsonify, render_template, url_for, request, g +from flask import Blueprint, abort, render_template, url_for from sqlalchemy.orm import sessionmaker from gallery import db @@ -22,15 +19,21 @@ def groups(): """ Group overview, shows all image groups """ - groups = db_session.query(db.Groups).all() - - for group in groups: - thumbnail = db_session.query(db.GroupJunction.post_id).filter(db.GroupJunction.group_id == group.id).order_by(db.GroupJunction.date_added.desc()).first() - - if thumbnail is not None: - group.thumbnail = db_session.query(db.Posts.file_name, db.Posts.post_alt, db.Posts.image_colours, db.Posts.id).filter(db.Posts.id == thumbnail[0]).first() - - return render_template('groups/list.html', groups=groups) + group_list = db_session.query(db.Groups).all() + + for group_item in group_list: + thumbnail = db_session.query(db.GroupJunction.post_id)\ + .filter(db.GroupJunction.group_id == group_item.id)\ + .order_by(db.GroupJunction.date_added.desc())\ + .first() + + if thumbnail: + group_item.thumbnail = db_session.query(db.Posts.file_name, db.Posts.post_alt, + db.Posts.image_colours, db.Posts.id)\ + .filter(db.Posts.id == thumbnail[0])\ + .first() + + return render_template('groups/list.html', groups=group_list) @blueprint.route('/') @@ -38,21 +41,26 @@ def group(group_id): """ Group view, shows all images in a group """ - group = db_session.query(db.Groups).filter(db.Groups.id == group_id).first() - - if group is None: + group_item = db_session.query(db.Groups).filter(db.Groups.id == group_id).first() + + if group_item is None: abort(404, 'Group not found! D:') - - group.author_username = db_session.query(db.Users.username).filter(db.Users.id == group.author_id).first()[0] - - group_images = db_session.query(db.GroupJunction.post_id).filter(db.GroupJunction.group_id == group_id).order_by(db.GroupJunction.date_added.desc()).all() - + + group_item.author_username = db_session.query(db.Users.username)\ + .filter(db.Users.id == group_item.author_id)\ + .first()[0] + + group_images = db_session.query(db.GroupJunction.post_id)\ + .filter(db.GroupJunction.group_id == group_id)\ + .order_by(db.GroupJunction.date_added.desc())\ + .all() + images = [] for image in group_images: image = db_session.query(db.Posts).filter(db.Posts.id == image[0]).first() images.append(image) - - return render_template('groups/group.html', group=group, images=images) + + return render_template('groups/group.html', group=group_item, images=images) @blueprint.route('//') @@ -65,17 +73,31 @@ def group_post(group_id, image_id): if img is None: abort(404, 'Image not found') - img.author_username = db_session.query(db.Users.username).filter(db.Users.id == img.author_id).first()[0] - - groups = db_session.query(db.GroupJunction.group_id).filter(db.GroupJunction.post_id == image_id).all() - img.groups = [] - for group in groups: - group = db_session.query(db.Groups).filter(db.Groups.id == group[0]).first() - img.groups.append(group) - - next_url = db_session.query(db.GroupJunction.post_id).filter(db.GroupJunction.group_id == group_id).filter(db.GroupJunction.post_id > image_id).order_by(db.GroupJunction.date_added.asc()).first() - prev_url = db_session.query(db.GroupJunction.post_id).filter(db.GroupJunction.group_id == group_id).filter(db.GroupJunction.post_id < image_id).order_by(db.GroupJunction.date_added.desc()).first() - + img.author_username = db_session.query(db.Users.username)\ + .filter(db.Users.id == img.author_id)\ + .first()[0] + + group_list = db_session.query(db.GroupJunction.group_id)\ + .filter(db.GroupJunction.post_id == image_id)\ + .all() + + img.group_list = [] + for group_item in group_list: + group_item = db_session.query(db.Groups).filter(db.Groups.id == group_item[0]).first() + img.group_list.append(group_item) + + next_url = db_session.query(db.GroupJunction.post_id)\ + .filter(db.GroupJunction.group_id == group_id)\ + .filter(db.GroupJunction.post_id > image_id)\ + .order_by(db.GroupJunction.date_added.asc())\ + .first() + + prev_url = db_session.query(db.GroupJunction.post_id)\ + .filter(db.GroupJunction.group_id == group_id)\ + .filter(db.GroupJunction.post_id < image_id)\ + .order_by(db.GroupJunction.date_added.desc())\ + .first() + if next_url is not None: next_url = url_for('group.group_post', group_id=group_id, image_id=next_url[0]) if prev_url is not None: diff --git a/gallery/routes/routing.py b/gallery/routes/routing.py index b2ba6d4..4ae6a15 100644 --- a/gallery/routes/routing.py +++ b/gallery/routes/routing.py @@ -1,8 +1,6 @@ """ Onlylegs Gallery - Routing """ -from datetime import datetime as dt - from flask import Blueprint, render_template, url_for from werkzeug.exceptions import abort @@ -25,7 +23,7 @@ def index(): db.Posts.image_colours, db.Posts.created_at, db.Posts.id).order_by(db.Posts.id.desc()).all() - + return render_template('index.html', images=images) @@ -36,23 +34,32 @@ def image(image_id): """ img = db_session.query(db.Posts).filter(db.Posts.id == image_id).first() - if img is None: + if not img: abort(404, 'Image not found :<') - img.author_username = db_session.query(db.Users.username).filter(db.Users.id == img.author_id).first()[0] - - groups = db_session.query(db.GroupJunction.group_id).filter(db.GroupJunction.post_id == image_id).all() + img.author_username = db_session.query(db.Users.username)\ + .filter(db.Users.id == img.author_id).first()[0] + + groups = db_session.query(db.GroupJunction.group_id)\ + .filter(db.GroupJunction.post_id == image_id).all() + img.groups = [] for group in groups: group = db_session.query(db.Groups).filter(db.Groups.id == group[0]).first() img.groups.append(group) - - next_url = db_session.query(db.Posts.id).filter(db.Posts.id > image_id).order_by(db.Posts.id.asc()).first() - prev_url = db_session.query(db.Posts.id).filter(db.Posts.id < image_id).order_by(db.Posts.id.desc()).first() - - if next_url is not None: + + next_url = db_session.query(db.Posts.id)\ + .filter(db.Posts.id > image_id)\ + .order_by(db.Posts.id.asc())\ + .first() + prev_url = db_session.query(db.Posts.id)\ + .filter(db.Posts.id < image_id)\ + .order_by(db.Posts.id.desc())\ + .first() + + if next_url: next_url = url_for('gallery.image', image_id=next_url[0]) - if prev_url is not None: + if prev_url: prev_url = url_for('gallery.image', image_id=prev_url[0]) return render_template('image.html', image=img, next_url=next_url, prev_url=prev_url) diff --git a/gallery/utils/metadata/__init__.py b/gallery/utils/metadata/__init__.py index 989edf6..7915f8f 100644 --- a/gallery/utils/metadata/__init__.py +++ b/gallery/utils/metadata/__init__.py @@ -67,13 +67,13 @@ class Metadata: } # Thanks chatGPT xP - for key, value in encoded_exif.items(): + for key, value in encoded_exif.items(): for mapping_name, mapping_val in EXIF_MAPPING: if key in mapping_val: if len(mapping_val[key]) == 2: exif[mapping_name][mapping_val[key][0]] = { 'raw': value, - 'formatted': getattr(helpers, mapping_val[key][1])(value), + 'formatted': getattr(helpers, mapping_val[key][1])(value), # pylint: disable=E0602 } else: exif[mapping_name][mapping_val[key][0]] = { diff --git a/gallery/utils/theme_manager.py b/gallery/utils/theme_manager.py index 4fae142..5e32dcf 100644 --- a/gallery/utils/theme_manager.py +++ b/gallery/utils/theme_manager.py @@ -78,5 +78,5 @@ class CompileTheme: except Exception as err: print("Failed to copy fonts!\n", err) sys.exit(1) - + print("Fonts copied successfully!")