falco-cli 0.3.0__tar.gz → 0.3.1__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.
- {falco_cli-0.3.0 → falco_cli-0.3.1}/PKG-INFO +3 -3
- falco_cli-0.3.1/demo/pyproject.toml +2 -0
- falco_cli-0.3.1/docs/images/project-tree.svg +241 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/start_project.rst +1 -1
- {falco_cli-0.3.0 → falco_cli-0.3.1}/pyproject.toml +57 -55
- falco_cli-0.3.1/requirements.txt +243 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/scripts/make_blueprints_from_demo.py +1 -1
- falco_cli-0.3.0/scripts/tree.py → falco_cli-0.3.1/scripts/project_tree.py +27 -16
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__about__.py +1 -1
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/install_crud_utils.py +11 -5
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/model_crud.py +58 -20
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/reset_migrations.py +5 -3
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/rm_migrations.py +5 -3
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/start_project.py +55 -35
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/sync_dotenv.py +8 -4
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/work.py +5 -11
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/utils.py +14 -5
- falco_cli-0.3.1/src/falco_blueprints/cookiecutter.json +6 -0
- falco_cli-0.3.0/src/falco_blueprints/project_name/.github/workflows/ci.yml → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/.github/workflows/ci.yml +2 -2
- falco_cli-0.3.0/src/falco_blueprints/project_name/.pre-commit-config.yaml → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/.pre-commit-config.yaml +1 -1
- falco_cli-0.3.0/src/falco_blueprints/project_name/README.md → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/README.md +1 -1
- falco_cli-0.3.0/src/falco_blueprints/project_name/config/settings.py → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/config/settings.py +14 -5
- falco_cli-0.3.0/src/falco_blueprints/project_name/playground.ipynb → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/playground.ipynb +1 -1
- falco_cli-0.3.0/src/falco_blueprints/project_name/pyproject.toml → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/pyproject.toml +9 -6
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/core/apps.py → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/core/apps.py +1 -1
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/templates/base.html → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/templates/base.html +3 -3
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/templates/home.html → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/templates/home.html +2 -2
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/users/apps.py → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/users/apps.py +1 -1
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/users/migrations/0001_initial.py → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/users/migrations/0001_initial.py +2 -2
- falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/users/models.py → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/users/models.py +1 -1
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_install_crud_utils.py +7 -5
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_start_project.py +5 -3
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_sync_dotenv.py +3 -3
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/conftest.py +20 -0
- falco_cli-0.3.0/docs/images/project-tree.svg +0 -241
- falco_cli-0.3.0/requirements.txt +0 -298
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.all-contributorsrc +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.editorconfig +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/dependabot.yml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/documentation.yml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/pre-commit-auto-update.yml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/publish.yml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.gitignore +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.pre-commit-config.yaml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/.vscode/settings.json +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/CODE_OF_CONDUCT.md +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/LICENSE +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/README.md +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/all-contributorsrc +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/assets/falco-logo.svg +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/asgi.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/settings.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/urls.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/wsgi.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/apps.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/utils.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/admin.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/apps.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/migrations/0001_initial.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/migrations/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/models.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/admin.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/apps.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/forms.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/migrations/0001_initial.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/migrations/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/models.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/tests.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/urls.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/views.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/manage.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/requirements.txt +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/base.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_create.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_detail.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_list.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_update.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/.rich-codex.yml +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/Makefile +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/_static/custom.css +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/_templates/partials/globaltoc-above.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/changelog.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/codeofconduct.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/conf.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/contributing.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/avoiding_god_models.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/database_tips.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/deployment.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/dynamic_model_schema.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/index.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/interactive_user_interfaces.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/logging_and_monitoring.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/multitenancy.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/optimizing_database_access.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/permissions_and_authorization.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/realtime.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/running_project_in_a_container.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/task_queues_and_schedulers.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/tips_and_extra.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/use_sqlite_in_production.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_async_code.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_documentation.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_tests.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/deployment.png +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/logo_with_text.svg +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/task_queue.png +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/index.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/install.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/license.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/make.bat +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/crud.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/htmx.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/index.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/migrations.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/setup_admin.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/sync_dotenv.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/work.rst +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/scripts/update_readme_guides.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__main__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/htmx.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/htmx_extension.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/setup_admin.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/create.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/detail.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/forms.py.bp +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/list.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/update.html +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/utils.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/views.py.bp +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/.env.template +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/.github/dependabot.yml +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/.gitignore +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/config/__init__.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/config/asgi.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/config/urls.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/config/wsgi.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/deploy/Dockerfile +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/deploy/entrypoint.sh +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/deploy/gunicorn.conf.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/manage.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/tests}/__init__.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/tests/test_assert_true.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/core → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}}/__init__.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/users → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/core}/__init__.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}}/static/vendors/htmx/htmx.min.js +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name/users/migrations → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/users}/__init__.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}}/users/admin.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}}/users/forms.py +0 -0
- {falco_cli-0.3.0/src/falco_blueprints/project_name/tests → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}/{{ cookiecutter.project_name }}/users/migrations}/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/__init__.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_crud.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_htmx.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_htmx_extension.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_reset_migrations.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_rm_migrations.py +0 -0
- {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_setup_admin.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: falco-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Enhance your Django developer experience: CLI and Guides for the Modern Developer.
|
|
5
5
|
Project-URL: Homepage, https://falco.oluwatobi.dev/
|
|
6
6
|
Project-URL: Documentation, https://falco.oluwatobi.dev/
|
|
@@ -28,14 +28,14 @@ Requires-Python: >=3.10
|
|
|
28
28
|
Requires-Dist: autoflake
|
|
29
29
|
Requires-Dist: black
|
|
30
30
|
Requires-Dist: cappa
|
|
31
|
-
Requires-Dist:
|
|
31
|
+
Requires-Dist: cruft
|
|
32
32
|
Requires-Dist: djlint
|
|
33
33
|
Requires-Dist: honcho
|
|
34
34
|
Requires-Dist: httpx
|
|
35
35
|
Requires-Dist: isort
|
|
36
36
|
Requires-Dist: python-dotenv
|
|
37
37
|
Requires-Dist: rich
|
|
38
|
-
Requires-Dist:
|
|
38
|
+
Requires-Dist: tomlkit
|
|
39
39
|
Description-Content-Type: text/markdown
|
|
40
40
|
|
|
41
41
|
<p align="center">
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<svg class="rich-terminal" viewBox="0 0 2837 1172.3999999999999" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Generated with Rich https://www.textualize.io -->
|
|
3
|
+
<style>
|
|
4
|
+
|
|
5
|
+
@font-face {
|
|
6
|
+
font-family: "Fira Code";
|
|
7
|
+
src: local("FiraCode-Regular"),
|
|
8
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
|
|
9
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: 400;
|
|
12
|
+
}
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: "Fira Code";
|
|
15
|
+
src: local("FiraCode-Bold"),
|
|
16
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
|
|
17
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
|
|
18
|
+
font-style: bold;
|
|
19
|
+
font-weight: 700;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.terminal-2549529014-matrix {
|
|
23
|
+
font-family: Fira Code, monospace;
|
|
24
|
+
font-size: 20px;
|
|
25
|
+
line-height: 24.4px;
|
|
26
|
+
font-variant-east-asian: full-width;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.terminal-2549529014-title {
|
|
30
|
+
font-size: 18px;
|
|
31
|
+
font-weight: bold;
|
|
32
|
+
font-family: arial;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.terminal-2549529014-r1 { fill: #b9bcba }
|
|
36
|
+
.terminal-2549529014-r2 { fill: #855c8d;font-weight: bold }
|
|
37
|
+
.terminal-2549529014-r3 { fill: #879a3b }
|
|
38
|
+
.terminal-2549529014-r4 { fill: #be3f48;font-weight: bold }
|
|
39
|
+
</style>
|
|
40
|
+
|
|
41
|
+
<defs>
|
|
42
|
+
<clipPath id="terminal-2549529014-clip-terminal">
|
|
43
|
+
<rect x="0" y="0" width="2817.2" height="1121.3999999999999" />
|
|
44
|
+
</clipPath>
|
|
45
|
+
<clipPath id="terminal-2549529014-line-0">
|
|
46
|
+
<rect x="0" y="1.5" width="2818.2" height="24.65"/>
|
|
47
|
+
</clipPath>
|
|
48
|
+
<clipPath id="terminal-2549529014-line-1">
|
|
49
|
+
<rect x="0" y="25.9" width="2818.2" height="24.65"/>
|
|
50
|
+
</clipPath>
|
|
51
|
+
<clipPath id="terminal-2549529014-line-2">
|
|
52
|
+
<rect x="0" y="50.3" width="2818.2" height="24.65"/>
|
|
53
|
+
</clipPath>
|
|
54
|
+
<clipPath id="terminal-2549529014-line-3">
|
|
55
|
+
<rect x="0" y="74.7" width="2818.2" height="24.65"/>
|
|
56
|
+
</clipPath>
|
|
57
|
+
<clipPath id="terminal-2549529014-line-4">
|
|
58
|
+
<rect x="0" y="99.1" width="2818.2" height="24.65"/>
|
|
59
|
+
</clipPath>
|
|
60
|
+
<clipPath id="terminal-2549529014-line-5">
|
|
61
|
+
<rect x="0" y="123.5" width="2818.2" height="24.65"/>
|
|
62
|
+
</clipPath>
|
|
63
|
+
<clipPath id="terminal-2549529014-line-6">
|
|
64
|
+
<rect x="0" y="147.9" width="2818.2" height="24.65"/>
|
|
65
|
+
</clipPath>
|
|
66
|
+
<clipPath id="terminal-2549529014-line-7">
|
|
67
|
+
<rect x="0" y="172.3" width="2818.2" height="24.65"/>
|
|
68
|
+
</clipPath>
|
|
69
|
+
<clipPath id="terminal-2549529014-line-8">
|
|
70
|
+
<rect x="0" y="196.7" width="2818.2" height="24.65"/>
|
|
71
|
+
</clipPath>
|
|
72
|
+
<clipPath id="terminal-2549529014-line-9">
|
|
73
|
+
<rect x="0" y="221.1" width="2818.2" height="24.65"/>
|
|
74
|
+
</clipPath>
|
|
75
|
+
<clipPath id="terminal-2549529014-line-10">
|
|
76
|
+
<rect x="0" y="245.5" width="2818.2" height="24.65"/>
|
|
77
|
+
</clipPath>
|
|
78
|
+
<clipPath id="terminal-2549529014-line-11">
|
|
79
|
+
<rect x="0" y="269.9" width="2818.2" height="24.65"/>
|
|
80
|
+
</clipPath>
|
|
81
|
+
<clipPath id="terminal-2549529014-line-12">
|
|
82
|
+
<rect x="0" y="294.3" width="2818.2" height="24.65"/>
|
|
83
|
+
</clipPath>
|
|
84
|
+
<clipPath id="terminal-2549529014-line-13">
|
|
85
|
+
<rect x="0" y="318.7" width="2818.2" height="24.65"/>
|
|
86
|
+
</clipPath>
|
|
87
|
+
<clipPath id="terminal-2549529014-line-14">
|
|
88
|
+
<rect x="0" y="343.1" width="2818.2" height="24.65"/>
|
|
89
|
+
</clipPath>
|
|
90
|
+
<clipPath id="terminal-2549529014-line-15">
|
|
91
|
+
<rect x="0" y="367.5" width="2818.2" height="24.65"/>
|
|
92
|
+
</clipPath>
|
|
93
|
+
<clipPath id="terminal-2549529014-line-16">
|
|
94
|
+
<rect x="0" y="391.9" width="2818.2" height="24.65"/>
|
|
95
|
+
</clipPath>
|
|
96
|
+
<clipPath id="terminal-2549529014-line-17">
|
|
97
|
+
<rect x="0" y="416.3" width="2818.2" height="24.65"/>
|
|
98
|
+
</clipPath>
|
|
99
|
+
<clipPath id="terminal-2549529014-line-18">
|
|
100
|
+
<rect x="0" y="440.7" width="2818.2" height="24.65"/>
|
|
101
|
+
</clipPath>
|
|
102
|
+
<clipPath id="terminal-2549529014-line-19">
|
|
103
|
+
<rect x="0" y="465.1" width="2818.2" height="24.65"/>
|
|
104
|
+
</clipPath>
|
|
105
|
+
<clipPath id="terminal-2549529014-line-20">
|
|
106
|
+
<rect x="0" y="489.5" width="2818.2" height="24.65"/>
|
|
107
|
+
</clipPath>
|
|
108
|
+
<clipPath id="terminal-2549529014-line-21">
|
|
109
|
+
<rect x="0" y="513.9" width="2818.2" height="24.65"/>
|
|
110
|
+
</clipPath>
|
|
111
|
+
<clipPath id="terminal-2549529014-line-22">
|
|
112
|
+
<rect x="0" y="538.3" width="2818.2" height="24.65"/>
|
|
113
|
+
</clipPath>
|
|
114
|
+
<clipPath id="terminal-2549529014-line-23">
|
|
115
|
+
<rect x="0" y="562.7" width="2818.2" height="24.65"/>
|
|
116
|
+
</clipPath>
|
|
117
|
+
<clipPath id="terminal-2549529014-line-24">
|
|
118
|
+
<rect x="0" y="587.1" width="2818.2" height="24.65"/>
|
|
119
|
+
</clipPath>
|
|
120
|
+
<clipPath id="terminal-2549529014-line-25">
|
|
121
|
+
<rect x="0" y="611.5" width="2818.2" height="24.65"/>
|
|
122
|
+
</clipPath>
|
|
123
|
+
<clipPath id="terminal-2549529014-line-26">
|
|
124
|
+
<rect x="0" y="635.9" width="2818.2" height="24.65"/>
|
|
125
|
+
</clipPath>
|
|
126
|
+
<clipPath id="terminal-2549529014-line-27">
|
|
127
|
+
<rect x="0" y="660.3" width="2818.2" height="24.65"/>
|
|
128
|
+
</clipPath>
|
|
129
|
+
<clipPath id="terminal-2549529014-line-28">
|
|
130
|
+
<rect x="0" y="684.7" width="2818.2" height="24.65"/>
|
|
131
|
+
</clipPath>
|
|
132
|
+
<clipPath id="terminal-2549529014-line-29">
|
|
133
|
+
<rect x="0" y="709.1" width="2818.2" height="24.65"/>
|
|
134
|
+
</clipPath>
|
|
135
|
+
<clipPath id="terminal-2549529014-line-30">
|
|
136
|
+
<rect x="0" y="733.5" width="2818.2" height="24.65"/>
|
|
137
|
+
</clipPath>
|
|
138
|
+
<clipPath id="terminal-2549529014-line-31">
|
|
139
|
+
<rect x="0" y="757.9" width="2818.2" height="24.65"/>
|
|
140
|
+
</clipPath>
|
|
141
|
+
<clipPath id="terminal-2549529014-line-32">
|
|
142
|
+
<rect x="0" y="782.3" width="2818.2" height="24.65"/>
|
|
143
|
+
</clipPath>
|
|
144
|
+
<clipPath id="terminal-2549529014-line-33">
|
|
145
|
+
<rect x="0" y="806.7" width="2818.2" height="24.65"/>
|
|
146
|
+
</clipPath>
|
|
147
|
+
<clipPath id="terminal-2549529014-line-34">
|
|
148
|
+
<rect x="0" y="831.1" width="2818.2" height="24.65"/>
|
|
149
|
+
</clipPath>
|
|
150
|
+
<clipPath id="terminal-2549529014-line-35">
|
|
151
|
+
<rect x="0" y="855.5" width="2818.2" height="24.65"/>
|
|
152
|
+
</clipPath>
|
|
153
|
+
<clipPath id="terminal-2549529014-line-36">
|
|
154
|
+
<rect x="0" y="879.9" width="2818.2" height="24.65"/>
|
|
155
|
+
</clipPath>
|
|
156
|
+
<clipPath id="terminal-2549529014-line-37">
|
|
157
|
+
<rect x="0" y="904.3" width="2818.2" height="24.65"/>
|
|
158
|
+
</clipPath>
|
|
159
|
+
<clipPath id="terminal-2549529014-line-38">
|
|
160
|
+
<rect x="0" y="928.7" width="2818.2" height="24.65"/>
|
|
161
|
+
</clipPath>
|
|
162
|
+
<clipPath id="terminal-2549529014-line-39">
|
|
163
|
+
<rect x="0" y="953.1" width="2818.2" height="24.65"/>
|
|
164
|
+
</clipPath>
|
|
165
|
+
<clipPath id="terminal-2549529014-line-40">
|
|
166
|
+
<rect x="0" y="977.5" width="2818.2" height="24.65"/>
|
|
167
|
+
</clipPath>
|
|
168
|
+
<clipPath id="terminal-2549529014-line-41">
|
|
169
|
+
<rect x="0" y="1001.9" width="2818.2" height="24.65"/>
|
|
170
|
+
</clipPath>
|
|
171
|
+
<clipPath id="terminal-2549529014-line-42">
|
|
172
|
+
<rect x="0" y="1026.3" width="2818.2" height="24.65"/>
|
|
173
|
+
</clipPath>
|
|
174
|
+
<clipPath id="terminal-2549529014-line-43">
|
|
175
|
+
<rect x="0" y="1050.7" width="2818.2" height="24.65"/>
|
|
176
|
+
</clipPath>
|
|
177
|
+
<clipPath id="terminal-2549529014-line-44">
|
|
178
|
+
<rect x="0" y="1075.1" width="2818.2" height="24.65"/>
|
|
179
|
+
</clipPath>
|
|
180
|
+
</defs>
|
|
181
|
+
|
|
182
|
+
<rect fill="#191919" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="2835" height="1170.4" rx="8"/><text class="terminal-2549529014-title" fill="#b9bcba" text-anchor="middle" x="1417" y="27">project tree</text>
|
|
183
|
+
<g transform="translate(26,22)">
|
|
184
|
+
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
|
|
185
|
+
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
|
|
186
|
+
<circle cx="44" cy="0" r="7" fill="#28c840"/>
|
|
187
|
+
</g>
|
|
188
|
+
|
|
189
|
+
<g transform="translate(9, 41)" clip-path="url(#terminal-2549529014-clip-terminal)">
|
|
190
|
+
|
|
191
|
+
<g class="terminal-2549529014-matrix">
|
|
192
|
+
<text class="terminal-2549529014-r1" x="0" y="20" textLength="170.8" clip-path="url(#terminal-2549529014-line-0)">📂 project_name</text><text class="terminal-2549529014-r1" x="2818.2" y="20" textLength="12.2" clip-path="url(#terminal-2549529014-line-0)">
|
|
193
|
+
</text><text class="terminal-2549529014-r1" x="0" y="44.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-1)">├── </text><text class="terminal-2549529014-r2" x="48.8" y="44.4" textLength="109.8" clip-path="url(#terminal-2549529014-line-1)">📂 .github</text><text class="terminal-2549529014-r1" x="2818.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-1)">
|
|
194
|
+
</text><text class="terminal-2549529014-r1" x="0" y="68.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-2)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-2)">├── </text><text class="terminal-2549529014-r2" x="97.6" y="68.8" textLength="134.2" clip-path="url(#terminal-2549529014-line-2)">📂 workflows</text><text class="terminal-2549529014-r1" x="2818.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-2)">
|
|
195
|
+
</text><text class="terminal-2549529014-r1" x="0" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">└── </text><text class="terminal-2549529014-r1" x="146.4" y="93.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-3)">📄 </text><text class="terminal-2549529014-r3" x="183" y="93.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-3)">ci</text><text class="terminal-2549529014-r4" x="207.4" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">.yml</text><text class="terminal-2549529014-r1" x="2818.2" y="93.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-3)">
|
|
196
|
+
</text><text class="terminal-2549529014-r1" x="0" y="117.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-4)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="117.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-4)">└── </text><text class="terminal-2549529014-r1" x="97.6" y="117.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-4)">📄 </text><text class="terminal-2549529014-r3" x="134.2" y="117.6" textLength="122" clip-path="url(#terminal-2549529014-line-4)">dependabot</text><text class="terminal-2549529014-r4" x="256.2" y="117.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-4)">.yml</text><text class="terminal-2549529014-r1" x="2818.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-4)">
|
|
197
|
+
</text><text class="terminal-2549529014-r1" x="0" y="142" textLength="48.8" clip-path="url(#terminal-2549529014-line-5)">├── </text><text class="terminal-2549529014-r2" x="48.8" y="142" textLength="97.6" clip-path="url(#terminal-2549529014-line-5)">📂 config</text><text class="terminal-2549529014-r1" x="2818.2" y="142" textLength="12.2" clip-path="url(#terminal-2549529014-line-5)">
|
|
198
|
+
</text><text class="terminal-2549529014-r1" x="0" y="166.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-6)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="166.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-6)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="166.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-6)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="166.4" textLength="97.6" clip-path="url(#terminal-2549529014-line-6)">__init__</text><text class="terminal-2549529014-r4" x="231.8" y="166.4" textLength="36.6" clip-path="url(#terminal-2549529014-line-6)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-6)">
|
|
199
|
+
</text><text class="terminal-2549529014-r1" x="0" y="190.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-7)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="190.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-7)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="190.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-7)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="190.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-7)">asgi</text><text class="terminal-2549529014-r4" x="183" y="190.8" textLength="36.6" clip-path="url(#terminal-2549529014-line-7)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-7)">
|
|
200
|
+
</text><text class="terminal-2549529014-r1" x="0" y="215.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-8)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="215.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-8)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="215.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-8)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="215.2" textLength="97.6" clip-path="url(#terminal-2549529014-line-8)">settings</text><text class="terminal-2549529014-r4" x="231.8" y="215.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-8)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="215.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-8)">
|
|
201
|
+
</text><text class="terminal-2549529014-r1" x="0" y="239.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-9)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="239.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-9)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="239.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-9)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="239.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-9)">urls</text><text class="terminal-2549529014-r4" x="183" y="239.6" textLength="36.6" clip-path="url(#terminal-2549529014-line-9)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-9)">
|
|
202
|
+
</text><text class="terminal-2549529014-r1" x="0" y="264" textLength="48.8" clip-path="url(#terminal-2549529014-line-10)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="264" textLength="48.8" clip-path="url(#terminal-2549529014-line-10)">└── </text><text class="terminal-2549529014-r1" x="97.6" y="264" textLength="24.4" clip-path="url(#terminal-2549529014-line-10)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="264" textLength="48.8" clip-path="url(#terminal-2549529014-line-10)">wsgi</text><text class="terminal-2549529014-r4" x="183" y="264" textLength="36.6" clip-path="url(#terminal-2549529014-line-10)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="264" textLength="12.2" clip-path="url(#terminal-2549529014-line-10)">
|
|
203
|
+
</text><text class="terminal-2549529014-r1" x="0" y="288.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-11)">├── </text><text class="terminal-2549529014-r2" x="48.8" y="288.4" textLength="97.6" clip-path="url(#terminal-2549529014-line-11)">📂 deploy</text><text class="terminal-2549529014-r1" x="2818.2" y="288.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-11)">
|
|
204
|
+
</text><text class="terminal-2549529014-r1" x="0" y="312.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-12)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="312.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-12)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="312.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-12)">📄 </text><text class="terminal-2549529014-r3" x="134.2" y="312.8" textLength="122" clip-path="url(#terminal-2549529014-line-12)">Dockerfile</text><text class="terminal-2549529014-r1" x="2818.2" y="312.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-12)">
|
|
205
|
+
</text><text class="terminal-2549529014-r1" x="0" y="337.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-13)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="337.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-13)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="337.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-13)">📄 </text><text class="terminal-2549529014-r3" x="134.2" y="337.2" textLength="122" clip-path="url(#terminal-2549529014-line-13)">entrypoint</text><text class="terminal-2549529014-r4" x="256.2" y="337.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-13)">.sh</text><text class="terminal-2549529014-r1" x="2818.2" y="337.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-13)">
|
|
206
|
+
</text><text class="terminal-2549529014-r1" x="0" y="361.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-14)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="361.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-14)">└── </text><text class="terminal-2549529014-r1" x="97.6" y="361.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-14)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="361.6" textLength="97.6" clip-path="url(#terminal-2549529014-line-14)">gunicorn</text><text class="terminal-2549529014-r4" x="231.8" y="361.6" textLength="97.6" clip-path="url(#terminal-2549529014-line-14)">.conf.py</text><text class="terminal-2549529014-r1" x="2818.2" y="361.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-14)">
|
|
207
|
+
</text><text class="terminal-2549529014-r1" x="0" y="386" textLength="48.8" clip-path="url(#terminal-2549529014-line-15)">├── </text><text class="terminal-2549529014-r2" x="48.8" y="386" textLength="244" clip-path="url(#terminal-2549529014-line-15)">📂 my_awesome_project</text><text class="terminal-2549529014-r1" x="2818.2" y="386" textLength="12.2" clip-path="url(#terminal-2549529014-line-15)">
|
|
208
|
+
</text><text class="terminal-2549529014-r1" x="0" y="410.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-16)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="410.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-16)">├── </text><text class="terminal-2549529014-r2" x="97.6" y="410.4" textLength="73.2" clip-path="url(#terminal-2549529014-line-16)">📂 core</text><text class="terminal-2549529014-r1" x="2818.2" y="410.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-16)">
|
|
209
|
+
</text><text class="terminal-2549529014-r1" x="0" y="434.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-17)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="434.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-17)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="434.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-17)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="434.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-17)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="434.8" textLength="97.6" clip-path="url(#terminal-2549529014-line-17)">__init__</text><text class="terminal-2549529014-r4" x="280.6" y="434.8" textLength="36.6" clip-path="url(#terminal-2549529014-line-17)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="434.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-17)">
|
|
210
|
+
</text><text class="terminal-2549529014-r1" x="0" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">└── </text><text class="terminal-2549529014-r1" x="146.4" y="459.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-18)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">apps</text><text class="terminal-2549529014-r4" x="231.8" y="459.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-18)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="459.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-18)">
|
|
211
|
+
</text><text class="terminal-2549529014-r1" x="0" y="483.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-19)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="483.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-19)">├── </text><text class="terminal-2549529014-r2" x="97.6" y="483.6" textLength="97.6" clip-path="url(#terminal-2549529014-line-19)">📂 static</text><text class="terminal-2549529014-r1" x="2818.2" y="483.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-19)">
|
|
212
|
+
</text><text class="terminal-2549529014-r1" x="0" y="508" textLength="48.8" clip-path="url(#terminal-2549529014-line-20)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="508" textLength="48.8" clip-path="url(#terminal-2549529014-line-20)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="508" textLength="48.8" clip-path="url(#terminal-2549529014-line-20)">└── </text><text class="terminal-2549529014-r2" x="146.4" y="508" textLength="109.8" clip-path="url(#terminal-2549529014-line-20)">📂 vendors</text><text class="terminal-2549529014-r1" x="2818.2" y="508" textLength="12.2" clip-path="url(#terminal-2549529014-line-20)">
|
|
213
|
+
</text><text class="terminal-2549529014-r1" x="0" y="532.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-21)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="532.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-21)">│   </text><text class="terminal-2549529014-r1" x="146.4" y="532.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-21)">└── </text><text class="terminal-2549529014-r2" x="195.2" y="532.4" textLength="73.2" clip-path="url(#terminal-2549529014-line-21)">📂 htmx</text><text class="terminal-2549529014-r1" x="2818.2" y="532.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-21)">
|
|
214
|
+
</text><text class="terminal-2549529014-r1" x="0" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">│   </text><text class="terminal-2549529014-r1" x="195.2" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">└── </text><text class="terminal-2549529014-r1" x="244" y="556.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-22)">📄 </text><text class="terminal-2549529014-r3" x="280.6" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">htmx</text><text class="terminal-2549529014-r4" x="329.4" y="556.8" textLength="85.4" clip-path="url(#terminal-2549529014-line-22)">.min.js</text><text class="terminal-2549529014-r1" x="2818.2" y="556.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-22)">
|
|
215
|
+
</text><text class="terminal-2549529014-r1" x="0" y="581.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-23)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="581.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-23)">├── </text><text class="terminal-2549529014-r2" x="97.6" y="581.2" textLength="134.2" clip-path="url(#terminal-2549529014-line-23)">📂 templates</text><text class="terminal-2549529014-r1" x="2818.2" y="581.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-23)">
|
|
216
|
+
</text><text class="terminal-2549529014-r1" x="0" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="605.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-24)">📄 </text><text class="terminal-2549529014-r3" x="183" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">base</text><text class="terminal-2549529014-r4" x="231.8" y="605.6" textLength="61" clip-path="url(#terminal-2549529014-line-24)">.html</text><text class="terminal-2549529014-r1" x="2818.2" y="605.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-24)">
|
|
217
|
+
</text><text class="terminal-2549529014-r1" x="0" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">└── </text><text class="terminal-2549529014-r1" x="146.4" y="630" textLength="24.4" clip-path="url(#terminal-2549529014-line-25)">📄 </text><text class="terminal-2549529014-r3" x="183" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">home</text><text class="terminal-2549529014-r4" x="231.8" y="630" textLength="61" clip-path="url(#terminal-2549529014-line-25)">.html</text><text class="terminal-2549529014-r1" x="2818.2" y="630" textLength="12.2" clip-path="url(#terminal-2549529014-line-25)">
|
|
218
|
+
</text><text class="terminal-2549529014-r1" x="0" y="654.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-26)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="654.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-26)">├── </text><text class="terminal-2549529014-r2" x="97.6" y="654.4" textLength="85.4" clip-path="url(#terminal-2549529014-line-26)">📂 users</text><text class="terminal-2549529014-r1" x="2818.2" y="654.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-26)">
|
|
219
|
+
</text><text class="terminal-2549529014-r1" x="0" y="678.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-27)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="678.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-27)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="678.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-27)">├── </text><text class="terminal-2549529014-r2" x="146.4" y="678.8" textLength="146.4" clip-path="url(#terminal-2549529014-line-27)">📂 migrations</text><text class="terminal-2549529014-r1" x="2818.2" y="678.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-27)">
|
|
220
|
+
</text><text class="terminal-2549529014-r1" x="0" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">│   </text><text class="terminal-2549529014-r1" x="146.4" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">├── </text><text class="terminal-2549529014-r1" x="195.2" y="703.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-28)">🐍 </text><text class="terminal-2549529014-r3" x="231.8" y="703.2" textLength="146.4" clip-path="url(#terminal-2549529014-line-28)">0001_initial</text><text class="terminal-2549529014-r4" x="378.2" y="703.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-28)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="703.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-28)">
|
|
221
|
+
</text><text class="terminal-2549529014-r1" x="0" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">│   </text><text class="terminal-2549529014-r1" x="146.4" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">└── </text><text class="terminal-2549529014-r1" x="195.2" y="727.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-29)">🐍 </text><text class="terminal-2549529014-r3" x="231.8" y="727.6" textLength="97.6" clip-path="url(#terminal-2549529014-line-29)">__init__</text><text class="terminal-2549529014-r4" x="329.4" y="727.6" textLength="36.6" clip-path="url(#terminal-2549529014-line-29)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="727.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-29)">
|
|
222
|
+
</text><text class="terminal-2549529014-r1" x="0" y="752" textLength="48.8" clip-path="url(#terminal-2549529014-line-30)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="752" textLength="48.8" clip-path="url(#terminal-2549529014-line-30)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="752" textLength="48.8" clip-path="url(#terminal-2549529014-line-30)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="752" textLength="24.4" clip-path="url(#terminal-2549529014-line-30)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="752" textLength="97.6" clip-path="url(#terminal-2549529014-line-30)">__init__</text><text class="terminal-2549529014-r4" x="280.6" y="752" textLength="36.6" clip-path="url(#terminal-2549529014-line-30)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="752" textLength="12.2" clip-path="url(#terminal-2549529014-line-30)">
|
|
223
|
+
</text><text class="terminal-2549529014-r1" x="0" y="776.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-31)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="776.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-31)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="776.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-31)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="776.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-31)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="776.4" textLength="61" clip-path="url(#terminal-2549529014-line-31)">admin</text><text class="terminal-2549529014-r4" x="244" y="776.4" textLength="36.6" clip-path="url(#terminal-2549529014-line-31)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="776.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-31)">
|
|
224
|
+
</text><text class="terminal-2549529014-r1" x="0" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="800.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-32)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">apps</text><text class="terminal-2549529014-r4" x="231.8" y="800.8" textLength="36.6" clip-path="url(#terminal-2549529014-line-32)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="800.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-32)">
|
|
225
|
+
</text><text class="terminal-2549529014-r1" x="0" y="825.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-33)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="825.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-33)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="825.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-33)">├── </text><text class="terminal-2549529014-r1" x="146.4" y="825.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-33)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="825.2" textLength="61" clip-path="url(#terminal-2549529014-line-33)">forms</text><text class="terminal-2549529014-r4" x="244" y="825.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-33)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="825.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-33)">
|
|
226
|
+
</text><text class="terminal-2549529014-r1" x="0" y="849.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-34)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="849.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-34)">│   </text><text class="terminal-2549529014-r1" x="97.6" y="849.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-34)">└── </text><text class="terminal-2549529014-r1" x="146.4" y="849.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-34)">🐍 </text><text class="terminal-2549529014-r3" x="183" y="849.6" textLength="73.2" clip-path="url(#terminal-2549529014-line-34)">models</text><text class="terminal-2549529014-r4" x="256.2" y="849.6" textLength="36.6" clip-path="url(#terminal-2549529014-line-34)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="849.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-34)">
|
|
227
|
+
</text><text class="terminal-2549529014-r1" x="0" y="874" textLength="48.8" clip-path="url(#terminal-2549529014-line-35)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="874" textLength="48.8" clip-path="url(#terminal-2549529014-line-35)">└── </text><text class="terminal-2549529014-r1" x="97.6" y="874" textLength="24.4" clip-path="url(#terminal-2549529014-line-35)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="874" textLength="97.6" clip-path="url(#terminal-2549529014-line-35)">__init__</text><text class="terminal-2549529014-r4" x="231.8" y="874" textLength="36.6" clip-path="url(#terminal-2549529014-line-35)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="874" textLength="12.2" clip-path="url(#terminal-2549529014-line-35)">
|
|
228
|
+
</text><text class="terminal-2549529014-r1" x="0" y="898.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-36)">├── </text><text class="terminal-2549529014-r2" x="48.8" y="898.4" textLength="85.4" clip-path="url(#terminal-2549529014-line-36)">📂 tests</text><text class="terminal-2549529014-r1" x="2818.2" y="898.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-36)">
|
|
229
|
+
</text><text class="terminal-2549529014-r1" x="0" y="922.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-37)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="922.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-37)">├── </text><text class="terminal-2549529014-r1" x="97.6" y="922.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-37)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="922.8" textLength="97.6" clip-path="url(#terminal-2549529014-line-37)">__init__</text><text class="terminal-2549529014-r4" x="231.8" y="922.8" textLength="36.6" clip-path="url(#terminal-2549529014-line-37)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="922.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-37)">
|
|
230
|
+
</text><text class="terminal-2549529014-r1" x="0" y="947.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-38)">│   </text><text class="terminal-2549529014-r1" x="48.8" y="947.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-38)">└── </text><text class="terminal-2549529014-r1" x="97.6" y="947.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-38)">🐍 </text><text class="terminal-2549529014-r3" x="134.2" y="947.2" textLength="195.2" clip-path="url(#terminal-2549529014-line-38)">test_assert_true</text><text class="terminal-2549529014-r4" x="329.4" y="947.2" textLength="36.6" clip-path="url(#terminal-2549529014-line-38)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="947.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-38)">
|
|
231
|
+
</text><text class="terminal-2549529014-r1" x="0" y="971.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-39)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="971.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-39)">📄 </text><text class="terminal-2549529014-r4" x="85.4" y="971.6" textLength="158.6" clip-path="url(#terminal-2549529014-line-39)">.env.template</text><text class="terminal-2549529014-r1" x="2818.2" y="971.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-39)">
|
|
232
|
+
</text><text class="terminal-2549529014-r1" x="0" y="996" textLength="48.8" clip-path="url(#terminal-2549529014-line-40)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="996" textLength="24.4" clip-path="url(#terminal-2549529014-line-40)">📄 </text><text class="terminal-2549529014-r4" x="85.4" y="996" textLength="122" clip-path="url(#terminal-2549529014-line-40)">.gitignore</text><text class="terminal-2549529014-r1" x="2818.2" y="996" textLength="12.2" clip-path="url(#terminal-2549529014-line-40)">
|
|
233
|
+
</text><text class="terminal-2549529014-r1" x="0" y="1020.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-41)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="1020.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-41)">📄 </text><text class="terminal-2549529014-r4" x="85.4" y="1020.4" textLength="280.6" clip-path="url(#terminal-2549529014-line-41)">.pre-commit-config.yaml</text><text class="terminal-2549529014-r1" x="2818.2" y="1020.4" textLength="12.2" clip-path="url(#terminal-2549529014-line-41)">
|
|
234
|
+
</text><text class="terminal-2549529014-r1" x="0" y="1044.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-42)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="1044.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-42)">🐍 </text><text class="terminal-2549529014-r3" x="85.4" y="1044.8" textLength="73.2" clip-path="url(#terminal-2549529014-line-42)">manage</text><text class="terminal-2549529014-r4" x="158.6" y="1044.8" textLength="36.6" clip-path="url(#terminal-2549529014-line-42)">.py</text><text class="terminal-2549529014-r1" x="2818.2" y="1044.8" textLength="12.2" clip-path="url(#terminal-2549529014-line-42)">
|
|
235
|
+
</text><text class="terminal-2549529014-r1" x="0" y="1069.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-43)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="1069.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-43)">📄 </text><text class="terminal-2549529014-r3" x="85.4" y="1069.2" textLength="122" clip-path="url(#terminal-2549529014-line-43)">playground</text><text class="terminal-2549529014-r4" x="207.4" y="1069.2" textLength="73.2" clip-path="url(#terminal-2549529014-line-43)">.ipynb</text><text class="terminal-2549529014-r1" x="2818.2" y="1069.2" textLength="12.2" clip-path="url(#terminal-2549529014-line-43)">
|
|
236
|
+
</text><text class="terminal-2549529014-r1" x="0" y="1093.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-44)">├── </text><text class="terminal-2549529014-r1" x="48.8" y="1093.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-44)">📄 </text><text class="terminal-2549529014-r3" x="85.4" y="1093.6" textLength="109.8" clip-path="url(#terminal-2549529014-line-44)">pyproject</text><text class="terminal-2549529014-r4" x="195.2" y="1093.6" textLength="61" clip-path="url(#terminal-2549529014-line-44)">.toml</text><text class="terminal-2549529014-r1" x="2818.2" y="1093.6" textLength="12.2" clip-path="url(#terminal-2549529014-line-44)">
|
|
237
|
+
</text><text class="terminal-2549529014-r1" x="0" y="1118" textLength="48.8" clip-path="url(#terminal-2549529014-line-45)">└── </text><text class="terminal-2549529014-r1" x="48.8" y="1118" textLength="24.4" clip-path="url(#terminal-2549529014-line-45)">📄 </text><text class="terminal-2549529014-r3" x="85.4" y="1118" textLength="73.2" clip-path="url(#terminal-2549529014-line-45)">README</text><text class="terminal-2549529014-r4" x="158.6" y="1118" textLength="36.6" clip-path="url(#terminal-2549529014-line-45)">.md</text><text class="terminal-2549529014-r1" x="2818.2" y="1118" textLength="12.2" clip-path="url(#terminal-2549529014-line-45)">
|
|
238
|
+
</text>
|
|
239
|
+
</g>
|
|
240
|
+
</g>
|
|
241
|
+
</svg>
|
|
@@ -84,7 +84,7 @@ More often then not when I create a new django project I need to use something o
|
|
|
84
84
|
and the ``username`` field just becomes an annoyance to deal with. It is also more common nowadays for modern web and mobile applications to rely on a unique identifier
|
|
85
85
|
such as an email address or phone number instead of a username.
|
|
86
86
|
|
|
87
|
-
I also removed the
|
|
87
|
+
I also removed the ``first_name`` and ``last_name`` fields that are available by default on the Django ``User`` model. I don't always need them, and when I do, I generally have a separate ``Profile``
|
|
88
88
|
model to store users' personal informations, keeping the ``User`` model focused on authentication and authorization.
|
|
89
89
|
My reasoning for this is to avoid asking for unnecessary data (following the principle of `YAGNI <https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it>`_). A positive consequence of this approach
|
|
90
90
|
is that having less data on your users/customers increases the chances of being `GDPR compliant <https://gdpr.eu/compliance/>`_. You can always add these fields later if needed.
|
|
@@ -11,43 +11,43 @@ requires-python = ">=3.10"
|
|
|
11
11
|
license = "MIT"
|
|
12
12
|
keywords = ["django", "python", "cookiecutter", "project-template"]
|
|
13
13
|
authors = [
|
|
14
|
-
|
|
14
|
+
{ name = "Tobi DEGNON", email = "tobidegnon@proton.me" },
|
|
15
15
|
]
|
|
16
16
|
classifiers = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Programming Language :: Python",
|
|
19
|
+
"Programming Language :: Python :: 3.10",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: Implementation :: CPython",
|
|
23
|
+
"Programming Language :: Python :: Implementation :: PyPy",
|
|
24
|
+
"Framework :: Django :: 4",
|
|
25
|
+
"Framework :: Django :: 4.0",
|
|
26
|
+
"Framework :: Django :: 4.1",
|
|
27
|
+
"Framework :: Django :: 4.2",
|
|
28
|
+
"Framework :: Django :: 5.0",
|
|
29
|
+
"Intended Audience :: Developers",
|
|
30
|
+
"Natural Language :: English",
|
|
31
31
|
]
|
|
32
32
|
dependencies = [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
"cruft",
|
|
34
|
+
"cappa",
|
|
35
|
+
"rich",
|
|
36
|
+
"httpx",
|
|
37
|
+
"honcho",
|
|
38
|
+
"tomlkit",
|
|
39
|
+
"python-dotenv",
|
|
40
|
+
"autoflake",
|
|
41
|
+
"black",
|
|
42
|
+
"isort",
|
|
43
|
+
"djlint",
|
|
44
44
|
]
|
|
45
45
|
[tool.hatch.metadata]
|
|
46
46
|
allow-direct-references = true
|
|
47
47
|
|
|
48
48
|
[tool.hatch.env]
|
|
49
49
|
requires = [
|
|
50
|
-
|
|
50
|
+
"hatch-pip-compile"
|
|
51
51
|
]
|
|
52
52
|
|
|
53
53
|
[project.scripts]
|
|
@@ -71,44 +71,46 @@ pip-compile-constraint = "default"
|
|
|
71
71
|
pip-compile-installer = "pip-sync"
|
|
72
72
|
lock-filename = "requirements.txt"
|
|
73
73
|
dependencies = [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
"coverage[toml]>=6.5",
|
|
75
|
+
"pytest",
|
|
76
|
+
"ipython",
|
|
77
|
+
"pre-commit",
|
|
78
|
+
"django",
|
|
79
|
+
"pytest-cookies",
|
|
78
80
|
]
|
|
79
81
|
|
|
80
82
|
[tool.hatch.envs.default.scripts]
|
|
81
83
|
test = "pytest {args:tests}"
|
|
82
84
|
test-cov = "coverage run -m pytest {args:tests}"
|
|
83
85
|
cov-report = [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
"- coverage combine",
|
|
87
|
+
"coverage report",
|
|
86
88
|
]
|
|
87
89
|
cov = [
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
"test-cov",
|
|
91
|
+
"cov-report",
|
|
90
92
|
]
|
|
91
93
|
make-blueprints = "python scripts/make_blueprints_from_demo.py"
|
|
92
94
|
upgrade-deps = ["rm requirements.txt", "hatch env run --env default -- python --version"]
|
|
93
95
|
|
|
94
96
|
[tool.hatch.envs.docs]
|
|
95
97
|
dependencies = [
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
"sphinx",
|
|
99
|
+
"sphinx-autobuild",
|
|
100
|
+
"myst-parser",
|
|
101
|
+
"shibuya",
|
|
102
|
+
"sphinx-design",
|
|
103
|
+
"sphinx-tabs",
|
|
104
|
+
"sphinx-copybutton",
|
|
105
|
+
"sphinx-togglebutton",
|
|
106
|
+
"sphinxcontrib-mermaid",
|
|
107
|
+
"sphinx-autorun",
|
|
108
|
+
"sphinx-github-changelog",
|
|
107
109
|
]
|
|
108
110
|
|
|
109
111
|
[tool.hatch.envs.docs.scripts]
|
|
110
112
|
serve = "sphinx-autobuild docs docs/_build/html --port 8002"
|
|
111
|
-
project-tree = "python scripts/
|
|
113
|
+
project-tree = "python scripts/project_tree.py"
|
|
112
114
|
update-readme-guides = "python scripts/update_readme_guides.py"
|
|
113
115
|
prepare-deploy = ["update-readme-guides", "project-tree"]
|
|
114
116
|
|
|
@@ -123,7 +125,7 @@ extend-ignore = ["I001", "I002", "TID252", "EM101", "TCH001"]
|
|
|
123
125
|
|
|
124
126
|
[tool.hatch.envs.types]
|
|
125
127
|
dependencies = [
|
|
126
|
-
|
|
128
|
+
"mypy>=1.0.0",
|
|
127
129
|
]
|
|
128
130
|
[tool.hatch.envs.types.scripts]
|
|
129
131
|
check = "mypy --install-types --non-interactive {args:src/falco tests}"
|
|
@@ -133,8 +135,8 @@ source_pkgs = ["falco", "tests"]
|
|
|
133
135
|
branch = true
|
|
134
136
|
parallel = true
|
|
135
137
|
omit = [
|
|
136
|
-
|
|
137
|
-
|
|
138
|
+
"src/falco/__about__.py",
|
|
139
|
+
"src/falco_blueprints/*",
|
|
138
140
|
]
|
|
139
141
|
|
|
140
142
|
[tool.coverage.paths]
|
|
@@ -143,15 +145,15 @@ tests = ["tests", "*/falco/tests"]
|
|
|
143
145
|
|
|
144
146
|
[tool.coverage.report]
|
|
145
147
|
exclude_lines = [
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
148
|
+
"no cov",
|
|
149
|
+
"if __name__ == .__main__.:",
|
|
150
|
+
"if TYPE_CHECKING:",
|
|
149
151
|
]
|
|
150
152
|
|
|
151
153
|
[tool.pytest.ini_options]
|
|
152
154
|
filterwarnings = [
|
|
153
|
-
|
|
155
|
+
"ignore::DeprecationWarning",
|
|
154
156
|
]
|
|
155
157
|
testpaths = [
|
|
156
|
-
|
|
158
|
+
"tests",
|
|
157
159
|
]
|