def editTask_des(self, request,
                     context) -> task_pb2.Task:  # edit decreption

        if request.id < self.task_id:  # valid id
            if len(request.description) < 1025:  # over size
                #print( 'curr',self.tasks[request.id].state)
                #print( 'req' , request.state )

                logging.debug(
                    f"edit parameters editTask{self.tasks[request.id].state} -> {request.state}"
                )
                t = task_pb2.Task(id=request.id,
                                  description=request.description,
                                  state=request.state)
                self.tasks[request.id] = t  # update
                logging.debug(f" editTask{self.tasks[request.id].state}")
                #print(t)
                context.set_code(grpc.StatusCode.OK)
                return t
            else:
                logging.debug(f"Max length is 1024")
                context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
                context.set_details('Description is too long!')
                response = task_pb2.Task(id=None, description=None, state=None)
                return response
        else:
            logging.debug(f"invalid id")
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details('invalid Id!')
            response = task_pb2.Task(id=None, description=None, state=None)
            return response
    def destructive_editTask(self, request: task_pb2.Task,
                             context) -> task_pb2.Task:

        if request.id in self.tasks:

            if len(request.description) <= 1024:
                # deletes the task & creates a new task
                with self.mutex as lock:  # Fix data race when adding task
                    # logging.debug(f"destructive_editTask : delTask id {pformat(request.id)}")
                    self.tasks.pop(request.id)
                    logging.debug(
                        f"destructive_editTask : addTask parameters id:{pformat(self.task_id)} => {pformat(request.description)}"
                    )
                    t = task_pb2.Task(
                        id=self.task_id,
                        description=request.description,
                        state='OPEN',
                    )
                    self.tasks[self.task_id] = t
                    self.task_id += 1
                    return t

            else:
                # error handling, description
                context.set_details("Description is not valid")
                context.set_code(grpc.StatusCode.OUT_OF_RANGE)
                return task_pb2.Task()
        else:
            # error handling, id
            context.set_details("ID is not valid")
            context.set_code(grpc.StatusCode.NOT_FOUND)
            return task_pb2.Task()
Ejemplo n.º 3
0
    def editTask( self, request, context)->task_pb2.Task: 
        print(len(self.tasks),request.id) 
        with self.lock: 
            if request.id < self.task_id :      # invalid
                current_state = self.tasks[request.id].state
                req_state     = request.state 
                #print( 'curr',current_state, 'req' , req_state )
                 # state machine            
                if (current_state == 0) and ( (req_state <= 1) or (req_state == 4) ) :     # may transition to ASSIGNED or CANCELLED.
                    
                    return self.editTask_des( request , context= context )
                elif current_state == 1 and (current_state == 1 or req_state == 2 ):        # may transition to PROGRESSING only.

                    return self.editTask_des( request , context= context )
                elif current_state == 2 and  ( req_state == 2 or  req_state == 3 or req_state == 4 ) :         # may transition to DONE or CANCELLED.

                    return self.editTask_des( request , context= context )
                else:                                                                       # invalid state 
                    logging.debug(f"incorrect state request {current_state} -> {req_state}")
                    context.set_code(grpc.StatusCode.PERMISSION_DENIED)
                    context.set_details(f"incorrect state request {current_state} -> {req_state}")
                    response = task_pb2.Task(id=None,description= None,state= None) 
                    return response
            else:                                                                           # invlid
                logging.debug(f"invalid id")
                context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
                context.set_details('invalid Id!')
                response = task_pb2.Task(id=None,description= None,state= None) 
                return response
Ejemplo n.º 4
0
 def addTask(self, request: wrappers_pb2.StringValue, context) -> task_pb2.Task: # add
     with self.lock:         
         if len(request.value) < 1025:                                           # size check
             t = task_pb2.Task(id=self.task_id, description=request.value , state = 0 )
             self.tasks[self.task_id] = t                                        # create new 
             logging.debug(f"addTask parameters {t.state}")
             self.task_id += 1                                                   # increase
             context.set_code(grpc.StatusCode.OK)
             return t
         else:
             logging.debug(f"Max length is 1024")
             context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
             context.set_details('Description is too long!')
             response = task_pb2.Task(id=None,description= None, state = None) 
             return response
Ejemplo n.º 5
0
    def addTask(self, request: wrappers_pb2.StringValue,
                context) -> task_pb2.Task:
        # Add error handling to descriptions
        if len(request.value) > 1024:
            context.set_details("Description is not valid")
            context.set_code(grpc.StatusCode.OUT_OF_RANGE)
            return task_pb2.Task()

        # Fix data race in TaskapiImpl.addTask
        with self.mutex as lock:
            logging.debug(f"addTask parameters {pformat(request)}")
            t = task_pb2.Task(id=self.task_id, description=request.value)
            self.tasks[self.task_id] = t
            self.task_id += 1
            return t
Ejemplo n.º 6
0
    def addTask(self, request, context):
        # TODO: implement this!
        index = len(self.tasks.tasks)
        print(
            "added id: ",
            index,
        )
        if (index == 0):
            tempTask = task_pb2.Task(id=index, description=request.description)
        else:
            tempid = self.tasks.tasks[index - 1].id + 1
            tempTask = task_pb2.Task(id=tempid,
                                     description=request.description)

        self.tasks.tasks.append(tempTask)
        return task_pb2.Id(id=tempTask.id)
    def listTasks(self, request, context) -> task_pb2.Tasks:  # print list

        #print(request.selected)
        tem = {}
        if len(request.selected) == 0:  # if input zero state
            logging.debug("listTasks")
            context.set_code(grpc.StatusCode.OK)
            return self.tasks

        if (max(request.selected) > 4) or (min(request.selected) <
                                           0):  # state range
            logging.debug(f"out of range {pformat(request)}")
            context.set_code(grpc.StatusCode.OUT_OF_RANGE)
            context.set_details(f"out of range {pformat(request)}")
            return tem

        for i in self.tasks:  # filter
            y = task_pb2.Task(id=i,
                              description=self.tasks[i].description,
                              state=self.tasks[i].state)
            tem[i] = y
            #print(tem[2])

        remove = [
            k for k in self.tasks.keys()
            if not tem[k].state in request.selected
        ]
        for k in remove:
            del tem[k]
        print(tem)
        logging.debug(f"listTasks parameters {pformat(request)}")
        context.set_code(grpc.StatusCode.OK)

        return task_pb2.Tasks(pending=tem.values())
Ejemplo n.º 8
0
 def delTask(self, request, context):
     logging.info(f"deleting task {request.id}")
     # TODO: implement this!
     response = task_pb2.Task()
     response = self.tasks.tasks[request.id]
     self.tasks.tasks[request.id].description = ""
     return response
Ejemplo n.º 9
0
 def delTask(self, request, context):
     logging.info(f"deleting task {request.id}")
     # TODO: implement this!
     for task in self.tasks.tasks:
         if request.id == task.id:
             self.tasks.tasks.remove(task)
             return task_pb2.Task(id=task.id, description=task.description)
    def addTask(self, request: wrappers_pb2.StringValue,
                context) -> task_pb2.Task:

        if len(request.value) < 1025:  # max size set
            with self.lock:  # data race lock
                logging.debug(f"addTask parameters {pformat(request)}")
                t = task_pb2.Task(id=self.task_id, description=request.value)
                self.tasks[self.task_id] = t
                self.task_id += 1
                return t
        else:
            logging.debug(f"Max length is 1024")
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details('Description is too long!')
            response = task_pb2.Task(id=None, description=None)
            return response
Ejemplo n.º 11
0
 def addTask(self, request, context):
     logging.info(f"adding task {request.description}")
     # TODO: implement this!
     index = len(self.tasks.tasks)
     self.tasks.tasks.append(
         task_pb2.Task(id=index, description=request.description))
     return task_pb2.Id(id=index)
Ejemplo n.º 12
0
def test_destructive_edit(stub, taskIndex, edit_text) -> None:
    try:
        task = stub.destructive_editTask(task_pb2.Task(id = taskIndex, description = edit_text))
        logging.debug(f"destructively Edited Task {pformat(task)}")

    except grpc.RpcError as e:
        print(e.details())
 def addTask(self, request, context):
     logging.info(f"adding task {request.description}")
     # TODO: implement this!
     count = len(self.tasks.tasks) + 1
     newtask = task_pb2.Task(id=count, description=request.description)
     self.tasks.tasks.append(newtask)
     print(f"adding task {newtask.id}")
     return task_pb2.Id(id=count)
Ejemplo n.º 14
0
def test_edit(stub, taskIndex, edit_text, next_state) -> None:
    try:
        task = stub.editTask(task_pb2.Task(id = taskIndex, description = edit_text,  state = next_state))
        # task = stub.editTask(task_pb2.Task(id = taskIndex, description = edit_text))
        # task = stub.editTask(task_pb2.Task(id = taskIndex, state = next_state))
        logging.debug(f"Updated Task {pformat(task)}")

    except grpc.RpcError as e:
        print(e.details())
Ejemplo n.º 15
0
def test_edit(stub, k):

    tem = task_pb2.Task()
    tem.id = 3
    tem.description = "abc"
    print(type(tem))
    tem.state = k
    task = stub.editTask(tem)
    logging.debug(f"edit Task {pformat(task)}")
 def editTask(self, request: task_pb2.Task, context) -> task_pb2.Task:
     if request.id in self.tasks and len(request.description) <= 1024:
         temp = self.tasks[request.id]
         self.tasks[request.id] = request.description
         return task_pb2.Task(id=request.id, description=temp)
     else:
         context.set_code(grpc.StatusCode.STRINGEXCEEDORINVALIDID)
         context.set_details('Description is too long or Invalid Id!')
         return None
    def addTask(self, request: wrappers_pb2.StringValue,
                context) -> task_pb2.Task:
        logging.debug(f"addTask parameters {pformat(request)}")
        # here handle the MAXLEN = 1024 if description too long give an error
        if len(request.value) > 1024:
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details('Oh!.. Description length is too big.!')
            return task_pb2.Task()

        # if description is in range
        with self.lck:
            t = task_pb2.Task(id=self.task_id, description=request.value)
            self.tasks[self.task_id] = t
            self.hist_tasks[self.task_id] = [
                (data_str(date=timestamp_pb2.Timestamp().GetCurrentTime()))
            ]
            self.task_id += 1
        return t
 def editTask(self, request: task_pb2.Task, context) -> task_pb2.Task:
     # ignoring data conflicts
     if request.id < self.tasks and len(request.description) < 1025:
         temp = self.tasks[request.id]
         self.tasks[request.id] = request.description
         return task_pb2.Task(id=request.id, description=temp)
     else:
         context.set_code(grpc.StatusCode.STRINGEXCEEDORINVALIDID)
         context.set_details('invalid id or over size')
         return None
    def delTask(self, request: wrappers_pb2.UInt64Value,
                context) -> task_pb2.Task:

        # error handling, id
        if request.value in self.tasks:
            logging.debug(f"delTask parameters {pformat(request)}")
            return self.tasks.pop(request.value)
        else:
            context.set_details("ID is not valid")
            context.set_code(grpc.StatusCode.NOT_FOUND)
            return task_pb2.Task()
 def delTask(self, request: wrappers_pb2.UInt64Value,
             context) -> task_pb2.Task:
     if request.value < self.task_id:  # id valid
         logging.debug(f"delTask parameters {pformat(request)}")
         return self.tasks.pop(request.value)  # pop out
     else:
         logging.debug(f"invalid id")
         context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
         context.set_details('invalid Id!')
         response = task_pb2.Task(id=None, description=None)
         return response
 def delTask(self, request: wrappers_pb2.UInt64Value, context) -> task_pb2.Task:
     logging.debug(f"delTask parameters {pformat(request)}")
     # check task id is a valid value.
     if request.value not in self.tasks.keys() :
         # if not handle it
         context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
         context.set_details('Invalid task id.!')
         return task_pb2.Task()
     else :
         # remove the task and send the deleted task
         return self.tasks.pop(request.value)
    def addTask(self, request, context):
        logging.info(f"adding task {request.description}")
        # TODO: implement this!

        # get the length of tasks
        length = len(self.Tasks.tasks)

        #decide the index according to the length of tasks
        if (length == 0):
            adding_task = task_pb2.Task(id=length,
                                        description=request.description)
        else:
            #append the task with the id and recieved description
            adding_id = self.Tasks.tasks[length - 1].id + 1
            adding_task = task_pb2.Task(id=adding_id,
                                        description=request.description)

        self.Tasks.tasks.append(adding_task)
        #return id
        return task_pb2.Id(id=adding_task.id)
Ejemplo n.º 23
0
def AddTask(task_name, duration, delay, pre_req_id):
    task = task_pb2.Task()
    task.id = task_name
    task.time.duration = duration
    task.time.cool_down = delay
    task.time.earliest_starts.append(start_time)
    task.time.latest_starts.append(end_time)

    if pre_req_id:
        task.pre_req_ids.append(pre_req_id)
    return task
Ejemplo n.º 24
0
    def editTask(self, request: task_pb2.Task, context) -> task_pb2.Task:

        if request.id in self.tasks:

            if len(request.description) <= 1024:
                logging.debug(
                    f"editTask parameters {pformat(request.description)}")
                t = task_pb2.Task(id=request.id,
                                  description=request.description)
                self.tasks[request.id] = t
                return t
            else:
                # error handling, description
                context.set_details("Description is not valid")
                context.set_code(grpc.StatusCode.OUT_OF_RANGE)
                return task_pb2.Task()
        else:
            # error handling, id
            context.set_details("ID is not valid")
            context.set_code(grpc.StatusCode.NOT_FOUND)
            return task_pb2.Task()
 def addTask(self, request: wrappers_pb2.StringValue, context) -> task_pb2.Task:
     logging.debug(f"addTask parameters {pformat(request)}")
     # check if the lenght of the task description is acceptable.
     if len(request.value) >= 1024 :
         # if not handle it
         context.set_code(grpc.StatusCode.OUT_OF_RANGE)
         context.set_details(f'Task descriptions must be less than {MAX_LENGTH} characters.!')
         return task_pb2.Task()
     else :
         # if task description is acceptable add the task
         # lock the critical region
         self.lock.acquire()
         t = task_pb2.Task(id=self.task_id, description=request.value, state=task_pb2.TaskState.OPEN)
         # increment task_id
         self.task_id += 1
         # release the lock.
         self.lock.release()
         # add to the dict
         self.tasks[t.id] = t
         # return task
         return t
Ejemplo n.º 26
0
 def addTask(self, request, context):
     logging.info(f"adding task {request.description}")
     # TODO: implement this!
     # print(type(self.tasks.tasks))
     # response = len(self.tasks.tasks)
     # print("fwsfe",response)
     response = task_pb2.Id()
     response.id = len(self.tasks.tasks)
     temp = task_pb2.Task()
     temp.id = response.id
     temp.description = request.description
     self.tasks.tasks.append(temp)
     return response
    def delTask(self, request: wrappers_pb2.UInt64Value,
                context) -> task_pb2.Task:
        logging.debug(f"delTask parameters {pformat(request)}")
        # check whether the key is exist
        if request.value in self.tasks.keys():
            # remove both histry and tasks
            self.hist_tasks.pop(request.value)
            return self.tasks.pop(request.value)

        #if not
        context.set_code(grpc.StatusCode.NOT_FOUND)
        context.set_details(f"There is no Task with Id : {pformat(request)}")
        return task_pb2.Task()
 def editTask(self, request,
              context) -> task_pb2.Task:  #nondestructive_editTask
     if request.id < self.task_id:  # id is with in range
         logging.debug("edit parameters ondestructive_editTask")
         return self.addTask(
             wrappers_pb2.StringValue(value=request.description),
             context=context)  # create new
     else:  # invalid id
         logging.debug(f"invalid id")
         context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
         context.set_details('invalid Id!')
         response = task_pb2.Task(id=None, description=None)
         return response
    def delTask(self, request, context):
        logging.info(f"deleting task {request.id}")
        # TODO: implement this!

        for i in range(len(self.Tasks.tasks)):
            if (self.Tasks.tasks[i].id == request.id):
                deleting_task = self.Tasks.tasks[i]  #record deleting task
                self.Tasks.tasks.pop(i)  #delete the requested task
                return task_pb2.Task(id=deleting_task.id,
                                     description=deleting_task.description)

        print("Task does not exist")
        return
    def nondestructive_editTask(self, request: task_pb2.Task,
                                context) -> task_pb2.Task:

        if request.id in self.tasks:

            if len(request.description) <= 1024:
                logging.debug(
                    f"nondestruct_editTask parameters {pformat(request.description)}"
                )
                t = task_pb2.Task(id=request.id,
                                  description=request.description)

                if request.id in self.history:
                    # append current task to the history dict
                    self.history[request.id].append(t)

                else:
                    temp_task_list = []  #create a tempory list to hold a task
                    temp_task_list.append(t)
                    # add current task to the history dict before edit the task
                    self.history[request.id] = temp_task_list

                # print history dict
                print(self.history)

                # update the task
                self.tasks[request.id] = t
                return t

            else:
                # error handling, description
                context.set_details("Description is not valid")
                context.set_code(grpc.StatusCode.OUT_OF_RANGE)
                return task_pb2.Task()
        else:
            # error handling, id
            context.set_details("ID is not valid")
            context.set_code(grpc.StatusCode.NOT_FOUND)
            return task_pb2.Task()