def index(self, request): if request.path == '/healthCheckhealthCheck' or request.method == 'OPTIONS': return Response(text='200', headers=MultiDict( { # 'Content-Type': accept, 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Cookie, Accept,X-PINGOTHER', 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIOS', 'Access-Control-Max-Age': '3600', 'Access-Control-Allow-Credentials': 'true' }, ) ) result = '{}' contentType = request.headers.get('CONTENT-TYPE', 'application/json') # pre-flight 요청을 회피하기 위해 json을 text로 받아서 처리한다. if contentType == 'text/plain': contentType = 'application/json' accept = request.headers.get('ACCEPT', 'application/json') encoding = request.headers.get('ACCEPT-ENCODING') referer = request.headers.get('Referer', '') # contentType이 xml이 아니면 json으로 처리 if contentType != 'application/xml': contentType = 'application/json' # accept가 xml이 아니면 json으로 처리 if accept != 'application/xml': accept = 'application/json' # contentType = 'application/xml' # accept = 'application/xml' requestDict = {} controllerResult = {} try: body = yield from request.text() if body: if contentType == 'application/xml': body = xmltodict.parse(body) # convert to OrderedDict body = ujson.dumps(body) # convert to json requestDict = {} try: requestDict = ujson.loads(body) # json to dict except: post = yield from request.post() requestDict = dict(post) # print("post:", post) # if len(post) > 0: # requestDict = dict(post) # else: # requestDict = ujson.loads(body) # json to dict # print("requestDict:", requestDict) if contentType == 'application/xml': for key, value in requestDict.items(): requestDict = value break requestDict['service'] = request.path[1:].replace('/', '.') if not requestDict.get('method'): # http에서 POST, PUT, DELETE 구분하여 requestDict에 추가 if request.method == 'POST': requestDict['method'] = 'create' elif request.method == 'PUT': requestDict['method'] = 'update' elif request.method == 'DELETE': requestDict['method'] = 'delete' elif request.method == 'GET': requestDict['method'] = 'read' controllerClass = controller.ControllerClass() controllerResult = yield from controllerClass.execute(requestDict, self.daoClass.connection, self.httpClass.connection) if accept == 'application/xml': result = dicttoxml.dicttoxml(controllerResult).decode('utf-8') # dic to xml else: if controllerResult.get('service') == 'tools.exportToExcel': result = controllerResult else: result = ujson.dumps(controllerResult) # dict to json except: print(traceback.format_exc()) if accept == 'application/xml': result = '<root />' if controllerResult.get('service') == 'tools.exportToExcel': fileName = result.get('condition').get('fileName') response = Response(body=result.get('result'), headers=MultiDict( { 'Pragma' : 'public', 'Expires': '0', 'Cache-Control': 'must-revalidate, post-check=0, pre-check=0', 'Cache-Control': 'private', # required for certain browsers, 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;', 'Content-Disposition': 'attachment; filename=%s' % fileName, 'Content-Transfer-Encoding': 'binary', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Cookie, Accept,X-PINGOTHER', 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS', }, ) ) elif controllerResult.get('service') == 'tools.virtualBankNotificationReceive': result = None isSucceed = controllerResult.get('result').get('isSucceed') if isSucceed == True: result = "OK" else: result = "FAIL" response = Response(text=result, headers=MultiDict( { 'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Cookie, Accept,X-PINGOTHER', 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS', 'Access-Control-Max-Age': '3600', 'Access-Control-Allow-Credentials': 'true' }, ) ) else: response = Response(text=result, headers=MultiDict( { 'Content-Type': accept, 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Cookie, Accept,X-PINGOTHER', 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS', 'Access-Control-Max-Age': '3600', 'Access-Control-Allow-Credentials': 'true' }, ) ) response._keep_alive = True return response