Framework based on FastAPI.
Project description
from typing import Self
UltraFramework
Description
Framework for FastAPI inspired by Java Spring.
- It exposes a base entity class SQLEntity that can be derived in order to define custom entities.
- It exposes a base repository class CRUDRepository[M] that can be derived in order to define custom repositories. The following public methods are available:
- save(entity: M): M
- save_many(entities: list[M]): list[M]
- find_all(limit: int | None, offset: int | None): Iterable[M]
- delete(entity: M): None
Example:
from typing import Self, Annotated
from sqlalchemy import create_engine, DDL
from sqlalchemy.orm import mapped_column, Mapped, Session
from sqlalchemy.sql.elements import ColumnElement
from ultra_framework.entities.sql_entity import SQLEntity
from ultra_framework.repositories.crud_repository import CRUDRepository
from ultra_framework.repositories.base_repository_factory import BaseRepositoryFactory
from ultra_framework.utils.dependencies import session_dependency
from ultra_framework.database.session_factory import SessionFactory
engine = create_engine("sqlite:///", connect_args={"check_same_thread": False})
conn = engine.connect()
conn.execute(DDL("""create table users (
id integer primary key,
name text
)"""))
conn.close()
session_factory = SessionFactory(engine)
class UserEntity(SQLEntity):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
@classmethod
def by_id(cls, idx: int) -> ColumnElement[bool]:
return cls.id == idx
class UserRepository(CRUDRepository[UserEntity]):
entity_class = UserEntity
def find_by_id(self, idx: int) -> UserEntity:
return self.filter_by_conditions([UserEntity.by_id(idx)]).one()
class RepositoryFactory(BaseRepositoryFactory):
repository_map = {
"users": UserRepository,
}
@property
def user_repository(self) -> UserRepository:
return self.get_repository("users")
@classmethod
def create_factory(cls, session: Annotated[Session, session_dependency(session_factory)]) -> Self:
return cls(session)
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
ultra_framework-0.1.1.tar.gz
(6.2 kB
view details)
File details
Details for the file ultra_framework-0.1.1.tar.gz.
File metadata
- Download URL: ultra_framework-0.1.1.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75a4eeca6335c0db082ccc339fb8b74359bbcd23d32c004dc0ff73bdecc0d492
|
|
| MD5 |
8d86bf3072d7bd1df7ff85a6bda44605
|
|
| BLAKE2b-256 |
66a8f5178938f62b45c499603b06d7a581bf24e2aff672f17bec3c11c68a52ab
|