示例#1
0
def update(event, context):
    """Update item in the collection."""

    try:

        # Determine if required env var for region is present.
        val.check_region()

        # Determine if required env var for DynamoDB table is present.
        val.check_dynamodb()

        # Check for the url {id}.
        note_id = val.check_id(event)

        # Determine if required property body is present.
        val.check_body(event)

        # Attempt to parse JSON.
        data = val.check_json(event)

        # Determine if required properties are present.
        val.check_props(data)

        # Set up resource and environment. This is where we keep
        # *aaS provider resources away from biz logic.
        region = os.environ["AWS_DEFAULT_REGION"]
        table = os.environ["DYNAMODB_TABLE"]

        # Determine which DynamoDB host we need (local/remote)?
        host = val.check_dynamodb_host()
        conn = boto3.resource("dynamodb", region, endpoint_url=host)
        conn_table = conn.Table(table)

        # Build our model and update.
        note = NoteModel(conn_table)
        item = note.update(note_id, data)

        logger.info("Note updated: {}".format(item))
        return respond(200, item)

    except ex.AwsRegionNotSetException as exc:
        return respond(500, {"error": str(exc)})

    except ex.DynamoDbTableNotSetException as exc:
        return respond(500, {"error": str(exc)})

    except ex.RequestUrlIdNotSetException as exc:
        return respond(400, {"error": str(exc)})

    except ex.RequestBodyNotSetException as exc:
        return respond(400, {"error": str(exc)})

    except ex.RequestBodyNotJsonException as exc:
        return respond(400, {"error": str(exc)})

    except ex.RequiredPropertiesNotSetException as exc:
        return respond(400, {"error": str(exc)})

    except Exception as exc:
        return respond(500, {"error": str(exc)})
示例#2
0
def test_raises_exception_when_env_var_dynamodb_not_found(monkeypatch, config):
    with pytest.raises(ex.DynamoDbTableNotSetException) as exc:
        monkeypatch.delenv("DYNAMODB_TABLE", raising=False)
        
        monkeypatch.setenv("AWS_DEFAULT_REGION", config["aws"]["region"])
        val.check_dynamodb()

    assert "'DYNAMODB_TABLE'" in str(exc.value)
示例#3
0
def search_by_notebook(event, context):
    """Return the collection of items based on query."""

    try:

        # Determine if required env var for region is present.
        val.check_region()

        # Determine if required env var for DynamoDB table is present.
        val.check_dynamodb()

        # Check for the url {id}.
        notebook = val.check_id(event)

        # Set up resource and environment. This is where we keep
        # *aaS provider resources away from biz logic.
        region = os.environ["AWS_DEFAULT_REGION"]
        table = os.environ["DYNAMODB_TABLE"]

        # Determine which DynamoDB host we need (local/remote)?
        host = val.check_dynamodb_host()
        conn = boto3.resource("dynamodb", region, endpoint_url=host)
        conn_table = conn.Table(table)

        # Build our model and read.
        note = NoteModel(conn_table)
        items = note.search_by_notebook(notebook)

        logger.info("Notes for notebook found: {} [{}]".format(
            notebook, len(items)))
        return respond(200, items)

    except ex.AwsRegionNotSetException as exc:
        return respond(500, {"error": str(exc)})

    except ex.DynamoDbTableNotSetException as exc:
        return respond(500, {"error": str(exc)})

    except ex.RequestUrlIdNotSetException as exc:
        return respond(400, {"error": str(exc)})

    except Exception as exc:
        return respond(500, {"error": str(exc)})