django-nova 0.2.2__tar.gz → 0.2.3__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 (73) hide show
  1. {django_nova-0.2.2 → django_nova-0.2.3}/PKG-INFO +16 -6
  2. django_nova-0.2.3/pyproject.toml +264 -0
  3. django_nova-0.2.2/.github/workflows/python-publish.yml +0 -70
  4. django_nova-0.2.2/.idea/django-nova.iml +0 -10
  5. django_nova-0.2.2/.idea/inspectionProfiles/Project_Default.xml +0 -31
  6. django_nova-0.2.2/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  7. django_nova-0.2.2/.idea/markdown.xml +0 -8
  8. django_nova-0.2.2/.idea/misc.xml +0 -6
  9. django_nova-0.2.2/.idea/shelf/Uncommitted_changes_before_Update_at_12_06_2026,_08_36_[Changes]/shelved.patch +0 -31
  10. django_nova-0.2.2/.idea/shelf/Uncommitted_changes_before_Update_at_12_06_2026__08_36__Changes_.xml +0 -4
  11. django_nova-0.2.2/.idea/vcs.xml +0 -6
  12. django_nova-0.2.2/.idea/workspace.xml +0 -203
  13. django_nova-0.2.2/CHANGELOG.md +0 -14
  14. django_nova-0.2.2/README.RU.md +0 -162
  15. django_nova-0.2.2/assets/django-nova-logo.png +0 -0
  16. django_nova-0.2.2/docs/architecture.md +0 -34
  17. django_nova-0.2.2/docs/index.md +0 -60
  18. django_nova-0.2.2/docs/index.svg +0 -1
  19. django_nova-0.2.2/docs/installation.md +0 -15
  20. django_nova-0.2.2/docs/installation.svg +0 -1
  21. django_nova-0.2.2/example_project/models.py +0 -81
  22. django_nova-0.2.2/pyproject.toml +0 -89
  23. django_nova-0.2.2/schemas.txt +0 -49
  24. django_nova-0.2.2/tests/__init__.py +0 -0
  25. django_nova-0.2.2/tests/apps.py +0 -5
  26. django_nova-0.2.2/tests/cache/test_queryset_cache.py +0 -94
  27. django_nova-0.2.2/tests/conftest.py +0 -24
  28. django_nova-0.2.2/tests/core/__init__.py +0 -0
  29. django_nova-0.2.2/tests/core/test_observability.py +0 -46
  30. django_nova-0.2.2/tests/core/test_tracing.py +0 -64
  31. django_nova-0.2.2/tests/db/test_migrations.py +0 -71
  32. django_nova-0.2.2/tests/ecosystem/__init__.py +0 -0
  33. django_nova-0.2.2/tests/ecosystem/test_admin_integration.py +0 -73
  34. django_nova-0.2.2/tests/ecosystem/test_drf_integration.py +0 -85
  35. django_nova-0.2.2/tests/ecosystem/test_fastapi_bridge.py +0 -68
  36. django_nova-0.2.2/tests/models.py +0 -57
  37. django_nova-0.2.2/tests/test_full_integration.py +0 -54
  38. django_nova-0.2.2/tests/typing/test_typed_models.py +0 -79
  39. {django_nova-0.2.2 → django_nova-0.2.3}/.gitignore +0 -0
  40. {django_nova-0.2.2 → django_nova-0.2.3}/README.md +0 -0
  41. {django_nova-0.2.2 → django_nova-0.2.3}/src/__init__.py +0 -0
  42. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/__init__.py +0 -0
  43. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/admin/__init__.py +0 -0
  44. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/admin/api.py +0 -0
  45. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/admin/components.py +0 -0
  46. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/admin/types.py +0 -0
  47. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/async_orm/__init__.py +0 -0
  48. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/async_orm/manager.py +0 -0
  49. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/async_orm/queryset.py +0 -0
  50. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/cache/__init__.py +0 -0
  51. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/cache/invalidation.py +0 -0
  52. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/cache/queryset_cache.py +0 -0
  53. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/core/__init__.py +0 -0
  54. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/core/config.py +0 -0
  55. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/core/exceptions.py +0 -0
  56. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/core/observability.py +0 -0
  57. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/core/tracing.py +0 -0
  58. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/db/__init__.py +0 -0
  59. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/db/splitter.py +0 -0
  60. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/db/zero_downtime.py +0 -0
  61. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/ecosystem/__init__.py +0 -0
  62. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/ecosystem/drf.py +0 -0
  63. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/ecosystem/fastapi.py +0 -0
  64. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/tasks/__init__.py +0 -0
  65. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/tasks/decorators.py +0 -0
  66. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/tasks/engine.py +0 -0
  67. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/typing/__init__.py +0 -0
  68. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/typing/fields.py +0 -0
  69. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/typing/models.py +0 -0
  70. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/typing/querysets.py +0 -0
  71. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/validation/__init__.py +0 -0
  72. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/validation/pydantic_bridge.py +0 -0
  73. {django_nova-0.2.2 → django_nova-0.2.3}/src/nova/validation/unified.py +0 -0
@@ -1,23 +1,31 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-nova
3
- Version: 0.2.2
4
- Summary: Next-generation Django toolkit: typed ORM, unified validation, async-first, smart caching
3
+ Version: 0.2.3
4
+ Summary: Next-generation Django toolkit: typed ORM, unified validation, async-first workflows, and smart caching
5
+ Project-URL: Homepage, https://github.com/Artem7898/django-nova
6
+ Project-URL: Repository, https://github.com/Artem7898/django-nova
7
+ Project-URL: Documentation, https://github.com/Artem7898/django-nova#readme
8
+ Project-URL: Issues, https://github.com/Artem7898/django-nova/issues
5
9
  Author-email: Artem Alimpiev <alimpievne@gmail.com>
6
- License-Expression: MIT
10
+ License: MIT
11
+ Keywords: async,django,django-framework,fastapi,orm,pydantic,rest-framework,typing,validation
7
12
  Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Framework :: Django
8
14
  Classifier: Framework :: Django :: 5.0
9
15
  Classifier: Framework :: Django :: 5.1
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python
19
+ Classifier: Programming Language :: Python :: 3 :: Only
10
20
  Classifier: Programming Language :: Python :: 3.12
11
21
  Classifier: Programming Language :: Python :: 3.13
12
- Classifier: Topic :: Scientific/Engineering
22
+ Classifier: Topic :: Software Development
13
23
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
14
24
  Requires-Python: >=3.12
15
- Requires-Dist: asyncpg>=0.30; extra == 'async'
16
25
  Requires-Dist: cachetools>=5.4
17
26
  Requires-Dist: django<6.0,>=5.0
18
27
  Requires-Dist: pydantic-settings<3.0,>=2.5
19
28
  Requires-Dist: pydantic<3.0,>=2.8
20
- Requires-Dist: redis>=5.0; extra == 'cache'
21
29
  Requires-Dist: typing-extensions>=4.12
22
30
  Provides-Extra: async
23
31
  Requires-Dist: asyncpg>=0.30; extra == 'async'
@@ -26,6 +34,7 @@ Provides-Extra: cache
26
34
  Requires-Dist: hiredis>=3.0; extra == 'cache'
27
35
  Requires-Dist: redis>=5.0; extra == 'cache'
28
36
  Provides-Extra: dev
37
+ Requires-Dist: build>=1.2; extra == 'dev'
29
38
  Requires-Dist: coverage>=7.6; extra == 'dev'
30
39
  Requires-Dist: djangorestframework>=3.15; extra == 'dev'
31
40
  Requires-Dist: fastapi>=0.115; extra == 'dev'
@@ -38,6 +47,7 @@ Requires-Dist: pytest-django>=4.9; extra == 'dev'
38
47
  Requires-Dist: pytest>=8.3; extra == 'dev'
39
48
  Requires-Dist: ruff>=0.6; extra == 'dev'
40
49
  Requires-Dist: structlog>=24.0; extra == 'dev'
50
+ Requires-Dist: twine>=5.1; extra == 'dev'
41
51
  Provides-Extra: drf
42
52
  Requires-Dist: djangorestframework>=3.15; extra == 'drf'
43
53
  Provides-Extra: fastapi
@@ -0,0 +1,264 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+
6
+ [project]
7
+ name = "django-nova"
8
+ version = "0.2.3"
9
+
10
+ description = "Next-generation Django toolkit: typed ORM, unified validation, async-first workflows, and smart caching"
11
+
12
+ readme = "README.md"
13
+
14
+ license = { text = "MIT" }
15
+
16
+ requires-python = ">=3.12"
17
+
18
+ authors = [
19
+ { name = "Artem Alimpiev", email = "alimpievne@gmail.com" },
20
+ ]
21
+
22
+ keywords = [
23
+ "django",
24
+ "django-framework",
25
+ "orm",
26
+ "pydantic",
27
+ "async",
28
+ "validation",
29
+ "typing",
30
+ "fastapi",
31
+ "rest-framework",
32
+ ]
33
+
34
+
35
+ classifiers = [
36
+ "Development Status :: 3 - Alpha",
37
+
38
+ "Framework :: Django",
39
+ "Framework :: Django :: 5.0",
40
+ "Framework :: Django :: 5.1",
41
+
42
+ "Programming Language :: Python",
43
+ "Programming Language :: Python :: 3 :: Only",
44
+ "Programming Language :: Python :: 3.12",
45
+ "Programming Language :: Python :: 3.13",
46
+
47
+ "License :: OSI Approved :: MIT License",
48
+
49
+ "Operating System :: OS Independent",
50
+
51
+ "Topic :: Software Development",
52
+ "Topic :: Software Development :: Libraries :: Python Modules",
53
+ ]
54
+
55
+
56
+ dependencies = [
57
+ "django>=5.0,<6.0",
58
+ "pydantic>=2.8,<3.0",
59
+ "pydantic-settings>=2.5,<3.0",
60
+ "typing-extensions>=4.12",
61
+ "cachetools>=5.4",
62
+ ]
63
+
64
+
65
+ [project.optional-dependencies]
66
+
67
+ async = [
68
+ "asyncpg>=0.30",
69
+ "databases[asyncpg]>=0.9",
70
+ ]
71
+
72
+
73
+ cache = [
74
+ "redis>=5.0",
75
+ "hiredis>=3.0",
76
+ ]
77
+
78
+
79
+ observability = [
80
+ "structlog>=24.0",
81
+ ]
82
+
83
+
84
+ tracing = [
85
+ "opentelemetry-api>=1.20",
86
+ ]
87
+
88
+
89
+ drf = [
90
+ "djangorestframework>=3.15",
91
+ ]
92
+
93
+
94
+ fastapi = [
95
+ "fastapi>=0.115",
96
+ "uvicorn>=0.30",
97
+ ]
98
+
99
+
100
+ tasks = [
101
+ "asyncio-throttle>=1.0",
102
+ ]
103
+
104
+
105
+ dev = [
106
+ "pytest>=8.3",
107
+ "pytest-asyncio>=0.24",
108
+ "pytest-django>=4.9",
109
+
110
+ "ruff>=0.6",
111
+ "pyright>=1.1",
112
+
113
+ "coverage>=7.6",
114
+
115
+ "hatch>=1.12",
116
+
117
+ "structlog>=24.0",
118
+ "opentelemetry-api>=1.20",
119
+
120
+ "djangorestframework>=3.15",
121
+
122
+ "fastapi>=0.115",
123
+ "httpx>=0.27",
124
+
125
+ "build>=1.2",
126
+ "twine>=5.1",
127
+ ]
128
+
129
+
130
+ [project.urls]
131
+
132
+ Homepage = "https://github.com/Artem7898/django-nova"
133
+
134
+ Repository = "https://github.com/Artem7898/django-nova"
135
+
136
+ Documentation = "https://github.com/Artem7898/django-nova#readme"
137
+
138
+ Issues = "https://github.com/Artem7898/django-nova/issues"
139
+
140
+
141
+
142
+ # ==========================
143
+ # UV configuration
144
+ # ==========================
145
+
146
+ [tool.uv]
147
+
148
+ package = true
149
+
150
+
151
+
152
+ # ==========================
153
+ # Hatch build configuration
154
+ # ==========================
155
+
156
+ [tool.hatch.build.targets.wheel]
157
+
158
+ packages = [
159
+ "src/nova",
160
+ ]
161
+
162
+
163
+ [tool.hatch.build.targets.sdist]
164
+
165
+ include = [
166
+ "/src",
167
+ "/README.md",
168
+ "/LICENSE",
169
+ ]
170
+
171
+
172
+
173
+ # ==========================
174
+ # Ruff
175
+ # ==========================
176
+
177
+ [tool.ruff]
178
+
179
+ target-version = "py312"
180
+
181
+ line-length = 100
182
+
183
+ src = [
184
+ "src",
185
+ ]
186
+
187
+
188
+ [tool.ruff.lint]
189
+
190
+ select = [
191
+ "E",
192
+ "F",
193
+ "I",
194
+ "N",
195
+ "UP",
196
+ "B",
197
+ "A",
198
+ "SIM",
199
+ "RUF",
200
+ ]
201
+
202
+ ignore = [
203
+ "E501",
204
+ ]
205
+
206
+
207
+
208
+ # ==========================
209
+ # Pyright
210
+ # ==========================
211
+
212
+ [tool.pyright]
213
+
214
+ pythonVersion = "3.12"
215
+
216
+ typeCheckingMode = "strict"
217
+
218
+ venvPath = "."
219
+
220
+ venv = ".venv"
221
+
222
+
223
+
224
+ # ==========================
225
+ # Pytest
226
+ # ==========================
227
+
228
+ [tool.pytest.ini_options]
229
+
230
+ asyncio_mode = "auto"
231
+
232
+ markers = [
233
+ "slow: marks tests as slow",
234
+ "integration: integration tests",
235
+ ]
236
+
237
+
238
+
239
+ # ==========================
240
+ # Coverage
241
+ # ==========================
242
+
243
+ [tool.coverage.run]
244
+
245
+ source = [
246
+ "nova",
247
+ ]
248
+
249
+ branch = true
250
+
251
+
252
+
253
+ [tool.coverage.report]
254
+
255
+ exclude_lines = [
256
+ "pragma: no cover",
257
+ "if TYPE_CHECKING:",
258
+ ]
259
+
260
+ [dependency-groups]
261
+ dev = [
262
+ "build>=1.5.1",
263
+ "twine>=6.2.0",
264
+ ]
@@ -1,70 +0,0 @@
1
- # This workflow will upload a Python Package to PyPI when a release is created
2
- # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3
-
4
- # This workflow uses actions that are not certified by GitHub.
5
- # They are provided by a third-party and are governed by
6
- # separate terms of service, privacy policy, and support
7
- # documentation.
8
-
9
- name: Upload Python Package
10
-
11
- on:
12
- release:
13
- types: [published]
14
-
15
- permissions:
16
- contents: read
17
-
18
- jobs:
19
- release-build:
20
- runs-on: ubuntu-latest
21
-
22
- steps:
23
- - uses: actions/checkout@v4
24
-
25
- - uses: actions/setup-python@v5
26
- with:
27
- python-version: "3.x"
28
-
29
- - name: Build release distributions
30
- run: |
31
- # NOTE: put your own distribution build steps here.
32
- python -m pip install build
33
- python -m build
34
-
35
- - name: Upload distributions
36
- uses: actions/upload-artifact@v4
37
- with:
38
- name: release-dists
39
- path: dist/
40
-
41
- pypi-publish:
42
- runs-on: ubuntu-latest
43
- needs:
44
- - release-build
45
- permissions:
46
- # IMPORTANT: this permission is mandatory for trusted publishing
47
- id-token: write
48
-
49
- # Dedicated environments with protections for publishing are strongly recommended.
50
- # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules
51
- environment:
52
- name: pypi
53
- # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status:
54
- # url: https://pypi.org/p/YOURPROJECT
55
- #
56
- # ALTERNATIVE: if your GitHub Release name is the PyPI project version string
57
- # ALTERNATIVE: exactly, uncomment the following line instead:
58
- url: https://test.pypi.org/project/django-nova/0.1.0/${{ Artem Alimpiev }}
59
-
60
- steps:
61
- - name: Retrieve release distributions
62
- uses: actions/download-artifact@v4
63
- with:
64
- name: release-dists
65
- path: dist/
66
-
67
- - name: Publish release distributions to PyPI
68
- uses: pypa/gh-action-pypi-publish@release/v1
69
- with:
70
- packages-dir: dist/
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module version="4">
3
- <component name="PyDocumentationSettings">
4
- <option name="format" value="PLAIN" />
5
- <option name="myDocStringFormat" value="Plain" />
6
- </component>
7
- <component name="TestRunnerService">
8
- <option name="PROJECT_TEST_RUNNER" value="py.test" />
9
- </component>
10
- </module>
@@ -1,31 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="PyCompatibilityInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
- <option name="ourVersions">
6
- <value>
7
- <list size="2">
8
- <item index="0" class="java.lang.String" itemvalue="2.7" />
9
- <item index="1" class="java.lang.String" itemvalue="3.14" />
10
- </list>
11
- </value>
12
- </option>
13
- </inspection_tool>
14
- <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
15
- <option name="ignoredPackages">
16
- <list>
17
- <option value="pytest-asyn" />
18
- <option value="cio" />
19
- <option value="langchain-openai" />
20
- </list>
21
- </option>
22
- </inspection_tool>
23
- <inspection_tool class="PyStubPackagesAdvertiser" enabled="true" level="WARNING" enabled_by_default="true">
24
- <option name="ignoredPackages">
25
- <list>
26
- <option value="pygobject" />
27
- </list>
28
- </option>
29
- </inspection_tool>
30
- </profile>
31
- </component>
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <settings>
3
- <option name="USE_PROJECT_PROFILE" value="false" />
4
- <version value="1.0" />
5
- </settings>
6
- </component>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="MarkdownSettings">
4
- <option name="previewPanelProviderInfo">
5
- <ProviderInfo name="Mermaid Studio (Chromium browser)" className="MermaidStudio_z.MermaidStudio_R.MermaidStudio_n.MermaidStudio_Q.MermaidStudio_U.MermaidStudio__.JCEFHtmlPanelProvider" />
6
- </option>
7
- </component>
8
- </project>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="Black">
4
- <option name="sdkName" value="uv (django-nova)" />
5
- </component>
6
- </project>
@@ -1,31 +0,0 @@
1
- Index: run_fastapi.py
2
- IDEA additional info:
3
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
4
- <+>UTF-8
5
- ===================================================================
6
- diff --git a/run_fastapi.py b/run_fastapi.py
7
- new file mode 100644
8
- --- /dev/null (date 1781207527557)
9
- +++ b/run_fastapi.py (date 1781207527557)
10
- @@ -0,0 +1,20 @@
11
- +import django
12
- +from django.conf import settings
13
- +
14
- +if not settings.configured:
15
- + settings.configure(
16
- + DEBUG=True,
17
- + DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},
18
- + INSTALLED_APPS=['django.contrib.contenttypes', 'django.contrib.auth', 'nova', 'tests.apps.TestsConfig'],
19
- + SECRET_KEY='test', USE_TZ=True,
20
- + )
21
- +django.setup()
22
- +
23
- +from fastapi import FastAPI
24
- +from nova.ecosystem.fastapi import to_fastapi_router
25
- +from tests.models import Lab
26
- +
27
- +app = FastAPI(title="Django Nova OpenAPI Demo", version="0.1.0")
28
- +app.include_router(to_fastapi_router(Lab, prefix="/api/labs"))
29
- +
30
- +# Запуск: uvicorn run_fastapi:app --reload
31
-
@@ -1,4 +0,0 @@
1
- <changelist name="Uncommitted_changes_before_Update_at_12_06_2026,_08_36_[Changes]" date="1781242616719" recycled="false" toDelete="true">
2
- <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_12_06_2026,_08_36_[Changes]/shelved.patch" />
3
- <option name="DESCRIPTION" value="Uncommitted changes before Update at 12.06.2026, 08:36 [Changes]" />
4
- </changelist>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
6
- </project>