示例#1
0
    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)
示例#2
0
    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')
示例#3
0
    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')
示例#4
0
    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())
示例#5
0
 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
示例#6
0
    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')
示例#7
0
    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')
示例#8
0
    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
示例#9
0
 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')
示例#10
0
 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