diff --git a/README.md b/README.md index 591d040..4131933 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Documentation is still a work in progress. In general, I use: - Improve the "tags on this page" list. Maybe add separate buttons for must/may/forbid on each. - Some way for the database to re-identify a file that was moved / renamed (lost & found). Maybe file hash of the first few mb is good enough. - Debate whether the `UserMixin.login` method should accept usernames or I should standardize the usage of IDs only internally. -- Ability to access user page and user photos by user's ID, not just username. +- Ability to access user photos by user's ID, not just username. - Should album size be cached on disk? - Replace columns like area, ratio, bitrate by using expression indices or views (`width * height` etc). - Add some way to support large image albums without flooding the search results. Considering a "hidden" property so that a handful of representative images can appear in the search results, and the rest can be found on the actual Album page. diff --git a/frontends/etiquette_flask/etiquette_flask/etiquette_flask.py b/frontends/etiquette_flask/etiquette_flask/etiquette_flask.py index a36552d..43c26a7 100644 --- a/frontends/etiquette_flask/etiquette_flask/etiquette_flask.py +++ b/frontends/etiquette_flask/etiquette_flask/etiquette_flask.py @@ -118,6 +118,10 @@ def P_tag(tagname): def P_user(username): return P.get_user(username=username) +@P_wrapper +def P_user_id(userid): + return P.get_user(id=userid) + def send_file(filepath, override_mimetype=None): ''' Range-enabled file sending. @@ -347,10 +351,6 @@ def get_tags_core(specific_tag=None): tags.sort(key=lambda x: x.qualified_name()) return tags -def get_user_core(username): - user = P_user(username) - return user - def post_photo_add_remove_tag_core(photoid, tagname, add_or_remove): photo = P_photo(photoid, response_type='json') tag = P_tag(tagname, response_type='json') @@ -833,17 +833,29 @@ def get_thumbnail(photoid): @site.route('/user/', methods=['GET']) @session_manager.give_token def get_user_html(username): - user = get_user_core(username) + user = P_user(username, response_type='html') session = session_manager.get(request) return flask.render_template('user.html', user=user, session=session) @site.route('/user/.json', methods=['GET']) @session_manager.give_token def get_user_json(username): - user = get_user_core(username) + user = P_user(username, response_type='json') user = etiquette.jsonify.user(user) return jsonify.make_json_response(user) +@site.route('/userid/') +@site.route('/userid/.json') +def get_user_id_redirect(userid): + if request.url.endswith('.json'): + user = P_user_id(userid, response_type='json') + else: + user = P_user_id(userid, response_type='html') + url_from = '/userid/' + userid + url_to = '/user/' + user.username + url = request.url.replace(url_from, url_to) + return flask.redirect(url) + @site.route('/apitest') @session_manager.give_token