https://github.com/perdy/apistar-sqlalchemy
SQLAlchemy integration for API Star
https://github.com/perdy/apistar-sqlalchemy
api apistar database rest sqlalchemy
Last synced: 10 months ago
JSON representation
SQLAlchemy integration for API Star
- Host: GitHub
- URL: https://github.com/perdy/apistar-sqlalchemy
- Owner: perdy
- License: gpl-3.0
- Created: 2018-04-13T08:13:43.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2023-02-02T03:54:38.000Z (over 3 years ago)
- Last Synced: 2024-10-31T18:51:31.610Z (over 1 year ago)
- Topics: api, apistar, database, rest, sqlalchemy
- Language: Python
- Size: 94.7 KB
- Stars: 13
- Watchers: 2
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- License: LICENSE
Awesome Lists containing this project
README
API Star SQLAlchemy
===================
|build-status| |coverage| |version|
:Version: 0.3.2
:Status: Production/Stable
:Author: José Antonio Perdiguero López
SQLAlchemy integration for API Star.
Features
--------
This library provides **components** for injecting SQLAlchemy ORM sessions into your views and **event_hooks** to
handle commit/rollback behavior based on exceptions in your views.
Quick start
-----------
Install API Star SQLAlchemy:
.. code:: bash
pip install apistar-sqlalchemy
Create an API Star application adding components and event hooks:
.. code:: python
from apistar_sqlalchemy.components import SQLAlchemySessionComponent
from apistar_sqlalchemy.event_hooks import SQLAlchemyTransactionHook
routes = []
components = [
SQLAlchemySessionComponent(url='sqlite://'),
]
event_hooks = [
SQLAlchemyTransactionHook(),
]
app = App(routes=routes, components=components, event_hooks=event_hooks)
Now you can inject SQLAlchemy Session into your views:
.. code:: python
from sqlalchemy.orm import Session
def sqlalchemy_view(session: Session):
# do something
return {'message': 'something done'}
Forget about **commit** and **rollback** because there is an event hook that will handle it for you.
Full example
------------
.. code:: python
from typing import List
from apistar import App, Route, http, types, validators
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session
from apistar_sqlalchemy.components import SQLAlchemySessionComponent
from apistar_sqlalchemy.event_hooks import SQLAlchemyTransactionHook
from apistar_sqlalchemy import database
class PuppyModel(database.Base):
__tablename__ = "Puppy"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
class PuppyType(types.Type):
id = validators.Integer(allow_null=True, default=None)
name = validators.String()
def list_puppies(session: Session) -> List[PuppyType]:
return [PuppyType(puppy) for puppy in session.query(PuppyModel).all()]
def create_puppy(session: Session, puppy: PuppyType) -> http.JSONResponse:
model = PuppyModel(**puppy)
session.add(model)
session.flush()
return http.JSONResponse(PuppyType(model), status_code=201)
routes = [
Route('/puppy/', 'POST', create_puppy),
Route('/puppy/', 'GET', list_puppies),
]
components = [
SQLAlchemySessionComponent(url='sqlite://'),
]
event_hooks = [
SQLAlchemyTransactionHook(),
]
app = App(routes=routes, components=components, event_hooks=event_hooks)
.. |build-status| image:: https://travis-ci.org/PeRDy/apistar-sqlalchemy.svg?branch=master
:alt: build status
:scale: 100%
:target: https://travis-ci.org/PeRDy/apistar-sqlalchemy
.. |coverage| image:: https://codecov.io/gh/PeRDy/apistar-sqlalchemy/branch/master/graph/badge.svg
:alt: coverage
:scale: 100%
:target: https://codecov.io/gh/PeRDy/apistar-sqlalchemy/branch/master/graph/badge.svg
.. |version| image:: https://badge.fury.io/py/apistar-sqlalchemy.svg
:alt: version
:scale: 100%
:target: https://badge.fury.io/py/apistar-sqlalchemy