Metadata-Version: 2.4
Name: deskkit
Version: 1.2.5
Summary: Конструктор десктоп-приложений на Qt и MySQL с модульной сборкой и экспортом проекта
Author: DeskKit Team
License-Expression: MIT
Project-URL: Homepage, https://github.com/deskkit/deskkit
Project-URL: Documentation, https://github.com/deskkit/deskkit#readme
Keywords: qt,pyqt,pyside,mysql,desktop,gui
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: User Interfaces
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: mysql-connector-python>=8.0.0
Provides-Extra: pyqt
Requires-Dist: PyQt6>=6.4; extra == "pyqt"
Provides-Extra: pyside
Requires-Dist: PySide6>=6.4; extra == "pyside"
Provides-Extra: all
Requires-Dist: PyQt6>=6.4; extra == "all"
Requires-Dist: PySide6>=6.4; extra == "all"
Dynamic: license-file

# DeskKit

**DeskKit** — конструктор десктоп-приложений на **Qt** (PySide6 / PyQt6) и **MySQL**. Собирайте приложение из модулей, экспортируйте автономный проект с чистым Python-кодом.

## Установка

```bash
pip install deskkit[pyside]   # PySide6
pip install deskkit[pyqt]     # PyQt6
```

## Конструктор (AppBuilder)

Приложение собирается **блоками** — включайте только нужное:

```python
from deskkit import AppBuilder

AppBuilder("Склад")
    .database("warehouse_db", password="secret")
    .with_auth(guest=False)       # авторизация без гостя
    .with_search()                # поиск
    .with_filter("supplier", "category")  # фильтры
    .with_sort("stock_quantity")  # сортировка
    .with_crud()                  # добавление / изменение / удаление
    .with_formatting()            # условное оформление строк
    .export("my_warehouse", tips=True, flowchart=True)
    .run()
```

### Отключение блоков

```python
AppBuilder("Витрина")
    .database("shop_db")
    .without_auth()        # сразу каталог, без входа
    .without_crud()        # только просмотр
    .without_filters()
    .without_sort()
    .export("vitrina", tips=False)
    .run()
```

### Готовые профили предметных областей

```python
from deskkit import AppBuilder

AppBuilder.from_preset("library").export("biblio").run()
AppBuilder.from_preset("warehouse").database("wh").export("sklad").run()
AppBuilder.from_preset("cinema").export("kino").run()
```

Доступные профили: `shop`, `library`, `warehouse`, `autoservice`, `cinema`.

## Экспорт автономного проекта

По умолчанию `export_project=True` — создаётся папка с обычным кодом (**без** `import deskkit`):

```
my_app/
├── main.py
├── settings.py          # модули вкл/выкл в классе Features
├── database.py
├── ui/
├── sql/database.sql
├── docs/flowchart.svg   # блок-схема ГОСТ 19.701-90 (если flowchart=True)
├── tips/                # подсказки по модулям (если tips=True)
└── requirements.txt
```

| Параметр | По умолчанию | Описание |
|----------|--------------|----------|
| `export_project` | `True` | Экспорт автономного проекта |
| `include_tips` | `True` | Папка `tips/` с подсказками |
| `include_flowchart` | `True` | SVG блок-схема в `docs/` |
| `run_generated` | `True` | Запустить проект после экспорта |

## Блок-схема (ГОСТ 19.701-90)

```python
from deskkit import AppConfig, save_flowchart, generate_flowchart

cfg = AppBuilder("Приложение").build()
save_flowchart(cfg, "docs/flowchart.svg")

svg = generate_flowchart(cfg)  # строка SVG
```

Символы: овал — начало/конец, прямоугольник — процесс, ромб — условие, параллелограмм — ввод/вывод.  
PDF: откройте SVG в браузере → «Печать» → «Сохранить как PDF».

## Модули приложения

| Блок | Метод конструктора | Описание |
|------|-------------------|----------|
| Авторизация | `with_auth()` / `without_auth()` | Вход по логину из БД |
| Гость | `with_auth(guest=True/False)` | Кнопка «без авторизации» |
| Поиск | `with_search()` | По всем текстовым полям |
| Фильтр поставщика | `with_filter("supplier")` | Выпадающий список |
| Фильтр категории | `with_filter("category")` | Выпадающий список |
| Сортировка | `with_sort("поле")` | Кнопка ↑↓ |
| CRUD | `with_crud()` | Форма редактирования |
| Роли | `with_roles()` | Разный UI для ролей |
| Форматирование | `with_formatting()` | Цвет строк по условиям |

## Конфигурация через JSON

```python
from deskkit import AppConfig, ShopApp

ShopApp(AppConfig.from_json("app.json")).run()
```

```json
{
  "title": "Каталог",
  "database": "my_db",
  "password": "",
  "features": {
    "auth": true,
    "search": true,
    "supplier_filter": true,
    "sort": true,
    "crud": true
  },
  "include_tips": true,
  "include_flowchart": true,
  "output_dir": "my_app"
}
```

## Лицензия

MIT
