Найти - Пользователи
Полная версия: Python JSON-RPC 2.0 API
Начало » Python для экспертов » Python JSON-RPC 2.0 API
1 2
annie_shlepak
Всем привет!
Пилю 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)

CLIENT
 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()
FishHook
     sql_query = """
                SELECT
                FROM
                JOIN
                ON
                """

толи я чего-то не понимаю, то ли это какое-то новое слово в SQLе.

 def __init__(self, conn):
    self.conn = conn

А объявление методов без объявления класса, я так понимаю, новое слово в ООП.
Вы взяли чужой код, выпилили из него все недоступные пониманию сущности и хотите, чтобы он заработал?
annie_shlepak
Вам не знакомы такие слова, как SELECT, FROM, JOIN, ON? Или что? Сократила запрос, потому что не имеет смысла выставлять его полностью.
И да, это песочница. Так что строго не стоит судить.
Код писала сама, не нужно тут.
FishHook
annie_shlepak
Сократила запрос, потому что не имеет смысла выставлять его полностью.
А как мы должны ваш код понимать, если вы его вольным образом сократили? Куда вы дели объявления классов?
PooH
Сделайте минимальный пример, который запускается и выдает этот результат. Если к этому моменту сами не поймете в чем дело, обещаю посмотреть.
FishHook
PooH
Если к этому моменту сами не поймете в чем дело, обещаю посмотреть
Там смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.
PooH
FishHook
Там смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.
Я все таки думаю топикстартер просто грубо код покоцал, когда постил, потому, как эта библиотека на отсутствие параметра отдает ‘error’: ‘Invalid params’ в JSON. Таки что-то поинтересней, но из этого огрызка не понять.
4kpt_V
tinyrpc or microrpc…
doza_and
4kpt_V
microrpc
Интересно а что скажете по поводу microrpc vs pyro4?
4kpt_V
pyro супер, если предполагается только python в инфраструктуре… А вот если нет, тогда или microrpc или gRPC. gRPC получше будет и плюшек поболе, но protobuf это боль!
А с какого рожна скажиТЕ???
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB