Beispiel #1
0
def service_search_video(**kw):

    kw['service'] = 'video'
    kw = util_pattern_format_param(**kw)

    # Search configs
    if 'slice' not in kw:
        kw['slice'] = conf.SEARCH_SLICE
    if 'ignore_case' not in kw:
        kw['ignore_case'] = conf.SEARCH_IGNORE_CASE
    if 'exact' not in kw:
        kw['exact'] = conf.SEARCH_EXACT
    # TODO: add typo allowance, etc.

    # Search
    # TODO: Support aggregation pipeline
    if kw['ignore_case'] is False or kw['exact'] is True or kw['slice']\
            is True:
        kw = util_pattern_slice(**kw)
        kw = util_pattern_build(**kw)
        res_search = service_search_video_by_pattern(**kw)
    elif 'pattern' in kw and kw['pattern'] is True:
        # Pattern search
        kw = util_pattern_build(**kw)
        res_search = service_search_video_by_pattern(**kw)
    elif 'aggregate' in kw and kw['aggregate'] is True:
        # Aggregate search
        res_search = service_search_video_by_aggregation(**kw)
        for res in res_search:
            res['video_id'] = str(res['_id'])
            res.pop('_id')

        for res in res_search:
            user = query_user_get_by_id(res['user_id'])[0]
            res['user_name'] = user.user_name

        return res_search
    else:
        # Contains keyword (single) search
        res_search = service_search_video_by_contains(**kw)

    res_array = util_serializer_mongo_results_to_array(res_search)

    for res in res_array:
        user = query_user_get_by_id(res['user_id'])[0]
        res['user_name'] = user.user_name

    # default format="dict"
    return res_array
Beispiel #2
0
def query_video_op_create(user_id: str, video_id: str,
                          init_time=get_time_now_utc()):
    """
    Create video operations

    :param user_id: user's unique id
    :param video_id: video's unique id
    :param init_time: op creation time (optional, default utc now)
    :return VideoOp model if succeeded, -1 if no such user, -2 if no such
    video, -3 if VideoOp exists
    """
    if len(query_user_get_by_id(user_id)) == 0:
        raise MongoError(ErrorCode.MONGODB_USER_NOT_FOUND)

    if len(query_video_get_by_video_id(video_id)) == 0:
        raise MongoError(ErrorCode.MONGODB_VIDEO_NOT_FOUND)

    if len(query_video_op_get_by_user_video(user_id, video_id)) > 0:
        raise MongoError(ErrorCode.MONGODB_VIDEO_OP_EXISTS)

    video_op = VideoOp(user_id=user_id, video_id=video_id, process=0,
                       comment="", like=False,
                       dislike=False, star=False, process_date=init_time,
                       comment_date=init_time,
                       like_date=init_time, dislike_date=init_time,
                       star_date=init_time)

    return video_op.save()
Beispiel #3
0
def service_user_get_process(user_id):

    # user_id check
    if not is_valid_id(user_id):
        raise ServiceError(ErrorCode.SERVICE_INVALID_ID_OBJ)

    if len(query_user_get_by_id(user_id)) <= 0:
        raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)

    # perform db operations and get result
    search_mongo = query_video_op_get_by_user_id(user_id)
    if len(search_mongo) == 0:
        return []

    search_result = util_serializer_mongo_results_to_array(search_mongo)

    process_result = []
    for each in search_result:
        process_result.append({
            "video_id": each["video_id"],
            "user_id": each["user_id"],
            "process": str(each["process"]),
            "process_date": str(each["process_date"])
        })

    return process_result
Beispiel #4
0
def service_video_comments(**kw):

    kw['service'] = 'video'
    kw = util_pattern_format_param(**kw)

    # keyword check and formatting
    if 'video_id' not in kw:
        raise ServiceError(ErrorCode.SERVICE_MISSING_PARAM)

    if not is_valid_id(kw["video_id"]):
        raise ServiceError(ErrorCode.SERVICE_INVALID_ID_OBJ)

    # perform db operations and get result
    search_mongo = query_video_op_get_by_video_id(kw["video_id"])
    if len(search_mongo) == 0:
        return []

    search_result = util_serializer_mongo_results_to_array(search_mongo)

    comments_result = []
    for each in search_result:
        if each["comment"] != "":
            user_obj = query_user_get_by_id(each["user_id"])[0].to_dict()
            comments_result.append({
                "video_id": each["video_id"],
                "user_id": each["user_id"],
                "user_name": user_obj["user_name"],
                "user_thumbnail": user_obj["user_thumbnail"],
                "comment": each["comment"],
                "comment_date": str(each["comment_date"])
            })

    return comments_result
Beispiel #5
0
def service_auth_user_get(token, user_id):
    users = query_user_get_by_id(user_id)
    if len(users) == 0:
        raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)
    user = users[0].to_dict()
    if user['user_status'] == 'public' or token == user_id:
        return True
    return False
Beispiel #6
0
def service_user_get_user(user_id):

    # user_id check
    if not is_valid_id(user_id):
        raise ServiceError(ErrorCode.SERVICE_INVALID_ID_OBJ)

    users = query_user_get_by_id(user_id)
    if len(users) == 0:
        raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)

    user_array = util_serializer_mongo_results_to_array(users)
    return user_array[0]
Beispiel #7
0
def query_video_create(user_id: str):
    """
    Create Video
    :param user_id: (required) user's unique id
    :return: video uuid
    """
    if len(query_user_get_by_id(user_id)) == 0:
        raise MongoError(ErrorCode.MONGODB_USER_NOT_FOUND)

    # Construct Video Model
    video = Video(user_id=user_id,
                  video_title="",
                  video_raw_content="",
                  video_raw_status="pending",
                  video_status="public",
                  video_raw_size=0,
                  video_duration=0,
                  video_channel="",
                  video_tag=[],
                  video_category=[],
                  video_description="",
                  video_language="",
                  video_view=0,
                  video_comment=0,
                  video_like=0,
                  video_dislike=0,
                  video_star=0,
                  video_share=0,
                  video_thumbnail="",
                  video_upload_date=get_time_now_utc(),
                  video_uri=VideoURI())
    video.save()

    aws_uri = conf.AWS_STREAMING_FOLDER + str(video.id) + '_'
    aws_low = aws_uri + conf.AWS_STREAMING_LOW + conf.AWS_STREAMING_FORMAT
    aws_mid = aws_uri + conf.AWS_STREAMING_MID + conf.AWS_STREAMING_FORMAT
    aws_high = aws_uri + conf.AWS_STREAMING_HIGH + conf.AWS_STREAMING_FORMAT

    aws_thumbnail = conf.AWS_THUMBNAIL_FOLDER + \
        str(video.id) + conf.AWS_THUMBNAIL_FORMAT

    Video.objects(id=video.id).update(video_uri__video_uri_low=aws_low)
    Video.objects(id=video.id).update(video_uri__video_uri_mid=aws_mid)
    Video.objects(id=video.id).update(video_uri__video_uri_high=aws_high)
    Video.objects(id=video.id).update(video_thumbnail=aws_thumbnail)
    return str(video.id)
Beispiel #8
0
def service_user_update_info(**kw):

    kw['service'] = 'user'
    kw = util_pattern_format_param(**kw)
    if 'user_id' not in kw:
        raise ServiceError(ErrorCode.SERVICE_MISSING_USER_ID)
    if 'user_status' in kw:
        query_user_update_status(kw['user_id'], kw['user_status'])
    if 'user_name' in kw:
        query_user_update_name(kw['user_id'], kw['user_name'])
    if 'user_email' in kw:
        query_user_update_email(kw['user_id'], kw['user_email'])
    if 'user_password' in kw:
        query_user_update_password(kw['user_id'], kw['user_password'])
    if 'user_thumbnail' in kw:
        query_user_update_thumbnail(kw['user_id'], kw['user_thumbnail'])
    query_user_update_details(**kw)
    return query_user_get_by_id(kw['user_id'])[0].to_dict()
Beispiel #9
0
def service_user_login(**kw):

    kw['service'] = 'user'
    kw = util_pattern_format_param(**kw)
    if 'user_name' in kw and 'user_password' in kw:
        users = query_user_get_by_name(kw['user_name'])
        if len(users) == 0:
            raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)
        user = users[0]
        if user.to_dict()["user_status"] == "closed":
            raise ServiceError(ErrorCode.SERVICE_USER_CLOSED)
        if util_hash_encode(kw['user_password']) != user.user_password:
            raise ServiceError(ErrorCode.SERVICE_USER_PASS_WRONG)
    elif 'user_email' in kw and 'user_password' in kw:
        users = query_user_get_by_email(kw['user_email'])
        if len(users) == 0:
            raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)
        user = users[0]
        if user.to_dict()["user_status"] == "closed":
            raise ServiceError(ErrorCode.SERVICE_USER_CLOSED)
        if util_hash_encode(kw['user_password']) != user.user_password:
            raise ServiceError(ErrorCode.SERVICE_USER_PASS_WRONG)
    elif 'user' in kw and 'user_password' in kw:
        user_names = query_user_get_by_name(kw['user'])
        user_emails = query_user_get_by_email(kw['user'])
        if len(user_emails) == 0 and len(user_names) == 0:
            raise ServiceError(ErrorCode.SERVICE_USER_NOT_FOUND)
        elif len(user_emails) != 0:
            user = user_emails[0]
        elif len(user_names) != 0:
            user = user_names[0]
        if user.to_dict()["user_status"] == "closed":
            raise ServiceError(ErrorCode.SERVICE_USER_CLOSED)
        if util_hash_encode(kw['user_password']) != user.user_password:
            raise ServiceError(ErrorCode.SERVICE_USER_PASS_WRONG)
    else:
        raise ServiceError(ErrorCode.SERVICE_MISSING_PARAM)

    uid = user.to_dict()['user_id']
    if 'ip' in kw:
        query_user_add_login(uid, ip=kw['ip'])
    return query_user_get_by_id(uid)[0].to_dict()
Beispiel #10
0
def service_video_info(**kw):

    kw['service'] = 'video'
    kw = util_pattern_format_param(**kw)
    # keyword check and formatting
    if 'video_id' not in kw:
        raise ServiceError(ErrorCode.SERVICE_MISSING_PARAM)

    if not is_valid_id(kw["video_id"]):
        raise ServiceError(ErrorCode.SERVICE_INVALID_ID_OBJ)
    # perform db operations and get result
    video = query_video_get_by_video_id(kw["video_id"])
    if len(video) == 0:
        raise ServiceError(ErrorCode.SERVICE_VIDEO_NOT_FOUND)

    res = video[0].to_dict()
    user_id = res["user_id"]
    user_obj = query_user_get_by_id(user_id)[0].to_dict()
    res["user_name"] = user_obj["user_name"]
    res["user_thumbnail"] = user_obj["user_thumbnail"]
    return res