Metadata-Version: 2.2
Name: slinn
Version: 3.0.0a11
Summary: An HTTP server framework
Author-Email: Miot Project <openmiot@gmail.com>, Mark Radin <mrybs2@gmail.com>
License: MIT
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.15
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: C++
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Internet
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Framework :: AsyncIO
Project-URL: Homepage, https://openimot.github.io/slinn
Requires-Python: >=3.15
Requires-Dist: tomlkit==0.15.1
Requires-Dist: orjson>=3.11.9
Requires-Dist: babel>=2.18.0
Requires-Dist: pydantic>=2.14.0b1
Provides-Extra: dev
Requires-Dist: pytest>=9.1.1; extra == "dev"
Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
Requires-Dist: pytest-describe>=3.2.0; extra == "dev"
Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
Requires-Dist: taskipy>=1.14.1; extra == "dev"
Requires-Dist: poetry>=2.4.1; extra == "dev"
Requires-Dist: zensical>=0.0.53; extra == "dev"
Requires-Dist: pyrefly>=1.2.0; extra == "dev"
Provides-Extra: alt-loop
Requires-Dist: uvloop>=0.22.1; sys_platform != "win32" and extra == "alt-loop"
Requires-Dist: winloop>=0.6.3; sys_platform == "win32" and extra == "alt-loop"
Description-Content-Type: text/markdown


<div align="center">
    <h1>Slinn</h1>
    <b>Slinn - универсальная сетевая платформа на Python</b><br/>
    <img src="https://github.com/openmiot/slinn/actions/workflows/tests.yml/badge.svg?event=push&branch=flux" alt="Tests"/>
    <img src="https://img.shields.io/pypi/pyversions/slinn.svg?color=%2334D058" alt="Supported Python versions">
    <img src="https://img.shields.io/github/v/release/OpenMiot/slinn" alt="GitHub Release"/>
    <img src="https://img.shields.io/github/stars/OpenMiot/slinn" alt="GitHub Repo stars"/>
</div>

---

Документация: https://openmiot.github.io/slinn/

Исходный код: https://github.com/OpenMiot/slinn/

---

### Преимущества Slinn

- Асинхронность + параллелизм(только во Free-Threaded Python)
- Поддержка плагинов и пакетный менеджер
- Гибкая декларативная настройка
- Поддержка любых сетевых протоколов
- Работа на нескольких портах в одном запущенном экземпляре

### Простой пример синтаксиса
```python
from slinn.net.http import HttpRouter
from slinn.net.http.responses import HttpRedirect
from slinn.net.http.filters import AnyFilter
from slinn.net.address import Address


router = HttpRouter()


@router.get('api/<str method>')
async def api(client_address: Address, method: str):
    return {
        'status': 'ok',
        'method': method,
        'ip': client_address.host
    }

@router.get()
@router.get('index')
async def index():
    return HttpRedirect('/helloworld')


@router(AnyFilter)
async def helloworld():
    return 'Hello world!'
```

### Начало проекта
```bash
slinn-admin create-project www
cd www
venv/bin/activate
slinn create-app localhost host=localhost host=127.0.0.1
```

Вставьте пример в `localhost/app.py`, затем запустите скрипт `start.bat` или `start.sh`

Для настройки проекта нужно редактировать конфиг `slinn.toml`

Для настройки приложения нужно редактировать `%app%/config.toml`


### Зависимости
- Python 3.15 и выше (желательно без GIL)
- `tomlkit` - управление конфигами
- `orjson` - более быстрая работы с json
- `babel` - локализация фреймворка
- `pydantic` - валидация конфигов
#### Опциональные зависимости
##### Средства разработки фреймворка (`dev`):
- `pytest` - тестирование фреймворка
- `pytest-asyncio` - тестирование асинхнронных функций
- `pytest-describe` - группировка тестов
- `pytest-mock` - более удобное создание моков
- `pytest-cov` - подсчет покрытия тестами
- `taskipy` - упрощение ввода команд
- `poetry` - сборка и публикация пакета на PyPI
- `zensical` - документация
##### Асинхронные событийные циклы, которые могут улучшить производительность (`alt_loop`):
- `winloop` - альтернативный асинхронный событийный цикл на Windows
- `uvloop` - альтернативный асинхронный событийный цикл на Linux/MacOS