Beispiel #1
0
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)

    logger.info(LogMsg.DELETE_REQUEST, id)

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

    try:
        db_session.delete(model_instance)
        unique_connector = get_connector(id, db_session)
        if unique_connector:
            logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
            delete_uniquecode(unique_connector.UniqueCode, db_session)
            delete_connector(id, db_session)

        logger.debug(LogMsg.ENTITY_DELETED, id)

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

    logger.info(LogMsg.END)
    return Http_response(204, True)
Beispiel #2
0
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)

    logger.info(LogMsg.DELETING_BOOK, id)

    logger.debug(LogMsg.MODEL_GETTING, id)
    book = db_session.query(Book).filter(Book.id == id).first()

    if book is None:
        logger.error(LogMsg.NOT_FOUND, {'book_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    if book.images:
        logger.debug(LogMsg.DELETE_BOOK_IMAGES)
        delete_files(book.images)
    if book.files:
        logger.debug(LogMsg.DELETE_BOOK_FILES)
        delete_files(book.files)

    db_session.query(Book).filter(Book.id == id).delete()
    logger.debug(LogMsg.ENTITY_DELETED, {"Book.id": id})

    unique_connector = get_connector(id, db_session)
    if unique_connector:
        logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
        delete_uniquecode(unique_connector.UniqueCode, db_session)
        delete_connector(id, db_session)

    logger.info(LogMsg.END)
    return Http_response(204, True)
Beispiel #3
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)
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)

    logger.info(LogMsg.DELETE_REQUEST, {'person_id': id})

    model_instance = db_session.query(Person).filter(Person.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'person_id': id})
        raise Http_error(404, Message.NOT_FOUND)
    user = check_user(username, db_session)
    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if user.person_id == id:
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.PERSON_DELETE_PREMIUM],
                   permissions, None, per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED)
    if person_has_books(id, db_session):
        logger.error(LogMsg.PERSON_HAS_BOOKS, {'person_id': id})
        raise Http_error(403, Message.PERSON_HAS_BOOKS)

    try:
        delete_person_accounts(id, db_session)
        logger.debug(LogMsg.PERSON_ACCOUNTS_DELETED, {'person_id': id})
        db_session.delete(model_instance)
        logger.debug(LogMsg.PERSON_DELETED, {'person_id': id})

        users = db_session.query(User).filter(User.person_id == id).all()
        logger.debug(LogMsg.PERSON_USERS_GOT, id)
        if users is not None:
            for user in users:
                logger.debug(LogMsg.RELATED_USER_DELETE,
                             {'person_id': id, 'user_id': user.id})

                db_session.delete(user)
                logger.debug(LogMsg.ENTITY_DELETED)
        else:
            logger.debug(LogMsg.NOT_RELATED_USER_FOR_PERSON,
                         {"Person.id {}": id})

        unique_connector = get_connector(id, db_session)
        if unique_connector:
            logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
            delete_uniquecode(unique_connector.UniqueCode, db_session)
            delete_connector(id, db_session)

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

    logger.info(LogMsg.END)

    return Http_response(204, True)
Beispiel #5
0
def rename_collection(data, db_session, username):
    logger.info(LogMsg.START, username)

    check_schema(['title', 'new_title'], data.keys())
    logger.debug(LogMsg.SCHEMA_CHECKED)
    person_id = data.get('person_id')
    if person_id is None:
        user = check_user(username, db_session)
        person_id = user.person_id
        if person_id is None:
            logger.error(LogMsg.USER_HAS_NO_PERSON, username)
            raise Http_error(401, Message.INVALID_USER)

    validate_person(person_id, db_session)
    logger.debug(LogMsg.PERSON_EXISTS)

    new_title = data.get('new_title')
    # db_session.update(Collection).Where(Collection.title == title,
    #                                     Collection.person_id == person_id).values(
    #     title=new_title)
    result = db_session.query(Collection).filter(
        Collection.title == data.get('title'),
        Collection.person_id == person_id).all()
    final_res = []
    for item in result:
        item.title = new_title
        unique_connector = get_connector(item.id, db_session)
        if unique_connector:
            logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
            delete_uniquecode(unique_connector.UniqueCode, db_session)
            delete_connector(item.id, db_session)
            db_session.flush()
        model_dict = collection_to_dict(db_session, item)
        logger.debug(LogMsg.MODEL_ALTERED, model_dict)
        print(model_dict)

        logger.debug(LogMsg.CHECK_UNIQUE_EXISTANCE, model_dict)
        unique_code = unique_code_exists(model_dict, db_session)
        if unique_code is None:
            logger.debug(LogMsg.UNIQUE_NOT_EXISTS)
            unique_code = add_uniquecode(model_dict, db_session)
            db_session.flush()
        add_connector(item.id, unique_code.UniqueCode, db_session)
        logger.debug(LogMsg.UNIQUE_CONNECTOR_ADDED, {
            'collection_id': item.id,
            'unique_constraint': unique_code.UniqueCode
        })
        final_res.append(model_dict)

    return final_res
Beispiel #6
0
def delete_books_from_collection(data, db_session, username):
    logger.info(LogMsg.START, username)

    check_schema(['title', 'book_ids'], data.keys())
    logger.debug(LogMsg.SCHEMA_CHECKED)
    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)

    book_ids = data.get('book_ids')
    ids = []

    try:
        logger.debug(LogMsg.COLLECTION_DELETE_BOOK, {
            'title': data.get('title'),
            'books': book_ids
        })

        result = db_session.query(Collection).filter(
            and_(Collection.person_id == user.person_id,
                 Collection.title == data.get('title'),
                 Collection.book_id.in_(book_ids))).all()
        for item in result:
            ids.append(item.id)
            unique_connector = get_connector(item.id, db_session)
            if unique_connector:
                logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
                delete_connector(item.id, db_session)
                new_connector = get_connector_by_unique(
                    unique_connector.UniqueCode, db_session)
                if new_connector is None:
                    delete_uniquecode(unique_connector.UniqueCode, db_session)

        stmt = Collection.__table__.delete().where(Collection.id.in_(ids))

        db_session.execute(stmt)

    except:
        logger.exception(LogMsg.DELETE_FAILED, exc_info=True)
        raise Http_error(502, Message.DELETE_FAILED)
    logger.info(LogMsg.END)
    return Http_response(204, True)
Beispiel #7
0
def delete_collection_constraints(title, person_id, db_session):
    result = db_session.query(Collection).filter(
        Collection.title == title, Collection.person_id == person_id).all()
    ids = []
    for item in result:
        unique_connector = get_connector(item.id, db_session)
        if unique_connector:
            logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
            delete_connector(item.id, db_session)
            new_connector = get_connector_by_unique(
                unique_connector.UniqueCode, db_session)
            if new_connector is None:
                delete_uniquecode(unique_connector.UniqueCode, db_session)
            ids.append(item.id)

    return ids
Beispiel #8
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
Beispiel #9
0
def delete_by_id(id, db_session, username):
    logger.info(LogMsg.START, username)
    try:
        logger.debug(LogMsg.DELETE_REQUEST, {'collection_id': id})
        db_session.query(Collection).filter(Collection.id == id).delete()
        unique_connector = get_connector(id, db_session)
        if unique_connector:
            logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
            delete_connector(id, db_session)
            new_connector = get_connector_by_unique(
                unique_connector.UniqueCode, db_session)
            if new_connector is None:
                delete_uniquecode(unique_connector.UniqueCode, db_session)
                db_session.flush()

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

    return Http_response(204, True)
Beispiel #10
0
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)

    logger.info(LogMsg.DELETING_BOOK, id)

    logger.debug(LogMsg.MODEL_GETTING, id)
    book = db_session.query(Book).filter(Book.id == id).first()

    if book is None:
        logger.error(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_DELETE',
                                    model=book)
    logger.debug(LogMsg.PERMISSION_VERIFIED)

    if book.images is not None:
        logger.debug(LogMsg.DELETE_BOOK_IMAGES)
        delete_files(book.images)
    if book.files is not None:
        logger.debug(LogMsg.DELETE_BOOK_FILES)
        delete_files(book.files)
    try:
        db_session.query(Book).filter(Book.id == id).delete()
        logger.debug(LogMsg.ENTITY_DELETED, {"Book.id": id})
    except:
        logger.exception(LogMsg.DELETE_FAILED, exc_info=True)
        raise Http_error(403, Message.USED_SOMEWHERE)
    unique_connector = get_connector(id, db_session)
    if unique_connector:
        logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
        delete_uniquecode(unique_connector.UniqueCode, db_session)
        delete_connector(id, db_session)

    logger.info(LogMsg.END)
    return Http_response(204, True)
Beispiel #11
0
def delete_book_roles(book_id, db_session):
    logger.info(LogMsg.START)

    logger.debug(LogMsg.DELETE_BOOK_ROLES, book_id)

    try:
        roles = db_session.query(BookRole).filter(
            BookRole.book_id == book_id).all()
        for role in roles:
            unique_connector = get_connector(role.id, db_session)
            if unique_connector:
                logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
                delete_uniquecode(unique_connector.UniqueCode, db_session)
                delete_connector(role.id, db_session)
                db_session.delete(role)

        logger.debug(LogMsg.DELETE_SUCCESS)

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

    logger.debug(LogMsg.END)
    return Http_response(204, True)
Beispiel #12
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)
    logger.debug(LogMsg.MODEL_GETTING, {'book_id': id})
    model_instance = db_session.query(Book).filter(Book.id == id).first()
    if model_instance:
        logger.debug(LogMsg.GET_SUCCESS)
    else:
        logger.debug(LogMsg.NOT_FOUND, {'book_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    # permission_data = {}
    # if model_instance.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 and  model_instance.press in presses:
    #     has_permission([Permissions.BOOK_EDIT_PRESS], permissions)

    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():
        # TODO  if key is valid attribute of class
        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)
Beispiel #13
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)

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

    if 'current_book_id' in data.keys():
        if not is_book_in_library(model_instance.id, data.get('current_book_id'),
                                  db_session):
            logger.error(LogMsg.COLLECTION_BOOK_IS_NOT_IN_LIBRARY,
                         {'current_book_id': data.get('current_book_id')})
            raise Http_error(404, Message.BOOK_NOT_IN_LIB)
    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():
            # TODO  if key is valid attribute of class
            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))

        logger.debug(LogMsg.UNIQUE_CONSTRAINT_IS_CHANGING)
        unique_connector = get_connector(id, db_session)
        if unique_connector:
            if persons_code(model_instance) != unique_connector.UniqueCode:
                logger.debug(LogMsg.DELETE_UNIQUE_CONSTRAINT)
                delete_uniquecode(unique_connector.UniqueCode, db_session)
                db_session.flush()
                logger.debug(LogMsg.GENERATE_UNIQUE_CONSTRAINT, data)
                code = add_uniquecode(model_instance, db_session)
                delete_connector(id, db_session)
                add_connector(id, code.UniqueCode, 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
Beispiel #14
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, {'person_id': id, 'data': data})

    if "id" in data.keys():
        del data["id"]
    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)

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

    if 'current_book' in data.keys():
        if not is_book_in_library(model_instance.id, data.get('current_book'),
                                  db_session):
            logger.error(LogMsg.COLLECTION_BOOK_IS_NOT_IN_LIBRARY,
                         {'current_book_id': data.get('current_book')})
            raise Http_error(404, Message.BOOK_NOT_IN_LIB)
    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():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        model_instance.full_name ='{} {}'.format(model_instance.last_name or '',model_instance.name or '')
        edit_basic_data(model_instance, username, data.get('tags'))
        db_session.flush()

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

        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)
            db_session.flush()
            code = add_uniquecode(data, db_session)
            delete_connector(id, db_session)
            add_connector(id, code.UniqueCode, db_session)
    except:
        logger.exception(LogMsg.EDIT_FAILED,exc_info=True)
        raise Http_error(403,Message.DELETE_FAILED)

    logger.info(LogMsg.END)
    return model_instance