У меня есть класс, который пытается вызвать RPC с сервера, используя метод name_me, определенный на сервере. Он отлично работает, если я позвоню в iPython, используя:
jsonrpcclient.request ('http://localhost:5000', 'name_me', N=6).data.result
но когда я пытаюсь построить его с моим классом, я получаю ошибку:
RuntimeError: Working outside of request context.
Обычно это означает, что вы пытались использовать функциональность, которая требовалась
активный HTTP-запрос. Обратитесь к документации по тестированию для
информация о том, как избежать этой проблемы.
Я положу код клиента в разделе кода.
class LyricCaller:
def __update_host_port (self, new_port):
self.__port = new_port
def __update_host_address (self, new_address):
self.__address = new_address
def __target (self):
return '{}:{}'.format (self.__address, self.__port)
def __init__(self, host_address = 'http://localhost:5000', host_port = 5000):
self.lyric = []
self.__Lyr_fn = 'name_me'
self.__update_host_address (host_address)
self.__update_host_port (host_port)
def __parse_choice (self, choice):
return abs (choice)
def sing(self):
print (self.lyric)
def fetch_lyric (self, choice):
C = self.__parse_choice (choice)
K = request (self.__target(), self.Lyr_fn, N=1)
Я ожидаю возвращенную строку, которая работает, когда я просто вызываю
jsonrpcclient.request ('http://localhost:5000',' name_me ', N = 6) .data.result,
но вместо этого я все еще получаю ошибку контекста. Я попытался перезагрузить сервер, но все равно происходит то же самое.
для дальнейшего использования, вот код сервера:
'' '
from flask import Flask, request, Response
from jsonrpcserver import method, dispatch
LServer = Flask(__name__)
@method
def name_me (N = 1):
K = ['How do we sleep while our beds are burning?',
'You label me, I label you, and so I dub thee Unforgiven',
'Carry on my wayward son!',
'Not dead which eternal lie, stranger aeons death may die',
'Let the bodies hit the floor',
'Wollt ihr das bed in flammen siehen']
#N = 4
if N <= len (K):
O = K[N-1]
else:
import random
n = random.randint (0, len(K)-1)
O = K[n]
return O
@LServer.route ('/', methods = ['POST'])
def index():
#with LServer.test_request_context():
req = request.get_data().decode()
response = dispatch(req)
return Response (str(response), response.http_status, mimetype="application/json")
if __name__ == '__main__':
LServer.run()
'' '