def get_warehouse_settings(session: helpers.extend.session, user: hug.directives.user, response, id: int): """Gets a warehouse""" warehouse = helpers.get( "warehouse", session, queries.with_viewer_role(queries.user_warehouse(session, user, id))) return helpers.response.from_json(warehouse.settings)
def update_warehouse(session: helpers.extend.session, user: hug.directives.user, response, id: int, name): """Updates a warehouse""" return helpers.update( "warehouse", session, queries.with_editor_role(queries.user_warehouse(session, user, id)), {"name": name})
def list_articles(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int=None): """ Lists warehouse locations """ if warehouse_id is not None: return helpers.do_in_warehouse("article", queries.with_viewer_role(queries.user_warehouse(session, user, warehouse_id)), lambda warehouse: session.query(Article).filter_by(warehouse=warehouse).all()) else: return helpers.response.error("no_location_or_warehouse_specified", falcon.HTTP_400)
def create_tag(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, name): """Creates a tag""" return helpers.do_in_warehouse( "tag", queries.with_editor_role( queries.user_warehouse(session, user, warehouse_id)), lambda warehouse: Tag(warehouse=warehouse, name=name))
def update_warehouse_settings(session: helpers.extend.session, user: hug.directives.user, response, id: int, body): """Gets a warehouse""" helpers.update( "warehouse", session, queries.with_editor_role(queries.user_warehouse(session, user, id)), {"settings": json.dumps(body)}) return body
def create_location(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, name): """Creates a location""" if len(name) == 0: return helpers.response.error("location_name_mandatory", falcon.HTTP_400) return helpers.do_in_warehouse( "location", queries.with_editor_role( queries.user_warehouse(session, user, warehouse_id)), lambda warehouse: Location(warehouse=warehouse, name=name))
def create_article(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, reference_id: int, quantity: int, expiry: fields.Date(allow_none=True)=None, location_id: fields.Int(allow_none=True)=None, tags=None): """Creates a article""" db_tags = queries.get_tags_from_ids(session, user, warehouse_id, tags) if db_tags == None: return response.error("invalid_tag_ids", falcon.HTTP_400) try: warehouse = queries.with_editor_role(queries.user_warehouse(session, user, warehouse_id)).one() location = queries.with_editor_role(queries.user_location(session, user, location_id)).one() if location_id else None reference = queries.with_editor_role(queries.user_reference(session, user, reference_id)).one() if warehouse.id != reference.warehouse.id or (location is not None and warehouse.id != location.warehouse.id): return helpers.response.error("bad_referenece_and_or_location", falcon.HTTP_400) article = Article(warehouse=warehouse, location=location, reference=reference, quantity=quantity, expiry=expiry, tags=db_tags) return article except NoResultFound: return helpers.response.error("warehouse_location_or_reference_not_found", falcon.HTTP_401)
def list_references(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, name=None): """ Lists warehouse references """ def filter(warehouse): query = session.query(Reference).filter_by(warehouse=warehouse) if name: query = query.filter_by(name=name) return query.all() return helpers.do_in_warehouse( "reference", queries.with_viewer_role( queries.user_warehouse(session, user, warehouse_id)), filter)
def create_reference(session: helpers.extend.session, user: hug.directives.user, response, warehouse_id: int, name, categories=None, target_quantity: fields.Int(allow_none=True) = None): """Creates a reference""" if len(name) == 0: return helpers.response.error("reference_name_mandatory", falcon.HTTP_400) db_categories = queries.get_categories_from_ids(session, user, warehouse_id, categories) if db_categories == None: return response.error("invalid_category_ids", falcon.HTTP_400) return helpers.do_in_warehouse( "reference", queries.with_editor_role( queries.user_warehouse(session, user, warehouse_id)), lambda warehouse: Reference(warehouse=warehouse, name=name, categories=db_categories, target_quantity=target_quantity))
def delete_warehouse(session: helpers.extend.session, user: hug.directives.user, response, id: int): """Deletes a warehouse""" return helpers.delete( "warehouse", session, queries.with_owner_role(queries.user_warehouse(session, user, id)))
def get_warehouse(session: helpers.extend.session, user: hug.directives.user, response, id: int): """Gets a warehouse""" return helpers.get( "warehouse", session, queries.with_viewer_role(queries.user_warehouse(session, user, id)))