def mock_application(service_name=None): service_name = service_name or os.getcwd().split("/")[-1].split("-")[-1] config = importlib.import_module(f"{service_name}.config") # service_settings = {c: getattr(config, c) for c in dir(config) if c.isupper()} # service_settings.update({"INIESTA_DRY_RUN": True}) config.INIESTA_DRY_RUN = True new_settings = LazySettings() new_settings.configure(config) Iniesta.load_config(new_settings) class Dummy: config = None dummy = Dummy() dummy.config = new_settings with open(f"{service_name}/app.py", "r") as file: for line in file: if "Insanic(" in line: variable_name = line.split("=")[0].strip() exec(f"{variable_name} = dummy") elif line.startswith("Iniesta."): exec(line) break return dummy
async def insanic_application_with_event_polling(self, monkeypatch, insanic_application, create_global_sns, filter_policy): monkeypatch.setattr( settings, "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN", create_global_sns["TopicArn"], raising=False, ) monkeypatch.setattr( settings, "INIESTA_INITIALIZATION_TYPE", ["SNS_PRODUCER"], raising=False, ) from iniesta import Iniesta Iniesta.init_app(insanic_application) client = await SNSClient.initialize( topic_arn=create_global_sns["TopicArn"]) class TestView(InsanicView): permission_classes = [] @client.publish_event(event="testEvent") def get(self, request, *args, **kwargs): return json_response({"help": "me"}) insanic_application.add_route(TestView.as_view(), "/tests/event/") return insanic_application
def sqs_client(self, insanic_application, create_service_sqs): Iniesta.load_config(insanic_application.config) SQSClient.queue_urls = { SQSClient.default_queue_name(): create_service_sqs["QueueUrl"] } sqs_client = SQSClient() return sqs_client
async def test_insanic_run_sns_not_set( self, insanic_application, test_server, monkeypatch ): monkeypatch.setattr( settings, "INIESTA_INITIALIZATION_TYPE", ["EVENT_POLLING", "SNS_PRODUCER"], raising=False, ) with pytest.raises(ImproperlyConfigured) as exc_info: Iniesta.init_app(insanic_application) await test_server(insanic_application) assert "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN" in str(exc_info.value)
def send(message): # TODO: documentation for read me Iniesta.load_config(settings) message = message or {} loop = asyncio.get_event_loop() sqs_client = loop.run_until_complete(SQSClient.initialize()) message = sqs_client.create_message(message=message) loop.run_until_complete(message.send()) click.echo("Message Sent") click.echo(f"MessageId: {message.message_id}") Iniesta.unload_config(settings)
def test_init_app_invalid_choice( self, monkeypatch, insanic_application, invalid_initialization_types, set_sns_arn, ): monkeypatch.setattr( settings, "INIESTA_INITIALIZATION_TYPE", invalid_initialization_types, raising=False, ) with pytest.raises(ImproperlyConfigured): Iniesta.init_app(insanic_application)
def test_trying_to_initialize_more_than_once( self, insanic_application, set_sns_arn, initialization_types, monkeypatch, ): monkeypatch.setattr( settings, "INIESTA_INITIALIZATION_TYPE", initialization_types, raising=False, ) Iniesta.init_app(insanic_application) if initialization_types != (): with pytest.raises( ImproperlyConfigured, match="Iniesta has already been initialized!", ): Iniesta.init_app(insanic_application) else: assert Iniesta.initialization_type == 0 Iniesta.init_app(insanic_application)
def publish(event, message, version): # TODO: documentation for read me # app = mock_application() loop = asyncio.get_event_loop() Iniesta.load_config(settings) version = version or 1 message = message or {} sns_client = SNSClient() message = sns_client.create_message(event=event, message=message, version=version, raw_event=True) # message.add_event(event, raw=True) result = loop.run_until_complete(message.publish()) if result["ResponseMetadata"]["HTTPStatusCode"] == 200: click.echo("Publish Success!") else: click.echo("Publish Failed!") click.echo("\n") click.echo("REQUEST INFO") click.echo(f"Message Event : {message.event}") click.echo(f"Message Data : {message.message}") click.echo(f"Full Payload : {message}") click.echo(f"Message Length : {message.size}") click.echo("\n") click.echo("RESPONSE INFO") click.echo(f"Message ID : {result['MessageId']}") click.echo( f"Message Length : {result['ResponseMetadata']['HTTPHeaders']['content-length']}" ) Iniesta.unload_config(settings)
async def test_insanic_run_bad_topic_arn( self, insanic_application, test_server, topic_arn, init_method_name, monkeypatch, ): monkeypatch.setattr( settings, "INIESTA_INITIALIZATION_TYPE", ["EVENT_POLLING", "SNS_PRODUCER"], raising=False, ) monkeypatch.setattr( settings, "INIESTA_SNS_PRODUCER_GLOBAL_TOPIC_ARN", topic_arn ) Iniesta.init_app(insanic_application) with pytest.raises(botocore.exceptions.ClientError) as exc_info: await test_server(insanic_application) assert exc_info
def load_configs(self): Iniesta.load_config(settings)