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_grpc.py for GRPC

from chilo_api import Chilo


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

2. Create Your Protobuff files

syntax = "proto3";

package calculator;

service Calculator {
    rpc Add(CalcRequest) returns (CalcResponse);
    rpc Subtract(CalcRequest) returns (CalcResponse);
    rpc Multiply(CalcRequest) returns (CalcResponse);
    rpc Divide(CalcRequest) returns (CalcResponse);
}

message CalcRequest {
    double num1 = 1;
    double num2 = 2;
}

message CalcResponse {
    double result = 1;
}

3. 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

4. Run your GRPC API

python -m chilo_api serve --api=main_grpc

5. 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.0.tar.gz (80.6 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.0-py3-none-any.whl (110.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: chilo_api-2.0.0.tar.gz
  • Upload date:
  • Size: 80.6 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.0.tar.gz
Algorithm Hash digest
SHA256 0f73798d10da5315d3af50a51d65b3b20624af692c6b5c5895faccfd19dbf7c6
MD5 38baaab03117e591d05478f1fe4dd007
BLAKE2b-256 cc56e176f0b67a0dfb76f7f2f06e136b9dd18adf9f5cd8dde31e3255af3e975a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: chilo_api-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 110.9 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f337ff6fd1aa1484b98bdd2b9c24ca5f404b2beec201665b00d45f3fc44d3bcf
MD5 0668eb8dcf4befdd03a1aafc3c0ba56a
BLAKE2b-256 27a862cbf08d148a2dd93b8ff8d061c87b141a6609a1edb3af8b943c918d6c8d

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