Skip to content

TatchNicolas/pynamodb-in-pytest

Repository files navigation

PynamoDB and DynamoDB Local in Pytest

PynamoDB requires some parameters in metaclass of its models which are in fact irrelevant when running tests with DynamoDB Local.

This repo shows a small trick to avoid having unnecessary if clauses in PynamoDB model definition by using Python's built-in setattr function.

@pytest.fixture(scope="function")
def user_repo() -> Iterable[UserRepo]:

    repo: UserRepo = UserRepo()

    model_meta_class = getattr(repo.model, "Meta")
    setattr(model_meta_class, "host", DDB_LOCAL_HOST)
    setattr(model_meta_class, "billing_mode", "PAY_PER_REQUEST")
    setattr(model_meta_class, "table_name", "user_table_for_test")
    # or
    # setattr(model_meta_class, "read_capacity_units", 1)
    # setattr(model_meta_class, "write_capacity_units", 1)

    by_group_meta_class = getattr(repo.model.by_group, "Meta")
    setattr(by_group_meta_class, "host", DDB_LOCAL_HOST)

    repo.model.create_table(wait=True)

    yield repo
    # Delete table after running a test function
    repo.model.delete_table()

See it in action

docker-compose up -d
docker-compose exec app pytest

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published