cadwyn 4.4.0__tar.gz → 4.4.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.

Potentially problematic release.


This version of cadwyn might be problematic. Click here for more details.

Files changed (133) hide show
  1. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/workflows/ci.yaml +2 -0
  2. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/workflows/daily_tests.yaml +9 -0
  3. {cadwyn-4.4.0 → cadwyn-4.4.1}/PKG-INFO +2 -2
  4. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/schema_generation.py +1 -1
  5. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/versions.py +2 -0
  6. {cadwyn-4.4.0 → cadwyn-4.4.1}/pyproject.toml +2 -1
  7. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/conftest.py +1 -1
  8. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_render.py +10 -5
  9. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_schema_generation/test_schema_validator.py +11 -5
  10. {cadwyn-4.4.0 → cadwyn-4.4.1}/uv.lock +259 -211
  11. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/CODE_OF_CONDUCT.md +0 -0
  12. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/actions/setup-python-uv/action.yaml +0 -0
  15. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/workflows/publish_docs.yaml +0 -0
  16. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/workflows/release.yaml +0 -0
  17. {cadwyn-4.4.0 → cadwyn-4.4.1}/.github/workflows/validate_links.yaml +0 -0
  18. {cadwyn-4.4.0 → cadwyn-4.4.1}/.gitignore +0 -0
  19. {cadwyn-4.4.0 → cadwyn-4.4.1}/.pre-commit-config.yaml +0 -0
  20. {cadwyn-4.4.0 → cadwyn-4.4.1}/CHANGELOG.md +0 -0
  21. {cadwyn-4.4.0 → cadwyn-4.4.1}/LICENSE +0 -0
  22. {cadwyn-4.4.0 → cadwyn-4.4.1}/Makefile +0 -0
  23. {cadwyn-4.4.0 → cadwyn-4.4.1}/README.md +0 -0
  24. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/__init__.py +0 -0
  25. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/__main__.py +0 -0
  26. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/_asts.py +0 -0
  27. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/_importer.py +0 -0
  28. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/_render.py +0 -0
  29. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/_utils.py +0 -0
  30. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/applications.py +0 -0
  31. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/changelogs.py +0 -0
  32. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/exceptions.py +0 -0
  33. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/middleware.py +0 -0
  34. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/py.typed +0 -0
  35. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/route_generation.py +0 -0
  36. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/routing.py +0 -0
  37. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/static/__init__.py +0 -0
  38. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/static/docs.html +0 -0
  39. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/__init__.py +0 -0
  40. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/common.py +0 -0
  41. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/data.py +0 -0
  42. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/endpoints.py +0 -0
  43. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/enums.py +0 -0
  44. {cadwyn-4.4.0 → cadwyn-4.4.1}/cadwyn/structure/schemas.py +0 -0
  45. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/CNAME +0 -0
  46. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/__init__.py +0 -0
  47. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/api_version_header_and_context_variables.md +0 -0
  48. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/beware_of_data_versioning.md +0 -0
  49. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/changelogs.md +0 -0
  50. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/cli.md +0 -0
  51. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/endpoint_migrations.md +0 -0
  52. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/enum_migrations.md +0 -0
  53. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/index.md +0 -0
  54. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/main_app.md +0 -0
  55. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/methodology.md +0 -0
  56. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/schema_generation.md +0 -0
  57. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/schema_migrations.md +0 -0
  58. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/testing.md +0 -0
  59. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/concepts/version_changes.md +0 -0
  60. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/home/CONTRIBUTING.md +0 -0
  61. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_business_logic/index.md +0 -0
  62. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_endpoints/index.md +0 -0
  63. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_openapi_schemas/add_field.md +0 -0
  64. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_openapi_schemas/change_field_type.md +0 -0
  65. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_openapi_schemas/changing_constraints.md +0 -0
  66. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_openapi_schemas/remove_field.md +0 -0
  67. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/change_openapi_schemas/rename_a_field_in_schema.md +0 -0
  68. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/how_to/index.md +0 -0
  69. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/dashboard_with_one_version.png +0 -0
  70. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/dashboard_with_two_versions.png +0 -0
  71. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/get_users_endpoint_from_prior_version.png +0 -0
  72. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/simplified_migration_model.png +0 -0
  73. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/sponsor_logos/monite.png +0 -0
  74. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/img/unversioned_dashboard.png +0 -0
  75. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/index.md +0 -0
  76. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/plugin.py +0 -0
  77. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/quickstart/setup.md +0 -0
  78. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/quickstart/tutorial.md +0 -0
  79. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/theory/how_to_build_versioning_framework.md +0 -0
  80. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/theory/how_we_got_here.md +0 -0
  81. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs/theory/literature.md +0 -0
  82. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/__init__.py +0 -0
  83. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/__init__.py +0 -0
  84. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/setup/__init__.py +0 -0
  85. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/setup/block001.sh +0 -0
  86. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/setup/block002.py +0 -0
  87. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/setup/tests/__init__.py +0 -0
  88. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/setup/tests/test_block002.py +0 -0
  89. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/__init__.py +0 -0
  90. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/block001.py +0 -0
  91. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/block002.py +0 -0
  92. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/block003.py +0 -0
  93. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/tests/__init__.py +0 -0
  94. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/tests/test_block001.py +0 -0
  95. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/tests/test_block002.py +0 -0
  96. {cadwyn-4.4.0 → cadwyn-4.4.1}/docs_src/quickstart/tutorial/tests/test_block003.py +0 -0
  97. {cadwyn-4.4.0 → cadwyn-4.4.1}/mkdocs.yml +0 -0
  98. {cadwyn-4.4.0 → cadwyn-4.4.1}/ruff.toml +0 -0
  99. {cadwyn-4.4.0 → cadwyn-4.4.1}/scripts/fix_links.py +0 -0
  100. {cadwyn-4.4.0 → cadwyn-4.4.1}/scripts/split_md.py +0 -0
  101. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/__init__.py +0 -0
  102. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_data/__init__.py +0 -0
  103. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_data/unversioned_schema_dir/__init__.py +0 -0
  104. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_data/unversioned_schema_dir/unversioned_schemas.py +0 -0
  105. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_data/unversioned_schemas.py +0 -0
  106. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/__init__.py +0 -0
  107. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/app_for_testing_routing.py +0 -0
  108. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/__init__.py +0 -0
  109. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/classes.py +0 -0
  110. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/complex/__init__.py +0 -0
  111. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/complex/classes.py +0 -0
  112. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/complex/versions.py +0 -0
  113. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/render/versions.py +0 -0
  114. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/utils.py +0 -0
  115. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/versioned_app/__init__.py +0 -0
  116. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/versioned_app/app.py +0 -0
  117. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/versioned_app/v2021_01_01.py +0 -0
  118. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/versioned_app/v2022_01_02.py +0 -0
  119. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/_resources/versioned_app/webhooks.py +0 -0
  120. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_applications.py +0 -0
  121. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_changelog.py +0 -0
  122. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_cli.py +0 -0
  123. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_data_migrations.py +0 -0
  124. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_router_generation.py +0 -0
  125. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_routing.py +0 -0
  126. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_schema_generation/__init__.py +0 -0
  127. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_schema_generation/test_enum.py +0 -0
  128. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_schema_generation/test_schema.py +0 -0
  129. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_schema_generation/test_schema_field.py +0 -0
  130. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/test_structure.py +0 -0
  131. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/tutorial/__init__.py +0 -0
  132. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/tutorial/main.py +0 -0
  133. {cadwyn-4.4.0 → cadwyn-4.4.1}/tests/tutorial/test_example.py +0 -0
@@ -27,6 +27,8 @@ jobs:
27
27
  python-version: "3.11"
28
28
  - os: ubuntu-latest
29
29
  python-version: "3.12"
30
+ - os: ubuntu-latest
31
+ python-version: "3.13"
30
32
  - os: windows-latest
31
33
  python-version: "3.10"
32
34
  - os: macos-latest
@@ -10,12 +10,21 @@ jobs:
10
10
  update-dependencies-and-test:
11
11
  name: Update dependencies and run tests
12
12
  runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: true
15
+ matrix:
16
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
13
17
 
14
18
  steps:
15
19
  - uses: actions/checkout@v4
16
20
  - uses: ./.github/actions/setup-python-uv
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
17
23
  - run: uv sync --refresh --all-extras --dev --upgrade
18
24
  - run: pytest .
25
+ - uses: jakebailey/pyright-action@v1
26
+ with:
27
+ pylance-version: latest-release
19
28
 
20
29
  notify-on-failure:
21
30
  name: Notify on failure
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: cadwyn
3
- Version: 4.4.0
3
+ Version: 4.4.1
4
4
  Summary: Production-ready community-driven modern Stripe-like API versioning in FastAPI
5
5
  Project-URL: Source code, https://github.com/zmievsa/cadwyn
6
6
  Project-URL: Documentation, https://docs.cadwyn.dev
7
7
  Author-email: Stanislav Zmiev <zmievsa@gmail.com>
8
8
  License-Expression: MIT
9
9
  License-File: LICENSE
10
- Keywords: api,api-versioning,code-generation,fastapi,hints,json-schema,pydantic,python,python310,python311,python312,stripe,versioning
10
+ Keywords: api,api-versioning,code-generation,fastapi,hints,json-schema,pydantic,python,python310,python311,python312,python313,stripe,versioning
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Environment :: Web Environment
13
13
  Classifier: Framework :: AsyncIO
@@ -607,7 +607,7 @@ class SchemaGenerator:
607
607
 
608
608
  def __getitem__(self, model: type[_T_ANY_MODEL], /) -> type[_T_ANY_MODEL]:
609
609
  if not isinstance(model, type) or not issubclass(model, BaseModel | Enum) or model in (BaseModel, RootModel):
610
- return model # pyright: ignore[reportReturnType]
610
+ return model
611
611
  model = _unwrap_model(model)
612
612
 
613
613
  if model in self.concrete_models:
@@ -156,6 +156,8 @@ class VersionChange:
156
156
  "instructions_to_migrate_to_previous_version",
157
157
  "__module__",
158
158
  "__doc__",
159
+ "__firstlineno__",
160
+ "__static_attributes__",
159
161
  }:
160
162
  raise CadwynStructureError(
161
163
  f"Found: '{attr_name}' attribute of type '{type(attr_value)}' in '{cls.__name__}'."
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cadwyn"
3
- version = "4.4.0"
3
+ version = "4.4.1"
4
4
  description = "Production-ready community-driven modern Stripe-like API versioning in FastAPI"
5
5
  authors = [{ name = "Stanislav Zmiev", email = "zmievsa@gmail.com" }]
6
6
  license = "MIT"
@@ -20,6 +20,7 @@ keywords = [
20
20
  "python310",
21
21
  "python311",
22
22
  "python312",
23
+ "python313",
23
24
  ]
24
25
  classifiers = [
25
26
  "Intended Audience :: Information Technology",
@@ -142,7 +142,7 @@ def version_change(
142
142
  **body_items: Any,
143
143
  ):
144
144
  return type(VersionChange)(
145
- "MyVersionChange",
145
+ "MyVersionChange", # pyright: ignore[reportCallIssue]
146
146
  (VersionChange,),
147
147
  {
148
148
  "description": "",
@@ -19,11 +19,16 @@ def test__render_model__with_weird_types():
19
19
  )
20
20
  # TODO: sobolevn has created a tool for doing such nocovers in a better manner.
21
21
  # hopefully someday we will switch to it.
22
- if sys.version_info >= (3, 11): # pragma: no cover # We cover this in CI
22
+ if sys.version_info >= (3, 11):
23
23
  rendered_lambda = "lambda: 83"
24
- else: # pragma: no cover # We cover this in CI
24
+ else:
25
25
  rendered_lambda = "lambda : 83"
26
26
 
27
+ if sys.version_info >= (3, 13):
28
+ rend_ann = "typing.Annotated"
29
+ else:
30
+ rend_ann = "Annotated"
31
+
27
32
  # TODO: As you see, we do not rename bases correctly in render. We gotta fix it some day...
28
33
  assert code(result) == code(
29
34
  f'''
@@ -32,11 +37,11 @@ class ModelWithWeirdFields(A):
32
37
  foo: dict = Field(default={{'a': 'b'}})
33
38
  bar: list[int] = Field(default_factory=my_default_factory)
34
39
  baz: typing.Literal[MyEnum.foo] = Field()
35
- saz: Annotated[str, StringConstraints(to_upper=True)] = Field()
36
- laz: Annotated[int, None, Interval(gt=12, ge=None, lt=None, le=None), None] = Field()
40
+ saz: {rend_ann}[str, StringConstraints(to_upper=True)] = Field()
41
+ laz: {rend_ann}[int, None, Interval(gt=12, ge=None, lt=None, le=None), None] = Field()
37
42
  taz: typing.Union[int, str, None] = Field(default_factory={rendered_lambda})
38
43
  naz: list[int] = Field(default=[1, 2, 3])
39
- gaz: Annotated[bytes, Strict(strict=True), Len(min_length=0, max_length=None)] = Field(min_length=3, title='Hewwo')
44
+ gaz: {rend_ann}[bytes, Strict(strict=True), Len(min_length=0, max_length=None)] = Field(min_length=3, title='Hewwo')
40
45
  '''
41
46
  )
42
47
 
@@ -1,7 +1,13 @@
1
1
  import re
2
2
 
3
3
  import pytest
4
- from pydantic import BaseModel, field_validator, model_validator, root_validator, validator
4
+ from pydantic import (
5
+ BaseModel,
6
+ field_validator,
7
+ model_validator,
8
+ root_validator, # pyright: ignore[reportDeprecated]
9
+ validator, # pyright: ignore[reportDeprecated]
10
+ )
5
11
 
6
12
  from cadwyn.exceptions import InvalidGenerationInstructionError
7
13
  from cadwyn.structure import schema
@@ -58,12 +64,12 @@ def test__schema_validator_existed__with_deprecated_validators(
58
64
  ):
59
65
  with pytest.warns(DeprecationWarning):
60
66
 
61
- @root_validator(pre=True)
67
+ @root_validator(pre=True) # pyright: ignore[reportDeprecated]
62
68
  def hewwo(cls, values):
63
69
  values["foo"] += "_root"
64
70
  return values
65
71
 
66
- @validator("foo")
72
+ @validator("foo") # pyright: ignore[reportDeprecated]
67
73
  def dawkness(cls, value):
68
74
  return value + "_field"
69
75
 
@@ -178,7 +184,7 @@ def test__schema_field_didnt_exist__with_validator_that_covers_multiple_fields__
178
184
 
179
185
  with pytest.warns(DeprecationWarning):
180
186
 
181
- @validator("bar")
187
+ @validator("bar") # pyright: ignore[reportDeprecated]
182
188
  def validate_bar(cls, value):
183
189
  raise NotImplementedError
184
190
 
@@ -191,7 +197,7 @@ def test__schema_field_didnt_exist__with_validator_that_covers_multiple_fields__
191
197
  class ExpectedSchema(BaseModel):
192
198
  bar: str
193
199
 
194
- @validator("bar")
200
+ @validator("bar") # pyright: ignore[reportDeprecated]
195
201
  def validate_bar(cls, value):
196
202
  raise NotImplementedError
197
203