Metadata-Version: 2.4
Name: archtool
Version: 2.0.0
Summary: Dependency injection and layered architecture enforcement for Python projects
Project-URL: Homepage, https://github.com/0nliner/archtool
Project-URL: Documentation, https://0nliner.github.io/archtool
Project-URL: Repository, https://github.com/0nliner/archtool
Project-URL: Bug Tracker, https://github.com/0nliner/archtool/issues
Author-email: Aleksandr Chudaikin <aleksandrchudaikindev@gmail.com>
License: MIT
License-File: LICENSE
Keywords: architecture,clean-architecture,dependency-injection,di
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: click>=8.0
Requires-Dist: rich>=13.0
Provides-Extra: dev
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
Requires-Dist: mkdocs-static-i18n>=1.2; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.25; extra == 'docs'
Description-Content-Type: text/markdown

![Frame 3(2)](https://github.com/user-attachments/assets/df1e1811-1dc9-4c73-8115-632487401af9)
# archtool documentation

**Преимущества**
- **Dependency Injection** - управление зависимостями между компонентами  
-  **Контроль слоёв** - гарантия однонаправленных импортов  
- **ISP Compliance** - принудительное разделение интерфейсов  
- **Мультиархитектура** - поддержка Clean Architecture, ETL, микросервисов
- Чёткое разделение между API эндпоинтами и бизнес-логикой
- Автоматическая валидация зависимостей
- Поддержка async/await
- Интеграция с django и fast-api

---
## Установка
```bash
pip install archtool
```

---

## 🌐 Framework Integration
### Django Support
archtool помогает организовать Django-проекты в соответствии с Clean Architecture, упрощая:
- Постепенный переход от монолитной структуры
- Вынос бизнес-логики из views/forms
- Интеграцию с современными решениями (FastAPI, AIOHTTP)

**Пример структуры**:
```
myproject/
├── archtool_bundle/            # django app, отвечающий за совместимость с archtool 
│   ├── interfaces.py
│   ├── controllers.py
│   ├── services.py
│   └── repos.py
├── app2/
│   ├── interfaces.py
│   ├── controllers.py
│   ├── services.py
│   └── repos.py
├── entrypoints/                  # точки входа в приложение
│   └── fastapi_app.py
```

**Интеграция**:
документация в активной разработке 


### FastAPI Integration
Создавайте хорошо структурированные API с автоматическим DI:
Документация в активной разработке

---

## 📚 Examples

| Example Type       | Description                     |
|--------------------|---------------------------------|
| Django Migration   | `examples/django_migration/`   |
| FastAPI Microservice| `examples/fastapi_service/`    |
```



### Архитектурные слои
```python
# Clean Architecture (по Роберту Мартину)
class InfrastructureLayer(Layer):
    """Работа с БД, внешние API"""
    depends_on = None
    
    class Components:
        repos = ComponentPattern(
            module_name_regex="repos",
            superclass=ABCRepo
        )

class DomainLayer(Layer):
    """Ядро системы: модели и бизнес-логика"""
    depends_on = InfrastructureLayer
    
    class Components:
        services = ComponentPattern(
            module_name_regex="services",
            superclass=ABCService
        )

class ApplicationLayer(Layer):
    """Оркестрация workflow"""
    depends_on = DomainLayer
    
    class Components:
        controllers = ComponentPattern(
            module_name_regex="controllers",
            superclass=ABCController
        )

class PresentationLayer(Layer):
    """API и пользовательские интерфейсы"""
    depends_on = ApplicationLayer
    
    class Components:
        views = ComponentPattern(
            module_name_regex="views",
            superclass=ABCView
        )
```

---

### Преимущества подхода
1. **Снижение связанности**  
   Изоляция слоёв через strict import rules (DIP)

2. **Тестируемость**  
   Легкое мокирование через DI-контейнер

3. **Гибкость архитектуры**  
   Кастомные слои для любых сценариев

4. **Валидация**  
   Автоматическая проверка правил импортов

5. **Документирование**  
   Явная структура проекта = живая документация
