Implements new input scheme API on Webcontrollers.

pull/1555/head
Kieran R. Prasch 2020-01-08 18:38:43 -08:00 committed by damon
parent 71a7fc7a1c
commit e70ba7eb18
5 changed files with 20 additions and 15 deletions

View File

@ -304,9 +304,16 @@ class WebController(CharacterControlServer):
_400_exceptions = (MissingField, _400_exceptions = (MissingField,
InvalidInputField, InvalidInputField,
) TypeError,
JSONDecodeError)
try: try:
response = interface(request=control_request.data, *args, **kwargs) # < ------- INLET request_body = control_request.data or dict()
if request_body:
request_body = json.loads(request_body)
request_body.update(kwargs)
response = self._perform_action(action=interface.__name__, request=request_body)
# #
# Client Errors # Client Errors
@ -350,4 +357,4 @@ class WebController(CharacterControlServer):
# #
else: else:
self.log.debug(f"{interface_name} [200 - OK]") self.log.debug(f"{interface_name} [200 - OK]")
return response return self.emitter.respond(response=response)

View File

@ -212,11 +212,9 @@ class WebEmitter:
self.log = Logger('web-emitter') self.log = Logger('web-emitter')
@staticmethod @staticmethod
def assemble_response(response: dict, request_id: int, duration) -> dict: def assemble_response(response: dict) -> dict:
response_data = {'result': response, response_data = {'result': response,
'version': str(nucypher.__version__), 'version': str(nucypher.__version__)}
'id': str(request_id),
'duration': str(duration)}
return response_data return response_data
def exception(drone_character, def exception(drone_character,
@ -232,10 +230,8 @@ class WebEmitter:
raise e raise e
return drone_character.sink(str(e), status=response_code) return drone_character.sink(str(e), status=response_code)
def ipc(drone_character, response, request_id, duration) -> Response: def respond(drone_character, response) -> Response:
assembled_response = drone_character.assemble_response(response=response, assembled_response = drone_character.assemble_response(response=response)
request_id=request_id,
duration=duration)
serialized_response = WebEmitter.transport_serializer(assembled_response) serialized_response = WebEmitter.transport_serializer(assembled_response)
# ---------- HTTP OUTPUT # ---------- HTTP OUTPUT

View File

@ -125,7 +125,7 @@ class AliceInterface(CharacterPublicInterface):
label=label label=label
) )
plaintexts = self.alice.decrypt_message_kit( plaintexts = self.character.decrypt_message_kit(
message_kit=message_kit, message_kit=message_kit,
data_source=data_source, data_source=data_source,
label=label label=label

View File

@ -9,4 +9,4 @@ class EncryptMessage(BaseSchema):
# output # output
message_kit = fields.UmbralMessageKit(dump_only=True) message_kit = fields.UmbralMessageKit(dump_only=True)
signature = fields.Str(dump_only=True) # maybe we need a signature field? signature = fields.String(dump_only=True) # maybe we need a signature field?

View File

@ -718,7 +718,8 @@ class Bob(Character):
app_name = bytes(drone_bob.stamp).hex()[:6] app_name = bytes(drone_bob.stamp).hex()[:6]
controller = WebController(app_name=app_name, controller = WebController(app_name=app_name,
character_controller=drone_bob.controller, character_controller=drone_bob.controller,
crash_on_error=crash_on_error) crash_on_error=crash_on_error,
interface=drone_bob._interface_class(character=drone_bob))
drone_bob.controller = controller.make_control_transport() drone_bob.controller = controller.make_control_transport()
@ -1338,7 +1339,8 @@ class Enrico(Character):
app_name = bytes(drone_enrico.stamp).hex()[:6] app_name = bytes(drone_enrico.stamp).hex()[:6]
controller = WebController(app_name=app_name, controller = WebController(app_name=app_name,
character_controller=drone_enrico.controller, character_controller=drone_enrico.controller,
crash_on_error=crash_on_error) crash_on_error=crash_on_error,
interface=drone_enrico._interface_class(character=drone_enrico))
drone_enrico.controller = controller drone_enrico.controller = controller