Exemple #1
0
def job_builder(pending_jobs_list, order, job_index, location_dict,
                completion_cb):
    """
    Job Builder
    Takes in order consisting of: keyword, priority and arguments; and creates a Job class instance
    containing Task class instances depening on the keyword and arguments.
    Then inserts/appends the Job to the Pending Jobs list depening on the priority.
    """
    index = "00" + str(job_index) if job_index < 10 else (
        "0" + str(job_index) if job_index < 100 else str(job_index))
    keyword = order[0]
    priority = order[1]
    rough_job = Job("job" + index,
                    completion_cb=completion_cb,
                    priority=priority,
                    keyword=keyword)

    if keyword == OrderKeyword.TRANSPORT.name:
        # Transport order, consists of moving somewhere, getting loaded, moving somewhere, getting unloaded.
        from_loc = order[2]
        to_loc = order[3]
        rough_job.add_task(RobotMoveBase(location_dict[from_loc]))
        rough_job.add_task(AwaitingLoadCompletion())
        rough_job.add_task(RobotMoveBase(location_dict[to_loc]))
        rough_job.add_task(AwaitingUnloadCompletion())
    elif keyword == OrderKeyword.MOVE.name:
        # Move order, consists of moving somehwere.
        to_loc = order[2]
        rough_job.add_task(RobotMoveBase(location_dict[to_loc]))
    elif keyword == OrderKeyword.LOAD.name:
        # Load order on the spot.
        rough_job.add_task(AwaitingLoadCompletion())
    elif keyword == OrderKeyword.UNLOAD.name:
        # Unload order on the spot.
        rough_job.add_task(AwaitingUnloadCompletion())

    # Loop over the current list of Pending Jobs with index, find the last spot in the list within the same priority section.
    for index, job in enumerate(pending_jobs_list):
        priority = job.priority.value
        if priority < rough_job.priority.value:
            print(NAME + "Inserting Rough Job (" + rough_job.id +
                  ") at position " + str(index))
            pending_jobs_list.insert(index, rough_job)
            break
    else:  # Looped over all jobs in the pending_jobs_list and it wasn't inserted, so just append to the end.
        print(NAME + "Appending Rough Job (" + rough_job.id + ") to end")
        pending_jobs_list.append(rough_job)

    return job_index + 1