Add endpoints /batch/photos/add_tag and /remove_tag.
This commit is contained in:
parent
13e8bc4a6f
commit
761ae5c30c
1 changed files with 46 additions and 12 deletions
|
@ -68,14 +68,19 @@ def get_thumbnail(photo_id):
|
||||||
# Photo tag operations #############################################################################
|
# Photo tag operations #############################################################################
|
||||||
|
|
||||||
@decorators.catch_etiquette_exception
|
@decorators.catch_etiquette_exception
|
||||||
def post_photo_add_remove_tag_core(photo_id, tagname, add_or_remove):
|
def post_photo_add_remove_tag_core(photo_ids, tagname, add_or_remove):
|
||||||
photo = common.P_photo(photo_id, response_type='json')
|
if isinstance(photo_ids, str):
|
||||||
|
photo_ids = etiquette.helpers.comma_space_split(photo_ids)
|
||||||
|
|
||||||
|
photos = [common.P_photo(photo_id, response_type='json') for photo_id in photo_ids]
|
||||||
tag = common.P_tag(tagname, response_type='json')
|
tag = common.P_tag(tagname, response_type='json')
|
||||||
|
|
||||||
|
for photo in photos:
|
||||||
if add_or_remove == 'add':
|
if add_or_remove == 'add':
|
||||||
photo.add_tag(tag)
|
photo.add_tag(tag, commit=False)
|
||||||
elif add_or_remove == 'remove':
|
elif add_or_remove == 'remove':
|
||||||
photo.remove_tag(tag)
|
photo.remove_tag(tag, commit=False)
|
||||||
|
common.P.commit()
|
||||||
|
|
||||||
response = {'tagname': tag.name}
|
response = {'tagname': tag.name}
|
||||||
return jsonify.make_json_response(response)
|
return jsonify.make_json_response(response)
|
||||||
|
@ -86,7 +91,12 @@ def post_photo_add_tag(photo_id):
|
||||||
'''
|
'''
|
||||||
Add a tag to this photo.
|
Add a tag to this photo.
|
||||||
'''
|
'''
|
||||||
return post_photo_add_remove_tag_core(photo_id, request.form['tagname'], 'add')
|
response = post_photo_add_remove_tag_core(
|
||||||
|
photo_ids=photo_id,
|
||||||
|
tagname=request.form['tagname'],
|
||||||
|
add_or_remove='add',
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
@site.route('/photo/<photo_id>/remove_tag', methods=['POST'])
|
@site.route('/photo/<photo_id>/remove_tag', methods=['POST'])
|
||||||
@decorators.required_fields(['tagname'], forbid_whitespace=True)
|
@decorators.required_fields(['tagname'], forbid_whitespace=True)
|
||||||
|
@ -94,7 +104,32 @@ def post_photo_remove_tag(photo_id):
|
||||||
'''
|
'''
|
||||||
Remove a tag from this photo.
|
Remove a tag from this photo.
|
||||||
'''
|
'''
|
||||||
return post_photo_add_remove_tag_core(photo_id, request.form['tagname'], 'remove')
|
response = post_photo_add_remove_tag_core(
|
||||||
|
photo_ids=photo_id,
|
||||||
|
tagname=request.form['tagname'],
|
||||||
|
add_or_remove='remove',
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
|
@site.route('/batch/photos/add_tag', methods=['POST'])
|
||||||
|
@decorators.required_fields(['photo_ids', 'tagname'], forbid_whitespace=True)
|
||||||
|
def post_batch_photos_add_tag():
|
||||||
|
response = post_photo_add_remove_tag_core(
|
||||||
|
photo_ids=request.form['photo_ids'],
|
||||||
|
tagname=request.form['tagname'],
|
||||||
|
add_or_remove='add',
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
|
@site.route('/batch/photos/remove_tag', methods=['POST'])
|
||||||
|
@decorators.required_fields(['photo_ids', 'tagname'], forbid_whitespace=True)
|
||||||
|
def post_batch_photos_remove_tag():
|
||||||
|
response = post_photo_add_remove_tag_core(
|
||||||
|
photo_ids=request.form['photo_ids'],
|
||||||
|
tagname=request.form['tagname'],
|
||||||
|
add_or_remove='remove',
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
# Photo metadata operations ########################################################################
|
# Photo metadata operations ########################################################################
|
||||||
|
|
||||||
|
@ -123,13 +158,12 @@ def get_clipboard_page():
|
||||||
return flask.render_template('clipboard.html')
|
return flask.render_template('clipboard.html')
|
||||||
|
|
||||||
@site.route('/batch/photos/photo_card', methods=['POST'])
|
@site.route('/batch/photos/photo_card', methods=['POST'])
|
||||||
|
@decorators.required_fields(['photo_ids'], forbid_whitespace=True)
|
||||||
def post_batch_photos_photo_cards():
|
def post_batch_photos_photo_cards():
|
||||||
photo_ids = request.form.get('photo_ids', None)
|
photo_ids = request.form['photo_ids']
|
||||||
if photo_ids is None:
|
|
||||||
return jsonify.make_json_response({})
|
|
||||||
|
|
||||||
photo_ids = etiquette.helpers.comma_space_split(photo_ids)
|
photo_ids = etiquette.helpers.comma_space_split(photo_ids)
|
||||||
photos = [common.P_photo(photo_id, response_type='html') for photo_id in photo_ids]
|
photos = [common.P_photo(photo_id, response_type='json') for photo_id in photo_ids]
|
||||||
|
|
||||||
# Photo filenames are prevented from having colons, so using it as a split
|
# Photo filenames are prevented from having colons, so using it as a split
|
||||||
# delimiter should be safe.
|
# delimiter should be safe.
|
||||||
|
|
Loading…
Reference in a new issue