Exemplo n.º 1
0
def erase_card(id, DB: MySQL, EEM: EEM):
    DB.start_transaction()

    if get_card(id, DB, EEM)["status"] == "eeio":
        DB.start_transaction()

        status, message = DB.delete_query_simple(__table_hardware, "id", id)

    else:
        status, message = DB.delete_query_simple(__table_net, "id", id)

    # First status code checks:
    # 1: Syntaxis
    # 2: Completeness
    if status:
        status, result = DB.commit_transaction()
        # Second status checks:
        # 1: Data integrity
        if status:
            return messenger.message200("OK")

        # Implicit rollback
        else:
            return messenger.message404(message)
    else:
        status, error = DB.rollback(messsage)
        return messenger.message404(error)
Exemplo n.º 2
0
def modify_hardware_tag(card, DB: MySQL, EEM: EEM):
    DB.start_transaction()

    status, message = modify_card(card, __table_hardware, hardware_card_keys,
                                  DB, EEM)

    status, message = modify_capacities(card, __table_hardware_capacity,
                                        hardware_capacity_keys, DB, EEM)

    # First status code checks:
    # 1: Syntaxis
    # 2: Completeness
    if status:
        status, message = DB.commit_transaction()
        # Second status checks:
        # 1: Data integrity
        if status:
            return messenger.message200("OK")

        # Implicit rollback
        else:
            return messenger.message404(message)
    else:
        status, error = DB.rollback(message)
        return messenger.message404(error)
Exemplo n.º 3
0
def erase_workload(id, DB: MySQL):
    DB.start_transaction()

    # A single delete is enough as child tables delete on cascade
    status, message = DB.delete_query_simple(__table_workloads, "id", id)

    # First status code checks:
    # 1: Syntaxis
    # 2: Completeness
    if status:
        status, message = DB.commit_transaction()
        # Second status checks:
        # 1: Data integrity
        if status:
            return messenger.message200("OK")

        # Implicit rollback
        else:
            return messenger.message404(message)
    else:
        status, error = DB.rollback(messsage)
        return messenger.message404(error)
Exemplo n.º 4
0
def create_workload(workload, DB: MySQL):
    DB.start_transaction()

    mapping = deepcopy(workload_keys)
    mapping_requirement = deepcopy(hardware_requirements_keys)
    mapping_requirement_insert = deepcopy(hardware_requirements_keys)
    mapping_capacity = deepcopy(capacity_requirements_keys)
    mapping.remove("id")  # As it is assigned by the API
    mapping_requirement.remove("workload_id")  # Not present in the petition
    mapping_requirement.remove("requirement_id")  # Not present in the petition
    mapping_requirement_insert.remove(
        "requirement_id")  # Not present in the petition
    mapping_capacity.remove("workload_id")  # Not present in the petition
    mapping_capacity.remove("requirement_id")  # Not present in the petition

    if len(workload.keys()) - 1 != len(mapping):
        message = "Inserted workload data is incorrect"
        return messenger.message404(message)

    # Get the assigned ID of the workload
    statement = ("SELECT MAX(id) FROM workloads")
    workload_id = DB.select_query(statement)
    while (isinstance(workload_id, Iterable)):
        workload_id = next(iter(workload_id))
    if not workload_id or workload_id < 0:
        workload_id = 1
    else:
        workload_id += 1

    values = [workload_id]
    for x in range(0, len(mapping)):
        if mapping[x] in workload:
            values.append(workload[mapping[x]])
        else:
            message = "%s not introduced in the request" % (mapping[x])
            return messenger.message404(message)

    status1, message1 = DB.insert_query(__table_workloads, workload_keys,
                                        values)

    # Time to create the requirements of the workload, one entry each
    requirements = workload["requirements"]
    req_number = 0
    for requirement in requirements:
        req_number += 1
        statement = ("SELECT MAX(requirement_id) FROM hardware_requirements")
        req_id = DB.select_query(statement)
        while (isinstance(req_id, Iterable)):
            req_id = next(iter(req_id))
        if not req_id:
            req_id = req_number
        else:
            req_id += req_number

        values = [req_id, workload_id]
        for x in range(0, len(mapping_requirement)):
            if mapping_requirement[x] in requirement:
                values.append(requirement[mapping_requirement[x]])
            else:
                message = "%s not introduced in the request" % (
                    mapping_requirement[x])
                return messenger.message404(message)

        status2, message2 = DB.insert_query(__table_hardware_requirements,
                                            hardware_requirements_keys, values)

        capacity_req = requirement["hardware_capacity_requirements"]
        for capacity in capacity_req:
            values = [workload_id, req_id]
            for x in range(0, len(mapping_capacity)):
                if mapping_capacity[x] in capacity:
                    values.append(capacity[mapping_capacity[x]])
                else:
                    message = "%s not introduced in the request" % (
                        mapping_capacity[x])
                    return messenger.message404(message)

            status3, message3 = DB.insert_query(__table_capacity_requirements,
                                                capacity_requirements_keys,
                                                values)

    if not status1:
        status = False
        message = message1
    elif not status2:
        status = False
        message = message2
    elif not status3:
        status = False
        message = message3
    else:
        status = True
        message = "OK"

    # First status code checks:
    # 1: Syntaxis
    # 2: Completeness
    if status:
        status, message = DB.commit_transaction()
        # Second status checks:
        # 1: Data integrity
        if status:
            return messenger.messageWorkload(workload_id)

        # Implicit rollback
        else:
            return messenger.message404(message)
    else:
        status, error = DB.rollback(message)
        return messenger.message404(error)