def mock_api_app_config(): return AppConfig( app=AppDescriptor( name='mock-app-api', version='test' ), plugins=[AppDescriptor( name='mock-plugin', version='test' )], engine=AppEngineConfig( import_modules=['mock_app'], read_stream_timeout=1, read_stream_interval=5, track_headers=['session_id'], cors_origin='http://test' ), events={ "mock-app-api-get": EventDescriptor( type=EventType.GET, auth=[AuthType.BASIC], route='mock-app-api/test/mock-app-api' ), "mock-app-api-post": EventDescriptor( type=EventType.POST, route='mock-app-api/test/mock-app-api' ), "mock-app-api-multipart": EventDescriptor( type=EventType.MULTIPART, route='mock-app-api/test/mock-app-api-multipart' ), "mock-app-api-get-list": EventDescriptor( type=EventType.GET, auth=[AuthType.REFRESH] ), "mock-app-api-query-args": EventDescriptor( type=EventType.GET, auth=[AuthType.REFRESH] ), "mock-app-noapi": EventDescriptor( type=EventType.GET ), "mock_file_response_content_type": EventDescriptor( type=EventType.GET ), }, server=ServerConfig( logging=LoggingConfig( log_level="DEBUG", log_path="work/logs/test/"), auth=AuthConfig( secrets_location='/tmp', auth_passphrase='test', default_auth_methods=[AuthType.BEARER] ), api=APIConfig( docs_path='/api/docs' ) ) )
def add_app_connections(nodes: Dict[str, Node], *, app_connections: Dict[str, AppConnection], events: Dict[str, EventDescriptor]): """ Add to nodes map, input/output ports for app_connections in order to show call dependencies between events. """ for event_name, event_info in events.items(): app_key = '.'.join(event_name.split('.', maxsplit=2)[0:2]) source_node = nodes[event_name] if source_node: for conn in event_info.connections: app_connection = app_connections[ f"{app_key}.{conn.app_connection}"] target_app_key = AppDescriptor( name=app_connection.name, version=app_connection.version).app_key() dest_node_name = f"{target_app_key}." if app_connection.plugin_name: dest_node_name += auto_path( app_connection.plugin_name, app_connection.plugin_version or app_connection.version) + '.' dest_node_name += f"{conn.event}.{conn.type.value}" dest_node = nodes.get(dest_node_name) if dest_node: port = f"{event_name}.{app_connection.name}.{conn.event}.{conn.type.value}" source_node.outputs.append(port) dest_node.inputs.append(port)
def _get_route(self, event_name: str): """ Builds the route to an event endpoint based on app + plugin configs. Overrides in case app_connection settins specifies so. """ app_descriptor = AppDescriptor(name=self.app_connection.name, version=self.app_connection.version) plugin_descriptor = None if self.app_connection.plugin_name: plugin_descriptor = AppDescriptor( name=self.app_connection.plugin_name, version=self.app_connection.plugin_version or self.app_connection.version) return app_route_name( app_descriptor, event_name=event_name, plugin=plugin_descriptor, override_route_name=self.settings.routes_override.get(event_name))
def mock_app_config(): return AppConfig( app=AppDescriptor(name='test_app', version='test'), engine=AppEngineConfig(), env={}, events={'test': EventDescriptor(type=EventType.GET)}, server=ServerConfig(auth=AuthConfig(secrets_location='/tmp', auth_passphrase='test', create_keys=True)))
def test_context() -> EventContext: app_config = AppConfig( app=AppDescriptor(name='test_steps', version='test_version'), events={'test_steps': EventDescriptor(type=EventType.POST)} ) return EventContext( app_config=app_config, plugin_config=app_config, event_name='test_steps', track_ids={}, auth_info={} )
def test_context() -> EventContext: app_config = AppConfig( app=AppDescriptor(name='test_steps', version='test_version'), events={'test_steps': EventDescriptor(type=EventType.POST)} ).setup() return EventContext( app_config=app_config, plugin_config=app_config, event_name='test_steps', settings=get_event_settings(app_config.effective_settings, 'test_steps'), track_ids={}, auth_info={} )
def mock_plugin_config(): return AppConfig(app=AppDescriptor(name='mock_plugin', version='test'), env={ 'plugin': { 'plugin_value': 'test_plugin_value', 'custom_value': 'test_custom_value' } }, events={ 'plugin_event': EventDescriptor(type=EventType.GET, plug_mode=EventPlugMode.ON_APP) }, server=ServerConfig(logging=LoggingConfig( log_level="DEBUG", log_path="work/logs/test/")))
def mock_client_app_config(): return AppConfig( app=AppDescriptor(name='mock_client_app', version='test'), engine=AppEngineConfig(import_modules=['mock_app'], read_stream_timeout=1, read_stream_interval=5), events={ "mock_event": EventDescriptor(type=EventType.GET, route='mock-client-app/test/mock-event-test') }, server=ServerConfig( streams=StreamsConfig( stream_manager='mock_engine.MockStreamManager', delay_auto_start_seconds=0), logging=LoggingConfig(log_level="DEBUG", log_path="work/logs/test/"))).setup()
def mock_client_app_config(): return AppConfig( app=AppDescriptor(name='mock_client_app', version='test'), engine=AppEngineConfig(import_modules=['mock_client_app']), app_connections={ "test_app_connection": AppConnection(name="test_app", version=APPS_API_VERSION, client="hopeit.apps_client.AppsClient"), "test_app_plugin_connection": AppConnection(name="test_app", version=APPS_API_VERSION, client="hopeit.apps_client.AppsClient", plugin_name="test_plugin", plugin_version=APPS_API_VERSION) }, settings={ "test_app_connection": Payload.to_obj( AppsClientSettings( connection_str="http://test-host1,http://test-host2")), "test_app_plugin_connection": Payload.to_obj( AppsClientSettings( connection_str="http://test-host1,http://test-host2", auth_strategy=ClientAuthStrategy.FORWARD_CONTEXT)) }, events={ "mock_client_event": EventDescriptor( type=EventType.GET, connections=[ EventConnection(app_connection="test_app_connection", event="test_event_get", type=EventConnectionType.GET), EventConnection(app_connection="test_app_connection", event="test_event_post", type=EventConnectionType.POST), EventConnection( app_connection="test_app_plugin_connection", event="test_event_plugin", type=EventConnectionType.GET) ]) }, server=ServerConfig(logging=LoggingConfig( log_level="DEBUG", log_path="work/logs/test/"))).setup()
def mock_client_app_config(): return AppConfig( app=AppDescriptor(name='mock_client_app', version='test'), engine=AppEngineConfig(import_modules=['mock_client_app']), app_connections={ "test_app_connection": AppConnection(name="test_app", version=APPS_API_VERSION, client="mock_client_app.MockClient") }, events={ "mock_client_event": EventDescriptor(type=EventType.GET, connections=[ EventConnection( app_connection="test_app_connection", event="test_event", type=EventConnectionType.GET) ]) }, server=ServerConfig(logging=LoggingConfig( log_level="DEBUG", log_path="work/logs/test/"))).setup()
def valid_result_app_config() -> AppConfig: return AppConfig( app=AppDescriptor(name="simple_example", version=APPS_API_VERSION), engine=AppEngineConfig(import_modules=["model"], read_stream_timeout=1, track_headers=["request_id", "correlation_id"]), env={ "fs": { "data_path": f"/tmp/simple_example.{APP_VERSION}.fs.data_path/", "app_description": f"This is simple_example version {APPS_API_VERSION}", "recursive_replacement": f"Data is in /tmp/simple_example.{APP_VERSION}.fs.data_path/. " + f"This is simple_example version {APPS_API_VERSION}" } }, events={ "query_something": EventDescriptor(type=EventType.GET), "save_something": EventDescriptor(type=EventType.POST), "streams.something_event": EventDescriptor( type=EventType.POST, write_stream=WriteStreamDescriptor( name=f'simple_example.{APP_VERSION}.streams.something_event' )), "streams.process_events": EventDescriptor( type=EventType.STREAM, read_stream=ReadStreamDescriptor( name= f'simple_example.{APP_VERSION}.streams.something_event', consumer_group= f'simple_example.{APP_VERSION}.streams.process_events'), config=EventConfig(logging=EventLoggingConfig( extra_fields=['something_id', 'path']))) })
def mock_app_config(): return AppConfig( app=AppDescriptor(name='mock_app', version='test'), plugins=[AppDescriptor('mock_plugin', 'test')], engine=AppEngineConfig(import_modules=['mock_app'], read_stream_timeout=1, read_stream_interval=5, track_headers=['session_id'], cors_origin='http://test'), env={ 'app': { 'app_value': 'test_app_value' }, 'plugin': { 'custom_value': 'test_custom_value_override' } }, settings={ "mock_stream_event": { "logging": { "extra_fields": ['value'], "stream_fields": ['msg_id'] }, "custom_setting": { "custom": "value" } }, "mock_stream_timeout": { "logging": { "extra_fields": ['value'], "stream_fields": ['msg_id'] }, "stream": { "timeout": 2 } }, "mock_write_stream_event": { "logging": { "extra_fields": ['value'], "stream_fields": ['msg_id'] }, "stream": { "target_max_len": 10 } }, "mock_service_event": { "stream": { "target_max_len": 10, "throttle_ms": 100, "batch_size": 2 } }, "mock_service_timeout": { "response_timeout": 2.0 }, "mock_spawn_event": { "stream": { "target_max_len": 10, "throttle_ms": 100, "batch_size": 2 } }, "mock_shuffle_event": { "stream": { "target_max_len": 10, "throttle_ms": 100 } }, "mock_timeout": { "response_timeout": 2.0 }, "custom_extra_settings": { "custom_setting": { "custom": "value" } } }, events={ "mock_event": EventDescriptor(type=EventType.GET, route='mock-app/test/mock-event-test', group='GROUP_A'), "mock_event_logging": EventDescriptor(type=EventType.GET, group='GROUP_A'), "mock_post_event": EventDescriptor(type=EventType.POST, route='mock-app/test/mock-event-test', group='GROUP_A'), "mock_multipart_event": EventDescriptor(type=EventType.MULTIPART, route='mock-app/test/mock-multipart-event-test', group='GROUP_B'), "mock_post_nopayload": EventDescriptor(type=EventType.POST, route='mock-app/test/mock-post-nopayload'), "mock_post_preprocess": EventDescriptor(type=EventType.POST, route='mock-app/test/mock-post-preprocess'), "mock_post_preprocess_no_datatype": EventDescriptor( type=EventType.POST, route='mock-app/test/mock-post-preprocess-no-datatype'), "mock_stream_event": EventDescriptor(type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_stream', consumer_group='mock_consumer_group'), setting_keys=["custom_extra_settings"], group='GROUP_A'), "mock_stream_timeout": EventDescriptor(type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_stream', consumer_group='mock_consumer_group'), group='GROUP_B'), "mock_write_stream_event": EventDescriptor(type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event')), "mock_service_event": EventDescriptor(type=EventType.SERVICE, write_stream=WriteStreamDescriptor( name='mock_write_stream_event')), "mock_service_timeout": EventDescriptor(type=EventType.SERVICE, write_stream=WriteStreamDescriptor( name='mock_write_stream_event')), "mock_spawn_event": EventDescriptor(type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event')), "mock_shuffle_event": EventDescriptor(type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event')), "mock_parallelize_event": EventDescriptor(type=EventType.GET), "mock_file_response": EventDescriptor(type=EventType.GET), "mock_stream_response": EventDescriptor(type=EventType.GET), "mock_file_response_content_type": EventDescriptor(type=EventType.GET), "mock_auth": EventDescriptor(type=EventType.GET, auth=[AuthType.BASIC]), "mock_post_auth": EventDescriptor(type=EventType.POST, auth=[AuthType.BASIC]), "mock_collector": EventDescriptor(type=EventType.POST), 'mock_timeout': EventDescriptor(type=EventType.GET), 'mock_read_write_stream': EventDescriptor(type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_read_write_stream.read', consumer_group='mock_read_write_stream'), write_stream=WriteStreamDescriptor( name='mock_read_write_stream.write')), "mock_event_custom": EventDescriptor(type=EventType.GET, impl="mock_app.mock_event_custom_impl"), "mock_event_dataobject_payload": EventDescriptor( type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_read_write_stream.read', consumer_group='mock_event_dataobject_payload'), dataobjects=["mock_app.MockData"]) }, server=ServerConfig( streams=StreamsConfig( stream_manager='mock_engine.MockStreamManager', delay_auto_start_seconds=0), logging=LoggingConfig(log_level="DEBUG", log_path="work/logs/test/"))).setup()
def mock_app_config(): return AppConfig( app=AppDescriptor( name='mock_app', version='test' ), plugins=[ AppDescriptor('mock_plugin', 'test') ], engine=AppEngineConfig( import_modules=['mock_app'], read_stream_timeout=1, read_stream_interval=5, track_headers=['session_id'], cors_origin='http://test' ), env={ 'app': { 'app_value': 'test_app_value' }, 'plugin': { 'custom_value': 'test_custom_value_override' } }, events={ "mock_event": EventDescriptor( type=EventType.GET, route='mock-app/test/mock-event-test' ), "mock_event_logging": EventDescriptor( type=EventType.GET ), "mock_post_event": EventDescriptor( type=EventType.POST, route='mock-app/test/mock-event-test' ), "mock_multipart_event": EventDescriptor( type=EventType.MULTIPART, route='mock-app/test/mock-multipart-event-test' ), "mock_post_nopayload": EventDescriptor( type=EventType.POST, route='mock-app/test/mock-post-nopayload' ), "mock_post_preprocess": EventDescriptor( type=EventType.POST, route='mock-app/test/mock-post-preprocess' ), "mock_stream_event": EventDescriptor( type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_stream', consumer_group='mock_consumer_group' ), config=EventConfig( logging=EventLoggingConfig( extra_fields=['value'], stream_fields=['msg_id'] ) ) ), "mock_stream_timeout": EventDescriptor( type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_stream', consumer_group='mock_consumer_group' ), config=EventConfig( logging=EventLoggingConfig( extra_fields=['value'], stream_fields=['msg_id'] ), stream=EventStreamConfig( timeout=2 ) ) ), "mock_write_stream_event": EventDescriptor( type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event' ), config=EventConfig( stream=EventStreamConfig( target_max_len=10 ) ) ), "mock_service_event": EventDescriptor( type=EventType.SERVICE, write_stream=WriteStreamDescriptor( name='mock_write_stream_event' ), config=EventConfig( stream=EventStreamConfig( target_max_len=10, throttle_ms=100, batch_size=2 ) ) ), "mock_service_timeout": EventDescriptor( type=EventType.SERVICE, write_stream=WriteStreamDescriptor( name='mock_write_stream_event' ), config=EventConfig( response_timeout=2.0 ) ), "mock_spawn_event": EventDescriptor( type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event' ), config=EventConfig( stream=EventStreamConfig( target_max_len=10, throttle_ms=100, batch_size=2 ) ) ), "mock_shuffle_event": EventDescriptor( type=EventType.GET, write_stream=WriteStreamDescriptor( name='mock_write_stream_event' ), config=EventConfig( stream=EventStreamConfig( target_max_len=10, throttle_ms=100 ) ) ), "mock_parallelize_event": EventDescriptor( type=EventType.GET ), "mock_file_response": EventDescriptor( type=EventType.GET ), "mock_file_response_content_type": EventDescriptor( type=EventType.GET ), "mock_auth": EventDescriptor( type=EventType.GET, auth=[AuthType.BASIC] ), "mock_post_auth": EventDescriptor( type=EventType.POST, auth=[AuthType.BASIC] ), "mock_collector": EventDescriptor( type=EventType.POST ), 'mock_timeout': EventDescriptor( type=EventType.GET, config=EventConfig(response_timeout=2.0) ), 'mock_read_write_stream': EventDescriptor( type=EventType.STREAM, read_stream=ReadStreamDescriptor( name='mock_read_write_stream.read', consumer_group='mock_read_write_stream' ), write_stream=WriteStreamDescriptor( name='mock_read_write_stream.write' ) ) }, server=ServerConfig( streams=StreamsConfig( stream_manager='mock_engine.MockStreamManager', delay_auto_start_seconds=0 ), logging=LoggingConfig( log_level="DEBUG", log_path="work/logs/test/") ) )