From f5dc197172bc29480e53365716b69f361936a0ae Mon Sep 17 00:00:00 2001 From: hyh123a Date: Sun, 17 Apr 2022 21:42:32 +0800 Subject: [PATCH] add the ticket apply post api --- myems-api/app.py | 1 + myems-api/reports/ticket.py | 85 ++++++++++++++++++++++++++++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/myems-api/app.py b/myems-api/app.py index 685d3bd6..98f818cf 100644 --- a/myems-api/app.py +++ b/myems-api/app.py @@ -111,6 +111,7 @@ api.add_route('/ticket/list', # Apply One Ticket api.add_route('/ticket/apply/{id_}', ticket.TicketApplicationCollection()) + ######################################################################################################################## # Routes for System Core ######################################################################################################################## diff --git a/myems-api/reports/ticket.py b/myems-api/reports/ticket.py index 78907a9c..daefb282 100644 --- a/myems-api/reports/ticket.py +++ b/myems-api/reports/ticket.py @@ -5,6 +5,28 @@ import config import uuid import re from core.useractivity import user_logger, access_control +import requests + + +def login(): + url = "http://192.168.1.4/api/v1.0/login" + + payload = json.dumps({ + "username": "admin", + "password": "123456", + "type": "account" + }) + headers = { + 'Content-Type': 'application/json', + } + + session = requests.session() + response = session.post(url, headers=headers, data=payload) + status = response.status_code + + if status == 200: + return session + return None class TicketTypeCollection: @@ -193,6 +215,68 @@ class TicketApplicationCollection: resp.text = json.dumps(result) + @staticmethod + def on_post(req, resp, id_): + """Handles POST requests""" + access_control(req) + try: + raw_json = req.stream.read().decode('utf-8') + except Exception as ex: + raise falcon.HTTPError(falcon.HTTP_400, title='API.ERROR', description=ex) + """ + { + "title": "测试维修", + "long_field": "测试维修", + "transition_id": 29, + "workflow_id": 4 + }""" + new_values = json.loads(raw_json) + + checked_fields = [ + { + "name": "title", + "type": str + }, + { + "name": "long_field", + "type": str + }, + { + "name": "transition_id", + "type": int + }, + { + "name": "workflow_id", + "type": int + }, + + ] + + for field in checked_fields: + _name = field['name'] + _type = field['type'] + if _name not in new_values['data'].keys() or \ + not isinstance(new_values['data'][_name], _type) or \ + len(str.strip(new_values['data'][_name])) == 0: + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST', + description='API.INVALID_FIELD' + _name) + + payload = new_values['data'] + + session = login() + url = 'http://192.168.1.4/api/v1.0/tickets' + headers = { + 'Content-Type': 'application/json', + } + resp = session.post(url, headers=headers, data=payload) + content = json.loads(resp.text) + new_ticket_id = content['data']['ticket_id'] + if resp.status_code != 200: + raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_COOKIE', + description='API.INVALID_STATUS_CODE:' + str(resp.status_code)) + resp.status = falcon.HTTP_201 + resp.location = '/tickets/' + str(new_ticket_id) + class ContactItem: @staticmethod @@ -394,4 +478,3 @@ class ContactItem: cnx.close() resp.status = falcon.HTTP_200 -