Skip to main content

Chilo is a lightweight, form-meets-function, opinionated (yet highly configurable) api framework.

Project description

Chilo

Chilo

Chilo is a lightweight, form-meets-function, opinionated (yet highly configurable) api framework

CircleCI Quality Gate Status Coverage Bugs pypi package python Inline docs contributions welcome

Chilo, short for chilorhinophis (meaning two headed snake), is a lightweight, form-meets-function, opinionated (yet highly configurable) api framework.

Benefits

  • No route definitions needed; route based on your directory structure
  • Built-in OpenAPI request and response validation
  • Built-in GRPC support
  • Generate OpenAPI spec from code base
  • Ease of use with gunicorn
  • Infinitely customizable with middleware extensions

Philosophy

The Chilo philosophy is to provide a dry, configurable, declarative framework, which encourages Happy Path Programming (HPP).

Happy Path Programming is a development approach where all inputs are validated up front, allowing the main logic to proceed without interruption. This avoids deeply nested conditionals, scattered try/catch blocks, and the clutter of mid-flow exception handling. Chilo provides a flexible middleware system that lets developers define what counts as valid input—keeping the code focused, readable, and on the "happy path" where things work as expected.

Documentation & Examples

Quick Start (REST)

0. Install

$ pip install chilo_api
# pipenv install chilo_api
# poetry add chilo_api

1. Create main.py for REST

from chilo_api import Chilo


api = Chilo(
    base_path='/',
    handlers='api/handlers',
)

2. Create First Handler

{PWD}/api/handlers/__init__.py

from chilo_api import Request, Response

def get(request: Request, response:Response ) -> Response:
    response.body = {'hello': 'world'}
    return response

3. Run your API

python -m chilo_api serve --api=main --reload=true

4. Checkout your API

http://127.0.0.1:3000/

5. Validate Your Endpoint (optional)

from chilo_api import requirements


@requirements(required_params=['greeting'])
def get(request, response):
    response.body = {'hello': request.query_params['greeting']}
    return response

6. Checkout your API (again)

http://127.0.0.1:3000/?greeting=developer

Quick Start (GRPC)

1. Create main.py for GRPC

from chilo_api import Chilo


api = Chilo(
    api_type='grpc',
    handlers='tests/unit/mocks/grpc/handlers/valid',
    protobufs='tests/unit/mocks/grpc/protobufs',
    reflection=True,
    port=50051
)

2. Create First GRPC Handlers

{PWD}/api/handlers/__init__.py

from chilo_api import requirements, Request, Response

@requirements(
    protobuf='calculator.proto',
    service='Calculator',
    rpc='Add'
)
def add(request: Request, response: Response) -> Response:
    num1 = request.body.get('num1', 0)
    num2 = request.body.get('num2', 0)
    result = num1 + num2
    response.body = {'result': result}
    return response

3. Run your GRPC API

python -m chilo_api serve --api=main

4. Checkout your GRPC API

http://127.0.0.1:50051/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chilo_api-2.0.0b1.tar.gz (78.3 kB view details)

Uploaded Source

Built Distribution

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

chilo_api-2.0.0b1-py3-none-any.whl (107.5 kB view details)

Uploaded Python 3

File details

Details for the file chilo_api-2.0.0b1.tar.gz.

File metadata

  • Download URL: chilo_api-2.0.0b1.tar.gz
  • Upload date:
  • Size: 78.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.17

File hashes

Hashes for chilo_api-2.0.0b1.tar.gz
Algorithm Hash digest
SHA256 7c8262c797dd750b5473490e01cd43c1d46c799e66750706d815e13398542dc4
MD5 b5a4ddafba32e671c8eaff2e05cd0366
BLAKE2b-256 73983f8819e6998dfd8f460f1ee05874150c9cf4279c709eff38c8218d0dce33

See more details on using hashes here.

File details

Details for the file chilo_api-2.0.0b1-py3-none-any.whl.

File metadata

  • Download URL: chilo_api-2.0.0b1-py3-none-any.whl
  • Upload date:
  • Size: 107.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.17

File hashes

Hashes for chilo_api-2.0.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 05fde7dd4fcc0dfb679d639bca5357a08d04fef1ec8a1c8d7df659d30c6af623
MD5 ef4a7b8c210f2c3b00f19af017dfb84a
BLAKE2b-256 1b8c2f9b4ba13abccfb84e575057b687d2a84e472d27417cb7f3a243f427a90d

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