First Check
Commit to Help
Example Code
# A reproducible repository which includes the proposed convenience objects
# (and passes all the tests from the official tutorial):
https://github.com/cisaacstern/sqlmodel-abstraction
# All of the proposed code lives in:
https://github.com/cisaacstern/sqlmodel-abstraction/blob/main/project/abstractions.py
Description
The multiple models with inheritance design pattern is awesome. I would like to be able to implement it more concisely.
To achieve this, I've drafted a MultipleModels dataclass which takes base and response models as input, and generates the remaining (table, creation, and update) models programmatically; e.g., here. To register API endpoints for a given MultipleModels instance, it can be passed to the proposed register_endpoints convenience function; e.g., here.
The example repo for this feature proposal is a fully reproducible example project which passes all the same tests as the tutorial project in the SQLModel docs.
Wanted Solution
SQLModel currently provides other convenience methods (e.g., create_engine).
Whether it is via some version of the MutlipleModels and register_endpoints approach I've proposed, or some other methods, I would like to be have convenience methods that abstract away boilerplate code from the process of implementing the multiple models with inheritance design pattern.
Wanted Code
# This is an abbreviated `main.py` for a SQLModel project that uses the proposed features
# Full file: https://github.com/cisaacstern/sqlmodel-abstraction/blob/main/project/main.py
# Some imports omitted here
from sqlmodel import MultipleModels, register_endpoints
class HeroBase(SQLModel):
name: str
secret_name: str
age: Optional[int] = None
class HeroRead(HeroBase):
id: int
hero_models = MultipleModels(path="/heroes/", base=HeroBase, response=HeroRead)
# `engine` assignment and `get_session` definition omitted here
app = FastAPI()
register_endpoints(app, models=hero_models, get_session=get_session)
Alternatives
If this is out of scope for SQLModel, I would nonetheless greatly appreciate feedback on any pitfalls that may arise if I implement the proposed abstractions in production.
If this is within scope for SQLModel, I would happily adapt my example repo into a PR, if it seems like a good enough start.
Thanks in advance for your consideration.
Operating System
Linux, macOS
Operating System Details
No response
SQLModel Version
0.0.4
Python Version
Additional Context
As noted in the example repo README, these ideas arose while exploring SQLModel for a database + API for Pangeo Forge.
First Check
Commit to Help
Example Code
Description
The multiple models with inheritance design pattern is awesome. I would like to be able to implement it more concisely.
To achieve this, I've drafted a
MultipleModelsdataclass which takes base and response models as input, and generates the remaining (table, creation, and update) models programmatically; e.g., here. To register API endpoints for a givenMultipleModelsinstance, it can be passed to the proposedregister_endpointsconvenience function; e.g., here.The example repo for this feature proposal is a fully reproducible example project which passes all the same tests as the tutorial project in the SQLModel docs.
Wanted Solution
SQLModel currently provides other convenience methods (e.g.,
create_engine).Whether it is via some version of the
MutlipleModelsandregister_endpointsapproach I've proposed, or some other methods, I would like to be have convenience methods that abstract away boilerplate code from the process of implementing the multiple models with inheritance design pattern.Wanted Code
Alternatives
If this is out of scope for SQLModel, I would nonetheless greatly appreciate feedback on any pitfalls that may arise if I implement the proposed abstractions in production.
If this is within scope for SQLModel, I would happily adapt my example repo into a PR, if it seems like a good enough start.
Thanks in advance for your consideration.
Operating System
Linux, macOS
Operating System Details
No response
SQLModel Version
0.0.4
Python Version
Additional Context
As noted in the example repo README, these ideas arose while exploring SQLModel for a database + API for Pangeo Forge.