def add_tag_to_face(face_id, tag_id, user): # check if user already tagged with same tag global TaggedFace global FacePictures if TaggedFace.find({'from': user.get('ident'), _FACE_ID: face_id, 'tag': tag_id}).count(): return False # create tag object TaggedFace.insert({'from': user.get('ident'), 'from_type': user.get('type'), _FACE_ID: face_id, 'tag': tag_id, 'datetime': now()}) face = get_face_from(face_id) # update face tags list face.update({'tags': face_tags_dict_for(face=face)}) # maybe update main tag of face face.update({'tag': main_tag_for(face=face)}) # save face FacePictures.save(face) # maybe update winner cache update_winner_cache_if_winner(face)
def face_tags_dict_for(face): global TaggedFace agg_tags = TaggedFace.aggregate([ {'$match': {_FACE_ID: face.get(_FACE_ID)}}, {'$group': {'_id': "$tag", 'count': {'$sum': 1}}}]).get('result') tags = {} for td in agg_tags: tags.update({td.get('_id'): td.get('count')}) return tags