Example #1
0
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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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)
Example #5
0
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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
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)
Example #9
0
    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
Example #10
0
 def load_configs(self):
     Iniesta.load_config(settings)