def test_call_json_body(self): self._platform = nuclio_sdk.Platform('local', 'somens', self._connection_provider) # prepare an event to send event = nuclio_sdk.Event(method='GET', path='path', body={'a': 'some_body'}) # prepare a responder connection_response = mock.MagicMock() connection_response.status = 204 connection_response.getheaders = lambda: [('Content-Type', 'application/json')] connection_response.read = mock.MagicMock( return_value='{"b": "some_response"}') self._mockConnection.getresponse = mock.MagicMock( return_value=connection_response) # send the event response = self._platform.call_function('function-name', event) self.assertEqual(self._mockConnection.url, 'somens-function-name:8080') self._mockConnection.request.assert_called_with( event.method, event.path, body=json.dumps({'a': 'some_body'}), headers={'Content-Type': 'application/json'}) self.assertEqual({'b': 'some_response'}, response.body) self.assertEqual('application/json', response.content_type) self.assertEqual(204, response.status_code)
def __init__(self, logger, handler, socket_path, platform_kind, namespace=None, worker_id=None, trigger_kind=None, trigger_name=None, decode_event_strings=True): self._logger = logger self._socket_path = socket_path self._json_encoder = nuclio_sdk.json_encoder.Encoder() self._entrypoint = None self._processor_sock = None self._platform = nuclio_sdk.Platform(platform_kind, namespace=namespace) self._decode_event_strings = decode_event_strings # 1gb self._max_buffer_size = 1024 * 1024 * 1024 # holds the function that will be called self._entrypoint = self._load_entrypoint_from_handler(handler) # connect to processor self._processor_sock = self._connect_to_processor() # make a writeable file from processor self._processor_sock_wfile = self._processor_sock.makefile('w') # create msgpack unpacker self._unpacker = self._resolve_unpacker() # event deserializer kind (e.g.: msgpack_raw / json) self._event_deserializer_kind = self._resolve_event_deserializer_kind() # get handler module entrypoint_module = sys.modules[self._entrypoint.__module__] # create a context with logger and platform self._context = nuclio_sdk.Context( self._logger, self._platform, worker_id, nuclio_sdk.TriggerInfo(trigger_kind, trigger_name)) # replace the default output with the process socket self._logger.set_handler('default', self._processor_sock_wfile, nuclio_sdk.logger.JSONFormatter()) # call init context if hasattr(entrypoint_module, 'init_context'): try: getattr(entrypoint_module, 'init_context')(self._context) except: self._logger.error( 'Exception raised while running init_context') raise # indicate that we're ready self._write_packet_to_processor('s')
def __init__(self, logger, handler, socket_path, platform_kind, namespace=None, worker_id=None, trigger_kind=None, trigger_name=None): self._logger = logger self._socket_path = socket_path self._json_encoder = nuclio_sdk.json_encoder.Encoder() self._entrypoint = None self._processor_sock = None self._platform = nuclio_sdk.Platform(platform_kind, namespace=namespace) # holds the function that will be called self._entrypoint = self._load_entrypoint_from_handler(handler) # connect to processor self._processor_sock = self._connect_to_processor() # make a writeable file from processor self._processor_sock_wfile = self._processor_sock.makefile('w') # create msgpack unpacker self._unpacker = self._resolve_unpacker() # get handler module entrypoint_module = sys.modules[self._entrypoint.__module__] # create a context with logger and platform self._context = nuclio_sdk.Context( self._logger, self._platform, worker_id, nuclio_sdk.TriggerInfo(trigger_kind, trigger_name)) # call init context if hasattr(entrypoint_module, 'init_context'): try: getattr(entrypoint_module, 'init_context')(self._context) except: self._logger.error( 'Exception raised while running init_context') raise # replace the default output with the process socket self._logger.set_handler('default', self._processor_sock_wfile, nuclio_sdk.logger.JSONFormatter()) # indicate that we're ready self._write_packet_to_processor('s') # log deprecation warning if nuclio_sdk.helpers.PYTHON2: self._logger.warn( 'Python 2.7 runtime is deprecated. ' 'Nuclio will drop support for Python 2.7 runtime as of version 1.6.0. ' 'Please migrate your code to Python 3.6')
def __init__(self, logger, loop, handler, socket_path, platform_kind, namespace=None, worker_id=None, trigger_kind=None, trigger_name=None, decode_event_strings=True): self._logger = logger self._socket_path = socket_path self._json_encoder = nuclio_sdk.json_encoder.Encoder() self._entrypoint = None self._processor_sock = None self._platform = nuclio_sdk.Platform(platform_kind, namespace=namespace) self._decode_event_strings = decode_event_strings # 1gb self._max_buffer_size = 1024 * 1024 * 1024 # holds the function that will be called self._entrypoint = self._load_entrypoint_from_handler(handler) self._is_entrypoint_coroutine = asyncio.iscoroutinefunction( self._entrypoint) # connect to processor self._processor_sock = self._connect_to_processor() # make a writeable file from processor self._processor_sock_wfile = self._processor_sock.makefile('w') # create msgpack unpacker self._unpacker = self._resolve_unpacker() # set event loop self._loop = loop # event deserializer kind (e.g.: msgpack_raw / json) self._event_deserializer_kind = self._resolve_event_deserializer_kind() # get handler module self._entrypoint_module = sys.modules[self._entrypoint.__module__] # create a context with logger and platform self._context = nuclio_sdk.Context( self._logger, self._platform, worker_id, nuclio_sdk.TriggerInfo(trigger_kind, trigger_name)) # replace the default output with the process socket self._logger.set_handler('default', self._processor_sock_wfile, JSONFormatterOverSocket())
def __init__(self, logger=None, platform=None, worker_id=None, trigger_name=None): self.platform = platform or nuclio_sdk.Platform('test') self.logger = logger self.user_data = lambda: None self.Response = nuclio_sdk.Response self.worker_id = worker_id self.trigger_name = trigger_name
def __init__(self, logger, handler, socket_path, platform_kind, namespace=None, worker_id=None, trigger_kind=None, trigger_name=None): self._logger = logger self._socket_path = socket_path self._json_encoder = nuclio_sdk.json_encoder.Encoder() self._entrypoint = None self._processor_sock = None self._platform = nuclio_sdk.Platform(platform_kind, namespace=namespace) # holds the function that will be called self._entrypoint = self._load_entrypoint_from_handler(handler) # connect to processor self._processor_sock = self._connect_to_processor() # make a writeable file from processor self._processor_sock_wfile = self._processor_sock.makefile('w') # since this wrapper is behind the nuclio processor, in which pre-handle the traffic & request # it is not mandatory to provide security over max buffer size. # the request limit should be handled on the processor level. self._unpacker = msgpack.Unpacker(raw=False, max_buffer_size=2**32-1) # get handler module entrypoint_module = sys.modules[self._entrypoint.__module__] # create a context with logger and platform self._context = nuclio_sdk.Context(self._logger, self._platform, worker_id, nuclio_sdk.TriggerInfo(trigger_kind, trigger_name)) # call init context if hasattr(entrypoint_module, 'init_context'): try: getattr(entrypoint_module, 'init_context')(self._context) except: self._logger.error('Exception raised while running init_context') raise # replace the default output with the process socket self._logger.set_handler('default', self._processor_sock_wfile, nuclio_sdk.logger.JSONFormatter()) # indicate that we're ready self._write_packet_to_processor('s')
def __init__(self, logger, handler, socket_path, platform_kind, namespace=None, worker_id=None, trigger_name=None): self._logger = logger self._socket_path = socket_path self._json_encoder = nuclio_sdk.json_encoder.Encoder() self._entrypoint = None self._processor_sock = None self._platform = nuclio_sdk.Platform(platform_kind, namespace=namespace) # holds the function that will be called self._entrypoint = self._load_entrypoint_from_handler(handler) # connect to processor self._processor_sock = self._connect_to_processor() # make a writeable file from processor self._processor_sock_wfile = self._processor_sock.makefile('w') self._unpacker = msgpack.Unpacker(raw=False, max_buffer_size=10 * 1024 * 1024) # get handler module entrypoint_module = sys.modules[self._entrypoint.__module__] # create a context with logger and platform self._context = nuclio_sdk.Context(self._logger, self._platform, worker_id, trigger_name) # call init context if hasattr(entrypoint_module, 'init_context'): try: getattr(entrypoint_module, 'init_context')(self._context) except: self._logger.warn_with( 'Exception raised while running init_context') raise # replace the default output with the process socket self._logger.set_handler('default', self._processor_sock_wfile, nuclio_sdk.logger.JSONFormatter()) # indicate that we're ready self._write_packet_to_processor('s')
def __init__(self, logger=None, platform=None, worker_id=None, trigger=None): self.platform = platform or nuclio_sdk.Platform('test') self.logger = logger self.user_data = lambda: None self.Response = nuclio_sdk.Response self.worker_id = worker_id self.trigger = trigger # for backwards compatibility if self.trigger is not None: self.trigger_name = self.trigger.name
def test_get_function_url(self): self.assertEqual(nuclio_sdk.Platform('local', 'ns')._get_function_url('function-name'), 'nuclio-ns-function-name:8080') self.assertEqual(nuclio_sdk.Platform('kube', 'ns')._get_function_url('function-name'), 'nuclio-function-name:8080')
def __init__(self, logger=None, platform=None): self.platform = platform or nuclio_sdk.Platform() self.logger = logger self.user_data = lambda: None self.Response = nuclio_sdk.Response