ovinnik 0.1.0__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 (169) hide show
  1. ovinnik-0.1.0/.gitignore +142 -0
  2. ovinnik-0.1.0/LICENSE +22 -0
  3. ovinnik-0.1.0/PKG-INFO +115 -0
  4. ovinnik-0.1.0/README.md +94 -0
  5. ovinnik-0.1.0/ovinnik/__init__.py +0 -0
  6. ovinnik-0.1.0/ovinnik/__main__.py +42 -0
  7. ovinnik-0.1.0/ovinnik/cli.py +721 -0
  8. ovinnik-0.1.0/ovinnik/input_model.py +258 -0
  9. ovinnik-0.1.0/ovinnik/template/cookiecutter.json +78 -0
  10. ovinnik-0.1.0/ovinnik/template/hooks/__init__.py +0 -0
  11. ovinnik-0.1.0/ovinnik/template/hooks/post_gen_project.py +108 -0
  12. ovinnik-0.1.0/ovinnik/template/hooks/pre_gen_project.py +3 -0
  13. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.dockerignore +144 -0
  14. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.editorconfig +31 -0
  15. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.env +11 -0
  16. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.github/workflows/tests.yml +41 -0
  17. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.gitignore +142 -0
  18. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.gitlab-ci.yml +33 -0
  19. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/.pre-commit-config.yaml +31 -0
  20. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/Dockerfile +70 -0
  21. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/README.md +232 -0
  22. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/alembic.ini +53 -0
  23. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/__init__.py +1 -0
  24. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/__init__.py +1 -0
  25. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/dependencies.py +183 -0
  26. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/docs/__init__.py +4 -0
  27. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/docs/views.py +49 -0
  28. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/dummy/__init__.py +4 -0
  29. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/dummy/schema.py +42 -0
  30. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/dummy/views.py +42 -0
  31. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/echo/__init__.py +4 -0
  32. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/echo/schema.py +7 -0
  33. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/echo/views.py +21 -0
  34. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/monitoring/__init__.py +4 -0
  35. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/monitoring/views.py +11 -0
  36. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/permissions/__init__.py +1 -0
  37. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/permissions/auth.py +3 -0
  38. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/permissions/roles.py +37 -0
  39. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/router.py +37 -0
  40. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/users/__init__.py +4 -0
  41. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/users/dependencies.py +91 -0
  42. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/users/schema.py +15 -0
  43. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/api/users/views.py +54 -0
  44. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/config/__init__.py +1 -0
  45. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/config/settings.py +254 -0
  46. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_beanie/__init__.py +1 -0
  47. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_beanie/dummy_dao.py +55 -0
  48. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_ormar/__init__.py +1 -0
  49. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_ormar/dummy_dao.py +40 -0
  50. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_piccolo/__init__.py +1 -0
  51. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_piccolo/dummy_dao.py +41 -0
  52. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_psycopg/__init__.py +1 -0
  53. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_psycopg/dummy_dao.py +76 -0
  54. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_sa/__init__.py +1 -0
  55. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_sa/dummy_dao.py +50 -0
  56. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_sqlmodel/__init__.py +1 -0
  57. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_sqlmodel/dummy_dao.py +50 -0
  58. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_tortoise/__init__.py +1 -0
  59. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/dal_tortoise/dummy_dao.py +39 -0
  60. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_beanie/migrations/20251127230818_init.py +6 -0
  61. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_beanie/models/__init__.py +16 -0
  62. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_beanie/models/dummy_model.py +5 -0
  63. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/base.py +10 -0
  64. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/__init__.py +1 -0
  65. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/env.py +83 -0
  66. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/script.py.mako +26 -0
  67. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/versions/2021-08-16-16-53_819cbf6e030b.py +21 -0
  68. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/versions/2021-08-16-16-55_2b7380507a71.py +32 -0
  69. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/migrations/versions/__init__.py +0 -0
  70. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/models/__init__.py +14 -0
  71. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_ormar/models/dummy_model.py +10 -0
  72. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_piccolo/app_conf.py +19 -0
  73. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_piccolo/migrations/2022-04-16T17-38-51-672827.py +38 -0
  74. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_piccolo/migrations/__init__.py +0 -0
  75. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_piccolo/models/__init__.py +1 -0
  76. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_piccolo/models/dummy_model.py +8 -0
  77. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_psycopg/models/dummy_model.py +8 -0
  78. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/base.py +9 -0
  79. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/db.py +26 -0
  80. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/meta.py +3 -0
  81. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/__init__.py +1 -0
  82. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/env.py +87 -0
  83. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/script.py.mako +29 -0
  84. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/versions/2021-08-16-16-53_819cbf6e030b.py +24 -0
  85. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/versions/2021-08-16-16-55_2b7380507a71.py +32 -0
  86. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/versions/2026-05-05-14-37_8caca4abd7b4.py +52 -0
  87. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/migrations/versions/__init__.py +0 -0
  88. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/models/__init__.py +14 -0
  89. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/models/dummy_model.py +12 -0
  90. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sa/models/users.py +7 -0
  91. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/base.py +5 -0
  92. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/db.py +26 -0
  93. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/meta.py +3 -0
  94. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/__init__.py +1 -0
  95. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/env.py +87 -0
  96. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/script.py.mako +26 -0
  97. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/versions/2021-08-16-16-53_819cbf6e030b.py +24 -0
  98. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/versions/2021-08-16-16-55_2b7380507a71.py +32 -0
  99. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/migrations/versions/__init__.py +0 -0
  100. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/models/__init__.py +14 -0
  101. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_sqlmodel/models/dummy_model.py +11 -0
  102. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/config.py +17 -0
  103. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/0_20210928165300_init_mysql.sql +9 -0
  104. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/0_20210928165300_init_pg.sql +9 -0
  105. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/0_20210928165300_init_sqlite.sql +9 -0
  106. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/1_20210928165300_init_dummy_mysql.sql +7 -0
  107. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/1_20210928165300_init_dummy_pg.sql +8 -0
  108. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/migrations/models/1_20210928165300_init_dummy_sqlite.sql +7 -0
  109. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/models/__init__.py +1 -0
  110. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/db_tortoise/models/dummy_model.py +11 -0
  111. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/__init__.py +1 -0
  112. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/context.py +61 -0
  113. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/dependencies.py +53 -0
  114. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/dummy/__init__.py +6 -0
  115. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/dummy/mutation.py +37 -0
  116. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/dummy/query.py +41 -0
  117. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/dummy/schema.py +17 -0
  118. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/echo/__init__.py +5 -0
  119. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/echo/mutation.py +17 -0
  120. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/echo/query.py +17 -0
  121. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/permissions/__init__.py +1 -0
  122. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/permissions/auth.py +6 -0
  123. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/permissions/roles.py +23 -0
  124. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gql/router.py +57 -0
  125. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/gunicorn_runner.py +29 -0
  126. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/__init__.py +1 -0
  127. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/kafka/__init__.py +1 -0
  128. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/kafka/client.py +42 -0
  129. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/nats/__init__.py +1 -0
  130. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/nats/client.py +39 -0
  131. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/rabbit/__init__.py +1 -0
  132. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/rabbit/client.py +80 -0
  133. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/redis/__init__.py +1 -0
  134. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/libs/redis/client.py +38 -0
  135. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/lifespan.py +374 -0
  136. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/log.py +110 -0
  137. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/main.py +114 -0
  138. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/piccolo_conf.py +28 -0
  139. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/__init__.py +9 -0
  140. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/dummy_service.py +46 -0
  141. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/echo_service.py +17 -0
  142. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/kafka_service.py +24 -0
  143. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/nats_service.py +79 -0
  144. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/permission_service.py +31 -0
  145. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/rabbit_service.py +143 -0
  146. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/services/redis_service.py +41 -0
  147. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/static/docs/redoc.standalone.js +1804 -0
  148. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/static/docs/swagger-ui-bundle.js +3 -0
  149. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/static/docs/swagger-ui.css +3 -0
  150. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/tasks/__init__.py +4 -0
  151. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/app/tasks/broker.py +41 -0
  152. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/conditional_files.toml +234 -0
  153. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/deploy/docker-compose.otlp.yml +23 -0
  154. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/docker-compose.yml +296 -0
  155. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/pyproject.toml +351 -0
  156. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/replaceable_files.toml +23 -0
  157. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/__init__.py +1 -0
  158. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/conftest.py +708 -0
  159. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_dummy.py +117 -0
  160. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_echo.py +40 -0
  161. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_kafka.py +32 -0
  162. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_nats.py +29 -0
  163. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_rabbit.py +59 -0
  164. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_redis.py +43 -0
  165. ovinnik-0.1.0/ovinnik/template/{{cookiecutter.project_name}}/tests/test_{{cookiecutter.project_name}}.py +15 -0
  166. ovinnik-0.1.0/ovinnik/tests/conftest.py +108 -0
  167. ovinnik-0.1.0/ovinnik/tests/test_generator.py +253 -0
  168. ovinnik-0.1.0/ovinnik/tests/utils.py +54 -0
  169. ovinnik-0.1.0/pyproject.toml +72 -0
@@ -0,0 +1,142 @@
1
+ .idea
2
+ .vscode
3
+
4
+ *.sqlite3
5
+
6
+ # Byte-compiled / optimized / DLL files
7
+ __pycache__/
8
+ *.py[cod]
9
+ *$py.class
10
+
11
+ # C extensions
12
+ *.so
13
+
14
+ # Distribution / packaging
15
+ .Python
16
+ build/
17
+ develop-eggs/
18
+ dist/
19
+ downloads/
20
+ eggs/
21
+ .eggs/
22
+ lib/
23
+ lib64/
24
+ parts/
25
+ sdist/
26
+ var/
27
+ wheels/
28
+ share/python-wheels/
29
+ *.egg-info/
30
+ .installed.cfg
31
+ *.egg
32
+ MANIFEST
33
+
34
+ # PyInstaller
35
+ # Usually these files are written by a python script from a template
36
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
37
+ *.manifest
38
+ *.spec
39
+
40
+ # Installer logs
41
+ pip-log.txt
42
+ pip-delete-this-directory.txt
43
+
44
+ # Unit test / coverage reports
45
+ htmlcov/
46
+ .tox/
47
+ .nox/
48
+ .coverage
49
+ .coverage.*
50
+ .cache
51
+ nosetests.xml
52
+ coverage.xml
53
+ *.cover
54
+ *.py,cover
55
+ .hypothesis/
56
+ .pytest_cache/
57
+ cover/
58
+
59
+ # Translations
60
+ *.mo
61
+ *.pot
62
+
63
+ # Django stuff:
64
+ *.log
65
+ local_settings.py
66
+ db.sqlite3
67
+ db.sqlite3-journal
68
+
69
+ # Flask stuff:
70
+ instance/
71
+ .webassets-cache
72
+
73
+ # Scrapy stuff:
74
+ .scrapy
75
+
76
+ # Sphinx documentation
77
+ docs/_build/
78
+
79
+ # PyBuilder
80
+ .pybuilder/
81
+ target/
82
+
83
+ # Jupyter Notebook
84
+ .ipynb_checkpoints
85
+
86
+ # IPython
87
+ profile_default/
88
+ ipython_config.py
89
+
90
+ # pyenv
91
+ # For a library or package, you might want to ignore these files since the code is
92
+ # intended to run in multiple environments; otherwise, check them in:
93
+ # .python-version
94
+
95
+ # pipenv
96
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
97
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
98
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
99
+ # install all needed dependencies.
100
+ #Pipfile.lock
101
+
102
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
103
+ __pypackages__/
104
+
105
+ # Celery stuff
106
+ celerybeat-schedule
107
+ celerybeat.pid
108
+
109
+ # SageMath parsed files
110
+ *.sage.py
111
+
112
+ # Environments
113
+ .venv
114
+ env/
115
+ venv/
116
+ ENV/
117
+ env.bak/
118
+ venv.bak/
119
+
120
+ # Spyder project settings
121
+ .spyderproject
122
+ .spyproject
123
+
124
+ # Rope project settings
125
+ .ropeproject
126
+
127
+ # mkdocs documentation
128
+ /site
129
+
130
+ # mypy
131
+ .mypy_cache/
132
+ .dmypy.json
133
+ dmypy.json
134
+
135
+ # Pyre type checker
136
+ .pyre/
137
+
138
+ # pytype static type analyzer
139
+ .pytype/
140
+
141
+ # Cython debug symbols
142
+ cython_debug/
ovinnik-0.1.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Pavel Kirilin
4
+ Copyright (c) 2026 Grigorii Novikov
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
ovinnik-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.5
2
+ Name: ovinnik
3
+ Version: 0.1.0
4
+ Summary: Feature-rich robust FastAPI project generator
5
+ Project-URL: Homepage, https://github.com/Oper18/ovinnik
6
+ Project-URL: Repository, https://github.com/Oper18/ovinnik
7
+ Project-URL: Upstream, https://github.com/s3rius/FastAPI-template
8
+ Author-email: Grigorii Novikov <genovikov93@gmail.com>, Pavel Kirilin <win10@list.ru>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: Cookiecutter,FastAPI,Template
12
+ Requires-Python: <4,>=3.9
13
+ Requires-Dist: click<9,>=8.1.3
14
+ Requires-Dist: cookiecutter<2,>=1.7.3
15
+ Requires-Dist: pre-commit<3,>=2.14.0
16
+ Requires-Dist: prompt-toolkit<4,>=3.0.36
17
+ Requires-Dist: pydantic>=1.10
18
+ Requires-Dist: simple-term-menu<2,>=1.5.2
19
+ Requires-Dist: termcolor<2,>=1.1.0
20
+ Description-Content-Type: text/markdown
21
+
22
+ ## Usage
23
+
24
+ ⚠️ [Git](https://git-scm.com/downloads), [Python](https://www.python.org/) and [UV](https://docs.astral.sh/uv/) must be installed and accessible ⚠️
25
+
26
+ You can install it directly from pypi with pip.
27
+ ```bash
28
+ python3 -m pip install ovinnik
29
+ python3 -m ovinnik
30
+ # or ovinnik
31
+ # Answer all the questions
32
+ # 🍪 Enjoy your new project 🍪
33
+ cd new_project
34
+ docker-compose up --build
35
+ ```
36
+
37
+ If you want to install it from sources, try this:
38
+ ```shell
39
+ python3 -m pip install uv
40
+ python3 -m pip install .
41
+ python3 -m ovinnik
42
+ ```
43
+
44
+ Also, you can use it with docker.
45
+ ```bash
46
+ docker run --rm -it -v "$(pwd):/projects" ghcr.io/oper18/ovinnik
47
+ ```
48
+
49
+ ## Features
50
+
51
+ One of the coolest features is that this project is extremely configurable.
52
+ You can choose between different databases and even ORMs, or
53
+ you can even generate a project without a database!
54
+ Currently SQLAlchemy 2.0, TortoiseORM, Piccolo, Ormar and Beanie are supported.
55
+
56
+ This project can run as TUI or CLI and has excellent code documentation.
57
+
58
+ Generator features:
59
+ - Pydantic V2 (Where it's possible. Some libs doesn't have support);
60
+ - You can choose between GraphQL and REST api;
61
+ - Uvicorn and gunicorn;
62
+ - Different databases support;
63
+ - Different ORMs support;
64
+ - Optional migrations for each ORM except raw drivers;
65
+ - Optional redis support;
66
+ - Optional rabbitmq support;
67
+ - different CI\CD;
68
+ - Optional Demo routers and models (This helps you to see how project is structured);
69
+ - Pre-commit integration;
70
+ - Generated tests with almost 90% coverage;
71
+ - Tests for the generator itself;
72
+ - Optional Prometheus integration;
73
+ - Optional Sentry integration;
74
+ - Optional Loguru logger;
75
+ - Optional Opentelemetry integration.
76
+ - Optional taskiq integration.
77
+
78
+
79
+ This project can handle arguments passed through command line.
80
+
81
+ ```shell
82
+ $ python -m ovinnik --help
83
+
84
+ Usage: ovinnik [OPTIONS]
85
+
86
+ Options:
87
+ -n, --name TEXT Name of your awesome project
88
+ -V, --version Prints current version
89
+ --force Owerrite directory if it exists
90
+ --quiet Do not ask for features during generation
91
+ --api-type [rest|graphql] Select API type for your application
92
+ --db [none|sqlite|mysql|postgresql|mongodb]
93
+ Select a database for your app
94
+ --orm [none|ormar|sqlalchemy|tortoise|psycopg|piccolo|beanie]
95
+ Choose Object–Relational Mapper lib
96
+ --ci [none|gitlab_ci|github] Select a CI for your app
97
+ --redis Add redis support
98
+ --add_users Add fastapi-users support
99
+ --rabbit Add RabbitMQ support
100
+ --taskiq Add Taskiq support
101
+ --migrations Add Migrations
102
+ --dummy Add dummy model
103
+ --routers Add example routers
104
+ --swagger Add self hosted swagger
105
+ --prometheus Add prometheus compatible metrics
106
+ --sentry Add sentry integration
107
+ --loguru Add loguru logger
108
+ --opentelemetry Add opentelemetry integration
109
+ --traefik Adds traefik labels to docker container
110
+ --kafka Add Kafka support
111
+ --gunicorn Add gunicorn server
112
+ --cookie-auth Add authentication via cookie support
113
+ --jwt-auth Add JWT auth support
114
+ --help Show this message and exit.
115
+ ```
@@ -0,0 +1,94 @@
1
+ ## Usage
2
+
3
+ ⚠️ [Git](https://git-scm.com/downloads), [Python](https://www.python.org/) and [UV](https://docs.astral.sh/uv/) must be installed and accessible ⚠️
4
+
5
+ You can install it directly from pypi with pip.
6
+ ```bash
7
+ python3 -m pip install ovinnik
8
+ python3 -m ovinnik
9
+ # or ovinnik
10
+ # Answer all the questions
11
+ # 🍪 Enjoy your new project 🍪
12
+ cd new_project
13
+ docker-compose up --build
14
+ ```
15
+
16
+ If you want to install it from sources, try this:
17
+ ```shell
18
+ python3 -m pip install uv
19
+ python3 -m pip install .
20
+ python3 -m ovinnik
21
+ ```
22
+
23
+ Also, you can use it with docker.
24
+ ```bash
25
+ docker run --rm -it -v "$(pwd):/projects" ghcr.io/oper18/ovinnik
26
+ ```
27
+
28
+ ## Features
29
+
30
+ One of the coolest features is that this project is extremely configurable.
31
+ You can choose between different databases and even ORMs, or
32
+ you can even generate a project without a database!
33
+ Currently SQLAlchemy 2.0, TortoiseORM, Piccolo, Ormar and Beanie are supported.
34
+
35
+ This project can run as TUI or CLI and has excellent code documentation.
36
+
37
+ Generator features:
38
+ - Pydantic V2 (Where it's possible. Some libs doesn't have support);
39
+ - You can choose between GraphQL and REST api;
40
+ - Uvicorn and gunicorn;
41
+ - Different databases support;
42
+ - Different ORMs support;
43
+ - Optional migrations for each ORM except raw drivers;
44
+ - Optional redis support;
45
+ - Optional rabbitmq support;
46
+ - different CI\CD;
47
+ - Optional Demo routers and models (This helps you to see how project is structured);
48
+ - Pre-commit integration;
49
+ - Generated tests with almost 90% coverage;
50
+ - Tests for the generator itself;
51
+ - Optional Prometheus integration;
52
+ - Optional Sentry integration;
53
+ - Optional Loguru logger;
54
+ - Optional Opentelemetry integration.
55
+ - Optional taskiq integration.
56
+
57
+
58
+ This project can handle arguments passed through command line.
59
+
60
+ ```shell
61
+ $ python -m ovinnik --help
62
+
63
+ Usage: ovinnik [OPTIONS]
64
+
65
+ Options:
66
+ -n, --name TEXT Name of your awesome project
67
+ -V, --version Prints current version
68
+ --force Owerrite directory if it exists
69
+ --quiet Do not ask for features during generation
70
+ --api-type [rest|graphql] Select API type for your application
71
+ --db [none|sqlite|mysql|postgresql|mongodb]
72
+ Select a database for your app
73
+ --orm [none|ormar|sqlalchemy|tortoise|psycopg|piccolo|beanie]
74
+ Choose Object–Relational Mapper lib
75
+ --ci [none|gitlab_ci|github] Select a CI for your app
76
+ --redis Add redis support
77
+ --add_users Add fastapi-users support
78
+ --rabbit Add RabbitMQ support
79
+ --taskiq Add Taskiq support
80
+ --migrations Add Migrations
81
+ --dummy Add dummy model
82
+ --routers Add example routers
83
+ --swagger Add self hosted swagger
84
+ --prometheus Add prometheus compatible metrics
85
+ --sentry Add sentry integration
86
+ --loguru Add loguru logger
87
+ --opentelemetry Add opentelemetry integration
88
+ --traefik Adds traefik labels to docker container
89
+ --kafka Add Kafka support
90
+ --gunicorn Add gunicorn server
91
+ --cookie-auth Add authentication via cookie support
92
+ --jwt-auth Add JWT auth support
93
+ --help Show this message and exit.
94
+ ```
File without changes
@@ -0,0 +1,42 @@
1
+ from pathlib import Path
2
+
3
+ from cookiecutter.exceptions import FailedHookException, OutputDirExistsException
4
+ from cookiecutter.main import cookiecutter
5
+ from termcolor import cprint
6
+
7
+ from ovinnik.cli import run_command
8
+ from ovinnik.input_model import BuilderContext
9
+
10
+ script_dir = Path(__file__).parent
11
+
12
+
13
+ def generate_project(context: BuilderContext) -> None:
14
+ """
15
+ Generate actual project with given context.
16
+
17
+ :param context: builder_context
18
+ """
19
+ try:
20
+ cookiecutter(
21
+ template=f"{script_dir}/template",
22
+ extra_context=context.dict(),
23
+ default_config=True,
24
+ no_input=True,
25
+ overwrite_if_exists=context.force,
26
+ )
27
+ except (FailedHookException, OutputDirExistsException) as exc:
28
+ if isinstance(exc, OutputDirExistsException):
29
+ cprint("Directory with such name already exists!", "red")
30
+ return
31
+ cprint(
32
+ "Project successfully generated. You can read information about usage in README.md"
33
+ )
34
+
35
+
36
+ def main() -> None:
37
+ """Starting point."""
38
+ run_command(generate_project)
39
+
40
+
41
+ if __name__ == "__main__":
42
+ main()