コード例 #1
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
def edit_user():
    """"""
    res = {}
    try:
        connection = Connection()
        reader = readQ(connection)
        updater = updateQ(connection)
        updater.edit_user()
        arr = []
        # weight_list = lis.dict()
        # for weight in weight_list["weights"]:
        #     time_gap = client_time - weight["weighing_date"]
        #     weight_time = "to_timestamp(" + str(server_time - time_gap) + ")"
        #     if weight["weight_value"] >= 0:
        #         query = reader.get_container_item_id_query(weight["business_id"], weight["container_id"])
        #         res = connection.get_result(query)
        #
        #         if len(res) > 0:
        #             item_id = res[0]["item_id"]
        #         else:
        #             raise HTTPException(status_code=404, detail="Container has no item configured for this business")
        #         arr.insert(0, [weight_time, weight["business_id"], weight["container_id"], item_id,
        #                        weight["weight_value"], weight["last_user"]])
    except (Exception):
        pass

    return res
コード例 #2
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
async def add_container_to_business(business_id: int,
                                    container_id: Optional[int] = None):
    """admin removal of container from all businesses and add to a specific business
    if no container_id provided then creates new one.
    returns the container id of the container added"""
    connection = Connection()
    updater = updateQ(connection)
    reader = readQ(connection)
    have_container_id = container_id is not None
    business_query = reader.get_business_query(business_id)
    business_info = connection.get_result(business_query)
    if not business_info or len(business_info) < 1:
        raise HTTPException(status_code=404, detail="Business id not found")
    if have_container_id:
        remove_query = updater.disable_container_query(container_id)
        connection.insert_data(remove_query, "unable to remove container")
    addition_query = updater.add_container_to_business_query(
        business_id, container_id)
    connection.insert_data(addition_query, "unable to add container")
    if not have_container_id:
        get_container_id = reader.get_new_container()
        res = connection.get_result(get_container_id)
        if res and len(res) > 0 and res[0] and "container_id" in res[
                0] and res[0]["container_id"]:
            container_id = res[0]["container_id"]
        else:
            raise HTTPException(
                status_code=500,
                detail="error retrieving new container created ")
    return container_id
コード例 #3
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
async def pair_container_to_item(business_id: int, container_id: int,
                                 item_id: int):
    """pair a container that belongs to the business provided, to the item that was provided.
    removes all previous container pairings"""
    connection = Connection()
    updater = updateQ(connection)
    reader = readQ(connection)
    container_query = reader.get_container_by_id_query(container_id)
    container_res = connection.get_result(container_query)
    try:
        container = container_res[0]
        if business_id != container["business_id"]:
            raise Exception
    except Exception:
        raise HTTPException(status_code=403,
                            detail="Container does not belong to business")
    item_query = reader.get_items(item_id, business_id)
    item_res = connection.get_result(item_query)
    if item_res is None or len(item_res) < 1:
        raise HTTPException(status_code=403,
                            detail="Item does not belong to business")
    remove_query = updater.disable_container_query(container_id)
    connection.insert_data(remove_query, "unable to remove container")
    addition_query = updater.add_container_to_business_query(
        business_id, container_id, item_id)
    connection.insert_data(addition_query, "unable to add container")
コード例 #4
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
async def get_item_history(business_id: int,
                           item_id: int,
                           min_date: Optional[int] = -1,
                           max_date: Optional[int] = -1):
    """gets an items weight history
    input: business_id, item_id - ids
           max,min dates -  Unix Timestamp - represents the time window for the history.
           it is required to send one date of reference"""
    if min_date <= 0:
        min_date = None
    if max_date < 0:
        max_date = None
    if not min_date and not max_date:
        raise HTTPException(status_code=404, detail="No date to reference")
    connection = Connection()
    reading = readQ(connection)
    query, res_code = reading.get_weight_history(item_id, business_id,
                                                 min_date, max_date)
    if res_code != 200:
        raise HTTPException(status_code=500,
                            detail="Unable to create a history query")
    print(query)
    res = connection.get_result(query)
    del connection
    return res
コード例 #5
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
async def get_items(business_id: int):
    """get all items of business """
    pass
    connection = Connection()
    reader = readQ(connection)
    query = reader.get_items(business_id=business_id)
    return connection.get_result(query)
コード例 #6
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
def get_user_preferences(user_email: str):
    """gets preferences for a specific user based on user_email
        required parameters: user_email"""
    connection = Connection()
    reader = readQ(connection)
    user_id = reader.get_userid_by_email(user_email)
    query = readQ.get_user_preferences_query(user_id)
    return connection.get_result(query)
コード例 #7
0
ファイル: routers.py プロジェクト: Daniel-Raz6735/majordomo
async def add_weights(lis: WeighingList, client_time: int):
    """gets a WeighingList and inserts it in to the database"""
    try:
        connection = Connection()
        reader = readQ(connection)
        updater = updateQ(connection)
        arr = []
        server_time = int(time.time())
        weight_list = lis.dict()
        data_inserted = {}
        for weight in weight_list["weights"]:
            time_gap = client_time - weight["weighing_date"]
            weight_time = "to_timestamp(" + str(server_time - time_gap) + ")"
            if weight["weight_value"] >= 0:
                query = reader.get_container_item_id_query(
                    weight["business_id"], weight["container_id"])
                res = connection.get_result(query)

                if len(res) > 0:
                    item_id = res[0]["item_id"]
                else:
                    raise HTTPException(
                        status_code=404,
                        detail=
                        "Container has no item configured for this business")
                arr.insert(0, [
                    weight_time, weight["business_id"], weight["container_id"],
                    item_id, weight["weight_value"], weight["last_user"]
                ])
                data_inserted[weight["container_id"]] = weight["weight_value"]
                await settings.notifications_handler.update_item(
                    weight["business_id"], item_id, weight["container_id"],
                    weight["weight_value"], 1, updater)
        query, res_code = updater.insert_to_table_query(
            "weights", [
                "weighing_date", "business_id", "container_id", "item_id",
                "weight_value", "last_user"
            ], arr)
        connection.insert_data(query, res_code)
        message = "weights updated for: "
        for container_id in data_inserted:
            message += "container: " + str(container_id) + " weight: " + str(
                data_inserted[container_id])
        del connection
        return message

    except HTTPException as error:
        raise error
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
        settings.email_client.email_admin("Unable to add weight",
                                          "error details:" + str(error))
        settings.log_manager.log_error(error)
        raise HTTPException(status_code=400, detail="unable to add weight")
コード例 #8
0
 def __init__(self, connection=False):
     if not connection:
         connection = Connection()
     self.connection = connection
     self.reader = readQ(self.connection)
コード例 #9
0
    def create_alert_dictionary(self):
        """this function creates an alert dictionary that will look like this
            {business id:{
                        item_id:{
                            "total_maximum":value,
                            "total_minimum":value,
                            "maximum_per_day":value,
                            "minimum_per_day":value,
                            "unit":value,
                            "sum":value,
                            containers:{
                                container id :{weight:value, unit:value}

                             }
                             }"""
        alert_dict = {}
        connection = Connection()
        try:
            reader = readQ(connection)
            rules_query = reader.get_rules_query()
            rules = connection.get_result(rules_query)
            if rules:

                for rule in rules:
                    item_info = {}
                    if "item_id" in rule and rule[
                            "item_id"] and "business_id" in rule and rule[
                                "business_id"]:
                        business_id = rule["business_id"]
                        item_id = rule["item_id"]
                        if "content_minimum_per_day" in rule and rule[
                                "content_minimum_per_day"]:
                            item_info["minimum_per_day"] = rule[
                                "content_minimum_per_day"]
                        if "content_maximum_per_day" in rule and rule[
                                "content_maximum_per_day"]:
                            item_info["maximum_per_day"] = rule[
                                "content_maximum_per_day"]
                        if "content_total_minimum" in rule and rule[
                                "content_total_minimum"]:
                            item_info["total_minimum"] = rule[
                                "content_total_minimum"]
                        if "content_total_maximum" in rule and rule[
                                "content_total_maximum"]:
                            item_info["total_maximum"] = rule[
                                "content_total_maximum"]
                        if "item_average_weight" in rule and rule[
                                "item_average_weight"]:
                            item_info["item_average_weight"] = rule[
                                "item_average_weight"]
                        item_info["sum"] = 0
                        if business_id not in alert_dict:
                            alert_dict[business_id] = {}
                        alert_dict[business_id][item_id] = item_info
            current_weight_by_container = reader.get_current_weight_query(
                get_by_container=True)
            containers = connection.get_result(current_weight_by_container)
            if containers:
                for container in containers:
                    try:
                        business_id = container["business_id"]
                        item_id = container["item_id"]
                        container_id = container["container_id"]
                        container_data = {
                            "weight": container["weight"],
                            "unit": container["unit"]
                        }
                        item_info = alert_dict[business_id][item_id]
                        if "containers" not in item_info:
                            item_info["containers"] = {}
                        item_info["containers"][container_id] = container_data
                    except KeyError:
                        pass
            notification_list_query = reader.get_notifications()
            notifications = connection.get_result(notification_list_query)
            if notifications:
                for notification in notifications:
                    try:
                        business_id = notification["business_id"]
                        item_id = notification["item_id"]
                        code = notification["code"]
                        item_info = alert_dict[business_id][item_id]
                        item_info["active_notification"] = code
                    except KeyError:
                        pass

        except (Exception, psycopg2.DatabaseError) as error:
            print(error)
            self.email_client.email_admin("Error reading notification data",
                                          "error details:" + str(error))
        if connection:
            del connection
        return alert_dict
コード例 #10
0
 def __init__(self, connection):
     self.connection = connection
     self.reader = readQ(self.connection)
     self.creator = createQ(self.connection)