Skip to main content

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

🚀 Getting started

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

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.

✨ 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 ☕.

Metadata

Release files for trigon 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for trigon 0.2.0
File Size Uploaded
trigon-0.2.0.tar.gz 16.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trigon 0.2.0
File Interpreter ABI Platform
trigon-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / trigon-0.2.0.tar.gz

Download URL trigon-0.2.0.tar.gz
Size 16.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9b52066036f89229083245cdbcd6b889cfb58d5c6792bd68603253f5b8bde476
BLAKE2b-256 checksum
How to use checksums
a58eb8a9f967ab62f437474e6958e358c01f2e92b456c0cf59ac68817a0a238e
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / trigon-0.2.0-py3-none-any.whl

Download URL trigon-0.2.0-py3-none-any.whl
Size 20.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4bfd41dd5b8e1edc893ffb785764d30a637718c63ca80c412c389b3518e929be
BLAKE2b-256 checksum
How to use checksums
ddbbf66ebd192c1b811a511d04f2ea3721f6bacd59764fab574b1ef1dc17b11c
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page