notora
Shared base logic used across AldanDev projects.
- v1 (legacy):
notora.v1 - v2 (next-gen toolkit):
notora.v2
v2 quickstart
from notora.v2.repositories import Repository, RepoConfig
from notora.v2.services import RepositoryService, ServiceConfig
repo = Repository(
User,
config=RepoConfig(default_limit=50),
)
service = RepositoryService(
repo,
config=ServiceConfig(detail_schema=UserSchema, list_schema=UserListSchema),
)
v2 docs
docs/v2/index.mddocs/v2/models.mddocs/v2/repositories.mddocs/v2/services.mddocs/v2/query-dsl.mddocs/v2/pagination.mddocs/v2/m2m.mddocs/v2/recipes.md
Listing and pagination
from notora.v2.repositories import QueryParams, PaginationParams
rows = await service.list_raw(
session,
limit=None, # no limit
)
params = QueryParams(filters=[...], ordering=[...], limit=None)
rows = await service.list_raw_params(session, params)
page = await service.paginate_params(
session,
PaginationParams(limit=20, offset=0, filters=[...]),
)
Repository/service factories
from notora.v2.repositories import build_repository, RepoConfig
from notora.v2.services import build_service, ServiceConfig
repo = build_repository(User, config=RepoConfig(default_limit=25))
service = build_service(User, repo=repo, service_config=ServiceConfig(detail_schema=UserSchema))
Query DSL (FastAPI-friendly)
from fastapi import Depends
from notora.v2.repositories import (
FilterField,
QueryParams,
QueryInput,
SortField,
build_query_params,
make_query_params_dependency,
)
filter_fields = {
'name': FilterField(resolver=lambda m: m.name, value_type=str),
'age': FilterField(resolver=lambda m: m.age, value_type=int, operators={'eq', 'gte', 'lte'}),
}
sort_fields = {
'name': SortField(resolver=lambda m: m.name),
'created_at': SortField(resolver=lambda m: m.created_at),
}
def query_params(query: QueryInput = Depends()) -> QueryParams[User]:
return build_query_params(
query,
model=User,
filter_fields=filter_fields,
sort_fields=sort_fields,
)
query_params_dep = make_query_params_dependency(
model=User,
filter_fields=filter_fields,
sort_fields=sort_fields,
)
# Example request:
# /users?filter=name:eq:john&filter=age:gte:18&sort=-created_at&limit=20&offset=0
Supported operators: eq, ne, lt, lte, gt, gte, in, ilike, isnull.
M2M sync modes
from notora.v2.services import M2MSyncMode
class UserService(RepositoryService[UUID, User, UserSchema]):
m2m_sync_mode: M2MSyncMode = M2MSyncMode.ADD
Metadata
Release files for notora 0.18.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| notora-0.18.1.tar.gz | 165.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| notora-0.18.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 220.4 kB
Release files / notora-0.18.1.tar.gz
| Download URL | notora-0.18.1.tar.gz |
|---|---|
| Size | 165.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60cc0f5302f97556c762af39243c4811d7df20ba6fa9788bc09fa836ac3ec680
|
|
BLAKE2b-256 checksum How to use checksums |
ce0c75d68d2191d61912df5064f7aaa07523b3195a7a8140cae341db8456de6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / notora-0.18.1-py3-none-any.whl
| Download URL | notora-0.18.1-py3-none-any.whl |
|---|---|
| Size | 55.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c422c8c52135c2d9edd025660afd5e9a2b0cc42b9cdbff49fa49e76eef1f53c
|
|
BLAKE2b-256 checksum How to use checksums |
e72b4162fe4f0c48a6ac0ff940f223cbc8b158153bd9af7bbc925301440dd7e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|