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()
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
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
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
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())
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
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
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)
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)
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())
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)
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
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
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()