Skip to content

plateformeio/plateforme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Plateforme

Plateforme Core - OSS (alpha release)

ci pypi downloads versions license

Plateforme enables you to build and deploy modern data-driven applications and services in seconds with the power of SQLAlchemy, Pydantic, and FastAPI.

Help

See the documentation for more details.

Installation

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.

A basic example

Create a simple application

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

Validate and use data

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'

Persist data

# 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')

Run the application

uvicorn main:app

Play with the API

Use the built-in CRUD and query engine

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
  }
]

Use custom routes

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
}

Use the built-in CLI

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.

Contributing

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.

Reporting a security vulnerability

See our security policy.