django-cfg 1.4.13__py3-none-any.whl → 1.4.15__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ django_cfg/__init__.py,sha256=4dZgnuTlq8YmLISTJAqnPrr080kxPfmPKUjhiWhkEDc,1630
3
3
  django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
4
4
  django_cfg/config.py,sha256=3hX5bOCbOWdUvtD9Z5qEHEOEyWzY1-4CsvFs_EO7VSw,1398
5
5
  django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
6
- django_cfg/apps/urls.py,sha256=5fy2TPnYGyiLyy3EpDQkDuR6OuNTSw9avASrD7fSg38,4589
6
+ django_cfg/apps/urls.py,sha256=DKlW8kSPv4MImjNlc9uaukOEkKrk-AvOQrOSjerVUf8,4633
7
7
  django_cfg/apps/accounts/README.md,sha256=YkUYJ3iKMYTmm9ALK2PDnX75SDqZxgnkzNLCD5efxRs,8227
8
8
  django_cfg/apps/accounts/__init__.py,sha256=osecEQhMJVP8ejhZzElNsAqA1fX-GPD3K5_yNwDk6IE,100
9
9
  django_cfg/apps/accounts/__models.py,sha256=65AomWYd78ptQ60drPbodxf0Ue310vmJQpQOPHL6V3E,10161
@@ -588,7 +588,7 @@ django_cfg/core/generation/utils/helpers.py,sha256=V6dTWIzGzAHYDLR7YgV50g_eeWIV8
588
588
  django_cfg/core/integration/README.md,sha256=3V27xNWoGQkauixJGW8TAE8p0FB8iCdt6zI4G4Nnssw,10699
589
589
  django_cfg/core/integration/__init__.py,sha256=2lIMD6W1-uAuo6S3eOWNLPgPgr-uZYSUWZd9F7QZR-c,1880
590
590
  django_cfg/core/integration/commands_collector.py,sha256=-9ppg2jYSrTC35Ijm5vAHUcNZM6AkayuPkfw715Ca2Q,8325
591
- django_cfg/core/integration/url_integration.py,sha256=mEOyhMR_L4iHclM85hl5Jlg8eFtinFH8_6I6lPdKrQQ,4049
591
+ django_cfg/core/integration/url_integration.py,sha256=lTQ_OTDJ5nZQyx4vvkGRj3Edg7sjel7O_NOVZ1NTZY4,3755
592
592
  django_cfg/core/integration/version_checker.py,sha256=NrrbyTAtIkZdNPQHO2PMQjrp8DHk1xVMpvG9xiIvevA,4834
593
593
  django_cfg/core/integration/display/__init__.py,sha256=YwU9nmXOcDJL3q0wW5Q_59gLh_BXPsOfDlT3sZqHWZU,315
594
594
  django_cfg/core/integration/display/base.py,sha256=67ABqa1WErBcFTROFy8fBzwvYYmHiloBk7-Hpexd2rE,5720
@@ -648,7 +648,7 @@ django_cfg/models/base/module.py,sha256=P6YowmE-VOqp_L25Ijxj2hjjNhB9xtlm8G35DHWq
648
648
  django_cfg/models/django/__init__.py,sha256=eAV-U4Kj7lW1ymGEQ8Ng6Y7MAq0Nro3wk4_yf80nPEI,350
649
649
  django_cfg/models/django/constance.py,sha256=IVklMTtusxWnWaU3PSatGLQfg5qY_Y89MZQjsJFwbCk,9175
650
650
  django_cfg/models/django/environment.py,sha256=jdg6DXQrnuLSdfZNV4KoFlkiPl1n2jOicPU8NFzyB5U,9439
651
- django_cfg/models/django/openapi.py,sha256=UyObu4IJqDUWQ_CcaZFXsd0rdCpAejlobYTVj5Y1pPA,5846
651
+ django_cfg/models/django/openapi.py,sha256=AElzz_cPWRgibBLWEnT5dg6CAbGymMMOtRLIsBEiye0,4226
652
652
  django_cfg/models/django/revolution_legacy.py,sha256=NONFa3U-w2HSMKumEh0BOD5HVI3ghiMvDbISpWC_wr4,9005
653
653
  django_cfg/models/infrastructure/__init__.py,sha256=If0XLyDNaR_F6rOhDJBCT5RmkOOoNcY61L70pQvaO1s,369
654
654
  django_cfg/models/infrastructure/cache.py,sha256=N6LWinyokWcmuJmInn0q48TQq0Je-xXMJdZ0DbelGPU,12175
@@ -760,13 +760,13 @@ django_cfg/modules/django_client/core/generator/python/templates/utils/retry.py.
760
760
  django_cfg/modules/django_client/core/generator/python/templates/utils/schema.py.jinja,sha256=xrnhAc-hNk6DigxHmTvhR3dyDFI9ocnkhL-_Hz9hCs8,270
761
761
  django_cfg/modules/django_client/core/generator/typescript/__init__.py,sha256=eHOZp7M65WZ9u3tA_xQlON5-oijZZiGXDhz22Bq73s0,371
762
762
  django_cfg/modules/django_client/core/generator/typescript/client_generator.py,sha256=7ql-m59YVt6zGKfVBCxy1OR3CNy6C9lkaMEUqexiRvo,5878
763
- django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py,sha256=m2bIpgGK11_LGXw9P0QFiSPSQL_05pVYReWBOZ6aUhI,15602
763
+ django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py,sha256=FxoAIVq8x1o2WxbU0zGzExP6geC4vH7ofF3w53OXC08,15649
764
764
  django_cfg/modules/django_client/core/generator/typescript/files_generator.py,sha256=faRdhVVf9GQ-0esVz94dsaQMB56zK3csyNkhEHL4al4,7044
765
765
  django_cfg/modules/django_client/core/generator/typescript/generator.py,sha256=_xuQC10SJ1ZKwA2_h3te4ZkSmH2jlnjUr__EJuBwNVE,16982
766
- django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py,sha256=suTnbSLHtaezc2kjZwbfNHYSDCYpq8DSeDJ0qL_Bkoc,19886
767
- django_cfg/modules/django_client/core/generator/typescript/models_generator.py,sha256=m8K0V1sg3wXHv4IbJggFB1nxkCwiSBGruVavo9yzlxs,8283
766
+ django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py,sha256=DVGb6z_HrNbtMC6QqsyKOjZmAUGBFSEqSo-AijPLw7A,19994
767
+ django_cfg/modules/django_client/core/generator/typescript/models_generator.py,sha256=2cBA-YzeBkGekoKz0pzT-Rt56MCvRTT-lSb44AAujfk,8787
768
768
  django_cfg/modules/django_client/core/generator/typescript/operations_generator.py,sha256=CIcRLrCBqpxOrYcjFtk0mkZGJgUnQlaRDK6G0xADoUA,13171
769
- django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py,sha256=gd6w8kvogGhy0CDmNYSLRpMG8GiEqvXrBq5TUwOfgn0,10831
769
+ django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py,sha256=tmFZ8yFJ_Nk_iT7QGDDUVSFJhg8WTF79lYDOqQDzz8c,10877
770
770
  django_cfg/modules/django_client/core/generator/typescript/templates/api_instance.ts.jinja,sha256=OPUjnz6Dk3kY97UFIRcgvxkEIKd6fUGqBzXJWOXKykE,2906
771
771
  django_cfg/modules/django_client/core/generator/typescript/templates/app_index.ts.jinja,sha256=gLsoYyEzKD6Gv64vsO9sQHMPiFMGdaB5XVufLHeRyvQ,62
772
772
  django_cfg/modules/django_client/core/generator/typescript/templates/client_file.ts.jinja,sha256=LHUt72fO2eRNAHYEscIYvqVR69GC6mxqjcgSlUzeCtc,251
@@ -840,8 +840,6 @@ django_cfg/modules/django_currency/examples/__init__.py,sha256=AaHTrP-T1wQot01qi
840
840
  django_cfg/modules/django_currency/examples/example_database_usage.py,sha256=VelbgtnvKH37jkz6e2PHTgjMEc9GiUGkcr2cPyWIwL4,4518
841
841
  django_cfg/modules/django_currency/utils/__init__.py,sha256=6nD3BGQrBn94ZqCCBG8X78KPuTmberoOauwNOUi3SUk,130
842
842
  django_cfg/modules/django_currency/utils/cache.py,sha256=lkbkjtBpok-6UljoL8u3yWgyIaaayujlaPXiCamxGHE,2557
843
- django_cfg/modules/django_dashboard/DEBUG_README.md,sha256=X1yKA_IVQHwnyam2dZ7hHroLWyLeAOQ_OMfog1ILggk,3387
844
- django_cfg/modules/django_dashboard/REFACTORING_SUMMARY.md,sha256=PAxz0u0ueJRpzDbdhHEiJQncYob5Tc_LfuE1E5OtQko,8042
845
843
  django_cfg/modules/django_dashboard/__init__.py,sha256=Uh42VBq8QRr-x1eCi2cPGdXGgQM1g4tapIv4zk-PRuo,626
846
844
  django_cfg/modules/django_dashboard/components.py,sha256=TDuD54gMzae4jirPZ-vycJN_B0Fdzvq-uvcsnMa4nnw,9451
847
845
  django_cfg/modules/django_dashboard/debug.py,sha256=XpbVYvkX7dcYqYi2ogV88hQfwAwXVep1C57WiDiIXE8,5406
@@ -855,11 +853,6 @@ django_cfg/modules/django_dashboard/sections/documentation.py,sha256=ShWCIaC2VWH
855
853
  django_cfg/modules/django_dashboard/sections/overview.py,sha256=ysycr-qTRC1ndCFmO7KaEkc1BWU-eoaNqkoRnvnaYgw,13465
856
854
  django_cfg/modules/django_dashboard/sections/stats.py,sha256=k4ogZtZtR1CEkFTvoWgU-HTysr-Y2S4Lie7CNRzl534,1348
857
855
  django_cfg/modules/django_dashboard/sections/system.py,sha256=IP4SJMPOL-gqDancE_g46ZbmlveYDvljpszRJmz1tSc,2025
858
- django_cfg/modules/django_drf_theme/CHANGELOG.md,sha256=1yT2B3opzmo0e1rgnm79rCAhfLuWAA8RxkdfSFqRGRk,5394
859
- django_cfg/modules/django_drf_theme/EXAMPLE.md,sha256=TohVazV3tafLRVUPRhrmUahOdQZhOYhLtXcXJIupxTs,10967
860
- django_cfg/modules/django_drf_theme/IMPLEMENTATION.md,sha256=clVkX9ABfwhvWMnsV6jtD-lSuV5rj_xBO2spp4oS8so,7373
861
- django_cfg/modules/django_drf_theme/README.md,sha256=yptVECIXg9qOaAJ9Fsl_oXWaEs7ThuUmbOZ3ISqWhXY,5663
862
- django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md,sha256=00uWtI7DSzJ1khKGBkMiqnkpRXAAfy_6iSEY3tcu-D8,7107
863
856
  django_cfg/modules/django_drf_theme/__init__.py,sha256=0D5ctzcjadbw-z7jpvVjvo8C1ufrGRk6b-mA4xSutTE,525
864
857
  django_cfg/modules/django_drf_theme/apps.py,sha256=UzcjnTQyMqExKGwhg5KhCK0eEqgGXtaYbCztHd_V2pw,428
865
858
  django_cfg/modules/django_drf_theme/renderers.py,sha256=AVlXpepI62iHcZhbGAsLwtXpnQ8NeN0zyWQbePUnN3w,1808
@@ -1003,7 +996,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
1003
996
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
1004
997
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
1005
998
  django_cfg/modules/django_unfold/__init__.py,sha256=Z91x1iGmkzlRbEb2L9OCFmYDKNAV9C4G3i15j5S0esc,1898
1006
- django_cfg/modules/django_unfold/dashboard.py,sha256=qzbk4LblELnQYE_HLVrf25-XHrksoaZAMbfWC59qLE8,18112
999
+ django_cfg/modules/django_unfold/dashboard.py,sha256=EFQWcUG1kfxgaP_cQJjd0qh_xFbm6cehuAeSSPipP8g,18010
1007
1000
  django_cfg/modules/django_unfold/models.py,sha256=bY6QSSaH_-r9vOTkSQjxeIkl5RaED7XkxXkT8-W5stk,4014
1008
1001
  django_cfg/modules/django_unfold/system_monitor.py,sha256=cznZqldRJqiSLSJbs4U7R2rX8ClzoIpqdfXdXqI2iQw,6955
1009
1002
  django_cfg/modules/django_unfold/tailwind.py,sha256=X9o1K3QL0VwUISgJ26sLb6zkdK-00qiDuekqTw-fydc,10846
@@ -1100,9 +1093,9 @@ django_cfg/utils/version_check.py,sha256=jI4v3YMdQriUEeb_TvRl511sDghy6I75iKRDUaN
1100
1093
  django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
1101
1094
  django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
1102
1095
  django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1103
- django_cfg/pyproject.toml,sha256=0WNgZnwXJtXHRf27_wAqyXZd3paevoZLLw-7p4wD-R4,8210
1104
- django_cfg-1.4.13.dist-info/METADATA,sha256=HCB5jEjGz2UBDub6qlL55AU8SDwqHHukwNiK2OCb-b4,22533
1105
- django_cfg-1.4.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1106
- django_cfg-1.4.13.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1107
- django_cfg-1.4.13.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1108
- django_cfg-1.4.13.dist-info/RECORD,,
1096
+ django_cfg/pyproject.toml,sha256=w_z0KHaUolA5t2-T5vEIyA1QwhXNa2jkBosNLNd4784,8210
1097
+ django_cfg-1.4.15.dist-info/METADATA,sha256=8mSJYTS5wa4dnkWG-MOuVwQANoWkE1jJU6vZJ-AcA4Y,22533
1098
+ django_cfg-1.4.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1099
+ django_cfg-1.4.15.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1100
+ django_cfg-1.4.15.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1101
+ django_cfg-1.4.15.dist-info/RECORD,,
@@ -1,105 +0,0 @@
1
- # Dashboard Debug Tool
2
-
3
- Инструмент для отладки рендеринга dashboard секций.
4
-
5
- ## Использование
6
-
7
- ### 1. Management Command
8
-
9
- Запустить из командной строки для тестирования рендера:
10
-
11
- ```bash
12
- # Рендер всех секций
13
- python manage.py debug_dashboard
14
-
15
- # Рендер конкретной секции
16
- python manage.py debug_dashboard --section overview
17
- python manage.py debug_dashboard --section stats
18
-
19
- # Указать пользователя
20
- python manage.py debug_dashboard --user admin
21
- ```
22
-
23
- ### 2. Автоматическое сохранение
24
-
25
- При каждом рендере dashboard секции автоматически сохраняются в:
26
- ```
27
- libs/django_cfg/src/django_cfg/debug/dashboard/
28
- ```
29
-
30
- Файлы:
31
- - `section_overview_YYYYMMDD_HHMMSS.html` - отрендеренный HTML
32
- - `section_overview_YYYYMMDD_HHMMSS_context.json` - контекст шаблона
33
- - `section_overview_YYYYMMDD_HHMMSS_meta.json` - метаданные
34
-
35
- **Важно**: Директория `debug/` добавлена в `.gitignore` и не попадает в git.
36
-
37
- ### 3. Программное использование
38
-
39
- ```python
40
- from django_cfg.modules.django_dashboard.debug import save_section_render
41
-
42
- # В коде секции
43
- html = section.render()
44
- save_section_render('my_section', html, section_data={'key': 'value'})
45
- ```
46
-
47
- ## Структура
48
-
49
- ```
50
- dashboard/
51
- ├── debug.py # DashboardDebugger класс
52
- ├── sections/ # Секции dashboard
53
- │ ├── overview.py # Overview секция
54
- │ ├── stats.py # Stats секция
55
- │ ├── system.py # System секция
56
- │ └── commands.py # Commands секция
57
- └── management/
58
- └── commands/
59
- └── debug_dashboard.py # Management command
60
- ```
61
-
62
- ## Сравнение с архивом
63
-
64
- ```python
65
- from django_cfg.modules.django_dashboard.debug import get_debugger
66
- from pathlib import Path
67
-
68
- debugger = get_debugger()
69
- archive = Path('@archieves/now/dashboard.html')
70
-
71
- comparison = debugger.compare_with_archive(current_html, archive)
72
- print(comparison)
73
- ```
74
-
75
- ## Debugging workflow
76
-
77
- 1. Запустить `python manage.py debug_dashboard`
78
- 2. Проверить `@archieves/debug/renders/`
79
- 3. Сравнить с `@archieves/now/dashboard.html`
80
- 4. Проверить context.json для диагностики данных
81
- 5. Исправить проблемы в секциях/шаблонах
82
- 6. Повторить
83
-
84
- ## Примеры проблем
85
-
86
- ### Пустой вывод данных
87
- Проверить в `_context.json`:
88
- - Наличие ключа `data`
89
- - Структуру данных (`data.stats`, `data.system_health`)
90
- - Значения (не None, не пустые)
91
-
92
- ### Template не найден
93
- ```
94
- TemplateDoesNotExist: admin/sections/overview_section.html
95
- ```
96
- Проверить:
97
- - Путь к шаблону в `section.template_name`
98
- - Наличие файла в `templates/admin/sections/`
99
- - Правильность extends/include
100
-
101
- ### Ошибки импорта
102
- Проверить:
103
- - Наличие всех зависимостей
104
- - Правильность импортов в секциях
105
- - Доступность моделей/конфигов
@@ -1,237 +0,0 @@
1
- # Dashboard Refactoring Summary
2
-
3
- ## Проблема
4
-
5
- После рефакторинга dashboard секции данные отображаются не полностью:
6
- - Отсутствуют Quick Actions
7
- - Отсутствует Charts Section
8
- - Отсутствуют System Metrics
9
- - Отсутствует Activity Tracker
10
- - По умолчанию открывается таб "API Zones" вместо "Overview"
11
-
12
- ## Анализ
13
-
14
- ### Старая структура (`@archieves/django_cfg/templates`)
15
- ```
16
- admin/
17
- ├── layouts/
18
- │ └── dashboard_with_tabs.html # Layout с табами и JavaScript
19
- └── snippets/
20
- ├── tabs/
21
- │ └── overview_tab.html # Полный overview с includes
22
- └── components/
23
- ├── stats_cards.html
24
- ├── quick_actions.html
25
- ├── charts_section.html
26
- ├── recent_activity.html
27
- ├── system_health.html
28
- ├── system_metrics.html
29
- └── activity_tracker.html
30
- ```
31
-
32
- ### Новая структура (после рефакторинга)
33
- ```
34
- django_cfg/
35
- ├── dashboard/
36
- │ ├── sections/
37
- │ │ ├── base.py # Базовые классы секций
38
- │ │ ├── overview.py # Overview секция (УПРОЩЕННАЯ!)
39
- │ │ ├── stats.py
40
- │ │ ├── system.py
41
- │ │ └── commands.py
42
- │ ├── debug.py # Инструмент отладки
43
- │ └── management/commands/
44
- │ └── debug_dashboard.py # Management command
45
- └── templates/admin/
46
- ├── index.html # Использует новые секции
47
- └── sections/
48
- ├── overview_section.html # Шаблон overview (УПРОЩЕННЫЙ!)
49
- └── ...
50
- ```
51
-
52
- ## Решение
53
-
54
- ### 1. Debug инструмент ✅
55
- Создан инструмент для отладки рендеринга:
56
- ```bash
57
- python manage.py debug_dashboard
58
- ```
59
-
60
- Сохраняет рендеры в `@archieves/debug/renders/`:
61
- - `section_overview_YYYYMMDD_HHMMSS.html`
62
- - `section_overview_YYYYMMDD_HHMMSS_context.json`
63
- - `section_overview_YYYYMMDD_HHMMSS_meta.json`
64
-
65
- ### 2. Автоматическое сохранение рендеров ✅
66
- При каждом рендере секции автоматически сохраняются через:
67
- ```python
68
- from django_cfg.modules.django_dashboard.debug import save_section_render
69
-
70
- save_section_render('overview', html)
71
- ```
72
-
73
- ### 3. Восстановление недостающих компонентов ✅
74
- Обновлен `overview_section.html` чтобы включать:
75
- - ✅ Quick Actions (через include)
76
- - ✅ Charts Section (через include)
77
- - ✅ Recent Activity (через include)
78
- - ✅ System Metrics (через include)
79
- - ✅ Activity Tracker (через include)
80
-
81
- ### 4. Исправление активного таба
82
- **Проблема**: По умолчанию активен таб "API Zones" (data-tab="1")
83
- **Причина**: JavaScript использует URL hash или сохраненное состояние
84
-
85
- **Решение**:
86
- - JavaScript корректно активирует первый таб при загрузке
87
- - Проблема возникает только если сохранить страницу с активным другим табом
88
-
89
- ## Архитектура
90
-
91
- ### Старый подход
92
- ```django
93
- {% extends 'admin/layouts/dashboard_with_tabs.html' %}
94
-
95
- {% block overview_tab %}
96
- {% include 'admin/snippets/tabs/overview_tab.html' %}
97
- {% endblock %}
98
- ```
99
-
100
- **Плюсы:**
101
- - Простая структура
102
- - Все компоненты в templates
103
-
104
- **Минусы:**
105
- - Нет разделения логики и представления
106
- - Нет типизации данных
107
- - Сложно тестировать
108
-
109
- ### Новый подход
110
- ```python
111
- class OverviewSection(DataSection):
112
- template_name = "admin/sections/overview_section.html"
113
-
114
- def get_data(self):
115
- return {
116
- 'stats': self.get_key_stats(),
117
- 'system_health': self.get_system_health(),
118
- }
119
- ```
120
-
121
- **Плюсы:**
122
- - Разделение логики и представления
123
- - Типизация данных
124
- - Легко тестировать
125
- - Переиспользуемые компоненты
126
-
127
- **Минусы:**
128
- - Более сложная структура
129
- - Нужно поддерживать совместимость со старыми компонентами
130
-
131
- ## Рекомендации
132
-
133
- ### Краткосрочные
134
- 1. ✅ Восстановить все компоненты в overview секции
135
- 2. ⏳ Проверить остальные секции (stats, system, commands)
136
- 3. ⏳ Добавить тесты для секций
137
-
138
- ### Долгосрочные
139
- 1. Создать templatetags для упрощения:
140
- ```django
141
- {% render_section 'overview' %}
142
- {% render_card stats %}
143
- ```
144
-
145
- 2. Унифицировать компоненты:
146
- - Переписать старые snippets как Python классы
147
- - Единый стиль для всех секций
148
-
149
- 3. Добавить конфигурацию:
150
- ```python
151
- DJANGO_CFG_DASHBOARD = {
152
- 'sections': ['overview', 'stats', 'system'],
153
- 'default_tab': 0,
154
- }
155
- ```
156
-
157
- ## Миграция со старой версии
158
-
159
- ### Вариант 1: Использовать новые секции (текущий)
160
- ```django
161
- {% extends 'admin/layouts/dashboard_with_tabs.html' %}
162
-
163
- {% block overview_tab %}
164
- {% if overview_section %}
165
- {{ overview_section|safe }}
166
- {% else %}
167
- {% include 'admin/snippets/tabs/overview_tab.html' %}
168
- {% endif %}
169
- {% endblock %}
170
- ```
171
-
172
- ### Вариант 2: Вернуться к старым includes
173
- ```django
174
- {% extends 'admin/layouts/dashboard_with_tabs.html' %}
175
-
176
- {% block overview_tab %}
177
- {% include 'admin/snippets/tabs/overview_tab.html' %}
178
- {% endblock %}
179
- ```
180
-
181
- ### Вариант 3: Гибридный подход (рекомендуется)
182
- ```django
183
- {% block overview_tab %}
184
- {% if use_new_sections %}
185
- {{ overview_section|safe }}
186
- {% else %}
187
- {% include 'admin/snippets/tabs/overview_tab.html' %}
188
- {% endif %}
189
- {% endblock %}
190
- ```
191
-
192
- ## Файлы
193
-
194
- ### Изменены
195
- - `modules/django_unfold/callbacks/main.py` - добавлен рендер секций с debug
196
- - `templates/admin/index.html` - использует новые секции
197
- - `templates/admin/sections/overview_section.html` - восстановлены компоненты
198
-
199
- ### Добавлены
200
- - `dashboard/` - новая директория с секциями
201
- - `sections/` - классы секций
202
- - `debug.py` - отладочный инструмент
203
- - `management/commands/debug_dashboard.py` - management command
204
- - `DEBUG_README.md` - документация
205
- - `REFACTORING_SUMMARY.md` - этот файл
206
-
207
- ### Архив
208
- - `@archieves/django_cfg/templates/` - старые шаблоны
209
- - `@archieves/now/dashboard.html` - последний рендер до исправлений
210
- - `@archieves/debug/renders/` - сохраненные рендеры для отладки
211
-
212
- ## Команды
213
-
214
- ### Отладка
215
- ```bash
216
- # Рендер всех секций
217
- python manage.py debug_dashboard
218
-
219
- # Рендер конкретной секции
220
- python manage.py debug_dashboard --section overview
221
-
222
- # Сравнение с архивом
223
- diff @archieves/now/dashboard.html @archieves/debug/renders/section_overview_*.html
224
- ```
225
-
226
- ### Git
227
- ```bash
228
- # Статус изменений
229
- git status libs/django_cfg/src/django_cfg
230
-
231
- # Diff изменений
232
- git diff libs/django_cfg/src/django_cfg
233
-
234
- # Добавить новые файлы
235
- git add libs/django_cfg/src/django_cfg/dashboard/
236
- git add libs/django_cfg/src/django_cfg/templates/admin/sections/
237
- ```
@@ -1,210 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to the Django DRF Tailwind Theme module will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [1.0.0] - 2025-01-XX
9
-
10
- ### 🎉 Initial Release
11
-
12
- First production-ready release of the modern Tailwind CSS theme for Django REST Framework Browsable API.
13
-
14
- ### ✨ Added
15
-
16
- #### Design & UI
17
- - Glass morphism design with backdrop-blur effects
18
- - Responsive mobile-first layout
19
- - Custom styled scrollbars
20
- - Smooth CSS transitions (200ms cubic-bezier)
21
- - Gradient color schemes (blue → purple)
22
- - HTTP method badges with color coding
23
- - Status code badges (success/error/warning)
24
-
25
- #### Theme System
26
- - Three-mode theme system (Light/Dark/Auto)
27
- - System preference detection and auto-switching
28
- - Cookie-based theme persistence
29
- - Smooth theme transitions
30
- - Theme dropdown in navbar
31
-
32
- #### Power User Features
33
- - **Command Palette** (⌘K) with quick actions:
34
- - Copy current URL
35
- - Toggle theme
36
- - Show keyboard shortcuts
37
- - **Keyboard Shortcuts**:
38
- - `⌘K` / `Ctrl+K` - Open command palette
39
- - `⌘D` / `Ctrl+D` - Toggle theme
40
- - `⌘C` / `Ctrl+C` - Copy URL
41
- - `?` - Show shortcuts help
42
- - `Esc` - Close dialogs
43
- - Toast notification system with auto-dismiss
44
- - One-click copy for JSON and URLs
45
-
46
- #### Response Viewer
47
- - Tabbed interface (Pretty/Raw/Headers)
48
- - Syntax highlighting with Prism.js
49
- - Copy button for JSON content
50
- - Collapsible JSON tree view
51
- - Character count for responses
52
- - Empty state placeholder
53
-
54
- #### Request Forms
55
- - Content type selector (JSON/Form Data/Multipart/Text)
56
- - JSON formatting and validation
57
- - Character counter for request body
58
- - Quick templates (empty object/array)
59
- - Additional headers support
60
- - Method selector (GET/POST/PUT/PATCH/DELETE)
61
- - Delete confirmation dialog
62
-
63
- #### Filters & Search
64
- - Smart field type detection
65
- - Active filters summary
66
- - One-click clear buttons
67
- - Help text tooltips
68
- - Filter persistence in URL
69
-
70
- #### Pagination
71
- - Clean pagination controls
72
- - Result count display
73
- - Previous/Next navigation
74
-
75
- #### Technical
76
- - Alpine.js v3 for reactivity (replaces jQuery)
77
- - Prism.js v1.29 for syntax highlighting
78
- - Tailwind CSS v4 integration
79
- - Template fallback mechanism
80
- - Full DRF compatibility
81
- - Extends `BrowsableAPIRenderer`
82
-
83
- ### 🔧 Configuration
84
-
85
- - Added `enable_drf_tailwind` field to `DjangoConfig` (default: `True`)
86
- - Added `renderer_classes` field to `DRFConfig`
87
- - Auto-registration in `INSTALLED_APPS` via `InstalledAppsBuilder`
88
- - Zero-configuration setup (works out of the box)
89
-
90
- ### 📊 Performance
91
-
92
- - **88% bundle size reduction** (278 KB → 33 KB)
93
- - CSS: 139 KB → 15 KB (89% reduction)
94
- - JS: 139 KB → 18 KB (87% reduction)
95
- - **+23 Lighthouse score improvement** (72 → 95)
96
- - **66% faster First Contentful Paint** (3.2s → 1.1s)
97
-
98
- ### 📚 Documentation
99
-
100
- - Complete README.md with features and usage
101
- - EXAMPLE.md with code examples
102
- - IMPLEMENTATION.md with technical details
103
- - Inline code documentation
104
- - Keyboard shortcuts help
105
-
106
- ### 🎯 Browser Support
107
-
108
- - Chrome/Edge 90+
109
- - Firefox 88+
110
- - Safari 14+
111
- - iOS Safari 14+
112
- - Chrome Mobile 90+
113
-
114
- ### 🔒 Security
115
-
116
- - No external JavaScript dependencies (CDN only for Alpine.js and Prism.js)
117
- - CSRF token handling
118
- - XSS protection via Django templating
119
- - Secure cookie handling for theme preference
120
-
121
- ---
122
-
123
- ## [Unreleased]
124
-
125
- ### 🚀 Planned Features
126
-
127
- #### Priority 2 (Next Release)
128
- - [ ] Pagination template (`pagination/numbers.html`)
129
- - [ ] Standalone JSON viewer component
130
- - [ ] Search functionality in command palette
131
- - [ ] LocalStorage theme persistence (in addition to cookies)
132
- - [ ] Export/download JSON functionality
133
- - [ ] Response time display
134
- - [ ] Request history
135
-
136
- #### Priority 3 (Future)
137
- - [ ] Unit tests with pytest
138
- - [ ] Integration tests
139
- - [ ] Visual regression tests (Playwright)
140
- - [ ] Accessibility audit (WCAG 2.1 AA compliance)
141
- - [ ] I18n support (multiple languages)
142
- - [ ] Custom color scheme configurator
143
- - [ ] Printable response view
144
- - [ ] API request bookmarks
145
-
146
- ### 🐛 Known Issues
147
-
148
- None currently. Please report issues at [GitHub Issues](https://github.com/your-org/django-cfg/issues).
149
-
150
- ---
151
-
152
- ## Version History
153
-
154
- ### [1.0.0] - 2025-01-XX
155
- - Initial production release
156
-
157
- ---
158
-
159
- ## Migration Guide
160
-
161
- ### From Bootstrap 3 (Standard DRF)
162
-
163
- No migration needed! The Tailwind theme is enabled by default and fully backward compatible.
164
-
165
- **To keep Bootstrap theme:**
166
- ```python
167
- class MyConfig(DjangoConfig):
168
- enable_drf_tailwind: bool = False
169
- ```
170
-
171
- **To use both:**
172
- ```python
173
- drf: DRFConfig = DRFConfig(
174
- renderer_classes=[
175
- 'rest_framework.renderers.JSONRenderer',
176
- 'django_cfg.modules.django_drf_theme.renderers.TailwindBrowsableAPIRenderer',
177
- 'rest_framework.renderers.BrowsableAPIRenderer', # Bootstrap fallback
178
- ]
179
- )
180
- ```
181
-
182
- ### Template Customization
183
-
184
- If you had custom DRF templates:
185
-
186
- **Old location:**
187
- ```
188
- your_app/templates/rest_framework/api.html
189
- ```
190
-
191
- **New location for Tailwind:**
192
- ```
193
- your_app/templates/rest_framework/tailwind/api.html
194
- ```
195
-
196
- Templates automatically fall back to standard DRF templates if not found.
197
-
198
- ---
199
-
200
- ## Credits
201
-
202
- - **Design Inspiration**: VS Code, Raycast, Linear, Vercel
203
- - **Technologies**: Django REST Framework, Tailwind CSS, Alpine.js, Prism.js
204
- - **Built for**: django-cfg package
205
-
206
- ---
207
-
208
- ## License
209
-
210
- Part of django-cfg. See main LICENSE file.