Plateforme enables you to build and deploy modern data-driven applications and services in seconds with the power of SQLAlchemy, Pydantic, and FastAPI.
See the documentation for more details.
Install using pip install -U plateforme
or conda install plateforme -c conda-forge
.
For more details and advanced installation options, see the installation guide from the official documentation site.
from typing import Self
from plateforme import Plateforme
from plateforme.api import route
from plateforme.resources import ConfigDict, CRUDResource, Field
app = Plateforme(debug=True, database_engines='plateforme.db')
class Rocket(CRUDResource):
code: str = Field(unique=True)
name: str
parts: list['RocketPart'] = Field(default_factory=list)
launched: bool = False
@route.post()
async def launch(self) -> Self:
self.launched = True
return self
class RocketPart(CRUDResource):
__config__ = ConfigDict(indexes=[{'rocket', 'code'}])
rocket: Rocket
code: str
quantity: int
some_data = {
'code': 'FAL-9',
'name': 'Falcon 9',
'parts': [
{'code': 'dragon', 'quantity': 1},
{'code': 'raptor', 'quantity': 9},
{'code': 'tank', 'quantity': 1},
],
}
rocket = Rocket.resource_validate(some_data)
print(repr(rocket))
#> Rocket(code='FAL-9')
print(repr(rocket.parts[0].code))
#> 'dragon'
# Create the database schema
app.metadata.create_all()
# Persist the data
with app.session() as session:
session.add(rocket)
session.commit()
# Query the data
with app.session() as session:
rocket = session.query(Rocket).filter_by(code='FAL-9').one()
print(repr(rocket))
#> Rocket(id=1, code='FAL-9')
uvicorn main:app
With the built-in CRUD and query engine, you can easily create, read, update, and delete resources. The following query finds all parts in rocket #1
whose part codes contain the sequence ra
.
GET http://localhost:8000/rockets/1/parts?.code=like~*ra* HTTP/1.1
[
{
"id": 1,
"type": "rocket_part",
"code": "dragon",
"quantity": 1
},
{
"id": 2,
"type": "rocket_part",
"code": "raptor",
"quantity": 9
}
]
You can also define custom routes to perform more complex operations. The following request launches rocket #1
and persists in the database the launched
flag to true
.
POST http://localhost:8000/rockets/1/launch HTTP/1.1
{
"id": 1,
"type": "rocket",
"code": "FAL-9",
"name": "Falcon 9",
"parts": [
...
],
"launched": true
}
Plateforme comes with a built-in CLI to help you automate common tasks. For instance, the following commands initialize a new project, build it, and start the server.
# Initialize the project
plateforme init
# Build the project
plateforme build
# Start the server
plateforme start --reload
For detailed documentation and more examples, see the official documentation.
For guidance on setting up a development environment and how to make a contribution to Plateforme, read the contributing guidelines from the official documentation site.
See our security policy.