Beispiel #1
0
def setup(queues: Union[List[str], List[dict]], **kwargs):
    queues = [
        {"QueueName": queue, **kwargs} if isinstance(queue, str) else queue
        for queue in queues
    ]

    def _dlq_name(queue_name):
        return f"{queue_name}-dlq"

    # Find queues that need a DLQ created by checking for RedrivePolicy=None
    redrive_key = ["Attributes", "RedrivePolicy"]

    # Create DLQs
    dlqs_to_create = [
        {"QueueName": _dlq_name(q["QueueName"])}
        for q in queues
        if isinstance(mdict.get_nested(q, redrive_key, None), dict)
    ]
    dlqs = create_queues(dlqs_to_create)

    # Update redrive policies with ARNs of DLQs
    defaults = {"maxReceiveCount": 1}
    policy = mdict.get_nested(kwargs, redrive_key, {})
    for q in queues:
        if isinstance(mdict.get_nested(q, redrive_key, None), dict):
            name = q["QueueName"]
            new_policy = {
                **defaults,
                **policy,
                "deadLetterTargetArn": dlqs[_dlq_name(name)].arn,
            }
            mdict.set_nested(
                q, redrive_key, json.dumps(new_policy),
            )
    return {"queues": create_queues(queues)}
def create_table(TableName: str, **kwargs):
    kwargs.update({"BillingMode": "PAY_PER_REQUEST"})
    resp = utils.call(boto3.client("dynamodb").create_table,
                      TableName=TableName,
                      **kwargs)
    name = mdict.get_nested(resp, ["TableDescription", "TableName"])
    arn = mdict.get_nested(resp, ["TableDescription", "TableArn"])
    return DynamoDBTable(name=name, arn=arn, response=resp)
Beispiel #3
0
def check_status(response,
                 code=2,
                 keys=["ResponseMetadata", "HTTPStatusCode"]):
    """Check status of an AWS API response."""
    status = mindictive.get_nested(response, keys)
    assert status // 100 == code
    return status
Beispiel #4
0
def get_queue_arn(queue_url):
    return mindictive.get_nested(
        utils.call(
            boto3.client("sqs").get_queue_attributes,
            QueueUrl=queue_url,
            AttributeNames=["QueueArn"],
        ),
        ["Attributes", "QueueArn"],
    )
 def test_get_raises(self, fixture_name, fixture):
     with pytest.raises(fixture["raises"]):
         mindictive.get_nested(fixture["obj"], **fixture["kwargs"])
 def test_get(self, fixture_name, fixture):
     val = mindictive.get_nested(fixture["obj"], **fixture["kwargs"])
     if "type" in fixture:
         assert isinstance(val, fixture["type"])
     assert val == fixture["output"]