codex-django 0.2.5__tar.gz
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.
- codex_django-0.2.5/.djlintrc +6 -0
- codex_django-0.2.5/.github/workflows/ci.yml +111 -0
- codex_django-0.2.5/.github/workflows/docs.yml +73 -0
- codex_django-0.2.5/.github/workflows/publish.yml +42 -0
- codex_django-0.2.5/.gitignore +91 -0
- codex_django-0.2.5/.pre-commit-config.yaml +37 -0
- codex_django-0.2.5/.python-version +1 -0
- codex_django-0.2.5/CHANGELOG.md +64 -0
- codex_django-0.2.5/CLAUDE.md +133 -0
- codex_django-0.2.5/PKG-INFO +189 -0
- codex_django-0.2.5/README.md +119 -0
- codex_django-0.2.5/docs/changelog.md +11 -0
- codex_django-0.2.5/docs/dev/cheatsheet_libraries.md +48 -0
- codex_django-0.2.5/docs/dev/pypi_alpha_release.md +66 -0
- codex_django-0.2.5/docs/en/README.md +28 -0
- codex_django-0.2.5/docs/en/api/README.md +26 -0
- codex_django-0.2.5/docs/en/api/booking.md +28 -0
- codex_django-0.2.5/docs/en/api/cabinet.md +31 -0
- codex_django-0.2.5/docs/en/api/cli.md +18 -0
- codex_django-0.2.5/docs/en/api/core.md +22 -0
- codex_django-0.2.5/docs/en/api/internal/booking.md +37 -0
- codex_django-0.2.5/docs/en/api/internal/cabinet.md +45 -0
- codex_django-0.2.5/docs/en/api/internal/cli.md +19 -0
- codex_django-0.2.5/docs/en/api/internal/core.md +53 -0
- codex_django-0.2.5/docs/en/api/internal/notifications.md +25 -0
- codex_django-0.2.5/docs/en/api/internal/system.md +41 -0
- codex_django-0.2.5/docs/en/api/notifications.md +29 -0
- codex_django-0.2.5/docs/en/api/system.md +19 -0
- codex_django-0.2.5/docs/en/architecture/README.md +17 -0
- codex_django-0.2.5/docs/en/architecture/booking.md +149 -0
- codex_django-0.2.5/docs/en/architecture/cabinet.md +180 -0
- codex_django-0.2.5/docs/en/architecture/cli/README.md +19 -0
- codex_django-0.2.5/docs/en/architecture/cli/blueprints.md +12 -0
- codex_django-0.2.5/docs/en/architecture/cli/commands.md +7 -0
- codex_django-0.2.5/docs/en/architecture/cli/engine.md +7 -0
- codex_django-0.2.5/docs/en/architecture/cli/entrypoints.md +12 -0
- codex_django-0.2.5/docs/en/architecture/cli/module.md +17 -0
- codex_django-0.2.5/docs/en/architecture/cli/project-output.md +7 -0
- codex_django-0.2.5/docs/en/architecture/core.md +120 -0
- codex_django-0.2.5/docs/en/architecture/notifications.md +125 -0
- codex_django-0.2.5/docs/en/architecture/showcase.md +120 -0
- codex_django-0.2.5/docs/en/architecture/system.md +148 -0
- codex_django-0.2.5/docs/en/getting-started.md +67 -0
- codex_django-0.2.5/docs/en/guides/blueprints-and-scaffolding.md +43 -0
- codex_django-0.2.5/docs/en/guides/booking.md +43 -0
- codex_django-0.2.5/docs/en/guides/cabinet.md +37 -0
- codex_django-0.2.5/docs/en/guides/installation-modes.md +64 -0
- codex_django-0.2.5/docs/en/guides/notifications.md +38 -0
- codex_django-0.2.5/docs/en/guides/project-structure.md +45 -0
- codex_django-0.2.5/docs/en/guides/runtime-vs-cli.md +54 -0
- codex_django-0.2.5/docs/en/guides/system.md +34 -0
- codex_django-0.2.5/docs/index.md +126 -0
- codex_django-0.2.5/docs/javascripts/mermaid.js +16 -0
- codex_django-0.2.5/docs/ru/README.md +28 -0
- codex_django-0.2.5/docs/ru/architecture/README.md +17 -0
- codex_django-0.2.5/docs/ru/architecture/booking.md +149 -0
- codex_django-0.2.5/docs/ru/architecture/cabinet.md +180 -0
- codex_django-0.2.5/docs/ru/architecture/cli/README.md +19 -0
- codex_django-0.2.5/docs/ru/architecture/cli/blueprints.md +12 -0
- codex_django-0.2.5/docs/ru/architecture/cli/commands.md +7 -0
- codex_django-0.2.5/docs/ru/architecture/cli/engine.md +7 -0
- codex_django-0.2.5/docs/ru/architecture/cli/entrypoints.md +12 -0
- codex_django-0.2.5/docs/ru/architecture/cli/module.md +17 -0
- codex_django-0.2.5/docs/ru/architecture/cli/project-output.md +7 -0
- codex_django-0.2.5/docs/ru/architecture/core.md +120 -0
- codex_django-0.2.5/docs/ru/architecture/notifications.md +125 -0
- codex_django-0.2.5/docs/ru/architecture/showcase.md +120 -0
- codex_django-0.2.5/docs/ru/architecture/system.md +148 -0
- codex_django-0.2.5/docs/ru/getting-started.md +67 -0
- codex_django-0.2.5/docs/ru/guides/blueprints-and-scaffolding.md +43 -0
- codex_django-0.2.5/docs/ru/guides/booking.md +41 -0
- codex_django-0.2.5/docs/ru/guides/cabinet.md +37 -0
- codex_django-0.2.5/docs/ru/guides/installation-modes.md +64 -0
- codex_django-0.2.5/docs/ru/guides/notifications.md +38 -0
- codex_django-0.2.5/docs/ru/guides/project-structure.md +44 -0
- codex_django-0.2.5/docs/ru/guides/runtime-vs-cli.md +54 -0
- codex_django-0.2.5/docs/ru/guides/system.md +34 -0
- codex_django-0.2.5/docs/stylesheets/extra.css +78 -0
- codex_django-0.2.5/mkdocs.yml +126 -0
- codex_django-0.2.5/pyproject.toml +142 -0
- codex_django-0.2.5/src/codex_django/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/apps.py +6 -0
- codex_django-0.2.5/src/codex_django/booking/__init__.py +48 -0
- codex_django-0.2.5/src/codex_django/booking/adapters/__init__.py +13 -0
- codex_django-0.2.5/src/codex_django/booking/adapters/availability.py +424 -0
- codex_django-0.2.5/src/codex_django/booking/adapters/cache.py +39 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/__init__.py +63 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/appointment.py +114 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/master.py +154 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/schedule.py +106 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/service.py +109 -0
- codex_django-0.2.5/src/codex_django/booking/mixins/settings.py +140 -0
- codex_django-0.2.5/src/codex_django/booking/selectors.py +367 -0
- codex_django-0.2.5/src/codex_django/cabinet/__init__.py +28 -0
- codex_django-0.2.5/src/codex_django/cabinet/apps.py +18 -0
- codex_django-0.2.5/src/codex_django/cabinet/context_processors.py +61 -0
- codex_django-0.2.5/src/codex_django/cabinet/migrations/0001_initial.py +44 -0
- codex_django-0.2.5/src/codex_django/cabinet/migrations/__init__.py +0 -0
- codex_django-0.2.5/src/codex_django/cabinet/models/__init__.py +11 -0
- codex_django-0.2.5/src/codex_django/cabinet/models/mixins.py +57 -0
- codex_django-0.2.5/src/codex_django/cabinet/models/settings.py +86 -0
- codex_django-0.2.5/src/codex_django/cabinet/redis/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/cabinet/redis/managers/__init__.py +6 -0
- codex_django-0.2.5/src/codex_django/cabinet/redis/managers/dashboard.py +125 -0
- codex_django-0.2.5/src/codex_django/cabinet/redis/managers/settings.py +62 -0
- codex_django-0.2.5/src/codex_django/cabinet/registry.py +129 -0
- codex_django-0.2.5/src/codex_django/cabinet/selector/__init__.py +5 -0
- codex_django-0.2.5/src/codex_django/cabinet/selector/dashboard.py +178 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/css/codex_cabinet.css +351 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/css/fonts/bootstrap-icons.woff +0 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/css/fonts/bootstrap-icons.woff2 +0 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/js/app/cabinet.js +37 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/js/vendor/alpine.min.js +5 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/js/vendor/bootstrap.bundle.min.js +7 -0
- codex_django-0.2.5/src/codex_django/cabinet/static/cabinet/js/vendor/htmx.min.js +9 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/login.html +52 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/logout.html +31 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/password_reset.html +56 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/password_reset_done.html +29 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/password_reset_from_key.html +62 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/password_reset_from_key_done.html +29 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/signup.html +58 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/account/verification_sent.html +29 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/base_auth.html +26 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/base_cabinet.html +75 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/base_client.html +111 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/base_htmx.html +14 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/dashboard/index.html +135 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_avatar.html +1 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_empty_state.html +8 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_export_modal.html +34 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_head.html +8 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_modal_base.html +5 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_nav_item.html +9 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_page_header.html +12 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_report_filters.html +64 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_sidebar.html +34 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_sidebar_client.html +35 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_sidebar_staff.html +26 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_status_badge.html +1 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_topbar.html +111 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/includes/_topbar_shortcut.html +6 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/index.html +116 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_contact.html +83 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_email.html +83 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_geo.html +54 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_legal.html +76 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_marketing.html +67 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_social.html +107 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/site_settings/partials/_technical.html +79 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/widgets/chart.html +33 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/widgets/donut.html +14 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/widgets/kpi.html +23 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/widgets/list.html +45 -0
- codex_django-0.2.5/src/codex_django/cabinet/templates/cabinet/widgets/table.html +99 -0
- codex_django-0.2.5/src/codex_django/cabinet/types.py +130 -0
- codex_django-0.2.5/src/codex_django/cabinet/urls.py +14 -0
- codex_django-0.2.5/src/codex_django/cabinet/views/__init__.py +10 -0
- codex_django-0.2.5/src/codex_django/cabinet/views/dashboard.py +21 -0
- codex_django-0.2.5/src/codex_django/cabinet/views/site_settings.py +54 -0
- codex_django-0.2.5/src/codex_django/cli/__init__.py +20 -0
- codex_django-0.2.5/src/codex_django/cli/_compat.py +23 -0
- codex_django-0.2.5/src/codex_django/cli/commands/__init__.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/add_app.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/booking.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/client_cabinet.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/deploy.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/init.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/notifications.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/commands/quality.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/engine.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/main.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/prompts.py +9 -0
- codex_django-0.2.5/src/codex_django/cli/utils.py +9 -0
- codex_django-0.2.5/src/codex_django/core/__init__.py +25 -0
- codex_django-0.2.5/src/codex_django/core/context_processors.py +41 -0
- codex_django-0.2.5/src/codex_django/core/i18n/__init__.py +5 -0
- codex_django-0.2.5/src/codex_django/core/i18n/discovery.py +60 -0
- codex_django-0.2.5/src/codex_django/core/management/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/core/management/commands/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/core/management/commands/codex_makemessages.py +209 -0
- codex_django-0.2.5/src/codex_django/core/mixins/__init__.py +30 -0
- codex_django-0.2.5/src/codex_django/core/mixins/models.py +168 -0
- codex_django-0.2.5/src/codex_django/core/redis/__init__.py +25 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/__init__.py +19 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/base.py +41 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/booking.py +127 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/notifications.py +75 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/seo.py +98 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/settings.py +124 -0
- codex_django-0.2.5/src/codex_django/core/redis/managers/static_content.py +48 -0
- codex_django-0.2.5/src/codex_django/core/seo/__init__.py +5 -0
- codex_django-0.2.5/src/codex_django/core/seo/selectors.py +64 -0
- codex_django-0.2.5/src/codex_django/core/sitemaps.py +100 -0
- codex_django-0.2.5/src/codex_django/core/templatetags/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/core/templatetags/codex_i18n.py +35 -0
- codex_django-0.2.5/src/codex_django/notifications/__init__.py +40 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/__init__.py +0 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/arq_client.py +79 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/cache_adapter.py +32 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/direct_adapter.py +120 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/i18n_adapter.py +24 -0
- codex_django-0.2.5/src/codex_django/notifications/adapters/queue_adapter.py +50 -0
- codex_django-0.2.5/src/codex_django/notifications/builder.py +117 -0
- codex_django-0.2.5/src/codex_django/notifications/mixins/__init__.py +0 -0
- codex_django-0.2.5/src/codex_django/notifications/mixins/models.py +47 -0
- codex_django-0.2.5/src/codex_django/notifications/selector.py +113 -0
- codex_django-0.2.5/src/codex_django/notifications/service.py +227 -0
- codex_django-0.2.5/src/codex_django/py.typed +0 -0
- codex_django-0.2.5/src/codex_django/showcase/__init__.py +0 -0
- codex_django-0.2.5/src/codex_django/showcase/apps.py +7 -0
- codex_django-0.2.5/src/codex_django/showcase/mock.py +1467 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/app.css +644 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/base/layout.css +64 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/base/reset.css +15 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/base.css +20 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/bootstrap/overrides.css +1 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/cabinet.css +353 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/compiler_config.json +5 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/components/auth.css +214 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/components/buttons.css +1 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/components/cards.css +1 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/components/forms.css +1 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/components/tables.css +1 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/fonts/bootstrap-icons.woff +0 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/fonts/bootstrap-icons.woff2 +0 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/theme/tokens.css +30 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/vendor/bootstrap-icons.min.css +5 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/css/vendor/bootstrap.min.css +6 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/js/app/cabinet.js +37 -0
- codex_django-0.2.5/src/codex_django/showcase/static/showcase/cabinet/js/vendor/bootstrap.bundle.min.js +7 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/analytics/reports.html +46 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/auth/login.html +10 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/base_auth.html +26 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/base_cabinet.html +73 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/base_client.html +146 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/base_htmx.html +14 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/booking/appointments.html +288 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/booking/base_booking.html +47 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/booking/index.html +233 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/booking/new.html +274 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/catalog/index.html +35 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/client/my_appointments.html +246 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/client/profile.html +114 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/client/settings.html +123 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/client/settings_notifications.html +105 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/client/settings_privacy.html +134 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/clients/index.html +184 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/conversations/_detail.html +110 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/conversations/_empty.html +5 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/conversations/index.html +134 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/dashboard/index.html +136 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_avatar.html +1 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_empty_state.html +8 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_export_modal.html +34 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_head.html +11 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_modal_base.html +5 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_nav_item.html +9 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_page_header.html +12 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_report_filters.html +64 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_sidebar.html +34 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_sidebar_client.html +59 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_sidebar_staff.html +104 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_status_badge.html +1 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_topbar.html +192 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/_topbar_shortcut.html +6 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/client/_sidebar.html +0 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/includes/client/_topbar.html +0 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/notifications/log.html +140 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/notifications/templates.html +161 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/index.html +116 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_contact.html +83 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_email.html +83 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_geo.html +54 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_legal.html +76 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_marketing.html +67 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_social.html +107 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_technical.html +88 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/site_settings/partials/_topbar.html +123 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/staff/index.html +196 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/chart.html +33 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/client_base.html +22 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/donut.html +14 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/kpi.html +23 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/list.html +43 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/cabinet/widgets/table.html +99 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/includes/showcase_hub.html +169 -0
- codex_django-0.2.5/src/codex_django/showcase/templates/showcase/index.html +19 -0
- codex_django-0.2.5/src/codex_django/showcase/templatetags/__init__.py +0 -0
- codex_django-0.2.5/src/codex_django/showcase/templatetags/showcase_extras.py +13 -0
- codex_django-0.2.5/src/codex_django/showcase/urls.py +44 -0
- codex_django-0.2.5/src/codex_django/showcase/views.py +147 -0
- codex_django-0.2.5/src/codex_django/system/__init__.py +26 -0
- codex_django-0.2.5/src/codex_django/system/context_processors.py +75 -0
- codex_django-0.2.5/src/codex_django/system/management/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/system/management/base_commands.py +153 -0
- codex_django-0.2.5/src/codex_django/system/mixins/__init__.py +56 -0
- codex_django-0.2.5/src/codex_django/system/mixins/integrations.py +185 -0
- codex_django-0.2.5/src/codex_django/system/mixins/seo.py +59 -0
- codex_django-0.2.5/src/codex_django/system/mixins/settings.py +308 -0
- codex_django-0.2.5/src/codex_django/system/mixins/translations.py +52 -0
- codex_django-0.2.5/src/codex_django/system/mixins/user_profile.py +93 -0
- codex_django-0.2.5/src/codex_django/system/redis/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/system/redis/managers/__init__.py +5 -0
- codex_django-0.2.5/src/codex_django/system/redis/managers/fixtures.py +67 -0
- codex_django-0.2.5/src/codex_django/system/utils/__init__.py +1 -0
- codex_django-0.2.5/src/codex_django/system/utils/fixture_hash.py +45 -0
- codex_django-0.2.5/tests/__init__.py +0 -0
- codex_django-0.2.5/tests/conftest.py +42 -0
- codex_django-0.2.5/tests/e2e/__init__.py +0 -0
- codex_django-0.2.5/tests/integration/__init__.py +0 -0
- codex_django-0.2.5/tests/settings.py +47 -0
- codex_django-0.2.5/tests/unit/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/booking/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/booking/conftest.py +35 -0
- codex_django-0.2.5/tests/unit/booking/test_availability_adapter.py +741 -0
- codex_django-0.2.5/tests/unit/booking/test_cache_adapter.py +109 -0
- codex_django-0.2.5/tests/unit/booking/test_selectors.py +561 -0
- codex_django-0.2.5/tests/unit/booking/test_settings_mixins.py +139 -0
- codex_django-0.2.5/tests/unit/cabinet/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/cabinet/test_context_processors.py +119 -0
- codex_django-0.2.5/tests/unit/cabinet/test_context_processors_namespacing.py +84 -0
- codex_django-0.2.5/tests/unit/cabinet/test_dashboard_cache.py +65 -0
- codex_django-0.2.5/tests/unit/cabinet/test_dashboard_selector.py +165 -0
- codex_django-0.2.5/tests/unit/cabinet/test_models.py +85 -0
- codex_django-0.2.5/tests/unit/cabinet/test_redis_managers.py +122 -0
- codex_django-0.2.5/tests/unit/cabinet/test_registry.py +115 -0
- codex_django-0.2.5/tests/unit/cabinet/test_types.py +98 -0
- codex_django-0.2.5/tests/unit/cabinet/test_urls.py +10 -0
- codex_django-0.2.5/tests/unit/cabinet/test_views.py +75 -0
- codex_django-0.2.5/tests/unit/cli/test_compat_shims.py +104 -0
- codex_django-0.2.5/tests/unit/core/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/core/redis/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/core/redis/test_managers.py +298 -0
- codex_django-0.2.5/tests/unit/core/test_codex_makemessages.py +82 -0
- codex_django-0.2.5/tests/unit/core/test_core_context_processors.py +114 -0
- codex_django-0.2.5/tests/unit/core/test_i18n_discovery.py +86 -0
- codex_django-0.2.5/tests/unit/core/test_seo_selectors.py +107 -0
- codex_django-0.2.5/tests/unit/core/test_sitemaps.py +73 -0
- codex_django-0.2.5/tests/unit/notifications/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/notifications/conftest.py +34 -0
- codex_django-0.2.5/tests/unit/notifications/test_adapters.py +421 -0
- codex_django-0.2.5/tests/unit/notifications/test_builder.py +206 -0
- codex_django-0.2.5/tests/unit/notifications/test_engine.py +195 -0
- codex_django-0.2.5/tests/unit/notifications/test_selector.py +138 -0
- codex_django-0.2.5/tests/unit/showcase/test_apps.py +10 -0
- codex_django-0.2.5/tests/unit/showcase/test_mock.py +38 -0
- codex_django-0.2.5/tests/unit/showcase/test_urls_and_tags.py +17 -0
- codex_django-0.2.5/tests/unit/showcase/test_views.py +172 -0
- codex_django-0.2.5/tests/unit/system/__init__.py +0 -0
- codex_django-0.2.5/tests/unit/system/test_base_commands.py +207 -0
- codex_django-0.2.5/tests/unit/system/test_context_processors.py +121 -0
- codex_django-0.2.5/tests/unit/system/test_fixture_hash.py +44 -0
- codex_django-0.2.5/tests/unit/system/test_mixins.py +176 -0
- codex_django-0.2.5/tests/urls.py +1 -0
- codex_django-0.2.5/tools/__init__.py +0 -0
- codex_django-0.2.5/tools/dev/__init__.py +0 -0
- codex_django-0.2.5/tools/dev/check.py +98 -0
- codex_django-0.2.5/uv.lock +2195 -0
- codex_django-0.2.5/verify_init.py +32 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
name: CI Pipeline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [develop, main]
|
|
6
|
+
paths-ignore: ["**.md", "docs/**", ".gitignore"]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
quality-gate:
|
|
13
|
+
name: Quality Gate
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
- uses: astral-sh/setup-uv@v7
|
|
21
|
+
with:
|
|
22
|
+
version: "0.10.7"
|
|
23
|
+
|
|
24
|
+
- name: Sync dev environment
|
|
25
|
+
run: uv sync --locked --extra maintainer
|
|
26
|
+
|
|
27
|
+
- name: Run pre-commit
|
|
28
|
+
run: uv run pre-commit run --all-files
|
|
29
|
+
|
|
30
|
+
- name: Run pip-audit
|
|
31
|
+
run: uv run pip-audit --skip-editable --ignore-vuln CVE-2026-4539
|
|
32
|
+
|
|
33
|
+
- name: Run mypy
|
|
34
|
+
run: uv run mypy src/
|
|
35
|
+
|
|
36
|
+
unit-tests:
|
|
37
|
+
name: Unit Tests
|
|
38
|
+
needs: quality-gate
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
- uses: actions/setup-python@v5
|
|
43
|
+
with:
|
|
44
|
+
python-version: "3.12"
|
|
45
|
+
- uses: astral-sh/setup-uv@v7
|
|
46
|
+
with:
|
|
47
|
+
version: "0.10.7"
|
|
48
|
+
|
|
49
|
+
- name: Sync dev environment
|
|
50
|
+
run: uv sync --locked --extra maintainer
|
|
51
|
+
|
|
52
|
+
- name: Run unit tests
|
|
53
|
+
run: uv run pytest tests/ -m "unit" -v --tb=short
|
|
54
|
+
|
|
55
|
+
integration-tests:
|
|
56
|
+
name: Integration Tests
|
|
57
|
+
needs: unit-tests
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v4
|
|
62
|
+
- uses: actions/setup-python@v5
|
|
63
|
+
with:
|
|
64
|
+
python-version: "3.12"
|
|
65
|
+
- uses: astral-sh/setup-uv@v7
|
|
66
|
+
with:
|
|
67
|
+
version: "0.10.7"
|
|
68
|
+
|
|
69
|
+
- name: Sync dev environment
|
|
70
|
+
run: uv sync --locked --extra maintainer
|
|
71
|
+
|
|
72
|
+
- name: Run integration tests
|
|
73
|
+
run: |
|
|
74
|
+
set +e
|
|
75
|
+
uv run pytest --override-ini addopts='' tests/ -m "integration" -v --tb=short
|
|
76
|
+
status=$?
|
|
77
|
+
set -e
|
|
78
|
+
if [ "$status" -eq 5 ]; then
|
|
79
|
+
echo "No integration tests collected; treating as success."
|
|
80
|
+
exit 0
|
|
81
|
+
fi
|
|
82
|
+
exit "$status"
|
|
83
|
+
|
|
84
|
+
e2e-tests:
|
|
85
|
+
name: E2E Tests
|
|
86
|
+
needs: integration-tests
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
- uses: actions/setup-python@v5
|
|
92
|
+
with:
|
|
93
|
+
python-version: "3.12"
|
|
94
|
+
- uses: astral-sh/setup-uv@v7
|
|
95
|
+
with:
|
|
96
|
+
version: "0.10.7"
|
|
97
|
+
|
|
98
|
+
- name: Sync dev environment
|
|
99
|
+
run: uv sync --locked --extra maintainer
|
|
100
|
+
|
|
101
|
+
- name: Run E2E tests
|
|
102
|
+
run: |
|
|
103
|
+
set +e
|
|
104
|
+
uv run pytest --override-ini addopts='' tests/ -m "e2e" -v --tb=short
|
|
105
|
+
status=$?
|
|
106
|
+
set -e
|
|
107
|
+
if [ "$status" -eq 5 ]; then
|
|
108
|
+
echo "No E2E tests collected; treating as success."
|
|
109
|
+
exit 0
|
|
110
|
+
fi
|
|
111
|
+
exit "$status"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Deploy Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
version:
|
|
10
|
+
description: "Version alias to deploy (e.g. 0.x, 1.x)"
|
|
11
|
+
required: true
|
|
12
|
+
alias:
|
|
13
|
+
description: "Alias (latest, stable, or leave empty)"
|
|
14
|
+
required: false
|
|
15
|
+
default: "latest"
|
|
16
|
+
|
|
17
|
+
env:
|
|
18
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: write
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
deploy:
|
|
25
|
+
name: Build & Deploy Docs
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout code
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
|
|
33
|
+
- name: Configure Git Credentials
|
|
34
|
+
run: |
|
|
35
|
+
git config user.name github-actions[bot]
|
|
36
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
|
37
|
+
|
|
38
|
+
- name: Set up Python 3.12
|
|
39
|
+
uses: actions/setup-python@v5
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
- uses: astral-sh/setup-uv@v7
|
|
43
|
+
with:
|
|
44
|
+
version: "0.10.7"
|
|
45
|
+
|
|
46
|
+
- name: Sync docs environment
|
|
47
|
+
run: uv sync --locked --extra docs
|
|
48
|
+
|
|
49
|
+
- name: Resolve version alias (tag push)
|
|
50
|
+
if: github.event_name == 'push'
|
|
51
|
+
id: version
|
|
52
|
+
run: |
|
|
53
|
+
TAG="${GITHUB_REF_NAME}"
|
|
54
|
+
VERSION=$(echo "$TAG" | sed 's/^v//')
|
|
55
|
+
MAJOR=$(echo "$VERSION" | cut -d. -f1)
|
|
56
|
+
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
57
|
+
echo "alias=${MAJOR}.x" >> "$GITHUB_OUTPUT"
|
|
58
|
+
|
|
59
|
+
- name: Deploy versioned docs (tag push)
|
|
60
|
+
if: github.event_name == 'push'
|
|
61
|
+
run: |
|
|
62
|
+
uv run mike deploy --push --update-aliases "${{ steps.version.outputs.version }}" "${{ steps.version.outputs.alias }}" latest
|
|
63
|
+
uv run mike set-default --push latest
|
|
64
|
+
|
|
65
|
+
- name: Deploy versioned docs (manual)
|
|
66
|
+
if: github.event_name == 'workflow_dispatch'
|
|
67
|
+
run: |
|
|
68
|
+
if [ -n "${{ inputs.alias }}" ]; then
|
|
69
|
+
uv run mike deploy --push --update-aliases "${{ inputs.version }}" "${{ inputs.alias }}"
|
|
70
|
+
else
|
|
71
|
+
uv run mike deploy --push "${{ inputs.version }}"
|
|
72
|
+
fi
|
|
73
|
+
uv run mike set-default --push latest
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-n-publish:
|
|
10
|
+
name: Build and publish to PyPI
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
environment:
|
|
13
|
+
name: pypi
|
|
14
|
+
url: https://pypi.org/project/codex-django/
|
|
15
|
+
permissions:
|
|
16
|
+
id-token: write
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout code
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
- uses: astral-sh/setup-uv@v7
|
|
30
|
+
with:
|
|
31
|
+
version: "0.10.7"
|
|
32
|
+
|
|
33
|
+
- name: Build sdist and wheel
|
|
34
|
+
run: uv build --no-sources
|
|
35
|
+
|
|
36
|
+
- name: Check artifacts
|
|
37
|
+
run: uvx twine check dist/*
|
|
38
|
+
|
|
39
|
+
- name: Publish to PyPI
|
|
40
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
41
|
+
with:
|
|
42
|
+
print-hash: true
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# Unit test / coverage reports
|
|
30
|
+
htmlcov/
|
|
31
|
+
.tox/
|
|
32
|
+
.nox/
|
|
33
|
+
.coverage
|
|
34
|
+
.coverage.*
|
|
35
|
+
.cache
|
|
36
|
+
nosetests.xml
|
|
37
|
+
coverage.xml
|
|
38
|
+
*.cover
|
|
39
|
+
*.py.cover
|
|
40
|
+
.hypothesis/
|
|
41
|
+
.pytest_cache/
|
|
42
|
+
cover/
|
|
43
|
+
|
|
44
|
+
# Django stuff:
|
|
45
|
+
*.log
|
|
46
|
+
local_settings.py
|
|
47
|
+
db.sqlite3
|
|
48
|
+
db.sqlite3-journal
|
|
49
|
+
|
|
50
|
+
# Environments
|
|
51
|
+
.env
|
|
52
|
+
.envrc
|
|
53
|
+
.venv
|
|
54
|
+
.venv-rebuild/
|
|
55
|
+
env/
|
|
56
|
+
venv/
|
|
57
|
+
ENV/
|
|
58
|
+
env.bak/
|
|
59
|
+
venv.bak/
|
|
60
|
+
|
|
61
|
+
# mkdocs documentation
|
|
62
|
+
/site
|
|
63
|
+
|
|
64
|
+
# mypy
|
|
65
|
+
.mypy_cache/
|
|
66
|
+
.dmypy.json
|
|
67
|
+
dmypy.json
|
|
68
|
+
|
|
69
|
+
# Ruff stuff:
|
|
70
|
+
.ruff_cache/
|
|
71
|
+
.uv-cache/
|
|
72
|
+
|
|
73
|
+
# PyPI configuration file
|
|
74
|
+
.pypirc
|
|
75
|
+
|
|
76
|
+
# Claude Code
|
|
77
|
+
.claude/
|
|
78
|
+
|
|
79
|
+
# IDEs
|
|
80
|
+
.idea/
|
|
81
|
+
.vscode/
|
|
82
|
+
.cursorignore
|
|
83
|
+
.cursorindexingignore
|
|
84
|
+
|
|
85
|
+
# OS junk
|
|
86
|
+
.DS_Store
|
|
87
|
+
Thumbs.db
|
|
88
|
+
*.swp
|
|
89
|
+
|
|
90
|
+
# Codex Sandbox
|
|
91
|
+
sandbox/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v5.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
exclude: ^mkdocs\.yml$
|
|
9
|
+
- id: check-json
|
|
10
|
+
- id: check-added-large-files
|
|
11
|
+
args: ['--maxkb=2000']
|
|
12
|
+
- id: check-merge-conflict
|
|
13
|
+
|
|
14
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
15
|
+
rev: v0.9.6
|
|
16
|
+
hooks:
|
|
17
|
+
- id: ruff
|
|
18
|
+
args: [--fix]
|
|
19
|
+
- id: ruff-format
|
|
20
|
+
|
|
21
|
+
- repo: https://github.com/igorshubovych/markdownlint-cli
|
|
22
|
+
rev: v0.44.0
|
|
23
|
+
hooks:
|
|
24
|
+
- id: markdownlint
|
|
25
|
+
args: ["--fix", "--disable", "MD013"]
|
|
26
|
+
|
|
27
|
+
- repo: https://github.com/PyCQA/bandit
|
|
28
|
+
rev: 1.8.2
|
|
29
|
+
hooks:
|
|
30
|
+
- id: bandit
|
|
31
|
+
args: ["-c", "pyproject.toml"]
|
|
32
|
+
additional_dependencies: ["bandit[toml]"]
|
|
33
|
+
|
|
34
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
35
|
+
rev: v1.5.0
|
|
36
|
+
hooks:
|
|
37
|
+
- id: detect-secrets
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
- Ongoing release polish after the first public packaging pass.
|
|
8
|
+
|
|
9
|
+
## [0.2.5] - 2026-03-29
|
|
10
|
+
|
|
11
|
+
First public release.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Optional `cli` extra that installs the published `codex-django-cli` companion package.
|
|
16
|
+
- Runtime compatibility shims that forward legacy `codex_django.cli.*` imports to `codex-django-cli`.
|
|
17
|
+
- Additional runtime test coverage for dashboard selectors, Redis managers, and showcase views.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Refocused `codex-django` on reusable Django runtime modules while project scaffolding lives in `codex-django-cli`.
|
|
22
|
+
- Replaced the old runtime extras layout with `cli`, `dev`, `maintainer`, and `docs`.
|
|
23
|
+
- Updated README, install guides, and CI workflow around the runtime/CLI split.
|
|
24
|
+
- Reworked the docs landing page into a runtime-oriented entry screen with quick-start paths and module navigation.
|
|
25
|
+
- Raised the runtime coverage threshold to reflect the audited baseline.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Packaging metadata and lockfile resolution for `codex-django[cli]`.
|
|
30
|
+
- Online installation flow where a built `codex-django` wheel pulls `codex-django-cli` from the package registry.
|
|
31
|
+
- Compatibility typing around the lazy CLI dispatch module.
|
|
32
|
+
- Empty integration/e2e marker handling in the maintainer quality gate.
|
|
33
|
+
- Async test environment resolution by restoring `arq` and `pytest-asyncio` in development extras.
|
|
34
|
+
- Missing `unit` marker coverage for cabinet context processor tests.
|
|
35
|
+
|
|
36
|
+
## [0.2.0] - Internal milestone
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- Broader runtime modules for cabinet, showcase, booking, system, notifications, and core integrations.
|
|
41
|
+
- Expanded unit coverage for runtime helpers and compatibility surfaces.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Reworked the runtime architecture around reusable adapters, mixins, selectors, and generated-project boundaries.
|
|
46
|
+
- Evolved scaffold templates and docs in parallel with the runtime modules.
|
|
47
|
+
|
|
48
|
+
## [0.1.5] - Internal milestone
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- Cabinet/dashboard foundation with selectors, widgets, settings, and templates.
|
|
53
|
+
- Showcase reference implementation with mock data, views, and demo flows.
|
|
54
|
+
- Booking runtime adapters and selectors.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- Extended project templates, feature blueprints, and deployment-oriented repository scaffolds.
|
|
59
|
+
|
|
60
|
+
## [0.1.0] - Internal milestone
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- Initial library scaffold for Django runtime utilities, mixins, adapters, and Codex-oriented project structure.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# CLAUDE.md — codex-django
|
|
2
|
+
|
|
3
|
+
> Читать в начале каждой сессии. Содержит ориентацию по проекту, памяти и ветках.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Расположение проекта
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
C:\install\projects\codex_tools\codex-django\
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Все codex-* библиотеки — соседи на одном уровне:
|
|
14
|
+
```
|
|
15
|
+
C:\install\projects\codex_tools\
|
|
16
|
+
codex-core\
|
|
17
|
+
codex-platform\
|
|
18
|
+
codex-services\
|
|
19
|
+
codex-django\ ← этот проект
|
|
20
|
+
codex-bot\
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Файлы памяти (локальные)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
C:\Users\prime\.claude\projects\C--install-projects-codex-tools-codex-django\memory\
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Файл | Содержимое |
|
|
32
|
+
|------|-----------|
|
|
33
|
+
| `MEMORY.md` | Мастер-индекс. Читать первым. |
|
|
34
|
+
| `claude_context.md` | Стиль работы, частые ошибки, активные проекты |
|
|
35
|
+
| `roadmap_overview.md` | 8 блоков доделки, порядок, статусы |
|
|
36
|
+
| `roadmap_block1.md` | ✅ Git hygiene + стабы |
|
|
37
|
+
| `roadmap_block2.md` | Тесты: booking + notifications |
|
|
38
|
+
| `roadmap_block3.md` | Тесты: system + core |
|
|
39
|
+
| `roadmap_block4.md` | Cabinet: widget adapter + client cabinet |
|
|
40
|
+
| `roadmap_block5.md` | i18n валидация |
|
|
41
|
+
| `roadmap_block6.md` | Booking: мульти-сервис |
|
|
42
|
+
| `roadmap_block7.md` | Docs + PyPI alpha |
|
|
43
|
+
| `roadmap_block8.md` | Deploy blueprints + Showcase |
|
|
44
|
+
| `cabinet_index.md` | Архитектура кабинета |
|
|
45
|
+
| `cabinet_css_js.md` | CSS/JS стек |
|
|
46
|
+
| `cabinet_dashboard_architecture.md` | DashboardSelector, Redis, adapter pattern |
|
|
47
|
+
| `project_ecosystem.md` | Экосистема codex-*, lily_website |
|
|
48
|
+
| `project_test_conventions.md` | Уровни тестов, команды запуска |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## MCP граф памяти (полная версия)
|
|
53
|
+
|
|
54
|
+
Сервер: `memory` (MCP)
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
# Старт навигации всегда с:
|
|
58
|
+
search_nodes("MASTER_INDEX")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Ключевые ноды по проекту:
|
|
62
|
+
|
|
63
|
+
| Нода | Тип | Содержит |
|
|
64
|
+
|------|-----|---------|
|
|
65
|
+
| `MASTER_INDEX` | Index | 7 секций (SEC:*) |
|
|
66
|
+
| `SEC:Architecture` | IndexSection | Архитектурные решения |
|
|
67
|
+
| `codex-django:architecture:project` | Architecture | Структура, ветки, пути |
|
|
68
|
+
| `codex-django:architecture:cabinet` | Architecture | CabinetApp дизайн |
|
|
69
|
+
| `codex-django:architecture:cli-blueprint` | Architecture | Blueprint система |
|
|
70
|
+
| `codex-django:cabinet:index` | project-index | Кабинет: подход и принципы |
|
|
71
|
+
| `codex-django:cabinet:css-js` | conventions | CSS/JS стек, компилер |
|
|
72
|
+
| `Claude:Index` | PersonalNotes | Стиль работы, уроки |
|
|
73
|
+
| `Graph:ConventionStandard` | Standard | Правила именования нод |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Git ветки
|
|
78
|
+
|
|
79
|
+
| Ветка | Назначение |
|
|
80
|
+
|-------|-----------|
|
|
81
|
+
| `main` | Стабильный релиз (PyPI) |
|
|
82
|
+
| `develop` | Активная разработка — **все коммиты сюда** |
|
|
83
|
+
|
|
84
|
+
> **Важно:** merge в `main` только перед релизом (Block 7 — PyPI alpha).
|
|
85
|
+
> Сейчас работаем в `develop`. Не пушим (`git push` запрещён без явного запроса).
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Quality gate
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Полная проверка (интерактивный — спросит про integration тесты):
|
|
93
|
+
python tools/dev/check.py --all
|
|
94
|
+
|
|
95
|
+
# Только lint:
|
|
96
|
+
python tools/dev/check.py --lint
|
|
97
|
+
|
|
98
|
+
# Только типы:
|
|
99
|
+
python tools/dev/check.py --types
|
|
100
|
+
|
|
101
|
+
# Только тесты:
|
|
102
|
+
python tools/dev/check.py --tests unit
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Текущий статус gate (после Block 1):**
|
|
106
|
+
- Lint (ruff + bandit) ✅
|
|
107
|
+
- Mypy ✅ (93 файла, 0 ошибок)
|
|
108
|
+
- pip-audit ✅ (CVE-2026-4539 pygments — no fix, ignored)
|
|
109
|
+
- Unit tests ✅ 153 passed, coverage ~35%
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Roadmap статус
|
|
114
|
+
|
|
115
|
+
| # | Блок | Статус |
|
|
116
|
+
|---|------|--------|
|
|
117
|
+
| 1 | Git hygiene + стабы | ✅ |
|
|
118
|
+
| 2 | Тесты: booking + notifications | ⬜ |
|
|
119
|
+
| 3 | Тесты: system + core | ⬜ |
|
|
120
|
+
| 4 | Cabinet: widget adapter | ⬜ |
|
|
121
|
+
| 5 | i18n валидация | ⬜ |
|
|
122
|
+
| 6 | Booking мульти-сервис | ⬜ |
|
|
123
|
+
| 7 | Docs + PyPI | ⬜ |
|
|
124
|
+
| 8 | Deploy + Showcase | ⬜ |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Как стартовать новую сессию
|
|
129
|
+
|
|
130
|
+
1. Прочитай этот файл
|
|
131
|
+
2. Прочитай `memory/roadmap_overview.md`
|
|
132
|
+
3. Прочитай нужный `memory/roadmap_blockN.md`
|
|
133
|
+
4. По необходимости: `search_nodes("MASTER_INDEX")` для полного контекста
|