Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2017 10:12:41

annie_shlepak
Зарегистрирован: 2017-02-28
Сообщения: 4
Репутация: +  -1  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

Всем привет!
Пилю 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()

Отредактировано annie_shlepak (Фев. 28, 2017 10:15:41)

Офлайн

#2 Фев. 28, 2017 11:00:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

     sql_query = """
                SELECT
                FROM
                JOIN
                ON
                """

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

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

А объявление методов без объявления класса, я так понимаю, новое слово в ООП.
Вы взяли чужой код, выпилили из него все недоступные пониманию сущности и хотите, чтобы он заработал?



Отредактировано FishHook (Фев. 28, 2017 11:02:09)

Офлайн

#3 Фев. 28, 2017 11:07:44

annie_shlepak
Зарегистрирован: 2017-02-28
Сообщения: 4
Репутация: +  -1  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

Вам не знакомы такие слова, как SELECT, FROM, JOIN, ON? Или что? Сократила запрос, потому что не имеет смысла выставлять его полностью.
И да, это песочница. Так что строго не стоит судить.
Код писала сама, не нужно тут.

Отредактировано annie_shlepak (Фев. 28, 2017 11:19:14)

Офлайн

#4 Фев. 28, 2017 11:33:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

annie_shlepak
Сократила запрос, потому что не имеет смысла выставлять его полностью.
А как мы должны ваш код понимать, если вы его вольным образом сократили? Куда вы дели объявления классов?



Офлайн

#5 Фев. 28, 2017 14:46:42

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

Сделайте минимальный пример, который запускается и выдает этот результат. Если к этому моменту сами не поймете в чем дело, обещаю посмотреть.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Фев. 28, 2017 15:52:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

PooH
Если к этому моменту сами не поймете в чем дело, обещаю посмотреть
Там смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.



Офлайн

#7 Фев. 28, 2017 16:53:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

FishHook
Там смотреть нечего, там методы без класса, первый аргумент self, на этом функции и падают.
Я все таки думаю топикстартер просто грубо код покоцал, когда постил, потому, как эта библиотека на отсутствие параметра отдает ‘error’: ‘Invalid params’ в JSON. Таки что-то поинтересней, но из этого огрызка не понять.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Фев. 28, 2017 23:55:52

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

tinyrpc or microrpc…

Офлайн

#9 Март 1, 2017 05:59:29

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

4kpt_V
microrpc
Интересно а что скажете по поводу microrpc vs pyro4?



Офлайн

#10 Март 1, 2017 09:00:05

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Python JSON-RPC 2.0 API

pyro супер, если предполагается только python в инфраструктуре… А вот если нет, тогда или microrpc или gRPC. gRPC получше будет и плюшек поболе, но protobuf это боль!
А с какого рожна скажиТЕ???

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version