Skip to main content

A batteries-included python web framework

Project description

Trigon

A batteries-included python web framework

CD pre-commit.ci status Open in GitHub Codespaces Renovate - Enabled Dependency Review Cookiecutter Template Buy me a coffee

:rocket: Getting started

Attention: The project is a work in progress and should not be used in production :construction:

Installing trigon can be done as such:

pip install trigon

The project's documentation can be found here.

from typing import Any, Dict

import uvicorn
from trigon.core.controller import Controller, http, route
from trigon.core.controller.result import Ok, Result
from trigon.trigon import trigon


class ItemService:
    def get_items(self) -> list[Dict[str, Any]]:
        return [
            {
                "id": 1,
                "name": "Product 1",
                "description": "This is the description for Product 1.",
                "price": 19.99,
                "category": "Electronics",
                "stock": 50,
            },
            {
                "id": 2,
                "name": "Product 2",
                "description": "A sample description for Product 2.",
                "price": 29.99,
                "category": "Clothing",
                "stock": 100,
            },
            {
                "id": 3,
                "name": "Product 3",
                "description": "Description for Product 3 goes here.",
                "price": 9.99,
                "category": "Books",
                "stock": 25,
            },
        ]


class ItemController(Controller):
    def __init__(self, service: ItemService) -> None:
        self.service = service

    @route.get("/")
    @http.status(Ok)
    async def get_items(self) -> Result[list[Dict[str, Any]]]:
        return Ok(self.service.get_items())


if __name__ == "__main__":
    app = (
        trigon()
        .build_container(lambda builder: builder.singleton(ItemService))
        .register_controllers(ItemController)
        .configure_logging(
            lambda builder: builder.override("uvicorn")
            .register_middleware()
            .add_console_handler()
            .add_file_handler("logs/{time}.log"),
        )
        .build()
    )

    uvicorn.run(app, host="0.0.0.0", port=8000)

For a more elaborate example (controller discovery, database configuration, Repository-Service Pattern, etc.) check out Example 02.

:sparkles: Contributing

If you would like to contribute to the project, please go through the Contributing Guidelines first. In order to locally set up the project please follow the instructions below:

# Set up the GitHub repository
git clone https://github.com/billsioros/trigon.git

# Create a virtual environment using poetry and install the required dependencies
poetry shell
poetry install

# Install pre-commit hooks
pre-commit install --install-hooks

Alternatively, you can support the project by Buying me a ☕.

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

trigon-0.2.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

trigon-0.2.0-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file trigon-0.2.0.tar.gz.

File metadata

  • Download URL: trigon-0.2.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/42.0 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.4 tqdm/4.66.1 importlib-metadata/6.8.0 keyring/24.2.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.13

File hashes

Hashes for trigon-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9b52066036f89229083245cdbcd6b889cfb58d5c6792bd68603253f5b8bde476
MD5 3b863f4db2a9e4e5deb53dfa936e5bef
BLAKE2b-256 a58eb8a9f967ab62f437474e6958e358c01f2e92b456c0cf59ac68817a0a238e

See more details on using hashes here.

File details

Details for the file trigon-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: trigon-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/42.0 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.4 tqdm/4.66.1 importlib-metadata/6.8.0 keyring/24.2.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.13

File hashes

Hashes for trigon-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4bfd41dd5b8e1edc893ffb785764d30a637718c63ca80c412c389b3518e929be
MD5 a0d74b01687c85e95d719419bddeb265
BLAKE2b-256 ddbbf66ebd192c1b811a511d04f2ea3721f6bacd59764fab574b1ef1dc17b11c

See more details on using hashes here.

Supported by

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