Форум сайта python.su
Всем привет!
Пилю JSON-RPC API юзая json-rpc 1.10.3 либу.
Есть сервер, в котором два метода, в которых я тяну поля с БД на MySQl и клиент.
Когда запускаю клиент, выдаёт Response 405 (Method Not Allowed)
может кто сталкивался с таким? или кто юзал эту либу и может что-то подсказать?
Спасибо
SERVER
from werkzeug.wrappers import Request, Response from werkzeug.serving import run_simple from jsonrpc import JSONRPCResponseManager, dispatcher HOST = 'localhost' PORT = 80 def __init__(self, conn): self.conn = conn @dispatcher.add_method def get_detailed_usage(self, serviceRef, fromDate, toDate, excludeCallsCoveredByBundleAllowance): sql_where = [] sql_vars = [] if serviceRef is not None: sql_where.append("pc.service_ref={}").format(serviceRef) sql_vars.append(serviceRef) if fromDate is not None: sql_where.append("rc.start_time={}").format(fromDate) sql_vars.append(fromDate) if toDate is not None: sql_where.append("rc.end_time={}").format(toDate) sql_vars.append(toDate) if excludeCallsCoveredByBundleAllowance is not None: sql_where.append("excludeCallsCoveredByBundleAllowance={}").format(excludeCallsCoveredByBundleAllowance) sql_vars.append(excludeCallsCoveredByBundleAllowance) sql_query = """ SELECT FROM JOIN ON """ if sql_where: sql_query += " WHERE" + " AND ".join(sql_where) cursor = self.conn.cursor() cursor.execute(sql_query, *sql_vars) result = cursor.fetchall() return dict(result) @dispatcher.add_method def get_summary_usage(self, serviceRef, fromDate, toDate, excludeCallsCoveredByBundleAllowance): sql_where = [] sql_vars = [] if serviceRef is not None: sql_where.append("pc.service_ref={}").format(serviceRef) sql_vars.append(serviceRef) if fromDate is not None: sql_where.append("rc.start_time={}").format(fromDate) sql_vars.append(fromDate) if toDate is not None: sql_where.append("rc.end_time={}").format(toDate) sql_vars.append(toDate) if excludeCallsCoveredByBundleAllowance is not None: sql_where.append("excludeCallsCoveredByBundleAllowance={}").format(excludeCallsCoveredByBundleAllowance) sql_vars.append(excludeCallsCoveredByBundleAllowance) sql_query = """ SELECT FROM JOIN ON """ if sql_where: sql_query += " WHERE" + " AND ".join(sql_where) cursor = self.conn.cursor() cursor.execute(sql_query, *sql_vars) result = cursor.fetchall() return dict(result) def application(request): response = JSONRPCResponseManager.handle(request.data, dispatcher) return Response(response.json, response.http_status, mimetype='application/json') if __name__ == '__main__': run_simple(HOST, PORT, application)
import requests import json def main(): url = 'http://localhost:80' # headers = {'content-type': 'application/json'} result = { "jsonrpc": "2.0", "method": "get_detailed_usage", "params": [{"serviceRef": "1234", "fromDate": "2017-01-01 00:00:00", "toDate": "2017-01-31 23:59:59"}], "id": 0, } response = requests.post(url, data=json.dumps(result)) print(response) if __name__ == "__main__": main()
Отредактировано annie_shlepak (Фев. 28, 2017 10:15:41)
Офлайн
sql_query = """ SELECT FROM JOIN ON """
def __init__(self, conn): self.conn = conn
Отредактировано FishHook (Фев. 28, 2017 11:02:09)
Офлайн
Вам не знакомы такие слова, как SELECT, FROM, JOIN, ON? Или что? Сократила запрос, потому что не имеет смысла выставлять его полностью.
И да, это песочница. Так что строго не стоит судить.
Код писала сама, не нужно тут.
Отредактировано annie_shlepak (Фев. 28, 2017 11:19:14)
Офлайн
annie_shlepakА как мы должны ваш код понимать, если вы его вольным образом сократили? Куда вы дели объявления классов?
Сократила запрос, потому что не имеет смысла выставлять его полностью.
Офлайн
Сделайте минимальный пример, который запускается и выдает этот результат. Если к этому моменту сами не поймете в чем дело, обещаю посмотреть.
Офлайн
PooHТам смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.
Если к этому моменту сами не поймете в чем дело, обещаю посмотреть
Офлайн
FishHookЯ все таки думаю топикстартер просто грубо код покоцал, когда постил, потому, как эта библиотека на отсутствие параметра отдает ‘error’: ‘Invalid params’ в JSON. Таки что-то поинтересней, но из этого огрызка не понять.
Там смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.
Офлайн
tinyrpc or microrpc…
Офлайн
4kpt_VИнтересно а что скажете по поводу microrpc vs pyro4?
microrpc
Офлайн
pyro супер, если предполагается только python в инфраструктуре… А вот если нет, тогда или microrpc или gRPC. gRPC получше будет и плюшек поболе, но protobuf это боль!
А с какого рожна скажиТЕ???
Офлайн