Exemple #1
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'PERMISSION_EDIT',
                                    access_level=Access_level.Premium)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    logger.debug(LogMsg.EDIT_REQUST, {'permission_id': id, 'data': data})
    schema_validate(data, PERMISSION_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    model_instance = db_session.query(Permission).filter(
        Permission.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'permission_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))

        logger.debug(LogMsg.MODEL_ALTERED, model_to_dict(model_instance))

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.ALREADY_EXISTS)

    logger.info(LogMsg.END)
    return model_instance
def edit_status_internal(id, status, db_session, username=None):
    logger.info(LogMsg.START, username)

    model_instance = internal_get(id, db_session)
    logger.debug(LogMsg.ORDER_CHECK, {'order_id': id})
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'order_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    if username is not None:

        logger.debug(LogMsg.PERMISSION_CHECK, username)
        validate_permissions_and_access(username, db_session,
                                        'ORDER_EDIT', model=model_instance,
                                        access_level=Access_level.Premium)
        logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    try:
        model_instance.status = status
        edit_basic_data(model_instance, username)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(404, Message.DELETE_FAILED)
    logger.info(LogMsg.END)
    return model_instance
Exemple #3
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)
    schema_validate(data, USER_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    old_pass = data.get('old_password', None)
    if old_pass is not None:
        user = check_user(username, db_session)
        if user.password != old_pass:
            logger.error(LogMsg.INVALID_USER, {'old_password': '******'})
            raise Http_error(403, Message.INVALID_PASSWORD)

    logger.debug(LogMsg.EDIT_REQUST, {'user_id': id, 'data': data})

    model_instance = check_by_id(id, db_session)
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING, {'user_id': id})
    else:
        logger.debug(LogMsg.NOT_FOUND, {'user_id': id})
        raise Http_error(404, Message.NOT_FOUND)
    if model_instance.username == username:
        password = data.get('old_password')
        if model_instance.password != password:
            logger.error(LogMsg.INVALID_USER,
                         {'password': '******'})
            raise Http_error(403, Message.INVALID_PASSWORD)
    for key, value in data.items():
        setattr(model_instance, key, value)
    edit_basic_data(model_instance, username, data.get('tags'))
    user_dict = user_to_dict(model_instance)

    logger.debug(LogMsg.EDIT_SUCCESS, user_dict)
    logger.info(LogMsg.END)

    return user_dict
def checkout(order_id, data, db_session, username):
    logger.info(LogMsg.START, username)

    schema_validate(data,CHECKOUT_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    preferred_account = data.get('preferred_account', 'Main')
    person_id = data.get('person_id')
    logger.debug(LogMsg.ORDER_CHECKOUT_REQUEST, order_id)
    order = get_order(order_id, db_session)
    if order is None:
        logger.error(LogMsg.NOT_FOUND, {'order_id': order_id})
        raise Http_error(404, Message.NOT_FOUND)
    logger.debug(LogMsg.ORDER_EXISTS, order_id)

    if order.status==OrderStatus.Invoiced:
        logger.debug(LogMsg.ORDER_NOT_EDITABLE,order_id)
        raise Http_error(409,Message.ORDER_INVOICED)

    # CHECK PERMISSION
    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session,
                                    'ORDER_CHECKOUT',model=order)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    logger.debug(LogMsg.GETTING_ACCOUNT_PERSON, {'person_id': order.person_id})
    account = get_account(order.person_id, preferred_account, db_session)
    if account is None:
        logger.error(LogMsg.USER_HAS_NO_ACCOUNT,
                     {'person_id': order.person_id, 'type': preferred_account})
        raise Http_error(404, Message.USER_HAS_NO_ACCOUNT)

    logger.debug(LogMsg.ORDER_CALC_PRICE,{'order_id',order_id})
    order_price = recalc_order_price(order_id, db_session)
    logger.debug(LogMsg.ORDER_CHECK_ACCOUNT_VALUE)
    if account.value < order_price:
        logger.error(LogMsg.ORDER_LOW_BALANCE,{'order_price':order_price,'account_value':account.value})
        raise Http_error(402, Message.INSUFFICIANT_BALANCE)

    account.value -= order_price

    transaction_data = {'account_id': account.id, 'debit': order_price}

    add_transaction(transaction_data, db_session)

    order.status = OrderStatus.Invoiced
    logger.debug(LogMsg.ORDER_INVOICED,order_id)
    edit_basic_data(order,username)

    order_items = get_orders_items_internal(order_id, db_session)
    logger.debug(LogMsg.ORDER_GETTING_ITEMS,{'order_id':order_id})
    book_list = []
    for item in order_items:
        book_list.append(item.book_id)

    add_books_to_library(order.person_id, book_list, db_session)
    data.update({'order_price': order_price})
    logger.debug(LogMsg.ORDER_ITEMS_ADDED_TO_LIB)
    logger.info(LogMsg.END)
    return data
def add(db_session, data):
    logger.info(LogMsg.START, '--INTERNAL--')

    logger.debug(LogMsg.SCHEMA_CHECKED)

    seen = get_internal(data.get('receptor_id'), data.get('sender_id'),
                        data.get('group_id'), db_session)
    if seen is not None:
        seen.last_seen = data.get('last_seen')
        edit_basic_data(seen, 'INTERNAL')
        logger.debug(LogMsg.LAST_SEEN_UPDATE,data)
        return seen

    model_instance = LastSeen()
    logger.debug(LogMsg.POPULATING_BASIC_DATA)
    populate_basic_data(model_instance, 'INTERNAL', data.get('tags'))
    model_instance.sender_id = data.get('sender_id')
    model_instance.receptor_id = data.get('receptor_id')
    model_instance.group_id = data.get('group_id', None)
    model_instance.last_seen = data.get('last_seen')

    db_session.add(model_instance)
    logger.debug(LogMsg.LAST_SEEN_ADD,data)
    logger.info(LogMsg.END)

    return model_instance
Exemple #6
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START)
    permission_data = {}
    schema_validate(data, EDIT_SCHEMA_PATH)

    user = check_user(username, db_session)

    logger.debug(LogMsg.RATE_CHECK, {'rate_id': id})
    model_instance = db_session.query(Rate).filter(
        Rate.id == id, Rate.person_id == user.person_id).first()

    if model_instance:

        logger.debug(LogMsg.RATE_EXISTS, model_to_dict(model_instance))
    else:
        logger.error(LogMsg.RATE_NOT_EXISTS, {'rate_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    model_instance.rate = data.get('rate')
    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.RATE_CHANGED, model_to_dict(model_instance))
    logger.info(LogMsg.END)

    return model_instance
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, MEMBER_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    group_member = get_model(id, db_session)
    if group_member is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_member': id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    per_data = {}
    if is_admin_member(user.person_id, group_member.group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_MEMBER',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    for key, value in data.items():
        setattr(group_member, key, value)
    edit_basic_data(group_member, username, data.get('tags'))
    logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

    return discussion_member_to_dict(group_member)
Exemple #8
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START)
    permission_data = {}

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON,username)
        raise Http_error(400, Message.Invalid_persons)

    logger.debug(LogMsg.RATE_CHECK,{'rate_id':id})
    model_instance = db_session.query(Rate).filter(Rate.id == id).first()

    if model_instance:

        logger.debug(LogMsg.RATE_EXISTS,model_to_dict(model_instance))
    else:
        logger.error(LogMsg.RATE_NOT_EXISTS,{'rate_id':id})
        raise Http_error(404, Message.NOT_FOUND)

    if model_instance.person_id == user.person_id:
        permission_data = {Permissions.IS_OWNER.value:True}
    permissions,presses = get_user_permissions(username, db_session)
    has_permission([Permissions.RATE_EDIT_PREMIUM], permissions,None,permission_data)

    model_instance.rate = data.get('rate')
    edit_basic_data(model_instance,username,data.get('tags'))

    logger.debug(LogMsg.RATE_CHANGED,model_to_dict(model_instance))
    logger.info(LogMsg.END)

    return model_instance
Exemple #9
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    logger.debug(LogMsg.EDIT_REQUST, {'permission_id': id, 'data': data})

    if username not in ADMINISTRATORS:
        logger.error(LogMsg.NOT_ACCESSED, {'username': username})
        raise Http_error(403, Message.ACCESS_DENIED)

    if "id" in data.keys():
        del data["id"]

    model_instance = db_session.query(Permission).filter(
        Permission.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'permission_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))

        logger.debug(LogMsg.MODEL_ALTERED, model_to_dict(model_instance))

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.DELETE_FAILED)

    logger.info(LogMsg.END)
    return model_instance
Exemple #10
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    logger.debug(LogMsg.EDIT_REQUST, {'book_id': id})
    model_instance = db_session.query(Book).filter(Book.id == id).first()
    if model_instance is None:
        logger.debug(LogMsg.NOT_FOUND, {'book_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'LIBRARY_EDIT',
                                    model=model_instance)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    logger.debug(LogMsg.EDITING_BOOK, id)

    files = data.get('files', None)
    images = data.get('images', None)
    if files:
        logger.debug(LogMsg.DELETE_BOOK_FILES, id)
        delete_files(model_instance.files)

    if images:
        logger.debug(LogMsg.DELETE_BOOK_IMAGES)
        delete_files(model_instance.images)

    for key, value in data.items():
        setattr(model_instance, key, value)
    edit_basic_data(model_instance, username, data.get('tags'))

    price = data.get('price', None)
    if price is not None:
        edit_price(model_instance.id, price, db_session)

    logger.debug(LogMsg.MODEL_ALTERED)

    logger.debug(LogMsg.UNIQUE_CONSTRAINT_IS_CHANGING)
    unique_data = book_to_dict(db_session, model_instance)
    del unique_data['roles']
    unique_data['roles'] = data['roles']

    unique_connector = get_connector(id, db_session)
    if unique_connector:
        logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
        delete_uniquecode(unique_connector.UniqueCode, db_session)
        logger.debug(LogMsg.GENERATE_UNIQUE_CONSTRAINT, unique_data)
        code = add_uniquecode(unique_data, db_session)
        delete_connector(id, db_session)
        add_connector(id, code.UniqueCode, db_session)

    logger.debug(LogMsg.EDIT_SUCCESS, book_to_dict(db_session, model_instance))

    logger.info(LogMsg.END)

    return book_to_dict(db_session, model_instance)
Exemple #11
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    # TODO: you never checked version of passed data, we have version field in our
    #      records, to prevent conflict when we received two different edit request
    #      concurrently. check KAVEH codes (edit functions) to better understanding
    #      version field usage

    logger.debug(LogMsg.EDIT_REQUST, {'discuss_group_id': id, 'data': data})

    user = check_user(username, db_session)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin_member(user.person_id, id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.DISCUSSION_GROUP_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if "id" in data.keys():
        del data["id"]

    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'discussion_group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        if 'members' in data:
            members = data.get('members', [])
            members.append({'person_id': user.person_id, 'type': 'Admin'})

            delete_group_members(model_instance.id, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)
            member_data = {'group_id': model_instance.id, 'members': members}

            add_disscussuion_members(member_data, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED, members)
        result = discuss_group_to_dict(model_instance, db_session)

        logger.debug(LogMsg.MODEL_ALTERED, result)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.EDIT_FAILED)

    logger.info(LogMsg.END)
    return result
Exemple #12
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)
    schema_validate(data, USER_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    old_pass = data.get('old_password', None)
    if old_pass is not None:
        user = check_user(username, db_session)
        if user.password != old_pass:
            logger.error(LogMsg.INVALID_USER, {'old_password': '******'})
            raise Http_error(403, Message.INVALID_PASSWORD)

    logger.debug(LogMsg.EDIT_REQUST, {'user_id': id, 'data': data})

    model_instance = check_by_id(id, db_session)
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING, {'user_id': id})
    else:
        logger.debug(LogMsg.NOT_FOUND, {'user_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if model_instance.username == username:
        password = data.get('old_password')
        if model_instance.password != password:
            logger.error(LogMsg.INVALID_USER,
                         {'password': '******'})
            raise Http_error(403, Message.INVALID_PASSWORD)
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.USER_EDIT_PREMIUM],
                   permissions, None, per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    if not has_permission_or_not([Permissions.USER_EDIT_PREMIUM],
                                 permissions):
        if "person_id" in data:
            del data["person_id"]
    # if "person_id" in data:
    #     user_by_person = db_session.query(User).filter(
    #         User.person_id == data.get('person_id')).first()
    #     if user_by_person is not None and user_by_person.id != model_instance.id:
    #         raise Http_error(409,Message.USER_ALREADY_EXISTS)
    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)
    edit_basic_data(model_instance, username, data.get('tags'))
    user_dict = user_to_dict(model_instance)

    logger.debug(LogMsg.EDIT_SUCCESS, user_dict)
    logger.info(LogMsg.END)

    return user_dict
Exemple #13
0
def edit(id, data, db_session, username=None):
    logger.info(LogMsg.START, username)
    model_instance = internal_get(id, db_session)
    logger.debug(LogMsg.ORDER_CHECK, {'order_id': id})
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'order_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    permissions, presses = get_user_permissions(username, db_session)
    per_data = {}
    if model_instance.creator == username:
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission(
        [Permissions.ORDER_EDIT_PREMIUM], permissions, None, per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    if model_instance.status == OrderStatus.Invoiced:
        logger.error(LogMsg.ORDER_NOT_EDITABLE, {'order_id': id})
        raise Http_error(403, Message.ORDER_INVOICED)

    user = check_user(username,db_session)
    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON,username)
        raise Http_error(404,Message.INVALID_USER)

    if 'id' in data:
        del data['id']
    if 'status' in data:
        del data['status']

    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)
    if 'items' in data:
        item_data = {}
        item_data['items'] = data.get('items')
        if 'person_id' in data:
            item_data['person_id'] = data.get('person_id')
        else:
            item_data['person_id'] = user.person_id
        logger.debug(LogMsg.ORDER_ITEMS_DELETE, {'order_id': id})
        delete_orders_items_internal(model_instance.id, db_session)
        logger.debug(LogMsg.ORDER_ADD_ITEMS, {'order_id': id})
        model_instance.total_price = add_orders_items(model_instance.id
                                                      , item_data,
                                                      db_session, username)
    edit_basic_data(model_instance, username)
    order_dict = order_to_dict(model_instance, db_session, username)
    logger.debug(LogMsg.MODEL_ALTERED, order_dict)

    logger.info(LogMsg.END)
    return order_dict
Exemple #14
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, GROUP_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    logger.debug(LogMsg.EDIT_REQUST, {'discuss_group_id': id, 'data': data})

    user = check_user(username, db_session)

    per_data = {}
    if is_admin_member(user.person_id, id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_GROUP',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'discussion_group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        if 'members' in data:
            members = data.get('members', [])
            members.append({'person_id': user.person_id, 'type': 'Admin'})

            delete_group_members(model_instance.id, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)
            member_data = {'group_id': model_instance.id, 'members': members}

            add_disscussuion_members(member_data, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED, members)
        result = discuss_group_to_dict(model_instance, db_session)

        logger.debug(LogMsg.MODEL_ALTERED, result)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.EDIT_FAILED)

    logger.info(LogMsg.END)
    return result
Exemple #15
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    if "id" in data.keys():
        del data["id"]
        logger.debug(LogMsg.EDIT_REQUST)
    logger.debug(LogMsg.MODEL_GETTING, id)
    model_instance = db_session.query(Comment).filter(Comment.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.GET_FAILED, id)
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    permissions, presses = get_user_permissions(username, db_session)

    per_data = {}
    if model_instance.person_id == user.person_id:
        per_data.update({Permissions.IS_OWNER.value: True})

    has_permission([Permissions.COMMENT_EDIT_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if 'person_id' in data:
        del data['person_id']
    if 'book_id' in data:
        del data['book_id']

    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)

    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.MODEL_ALTERED, id)

    result = comment_to_dict(db_session, model_instance, username)

    logger.debug(LogMsg.EDIT_SUCCESS, result)

    logger.info(LogMsg.END)

    return result
Exemple #16
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    content = get_internal(id, db_session)
    if content is None:
        logger.error(LogMsg.NOT_FOUND, {'content_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    book = get_book(content.book_id, db_session)
    if 'book_id' in data.keys():
        book = get_book(data.get('book_id'), db_session)
        if book is None:
            logger.error(LogMsg.NOT_FOUND, {'book_id': data.get('book_id')})
            raise Http_error(404, Message.NOT_FOUND)

    logger.debug(LogMsg.PERMISSION_CHECK, username)

    permission_data = {}
    if content.creator == username:
        permission_data = {Permissions.IS_OWNER.value: True}
    permissions, presses = get_user_permissions(username, db_session)
    has_permit = has_permission_or_not([Permissions.BOOK_EDIT_PREMIUM],
                                       permissions, None, permission_data)
    if not has_permit:
        if book.get('press') in presses:
            has_permission([Permissions.BOOK_EDIT_PRESS], permissions)
        else:
            logger.error(LogMsg.PERMISSION_DENIED)
            raise Http_error(403, Message.ACCESS_DENIED)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)
    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(content, key, value)

        new_content = get_be_data(content.book_id, content.type, db_session)
        if new_content is not None and new_content.id != content.id:
            logger.error(LogMsg.BOOK_CONTENT_ALREADY_EXISTS,
                         content_to_dict(new_content, db_session))
            raise Http_error(409, Message.ALREADY_EXISTS)

        edit_basic_data(content, username, data.get('tags'))
        content.book_press = book.press
    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.ALREADY_EXISTS)
    logger.debug(LogMsg.EDIT_SUCCESS, model_to_dict(content))
    logger.info(LogMsg.END)
    return content_to_dict(content, db_session)
def edit(id, data, db_session, username=None):
    logger.info(LogMsg.START, username)

    schema_validate(data, ORDER_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    model_instance = internal_get(id, db_session)
    logger.debug(LogMsg.ORDER_CHECK, {'order_id': id})
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'order_id': id})
        raise Http_error(404, Message.NOT_FOUND)


    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session,
                                    'ORDER_EDIT', model=model_instance,
                                    access_level=Access_level.Premium)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if model_instance.status == OrderStatus.Invoiced:
        logger.error(LogMsg.ORDER_NOT_EDITABLE, {'order_id': id})
        raise Http_error(403, Message.ORDER_INVOICED)

    user = check_user(username, db_session)
    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(404, Message.INVALID_USER)

    for key, value in data.items():
        setattr(model_instance, key, value)
    if 'items' in data:
        item_data = {}
        item_data['items'] = data.get('items')
        if 'person_id' in data:
            item_data['person_id'] = data.get('person_id')
        else:
            item_data['person_id'] = user.person_id
        logger.debug(LogMsg.ORDER_ITEMS_DELETE, {'order_id': id})
        delete_orders_items_internal(model_instance.id, db_session)
        logger.debug(LogMsg.ORDER_ADD_ITEMS, {'order_id': id})
        model_instance.total_price = add_orders_items(model_instance.id
                                                      , item_data,
                                                      db_session, username)
    edit_basic_data(model_instance, username)
    order_dict = order_to_dict(model_instance, db_session, username)
    logger.debug(LogMsg.MODEL_ALTERED, order_dict)

    logger.info(LogMsg.END)
    return order_dict
Exemple #18
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    logger.debug(LogMsg.EDIT_REQUST)

    if "id" in data.keys():
        del data["id"]
    logger.debug(LogMsg.MODEL_GETTING, id)
    model_instance = db_session.query(ChatMessage).filter(
        ChatMessage.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.GET_FAILED, id)
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    permissions, presses = get_user_permissions(username, db_session)

    per_data = {}
    if model_instance.sender_id == user.person_id or (
            model_instance.group_id is not None and is_admin_member(
                user.person_id, model_instance.group_id, db_session)):
        per_data.update({Permissions.IS_OWNER.value: True})

    has_permission([Permissions.CHAT_EDIT_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if 'sender_id' in data:
        del data['sender_id']
    if 'group_id' in data:
        del data['group_id']

    for key, value in data.items():
        setattr(model_instance, key, value)

    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.MODEL_ALTERED, id)
    logger.info(LogMsg.END)

    return model_instance
Exemple #19
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)
    user = check_user(username, db_session)

    logger.debug(LogMsg.EDIT_REQUST, {'group_id': id, 'data': data})
    schema_validate(data, GROUP_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    model_instance = db_session.query(Group).filter(Group.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'PERMISSION_GROUP_EDIT',
                                    model=model_instance)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    person_id = data.get('person_id', None)
    if person_id is not None:
        owner_person = get_person(person_id, db_session)
        if owner_person is not None and not owner_person.is_legal:
            logger.error(LogMsg.PERSON_IS_NOT_LEGAL, username)
            raise Http_error(400, Message.PERSON_IS_NOT_LEGAL)
        owner_user = get_by_person(person_id, db_session)
        if owner_user is None:
            logger.error(LogMsg.PERSON_MUST_HAVE_USER, person_id)
            raise Http_error(404, Message.PERSON_MUST_HAVE_USER)

    try:

        for key, value in data.items():
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))

        logger.debug(LogMsg.MODEL_ALTERED, model_to_dict(model_instance))

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.ALREADY_EXISTS)

    logger.info(LogMsg.END)
    return model_instance
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, CONTENT_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    content = get_internal(id, db_session)
    if content is None:
        logger.error(LogMsg.NOT_FOUND, {'content_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    book = get_book(content.book_id, db_session)
    if 'book_id' in data.keys():
        book = get_book(data.get('book_id'), db_session)
        if book is None:
            logger.error(LogMsg.NOT_FOUND, {'book_id': data.get('book_id')})
            raise Http_error(404, Message.NOT_FOUND)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'BOOK_EDIT',
                                    model=content)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    try:
        for key, value in data.items():
            setattr(content, key, value)

        new_content = get_be_data(content.book_id, content.type, db_session)
        if new_content is not None and new_content.id != content.id:
            logger.error(LogMsg.BOOK_CONTENT_ALREADY_EXISTS,
                         content_to_dict(new_content, db_session))
            raise Http_error(409, Message.ALREADY_EXISTS)

        edit_basic_data(content, username, data.get('tags'))
        content.book_press = book.press
        if data.get('content') is not None:
            content.celery_task_id = None
            content.content_generated = False
    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.ALREADY_EXISTS)
    logger.debug(LogMsg.EDIT_SUCCESS, model_to_dict(content))
    logger.info(LogMsg.END)
    return content_to_dict(content, db_session)
Exemple #21
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, PERSON_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    logger.debug(LogMsg.EDIT_REQUST, {'person_id': id, 'data': data})

    user = check_user(username, db_session)
    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(404, Message.INVALID_USER)

    model_instance = db_session.query(Person).filter(Person.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'person_id': id})
        raise Http_error(404, Message.NOT_FOUND)
    if 'cell_no' in data.keys():
        cell_person = person_cell_exists(db_session, data.get('cell_no'))
        if cell_person is not None:
            if cell_person.id != model_instance.id:
                logger.error(LogMsg.ANOTHER_PERSON_BY_CELL)
                raise Http_error(403, Message.CELL_EXISTS)

    try:
        for key, value in data.items():
            setattr(model_instance, key, value)
        model_instance.full_name = full_name(model_instance.name,
                                             model_instance.last_name)

        edit_basic_data(model_instance, username, data.get('tags'))
        db_session.flush()

        logger.debug(LogMsg.MODEL_ALTERED,
                     person_to_dict(model_instance, db_session))

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.DELETE_FAILED)

    logger.info(LogMsg.END)
    return model_instance
Exemple #22
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)
    if "id" in data.keys():
        del data["id"]
    if 'username' in data.keys():
        logger.error(LogMsg.NOT_EDITABLE, 'username')
        raise Http_error(400, Message.NOT_EDITABLE)

    logger.debug(LogMsg.EDIT_REQUST, {'user_id': id, 'data': data})

    model_instance = check_by_id(id, db_session)
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING, {'user_id': id})
    else:
        logger.debug(LogMsg.NOT_FOUND, {'user_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if model_instance.username == username:
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.USER_EDIT_PREMIUM], permissions, None,
                   per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    if not has_permission_or_not([Permissions.USER_EDIT_PREMIUM], permissions):
        if "person_id" in data:
            del data["person_id"]
    # if "person_id" in data:
    #     user_by_person = db_session.query(User).filter(
    #         User.person_id == data.get('person_id')).first()
    #     if user_by_person is not None and user_by_person.id != model_instance.id:
    #         raise Http_error(409,Message.USER_ALREADY_EXISTS)
    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)
    edit_basic_data(model_instance, username, data.get('tags'))
    user_dict = user_to_dict(model_instance)

    logger.debug(LogMsg.EDIT_SUCCESS, user_dict)
    logger.info(LogMsg.END)

    return user_dict
def edit_status(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    schema_validate(data, EDIT_SCHEMA_PATH)

    user = check_user(username, db_session)
    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    status = data.get('status', {})

    model_instance = db_session.query(Library).filter(Library.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, id)
        raise Http_error(404, Message.NOT_FOUND)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'LIBRARY_EDIT',
                                    model=model_instance)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    if status.get('reading_started'):
        model_instance.status['reading_started'] = status.get(
            'reading_started')
    if status.get('read_pages'):
        model_instance.status['read_pages'] = status.get('read_pages')
    if status.get('read_duration'):
        model_instance.status['read_duration'] = status.get('read_duration')
    if status.get('status'):
        model_instance.status['status'] = status.get('status')
    if status.get('is_read'):
        model_instance.status['is_read'] = status.get('is_read')
    if 'progress' in data:
        model_instance.progress = data.get('progress')

    edit_basic_data(model_instance, username)
    logger.debug(LogMsg.MODEL_ALTERED, data)

    logger.info(LogMsg.END)

    return lib_to_dict(model_instance, db_session)
Exemple #24
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    schema_validate(data, MOVIE_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)
    model_instance = db_session.query(Movie).filter(Movie.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'movie_id': id})
        raise Http_error(404, Message.NOT_FOUND)
    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        logger.debug(LogMsg.EDIT_SUCCESS, model_to_dict(model_instance))
    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.EDIT_FAILED)
    logger.info(LogMsg.END)
    return model_to_dict(model_instance)
Exemple #25
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    if "id" in data.keys():
        del data["id"]
    logger.debug(LogMsg.EDIT_REQUST, id)

    logger.debug(LogMsg.MODEL_GETTING, id)

    model_instance = db_session.query(BookRole).filter(
        BookRole.id == id).first()
    if model_instance:
        logger.debug(LogMsg.GET_SUCCESS, book_role_to_dict(model_instance))
    else:
        logger.debug(LogMsg.GET_FAILED, id)
        raise Http_error(404, Message.NOT_FOUND)

    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)

    logger.debug(LogMsg.EDITING_BASIC_DATA, id)
    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.MODEL_ALTERED, id)

    logger.debug(LogMsg.UNIQUE_CONSTRAINT_IS_CHANGING)

    unique_connector = get_connector(id, db_session)
    if unique_connector:
        logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
        delete_uniquecode(unique_connector.UniqueCode, db_session)
        logger.debug(LogMsg.GENERATE_UNIQUE_CONSTRAINT, data)
        code = add_uniquecode(data, db_session)
        delete_connector(id, db_session)
        add_connector(id, code.UniqueCode, db_session)

    logger.debug(LogMsg.EDIT_SUCCESS, book_role_to_dict(model_instance))

    logger.info(LogMsg.END)

    return model_instance
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, COMMENT_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)
    logger.debug(LogMsg.MODEL_GETTING, id)
    model_instance = db_session.query(Comment).filter(Comment.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.GET_FAILED, id)
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username,
                                    db_session,
                                    'COMMENT_EDIT',
                                    model=model_instance)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    for key, value in data.items():
        # TODO  if key is valid attribute of class
        setattr(model_instance, key, value)

    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.MODEL_ALTERED, id)

    result = comment_to_dict(db_session, model_instance, username)

    logger.debug(LogMsg.EDIT_SUCCESS, result)

    logger.info(LogMsg.END)

    return result
Exemple #27
0
def edit_status(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    permissions, presses = get_user_permissions(username, db_session)
    has_permission([Permissions.LIBRARY_GET_PREMIUM], permissions, None,
                   {Permissions.IS_OWNER.value: True})

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    validate_person(user.person_id, db_session)
    logger.debug(LogMsg.PERSON_EXISTS)
    status = data.get('status', {})

    model_instance = db_session.query(Library).filter(Library.id == id).first()

    if status.get('reading_started'):
        model_instance.status['reading_started'] = status.get(
            'reading_started')
    if status.get('read_pages'):
        model_instance.status['read_pages'] = status.get('read_pages')
    if status.get('read_duration'):
        model_instance.status['read_duration'] = status.get('read_duration')
    if status.get('status'):
        model_instance.status['status'] = status.get('status')
    if status.get('is_read'):
        model_instance.status['is_read'] = status.get('is_read')
    if 'progress' in data:
        model_instance.progress = data.get('progress')

    edit_basic_data(model_instance, username)
    logger.debug(LogMsg.MODEL_ALTERED, data)

    logger.info(LogMsg.END)

    return lib_to_dict(model_instance, db_session)
Exemple #28
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    # schema_validate(data, RATING_EDIT_SCHEMA_PATH)
    # logger.debug(LogMsg.SCHEMA_CHECKED)
    user = check_user(username, db_session)
    model_instance = db_session.query(Rating).filter(Rating.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'Rating_id': id})
        raise Http_error(404, Message.NOT_FOUND)
    if model_instance.person_id != user.person_id:
        logger.error(LogMsg.NOT_ACCESSED, username)
        raise Http_error(403, Message.ACCESS_DENIED)
    try:
        for key, value in data.items():
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        logger.debug(LogMsg.EDIT_SUCCESS, rating_to_dict(model_instance))
    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(409, Message.EDIT_FAILED)
    logger.info(LogMsg.END)
    return rating_to_dict(model_instance)
Exemple #29
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    # TODO: you never checked version of passed data, we have version field in our
    #      records, to prevent conflict when we received two different edit request
    #      concurrently. check KAVEH codes (edit functions) to better understanding
    #      version field usage

    logger.debug(LogMsg.EDIT_REQUST, {'group_id': id, 'data': data})

    if username not in ADMINISTRATORS:
        logger.error(LogMsg.NOT_ACCESSED, {'username': username})
        raise Http_error(403, Message.ACCESS_DENIED)

    if "id" in data.keys():
        del data["id"]

    model_instance = db_session.query(Group).filter(Group.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))

        logger.debug(LogMsg.MODEL_ALTERED, model_to_dict(model_instance))

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.DELETE_FAILED)

    logger.info(LogMsg.END)
    return model_instance
Exemple #30
0
def edit_status_internal(id, status, db_session, username=None):
    logger.info(LogMsg.START, username)

    model_instance = internal_get(id, db_session)
    logger.debug(LogMsg.ORDER_CHECK, {'order_id': id})
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'order_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    if username is not None:
        permissions, presses = get_user_permissions(username, db_session)
        has_permission([Permissions.ORDER_EDIT_PREMIUM], permissions)
        logger.debug(LogMsg.PERMISSION_VERIFIED)

    try:
        model_instance.status = status
        edit_basic_data(model_instance, username)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(404, Message.DELETE_FAILED)
    logger.info(LogMsg.END)
    return model_instance