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.
Files changed (163) hide show
  1. {falco_cli-0.3.0 → falco_cli-0.3.1}/PKG-INFO +3 -3
  2. falco_cli-0.3.1/demo/pyproject.toml +2 -0
  3. falco_cli-0.3.1/docs/images/project-tree.svg +241 -0
  4. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/start_project.rst +1 -1
  5. {falco_cli-0.3.0 → falco_cli-0.3.1}/pyproject.toml +57 -55
  6. falco_cli-0.3.1/requirements.txt +243 -0
  7. {falco_cli-0.3.0 → falco_cli-0.3.1}/scripts/make_blueprints_from_demo.py +1 -1
  8. falco_cli-0.3.0/scripts/tree.py → falco_cli-0.3.1/scripts/project_tree.py +27 -16
  9. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__about__.py +1 -1
  10. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/install_crud_utils.py +11 -5
  11. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/model_crud.py +58 -20
  12. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/reset_migrations.py +5 -3
  13. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/rm_migrations.py +5 -3
  14. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/start_project.py +55 -35
  15. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/sync_dotenv.py +8 -4
  16. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/work.py +5 -11
  17. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/utils.py +14 -5
  18. falco_cli-0.3.1/src/falco_blueprints/cookiecutter.json +6 -0
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_install_crud_utils.py +7 -5
  32. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_start_project.py +5 -3
  33. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_sync_dotenv.py +3 -3
  34. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/conftest.py +20 -0
  35. falco_cli-0.3.0/docs/images/project-tree.svg +0 -241
  36. falco_cli-0.3.0/requirements.txt +0 -298
  37. {falco_cli-0.3.0 → falco_cli-0.3.1}/.all-contributorsrc +0 -0
  38. {falco_cli-0.3.0 → falco_cli-0.3.1}/.editorconfig +0 -0
  39. {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/dependabot.yml +0 -0
  40. {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/documentation.yml +0 -0
  41. {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/pre-commit-auto-update.yml +0 -0
  42. {falco_cli-0.3.0 → falco_cli-0.3.1}/.github/workflows/publish.yml +0 -0
  43. {falco_cli-0.3.0 → falco_cli-0.3.1}/.gitignore +0 -0
  44. {falco_cli-0.3.0 → falco_cli-0.3.1}/.pre-commit-config.yaml +0 -0
  45. {falco_cli-0.3.0 → falco_cli-0.3.1}/.vscode/settings.json +0 -0
  46. {falco_cli-0.3.0 → falco_cli-0.3.1}/CODE_OF_CONDUCT.md +0 -0
  47. {falco_cli-0.3.0 → falco_cli-0.3.1}/LICENSE +0 -0
  48. {falco_cli-0.3.0 → falco_cli-0.3.1}/README.md +0 -0
  49. {falco_cli-0.3.0 → falco_cli-0.3.1}/all-contributorsrc +0 -0
  50. {falco_cli-0.3.0 → falco_cli-0.3.1}/assets/falco-logo.svg +0 -0
  51. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/__init__.py +0 -0
  52. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/asgi.py +0 -0
  53. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/settings.py +0 -0
  54. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/urls.py +0 -0
  55. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/config/wsgi.py +0 -0
  56. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/__init__.py +0 -0
  57. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/__init__.py +0 -0
  58. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/apps.py +0 -0
  59. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/core/utils.py +0 -0
  60. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/__init__.py +0 -0
  61. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/admin.py +0 -0
  62. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/apps.py +0 -0
  63. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/migrations/0001_initial.py +0 -0
  64. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/migrations/__init__.py +0 -0
  65. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/orders/models.py +0 -0
  66. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/__init__.py +0 -0
  67. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/admin.py +0 -0
  68. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/apps.py +0 -0
  69. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/forms.py +0 -0
  70. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/migrations/0001_initial.py +0 -0
  71. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/migrations/__init__.py +0 -0
  72. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/models.py +0 -0
  73. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/tests.py +0 -0
  74. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/urls.py +0 -0
  75. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/demo/products/views.py +0 -0
  76. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/manage.py +0 -0
  77. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/requirements.txt +0 -0
  78. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/base.html +0 -0
  79. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_create.html +0 -0
  80. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_detail.html +0 -0
  81. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_list.html +0 -0
  82. {falco_cli-0.3.0 → falco_cli-0.3.1}/demo/templates/products/product_update.html +0 -0
  83. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/.rich-codex.yml +0 -0
  84. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/Makefile +0 -0
  85. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/_static/custom.css +0 -0
  86. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/_templates/partials/globaltoc-above.html +0 -0
  87. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/changelog.rst +0 -0
  88. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/codeofconduct.rst +0 -0
  89. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/conf.py +0 -0
  90. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/contributing.rst +0 -0
  91. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/avoiding_god_models.rst +0 -0
  92. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/database_tips.rst +0 -0
  93. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/deployment.rst +0 -0
  94. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/dynamic_model_schema.rst +0 -0
  95. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/index.rst +0 -0
  96. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/interactive_user_interfaces.rst +0 -0
  97. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/logging_and_monitoring.rst +0 -0
  98. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/multitenancy.rst +0 -0
  99. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/optimizing_database_access.rst +0 -0
  100. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/permissions_and_authorization.rst +0 -0
  101. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/realtime.rst +0 -0
  102. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/running_project_in_a_container.rst +0 -0
  103. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/task_queues_and_schedulers.rst +0 -0
  104. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/tips_and_extra.rst +0 -0
  105. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/use_sqlite_in_production.rst +0 -0
  106. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_async_code.rst +0 -0
  107. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_documentation.rst +0 -0
  108. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/guides/writing_tests.rst +0 -0
  109. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/deployment.png +0 -0
  110. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/logo_with_text.svg +0 -0
  111. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/images/task_queue.png +0 -0
  112. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/index.rst +0 -0
  113. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/install.rst +0 -0
  114. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/license.rst +0 -0
  115. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/make.bat +0 -0
  116. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/crud.rst +0 -0
  117. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/htmx.rst +0 -0
  118. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/index.rst +0 -0
  119. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/migrations.rst +0 -0
  120. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/setup_admin.rst +0 -0
  121. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/sync_dotenv.rst +0 -0
  122. {falco_cli-0.3.0 → falco_cli-0.3.1}/docs/the_cli/work.rst +0 -0
  123. {falco_cli-0.3.0 → falco_cli-0.3.1}/scripts/update_readme_guides.py +0 -0
  124. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__init__.py +0 -0
  125. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/__main__.py +0 -0
  126. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/__init__.py +0 -0
  127. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/htmx.py +0 -0
  128. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/htmx_extension.py +0 -0
  129. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco/commands/setup_admin.py +0 -0
  130. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/create.html +0 -0
  131. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/detail.html +0 -0
  132. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/forms.py.bp +0 -0
  133. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/list.html +0 -0
  134. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/update.html +0 -0
  135. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/utils.py +0 -0
  136. {falco_cli-0.3.0 → falco_cli-0.3.1}/src/falco_blueprints/crud/views.py.bp +0 -0
  137. {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
  138. {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
  139. {falco_cli-0.3.0/src/falco_blueprints/project_name → falco_cli-0.3.1/src/falco_blueprints/{{ cookiecutter.project_name }}}/.gitignore +0 -0
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/__init__.py +0 -0
  158. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_crud.py +0 -0
  159. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_htmx.py +0 -0
  160. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_htmx_extension.py +0 -0
  161. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_reset_migrations.py +0 -0
  162. {falco_cli-0.3.0 → falco_cli-0.3.1}/tests/commands/test_rm_migrations.py +0 -0
  163. {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.0
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: django
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: tomli
38
+ Requires-Dist: tomlkit
39
39
  Description-Content-Type: text/markdown
40
40
 
41
41
  <p align="center">
@@ -0,0 +1,2 @@
1
+ [project]
2
+ name = "demo"
@@ -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&#160;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)">📂&#160;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)">├──&#160;</text><text class="terminal-2549529014-r2" x="48.8" y="44.4" textLength="109.8" clip-path="url(#terminal-2549529014-line-1)">📂&#160;.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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-2)">├──&#160;</text><text class="terminal-2549529014-r2" x="97.6" y="68.8" textLength="134.2" clip-path="url(#terminal-2549529014-line-2)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="93.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-3)">└──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="93.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-3)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="117.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-4)">└──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="117.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-4)">📄&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r2" x="48.8" y="142" textLength="97.6" clip-path="url(#terminal-2549529014-line-5)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="166.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-6)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="166.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-6)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="190.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-7)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="190.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-7)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="215.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-8)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="215.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-8)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="239.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-9)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="239.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-9)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="264" textLength="48.8" clip-path="url(#terminal-2549529014-line-10)">└──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="264" textLength="24.4" clip-path="url(#terminal-2549529014-line-10)">🐍&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r2" x="48.8" y="288.4" textLength="97.6" clip-path="url(#terminal-2549529014-line-11)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="312.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-12)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="312.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-12)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="337.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-13)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="337.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-13)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="361.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-14)">└──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="361.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-14)">🐍&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r2" x="48.8" y="386" textLength="244" clip-path="url(#terminal-2549529014-line-15)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="410.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-16)">├──&#160;</text><text class="terminal-2549529014-r2" x="97.6" y="410.4" textLength="73.2" clip-path="url(#terminal-2549529014-line-16)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="434.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-17)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="434.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-17)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="434.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-17)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="459.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-18)">└──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="459.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-18)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="483.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-19)">├──&#160;</text><text class="terminal-2549529014-r2" x="97.6" y="483.6" textLength="97.6" clip-path="url(#terminal-2549529014-line-19)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="508" textLength="48.8" clip-path="url(#terminal-2549529014-line-20)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="508" textLength="48.8" clip-path="url(#terminal-2549529014-line-20)">└──&#160;</text><text class="terminal-2549529014-r2" x="146.4" y="508" textLength="109.8" clip-path="url(#terminal-2549529014-line-20)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="532.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-21)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="532.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-21)">└──&#160;</text><text class="terminal-2549529014-r2" x="195.2" y="532.4" textLength="73.2" clip-path="url(#terminal-2549529014-line-21)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="195.2" y="556.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-22)">└──&#160;</text><text class="terminal-2549529014-r1" x="244" y="556.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-22)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="581.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-23)">├──&#160;</text><text class="terminal-2549529014-r2" x="97.6" y="581.2" textLength="134.2" clip-path="url(#terminal-2549529014-line-23)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="605.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-24)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="605.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-24)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="630" textLength="48.8" clip-path="url(#terminal-2549529014-line-25)">└──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="630" textLength="24.4" clip-path="url(#terminal-2549529014-line-25)">📄&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="654.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-26)">├──&#160;</text><text class="terminal-2549529014-r2" x="97.6" y="654.4" textLength="85.4" clip-path="url(#terminal-2549529014-line-26)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="678.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-27)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="678.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-27)">├──&#160;</text><text class="terminal-2549529014-r2" x="146.4" y="678.8" textLength="146.4" clip-path="url(#terminal-2549529014-line-27)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="703.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-28)">├──&#160;</text><text class="terminal-2549529014-r1" x="195.2" y="703.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-28)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="727.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-29)">└──&#160;</text><text class="terminal-2549529014-r1" x="195.2" y="727.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-29)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="752" textLength="48.8" clip-path="url(#terminal-2549529014-line-30)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="752" textLength="48.8" clip-path="url(#terminal-2549529014-line-30)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="752" textLength="24.4" clip-path="url(#terminal-2549529014-line-30)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="776.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-31)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="776.4" textLength="48.8" clip-path="url(#terminal-2549529014-line-31)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="776.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-31)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="800.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-32)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="800.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-32)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="825.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-33)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="825.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-33)">├──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="825.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-33)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="849.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-34)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="849.6" textLength="48.8" clip-path="url(#terminal-2549529014-line-34)">└──&#160;</text><text class="terminal-2549529014-r1" x="146.4" y="849.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-34)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="874" textLength="48.8" clip-path="url(#terminal-2549529014-line-35)">└──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="874" textLength="24.4" clip-path="url(#terminal-2549529014-line-35)">🐍&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r2" x="48.8" y="898.4" textLength="85.4" clip-path="url(#terminal-2549529014-line-36)">📂&#160;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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="922.8" textLength="48.8" clip-path="url(#terminal-2549529014-line-37)">├──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="922.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-37)">🐍&#160;</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)">│&#160;&#160;&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="947.2" textLength="48.8" clip-path="url(#terminal-2549529014-line-38)">└──&#160;</text><text class="terminal-2549529014-r1" x="97.6" y="947.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-38)">🐍&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="971.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-39)">📄&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="996" textLength="24.4" clip-path="url(#terminal-2549529014-line-40)">📄&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="1020.4" textLength="24.4" clip-path="url(#terminal-2549529014-line-41)">📄&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="1044.8" textLength="24.4" clip-path="url(#terminal-2549529014-line-42)">🐍&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="1069.2" textLength="24.4" clip-path="url(#terminal-2549529014-line-43)">📄&#160;</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)">├──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="1093.6" textLength="24.4" clip-path="url(#terminal-2549529014-line-44)">📄&#160;</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)">└──&#160;</text><text class="terminal-2549529014-r1" x="48.8" y="1118" textLength="24.4" clip-path="url(#terminal-2549529014-line-45)">📄&#160;</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 `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``
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
- { name = "Tobi DEGNON", email = "tobidegnon@proton.me" },
14
+ { name = "Tobi DEGNON", email = "tobidegnon@proton.me" },
15
15
  ]
16
16
  classifiers = [
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",
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
- "django",
34
- "cappa",
35
- "rich",
36
- "httpx",
37
- "honcho",
38
- "tomli",
39
- "python-dotenv",
40
- "autoflake",
41
- "black",
42
- "isort",
43
- "djlint",
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
- "hatch-pip-compile"
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
- "coverage[toml]>=6.5",
75
- "pytest",
76
- "ipython",
77
- "pre-commit",
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
- "- coverage combine",
85
- "coverage report",
86
+ "- coverage combine",
87
+ "coverage report",
86
88
  ]
87
89
  cov = [
88
- "test-cov",
89
- "cov-report",
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
- "sphinx",
97
- "sphinx-autobuild",
98
- "myst-parser",
99
- "shibuya",
100
- "sphinx-design",
101
- "sphinx-tabs",
102
- "sphinx-copybutton",
103
- "sphinx-togglebutton",
104
- "sphinxcontrib-mermaid",
105
- "sphinx-autorun",
106
- "sphinx-github-changelog",
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/tree.py src/falco_blueprints/project_name"
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
- "mypy>=1.0.0",
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
- "src/falco/__about__.py",
137
- "src/falco_blueprints/*",
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
- "no cov",
147
- "if __name__ == .__main__.:",
148
- "if TYPE_CHECKING:",
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
- "ignore::DeprecationWarning",
155
+ "ignore::DeprecationWarning",
154
156
  ]
155
157
  testpaths = [
156
- "tests",
158
+ "tests",
157
159
  ]