예제 #1
0
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)
예제 #2
0
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