Skip to main content

Shared base logic used across AldanDev projects.

Project description

PyPI - Python Version PyPI version

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.md
  • docs/v2/models.md
  • docs/v2/repositories.md
  • docs/v2/services.md
  • docs/v2/query-dsl.md
  • docs/v2/pagination.md
  • docs/v2/m2m.md
  • docs/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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notora-0.1.0.tar.gz (96.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notora-0.1.0-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file notora-0.1.0.tar.gz.

File metadata

  • Download URL: notora-0.1.0.tar.gz
  • Upload date:
  • Size: 96.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","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}

File hashes

Hashes for notora-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4967b01ebb98e539b32cf35f65f158e82418b4f95d5d4839bc6a6007160bf6e4
MD5 22a274ad2370119080ac69fc9c24bf2c
BLAKE2b-256 7f69f8e4364b053f01f77a04d9bc9f58fa91f18a472e200cc6a29459496adaec

See more details on using hashes here.

File details

Details for the file notora-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: notora-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 42.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","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}

File hashes

Hashes for notora-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3e08c7e7ad4d0afee1f8295d953cf43fe04e6d0b5efea8f708dcf757ec0e7045
MD5 4a83f2144ba76913806e619c38986359
BLAKE2b-256 79796289286c911c6b5c8ad980d2c25814ddfe0e8cb5b551ff5694ed6846e00f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page