Communicates with databases using repository pattern and service patterns
Project description
dbdaora
Communicates with NoSQL (and SQL for future) databases using repository and service patterns and python dataclasses
Documentation: https://dutradda.github.io/dbdaora/
Source Code: https://github.com/dutradda/dbdaora
Key Features
-
Creates an optional service layer with cache and circuit breaker
-
Supports for redis data types:
- Hash
- Sorted Set
- (Others data types are planned)
-
Backup redis data into other databases:
- Google Datastore
- Mongodb (soon)
- SQL databases with SQLAlchemy (soon)
- (Others data bases are planned)
-
Support for other databases are in development.
Requirements
-
Python 3.8+
-
jsondaora for data validation/parsing
-
circuitbreaker
-
cachetools
-
Optionals:
- aioredis
- google-cloud-datastore
Instalation
$ pip install dbdaora
Simple redis hash example
import asyncio
from dataclasses import dataclass
from dbdaora import (
DictFallbackDataSource,
DictMemoryDataSource,
HashRepository,
)
@dataclass
class Person:
id: str
name: str
age: int
def make_person(name: str, age: int) -> Person:
return Person(name.replace(' ', '_').lower(), name, age)
class PersonRepository(HashRepository[str]):
entity_cls = Person
key_attrs = ('id',)
repository = PersonRepository(
memory_data_source=DictMemoryDataSource(),
fallback_data_source=DictFallbackDataSource(),
expire_time=60,
)
person = make_person('John Doe', 33)
asyncio.run(repository.add(person))
geted_person = asyncio.run(repository.query(person.id).entity)
print(geted_person)
Person(id='john_doe', name='John Doe', age=33)
Simple redis sorted set example
import asyncio
from dbdaora import (
DictFallbackDataSource,
DictMemoryDataSource,
SortedSetEntity,
SortedSetRepository,
)
class PlaylistRepository(SortedSetRepository[str]):
...
repository = PlaylistRepository(
memory_data_source=DictMemoryDataSource(),
fallback_data_source=DictFallbackDataSource(),
expire_time=60,
)
values = [('m1', 1), ('m2', 2), ('m3', 3)]
playlist = SortedSetEntity(id='my_plalist', values=values)
asyncio.run(repository.add(playlist))
geted_playlist = asyncio.run(repository.query(playlist.id).entity)
print(geted_playlist)
SortedSetEntity(id='my_plalist', values=[b'm1', b'm2', b'm3'], max_size=None)
Using the service layer
The service layer uses the backup dataset when redis is offline, opening a circuit breaker.
It has an optional cache system too.
import asyncio
from dataclasses import dataclass
from dbdaora import (
DictFallbackDataSource,
DictMemoryDataSource,
HashRepository,
make_hash_service,
)
@dataclass
class Person:
id: str
name: str
age: int
def make_person(name: str, age: int) -> Person:
return Person(name.replace(' ', '_').lower(), name, age)
class PersonRepository(HashRepository[str], entity_cls=Person):
...
async def make_memory_data_source() -> DictMemoryDataSource:
return DictMemoryDataSource()
async def make_fallback_data_source() -> DictFallbackDataSource:
return DictFallbackDataSource()
service = asyncio.run(
make_hash_service(
PersonRepository,
memory_data_source_factory=make_memory_data_source,
fallback_data_source_factory=make_fallback_data_source,
repository_expire_time=60,
)
)
person = make_person('John Doe', 33)
asyncio.run(service.add(person))
geted_person = asyncio.run(service.get_one(person.id))
print(geted_person)
Person(id='john_doe', name='John Doe', age=33)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dbdaora-0.20.0.tar.gz
.
File metadata
- Download URL: dbdaora-0.20.0.tar.gz
- Upload date:
- Size: 28.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.23.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64642b71793fa741b9e7953097c98d6597b820fc9ed5fb651442afa881e50994 |
|
MD5 | cc2117c326c72d79963a829d6519dad0 |
|
BLAKE2b-256 | 2bf98baff640d534a51fe5dfbe89ab7cba2323ab8f80d921ebf5ad37d1deb69f |
File details
Details for the file dbdaora-0.20.0-py3-none-any.whl
.
File metadata
- Download URL: dbdaora-0.20.0-py3-none-any.whl
- Upload date:
- Size: 44.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.23.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | da009a826aa39dfc944d31103a5ef4452f7e06b1bdf6edee7218af7502a508c2 |
|
MD5 | f9082f91b21f6dd9ba15ae20fb690004 |
|
BLAKE2b-256 | b7d79ca39363f7feded949d005f4a9f2eb07bb4419549d3685384a20408acdb9 |