def put(self, id): try: data = request.get_json() TaskService.updateTask(data=data, id=id) return {"result": "task updated successfully"} except Exception as e: return {"error": e.message}
def post(self): try: data = request.get_json() task = TaskService.addTask(data=data) return task.serialize except KeyError as e: return {"error": 'the ' + e.message + ' is required'}
def post(self, project_pk): """ Create a new Project Member :param project_pk: Project ID :return: the created ProjectMember """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) project = get_project_request(project_pk) members_added = [] errors_list = [] for member in data: if member.get('value'): user = User.get_by_id(member.get('value')) if not user: errors_list.append( dict(member=api_errors.INVALID_MEMBER_MSG)) else: user = User(email=member.get('text')) user.active = False user.save() if user and project.owner.id != user.id: m = ProjectMember.get_by_project_member(project, user) if not m: m = ProjectMember(project=project) m.member = user m.save() # Send email notification create_new_member_email(m.member, project) members_added.append(m.to_dict()) else: errors_list.append(dict( member=api_errors.INVALID_ALREADY_ADDED_MSG )) if errors_list: raise api_errors.InvalidAPIUsage( api_errors.VALIDATION_ERROR_MSG, payload=errors_list ) if members_added: # save activity save_notification(project_pk=project.id, verb='new_members', data={'members': members_added}) return {}, 200
def post(self, project_pk): """ Update Order """ get_project_request(project_pk) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) Ticket.order_items(data) # save activity save_notification(project_pk=project_pk, verb='backlog_order', data=data) return data, 200
def post(self): """ Create Project """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) prj = Project(name=data.get('name'), owner=g.user.to_dbref()) prj.active = data.get('active') prj.private = data.get('private') prj.prefix = data.get('prefix', data.get('name')[:3].upper()) prj.description = data.get('description') prj.project_type = data.get('project_type', 'S') # Add initial config prj.sprint_duration = 15 prj.save() # add owner as member pm = ProjectMember(project=prj) pm.member = prj.owner pm.is_owner = True pm.save() # Add 3 columns states col_names = ['ToDo', 'In Progress', 'Done'] for index, c in enumerate(col_names): col = Column() col.title = c col.project = prj if index == len(col_names) - 1: col.done_column = True col.save() # save activity save_notification(project_pk=prj.pk, verb='new_project', data=prj.to_dict()) return prj, 201
def post(self, project_pk, tkt_id): """ Create a Comment for a ticket :param project_pk: Project ID :param tkt_id: Ticket ID :return: Created Comment """ get_project_request(project_pk) get_ticket_request(tkt_id) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) c = Comment(ticket=tkt_id) c.who = current_user.to_dbref() c.comment = data.get('comment') c.save() if data.get('mentions'): for m in data.get('mentions'): if m is not None: user = User.get_by_id(m) if user: create_notification_email(user, c) # save activity save_notification(project_pk=project_pk, verb='mention', user_to=user, data={ "comment": c.to_dict(), "ticket": c.ticket.to_dict() }) else: # save activity save_notification(project_pk=project_pk, verb='new_comment', data={ "comment": c.to_dict(), "ticket": c.ticket.to_dict() }) return c, 201
def post(self): args = parser.parse_args() data = request.get_json(force=True) username = args.get('email') password = args.get('password') criterion = [username, password, len(data) == 2] if not all(criterion): raise JWTError( 'Bad Request', 'Missing required credentials', status_code=400 ) user = _jwt.authentication_callback(username, password) if user: token = { "token": generate_token(user) } return token else: raise JWTError('Bad Request', 'Invalid credentials')
def post(self, project_pk): """ Create Ticket """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) project = get_project_request(project_pk) tkt = Ticket() last_tkt = Ticket.get_last_ticket(project_pk) tkt.number = last_tkt.number + 1 if last_tkt else 1 tkt.order = Ticket.get_next_order_index(project_pk) tkt.project = project tkt.description = data.get('description') tkt.points = data.get('points', 0) tkt.title = data.get('title') tkt.labels = data.get('labels') tkt.type = data.get('type', 'U') tkt.save() if data.get('sprint'): # Assign to a sprint sprint = Sprint.get_by_id(pk=data.get('sprint')['pk']) if sprint: spo = SprintTicketOrder(sprint=sprint, ticket=tkt) spo.ticket_repr = tkt.to_dict() spo.order = SprintTicketOrder.get_next_order_index(sprint.id) spo.save() # save activity save_notification(project_pk=project_pk, verb='new_ticket', data=tkt.to_dict()) return tkt, 201
def post(self, project_pk): """ Update order of columns :param project_pk: project id :return: same data sent """ prj = get_project_request(project_pk) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) Column.order_items(data) # save activity save_notification(project_pk=prj.id, verb='order_columns', data=data) return data, 200
def put(self, project_pk, column_pk): """ Update a column instance :param project_pk: Project that belongs :param column_pk: Id of the column :return: The updated resource """ col = Column.get_by_id(column_pk) if not col: raise api_errors.MissingResource( api_errors.INVALID_COLUMN_MSG ) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) col.title = data.get('title') col.color_max_cards = data.get('color_max_cards', '#FF0000') col.done_column = data.get('done_column', False) col.max_cards = data.get('max_cards', 9999) # check set other columns of the project to done_column in False if col.done_column: Column.clear_done_columns(project_pk) col.save() # save activity save_notification(project_pk=project_pk, verb='update_column', data=col.to_dict()) return col, 200
def post(self, project_pk, sprint_pk): """ Update Order of tickets in sprint :param project_pk: Project ID :param sprint_pk: Sprint ID :return: Order """ get_project_request(project_pk) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) sprint = get_sprint_request(sprint_pk) SprintTicketOrder.order_items(data, sprint) # save activity save_notification(project_pk=project_pk, verb='sprint_ticket_order', data=data) return data, 200
def put(self, project_pk): """ Update a Project Instance :param project_pk: :return: """ project = get_project_request(project_pk) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) project.active = data.get('active') project.description = data.get('description') project.name = data.get('name') owner = User.get_by_id(data.get('owner_id')) if not owner: raise api_errors.InvalidAPIUsage( api_errors.INVALID_USER_ID_MSG ) project.owner = owner.to_dbref() project.private = data.get('private') project.sprint_duration = data.get('sprint_duration') project.prefix = data.get('prefix') project.project_type = data.get('project_type', 'S') project.save() # save activity save_notification(project_pk=project.pk, verb='update_project', data=project.to_dict()) return project, 200
def post(self, project_pk): """ :param project_pk: Project ID :return: Column Resource created """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage( api_errors.INVALID_JSON_BODY_MSG ) project = get_project_request(project_pk) col = Column() col.order = Column.objects.count() col.project = project col.title = data.get('title') col.color_max_cards = data.get('color_max_cards', '#FF0000') col.done_column = data.get('done_column', False) col.max_cards = data.get('max_cards', 9999) # Check if already exists one Done column if col.done_column: columns = Column.get_by_project(project) for c in columns: if c.done_column: c.done_column = False c.save() col.save() # save activity save_notification(project_pk=project.pk, verb='new_column', data=col.to_dict()) return col, 200
def get_input(self): """ Get JSON. The power of having a real object in our hand. """ return request.get_json(force=True)
def post(self, project_pk): """ Move Ticket to Column or Backlog :param project_pk: Project ID :return: Ticket Transition """ project = get_project_request(project_pk) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) tkt = get_ticket_request(data.get('ticket')) result = {} if data.get('backlog'): latest_tran = TicketCT.get_latest_transition(tkt) if latest_tran: latest_tran.latest_state = False latest_tran.save() SprintTicketOrder.order_items(data.get('order'), data.get('backlog')) # save activity save_notification(project_pk=project_pk, verb='ticket_transition', data=data) result = latest_tran.to_json(), 200 else: # Search already state col = Column.get_by_id(data.get('column')) if not col: raise api_errors.MissingResource(api_errors.INVALID_COLUMN_MSG) user = User.get_by_id(current_user.id) if not user: raise api_errors.MissingResource( api_errors.INVALID_USER_ID_MSG) transition = TicketCT() transition.ticket = tkt transition.column = col transition.order = TicketCT.get_next_order_index(col) if project.project_type == 'S': sprint = get_sprint_request(data.get('sprint')) latest_tran = TicketCT.get_latest_transition(tkt, sprint) transition.sprint = sprint else: latest_tran = TicketCT.get_latest_transition(tkt) if latest_tran: latest_tran.latest_state = False latest_tran.save() transition.latest_state = True transition.who = user transition.save() if project.project_type == 'S': sprint = get_sprint_request(data.get('sprint')) TicketCT.order_items(data.get('order'), sprint=sprint, column=col) else: TicketCT.order_items(data.get('order'), column=col) # save activity save_notification(project_pk=project_pk, verb='ticket_transition', data=transition.to_dict()) result = transition.to_json(), 201 return result