Skip to main content

Adds SQLAlchemy support to your Flask application for handle apis.

Project description

sqlalchemy-api-handler

SQLAlchemy-Api-Handler is an extension that adds support for handling apis with sqlalchemy. It helps to handle models with humanized ids once it is jsonified, throws api errors for some casting of value during the save time, and dictifies model objects into jsonified ones.

CircleCI

Installing

Install and update using pip:

  $ pip install -U SQLAlchemy-Api-Handler

A Simple Example

Suppose a request POST /users {"email": "marx.foo@plop.fr", name: "Marx Foo"} :

    from flask import Flask, jsonify, request
    from sqlalchemy_api_handler import ApiHandler

    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"
    db = SQLAlchemy(app)
    ApiHandler.set_db(db)

    class User(ApiHandler, db.Model):
        email = db.Column(db.String, unique=True, nullable=False)
        name = db.Column(db.String, unique=True, nullable=False)

    @app.route('/users', methods=['POST'])
    def post_user():
      user = User(**request.form)
      ApiHandler.save(user)
      return jsonify(as_dict(user))

The success result will have stored a user object at, let's say id = 32, and so will fetch an object at humanized id = humanize(32), ie

  {"id": "EA", "email": "marx.foo@plop.fr", name: "Marx Foo"}

Playing with nesting data

Suppose a request GET /offers

    from flask import Flask, jsonify, request
    from sqlalchemy.orm import relationship
    from sqlalchemy_api_handler import ApiHandler

    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"
    db = SQLAlchemy(app)
    ApiHandler.set_db(db)

    class Venue(ApiHandler, db.Model):
        address = db.Column(db.String, unique=True, nullable=False)
        name = db.Column(db.String, unique=True, nullable=False)

    class Offer(ApiHandler, db.Model):
        name = db.Column(db.String, unique=True, nullable=False)
        venueId = db.Column(db.BigInteger,
                     db.ForeignKey("venue.id"),
                     nullable=False,
                     index=True)
        venue = relationship('Venue',
                             foreign_keys=[venueId],
                             backref='offers')

    class Stock(ApiHandler, db.Model):
        available = db.Column(db.Integer, nullable=False)
        offerId = db.Column(db.BigInteger,
                         db.ForeignKey('offer.id'),
                         index=True,
                         nullable=False)
        offer = relationship('Offer',
                             foreign_keys=[offerId],
                             backref='stocks')

    venue = Venue(address="Somewhere I belong", name="MyVenue")
    offer = Offer(name="MyOffer")
    stock = Stock(available=10)
    stock.offer = offer
    offer.venue = venue
    ApiHandler.save(stock)

    offer_includes = [
      'stocks',
      {
        "key": 'venue',
        "includes": [
          '-address'
        ]
      }
    ]

    @app.route('/offers', methods=['GET'])
    def get_offers():
      offers = Offer.query.all()
      return jsonify(as_dict(offers, includes=offer_includes))

The success will return

  [
    {
      "id": "AE",
      "name": "MyOffer",
      "stocks": [
        {
          "available": 10,
          "id": "AE"
        }
      ],
      "venue": {
        "name": "MyVenue"
      }
    }
  ]

Links

Deploy

First, make sure that the deploy environment is started:

  ./sqlaah start

In a second tab, then:

  1. Change the version into sqlalchemy_api_handler/init.py

  2. Pre publish:

  ./sqlaah prepublish
  1. Publish:
  ./sqlaah publish

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

SQLAlchemy-Api-Handler-0.6.10.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

SQLAlchemy_Api_Handler-0.6.10-py2.py3-none-any.whl (31.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file SQLAlchemy-Api-Handler-0.6.10.tar.gz.

File metadata

  • Download URL: SQLAlchemy-Api-Handler-0.6.10.tar.gz
  • Upload date:
  • Size: 28.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.7.5

File hashes

Hashes for SQLAlchemy-Api-Handler-0.6.10.tar.gz
Algorithm Hash digest
SHA256 1e3acfb34f20f2f29b5b228b6e5fe0b63c38a7a07c2ef9bbb1f188fa52164164
MD5 b8ee302738a94fb48af6892abeb8413b
BLAKE2b-256 41bb0049a4784f78e0a231cfb2beb2f6cdd59bb533d33568dd6b97e1fc46e4b7

See more details on using hashes here.

File details

Details for the file SQLAlchemy_Api_Handler-0.6.10-py2.py3-none-any.whl.

File metadata

  • Download URL: SQLAlchemy_Api_Handler-0.6.10-py2.py3-none-any.whl
  • Upload date:
  • Size: 31.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.7.5

File hashes

Hashes for SQLAlchemy_Api_Handler-0.6.10-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a7fcc24bdfaef836dfe1c6a85ce07893f8bc30fda3ca65cbd832eaf1eef482d1
MD5 ee1f5dfcb7325e6062cba4872acd4e61
BLAKE2b-256 17d52b0c6530df0dc13e434405a63fd2d15d063e130f9eb45344791932bc4274

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page