cadwyn 5.3.2__py3-none-any.whl → 5.4.1__py3-none-any.whl

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.

cadwyn/__main__.py CHANGED
@@ -36,7 +36,7 @@ def version_callback(value: bool):
36
36
  def output_code(code: str, raw: bool):
37
37
  if raw:
38
38
  typer.echo(code)
39
- else:
39
+ else: # pragma: no cover
40
40
  _CONSOLE.print(Syntax(code, "python", line_numbers=True))
41
41
 
42
42
 
cadwyn/_asts.py CHANGED
@@ -22,7 +22,7 @@ NoneType = type(None)
22
22
 
23
23
 
24
24
  # A parent type of typing._GenericAlias
25
- _BaseGenericAlias = cast(type, type(List[int])).mro()[1] # noqa: UP006
25
+ _BaseGenericAlias = cast("type", type(List[int])).mro()[1] # noqa: UP006
26
26
 
27
27
  # type(list[int]) and type(List[int]) are different which is why we have to do this.
28
28
  # Please note that this problem is much wider than just lists which is why we use typing._BaseGenericAlias
cadwyn/applications.py CHANGED
@@ -400,7 +400,7 @@ class Cadwyn(FastAPI):
400
400
  init_oauth=self.swagger_ui_init_oauth,
401
401
  swagger_ui_parameters=self.swagger_ui_parameters,
402
402
  )
403
- return self._render_docs_dashboard(req, cast(str, self.docs_url))
403
+ return self._render_docs_dashboard(req, cast("str", self.docs_url))
404
404
 
405
405
  async def redoc_dashboard(self, req: Request) -> Response:
406
406
  version = req.query_params.get("version")
@@ -410,7 +410,7 @@ class Cadwyn(FastAPI):
410
410
  openapi_url = root_path + f"{self.openapi_url}?version={version}"
411
411
  return get_redoc_html(openapi_url=openapi_url, title=f"{self.title} - ReDoc")
412
412
 
413
- return self._render_docs_dashboard(req, docs_url=cast(str, self.redoc_url))
413
+ return self._render_docs_dashboard(req, docs_url=cast("str", self.redoc_url))
414
414
 
415
415
  def _extract_root_path(self, req: Request):
416
416
  return req.scope.get("root_path", "").rstrip("/")
cadwyn/changelogs.py CHANGED
@@ -93,7 +93,7 @@ def _generate_changelog(versions: VersionBundle, router: _RootCadwynAPIRouter) -
93
93
  generator_from_newer_version,
94
94
  generator_from_older_version,
95
95
  schemas_from_older_version,
96
- cast(list[APIRoute], routes_from_newer_version),
96
+ cast("list[APIRoute]", routes_from_newer_version),
97
97
  )
98
98
  if changelog_entry is not None: # pragma: no branch # This should never happen
99
99
  version_change_changelog.instructions.append(CadwynVersionChangeInstruction(changelog_entry))
@@ -321,18 +321,18 @@ def _convert_version_change_instruction_to_changelog_entry( # noqa: C901
321
321
  if isinstance(instruction, EndpointDidntExistInstruction):
322
322
  return CadwynEndpointWasAddedChangelogEntry(
323
323
  path=instruction.endpoint_path,
324
- methods=cast(Any, instruction.endpoint_methods),
324
+ methods=cast("Any", instruction.endpoint_methods),
325
325
  )
326
326
  elif isinstance(instruction, EndpointExistedInstruction):
327
327
  return CadwynEndpointWasRemovedChangelogEntry(
328
328
  path=instruction.endpoint_path,
329
- methods=cast(Any, instruction.endpoint_methods),
329
+ methods=cast("Any", instruction.endpoint_methods),
330
330
  )
331
331
  elif isinstance(instruction, EndpointHadInstruction):
332
332
  if instruction.attributes.include_in_schema is not Sentinel:
333
333
  return CadwynEndpointWasRemovedChangelogEntry(
334
334
  path=instruction.endpoint_path,
335
- methods=cast(Any, instruction.endpoint_methods),
335
+ methods=cast("Any", instruction.endpoint_methods),
336
336
  )
337
337
 
338
338
  renaming_map = {"operation_id": "operationId"}
@@ -379,7 +379,7 @@ def _convert_version_change_instruction_to_changelog_entry( # noqa: C901
379
379
  attribute_changes.append(CadwynEndpointAttributeChange(name="responses", new_value=changed_responses))
380
380
  return CadwynEndpointHadChangelogEntry(
381
381
  path=instruction.endpoint_path,
382
- methods=cast(Any, instruction.endpoint_methods),
382
+ methods=cast("Any", instruction.endpoint_methods),
383
383
  changes=attribute_changes,
384
384
  )
385
385
 
@@ -78,7 +78,7 @@ def generate_versioned_routers(
78
78
  webhooks: Union[_WR, None] = None,
79
79
  ) -> GeneratedRouters[_R, _WR]:
80
80
  if webhooks is None:
81
- webhooks = cast(_WR, APIRouter())
81
+ webhooks = cast("_WR", APIRouter())
82
82
  return _EndpointTransformer(router, versions, webhooks).transform()
83
83
 
84
84
 
@@ -167,7 +167,7 @@ class _EndpointTransformer(Generic[_R, _WR]):
167
167
 
168
168
  # We know they are APIRoutes because of the check at the very beginning of the top loop.
169
169
  # I.e. Because head_route is an APIRoute, both routes are APIRoutes too
170
- older_route = cast(APIRoute, older_route)
170
+ older_route = cast("APIRoute", older_route)
171
171
  # Wait.. Why do we need this code again?
172
172
  if older_route.body_field is not None and _route_has_a_simple_body_schema(older_route):
173
173
  if hasattr(older_route.body_field.type_, "__cadwyn_original_model__"):
@@ -11,14 +11,20 @@ from collections.abc import Callable, Sequence
11
11
  from datetime import date
12
12
  from enum import Enum
13
13
  from functools import cache
14
- from typing import TYPE_CHECKING, Annotated, Generic, Union, cast
14
+ from typing import (
15
+ TYPE_CHECKING,
16
+ Annotated,
17
+ Generic,
18
+ Union,
19
+ _BaseGenericAlias, # pyright: ignore[reportAttributeAccessIssue]
20
+ cast,
21
+ )
15
22
 
16
23
  import fastapi.params
17
24
  import fastapi.security.base
18
25
  import fastapi.utils
19
26
  import pydantic
20
27
  import pydantic._internal._decorators
21
- import typing_extensions
22
28
  from fastapi import Response
23
29
  from fastapi.dependencies.utils import is_async_gen_callable, is_coroutine_callable, is_gen_callable
24
30
  from fastapi.routing import APIRoute
@@ -32,12 +38,12 @@ from pydantic._internal._decorators import (
32
38
  RootValidatorDecoratorInfo,
33
39
  ValidatorDecoratorInfo,
34
40
  )
41
+ from pydantic._internal._known_annotated_metadata import collect_known_metadata
35
42
  from pydantic._internal._typing_extra import try_eval_type as pydantic_try_eval_type
36
43
  from pydantic.fields import ComputedFieldInfo, FieldInfo
37
44
  from typing_extensions import (
38
45
  Any,
39
46
  Doc,
40
- NewType,
41
47
  Self,
42
48
  TypeAlias,
43
49
  TypeAliasType,
@@ -80,11 +86,6 @@ if TYPE_CHECKING:
80
86
  from cadwyn.structure.versions import HeadVersion, Version, VersionBundle
81
87
 
82
88
 
83
- if sys.version_info >= (3, 10):
84
- from typing import _BaseGenericAlias # pyright: ignore[reportAttributeAccessIssue]
85
- else:
86
- from typing_extensions import _BaseGenericAlias # pyright: ignore[reportAttributeAccessIssue]
87
-
88
89
  _Call = TypeVar("_Call", bound=Callable[..., Any])
89
90
 
90
91
  _FieldName: TypeAlias = str
@@ -153,16 +154,12 @@ class PydanticFieldWrapper:
153
154
  )
154
155
 
155
156
 
156
- def _extract_passed_field_attributes(field_info: FieldInfo):
157
- attributes = {
158
- attr_name: field_info._attributes_set[attr_name]
159
- for attr_name in _all_field_arg_names
160
- if attr_name in field_info._attributes_set
157
+ def _extract_passed_field_attributes(field_info: FieldInfo) -> dict[str, object]:
158
+ return {
159
+ k: v
160
+ for k, v in (field_info._attributes_set | collect_known_metadata(field_info.metadata)[0]).items()
161
+ if k in _all_field_arg_names and not (k == "frozen" and v is None)
161
162
  }
162
- # PydanticV2 always adds frozen to _attributes_set but we don't want it if it wasn't explicitly set
163
- if attributes.get("frozen", ...) is None:
164
- attributes.pop("frozen")
165
- return attributes
166
163
 
167
164
 
168
165
  @dataclasses.dataclass(**DATACLASS_SLOTS)
@@ -265,7 +262,7 @@ def _wrap_pydantic_model(model: type[_T_PYDANTIC_MODEL]) -> "_PydanticModelWrapp
265
262
  # For example, when "from __future__ import annotations" is used in the file with the schema
266
263
  if model is not BaseModel:
267
264
  model.model_rebuild(raise_errors=False)
268
- model = cast(type[_T_PYDANTIC_MODEL], model)
265
+ model = cast("type[_T_PYDANTIC_MODEL]", model)
269
266
 
270
267
  decorators = _get_model_decorators(model)
271
268
  validators = {}
@@ -345,7 +342,7 @@ def _wrap_pydantic_model(model: type[_T_PYDANTIC_MODEL]) -> "_PydanticModelWrapp
345
342
  def _get_field_and_validator_names_from_model(cls: type) -> tuple[set[_FieldName], set[str]]:
346
343
  fields = cls.model_fields
347
344
  source = inspect.getsource(cls)
348
- cls_ast = cast(ast.ClassDef, ast.parse(textwrap.dedent(source)).body[0])
345
+ cls_ast = cast("ast.ClassDef", ast.parse(textwrap.dedent(source)).body[0])
349
346
  validator_names = (
350
347
  _get_validator_info_or_none(node)
351
348
  for node in cls_ast.body
@@ -468,7 +465,7 @@ class _PydanticModelWrapper(Generic[_T_PYDANTIC_MODEL]):
468
465
  fields = {name: field.generate_field_copy(generator) for name, field in self.fields.items()}
469
466
  model_copy = type(self.cls)(
470
467
  self.name,
471
- tuple(generator[cast(type[BaseModel], base)] for base in self.cls.__bases__),
468
+ tuple(generator[cast("type[BaseModel]", base)] for base in self.cls.__bases__),
472
469
  self.other_attributes
473
470
  | per_field_validators
474
471
  | root_validators
@@ -514,7 +511,7 @@ class _CallableWrapper:
514
511
  return hash(self._original_callable)
515
512
 
516
513
  def __eq__(self, value: object) -> bool:
517
- return self._original_callable == value # pyright: ignore[reportUnnecessaryComparison]
514
+ return self._original_callable == value
518
515
 
519
516
 
520
517
  class _AsyncCallableWrapper(_CallableWrapper):
@@ -587,9 +584,11 @@ class _AnnotationTransformer:
587
584
  self._remake_endpoint_dependencies(route)
588
585
 
589
586
  def _change_version_of_a_non_container_annotation(self, annotation: Any) -> Any:
590
- if isinstance(annotation, (_BaseGenericAlias, types.GenericAlias)):
587
+ from typing_inspection.typing_objects import is_any, is_newtype, is_typealiastype
588
+
589
+ if isinstance(annotation, (types.GenericAlias, _BaseGenericAlias)):
591
590
  return get_origin(annotation)[tuple(self.change_version_of_annotation(arg) for arg in get_args(annotation))]
592
- elif isinstance(annotation, TypeAliasType):
591
+ elif is_typealiastype(annotation):
593
592
  if (
594
593
  annotation.__module__ is not None and (annotation.__module__.startswith("pydantic."))
595
594
  ) or annotation.__name__ in _PYDANTIC_ALL_EXPORTED_NAMES:
@@ -616,7 +615,7 @@ class _AnnotationTransformer:
616
615
  return getitem(
617
616
  tuple(self.change_version_of_annotation(a) for a in get_args(annotation)),
618
617
  )
619
- elif annotation is typing.Any or annotation is typing_extensions.Any or isinstance(annotation, NewType):
618
+ elif is_any(annotation) or is_newtype(annotation):
620
619
  return annotation
621
620
  elif isinstance(annotation, type):
622
621
  return self._change_version_of_type(annotation)
@@ -776,7 +775,7 @@ class SchemaGenerator:
776
775
  wrapper = self._get_wrapper_for_model(model)
777
776
  model_copy = wrapper.generate_model_copy(self)
778
777
  self.concrete_models[model] = model_copy
779
- return cast(type[_T_ANY_MODEL], model_copy)
778
+ return cast("type[_T_ANY_MODEL]", model_copy)
780
779
 
781
780
  @overload
782
781
  def _get_wrapper_for_model(self, model: type[BaseModel]) -> "_PydanticModelWrapper[BaseModel]": ...
@@ -865,7 +864,7 @@ def _apply_alter_schema_instructions(
865
864
  elif isinstance(alter_schema_instruction, ValidatorExistedInstruction):
866
865
  validator_name = get_name_of_function_wrapped_in_pydantic_validator(alter_schema_instruction.validator)
867
866
  raw_validator = cast(
868
- pydantic._internal._decorators.PydanticDescriptorProxy, alter_schema_instruction.validator
867
+ "pydantic._internal._decorators.PydanticDescriptorProxy", alter_schema_instruction.validator
869
868
  )
870
869
  schema_info.validators[validator_name] = _wrap_validator(
871
870
  raw_validator.wrapped,
@@ -1041,15 +1040,19 @@ def _delete_field_attributes(
1041
1040
  annotation: Any,
1042
1041
  ) -> None:
1043
1042
  for attr_name in alter_schema_instruction.attributes:
1043
+ deleted = False
1044
+
1044
1045
  if attr_name in field.passed_field_attributes:
1045
1046
  field.delete_attribute(name=attr_name)
1046
- elif get_origin(annotation) == Annotated and any( # pragma: no branch
1047
+ deleted = True
1048
+ if get_origin(annotation) == Annotated and any( # pragma: no branch
1047
1049
  hasattr(sub_ann, attr_name) for sub_ann in get_args(annotation)
1048
1050
  ):
1049
1051
  for sub_ann in get_args(annotation):
1050
1052
  if hasattr(sub_ann, attr_name):
1051
1053
  object.__setattr__(sub_ann, attr_name, None)
1052
- else:
1054
+ deleted = True
1055
+ if not deleted:
1053
1056
  raise InvalidGenerationInstructionError(
1054
1057
  f'You tried to delete the attribute "{attr_name}" of field "{alter_schema_instruction.name}" '
1055
1058
  f'from "{model.name}" in "{version_change_name}" '
@@ -1100,7 +1103,7 @@ class _EnumWrapper(Generic[_T_ENUM]):
1100
1103
  for attr_name, attr in initialization_namespace.items():
1101
1104
  enum_dict[attr_name] = attr
1102
1105
  enum_dict["__doc__"] = self.cls.__doc__
1103
- model_copy = cast(type[_T_ENUM], type(self.name, self.cls.__bases__, enum_dict))
1106
+ model_copy = cast("type[_T_ENUM]", type(self.name, self.cls.__bases__, enum_dict))
1104
1107
  model_copy.__cadwyn_original_model__ = self.cls # pyright: ignore[reportAttributeAccessIssue]
1105
1108
  return model_copy
1106
1109
 
cadwyn/structure/data.py CHANGED
@@ -140,7 +140,7 @@ def convert_request_to_next_version_for(
140
140
  if isinstance(schema_or_path, str):
141
141
  return _AlterRequestByPathInstruction(
142
142
  path=schema_or_path,
143
- methods=set(cast(list, methods_or_second_schema)),
143
+ methods=set(cast("list", methods_or_second_schema)),
144
144
  transformer=transformer,
145
145
  )
146
146
  else:
@@ -214,7 +214,7 @@ def convert_response_to_previous_version_for(
214
214
  # The validation above checks that methods is not None
215
215
  return _AlterResponseByPathInstruction(
216
216
  path=schema_or_path,
217
- methods=set(cast(list, methods_or_second_schema)),
217
+ methods=set(cast("list", methods_or_second_schema)),
218
218
  transformer=transformer,
219
219
  migrate_http_errors=migrate_http_errors,
220
220
  )
@@ -246,7 +246,7 @@ class AlterFieldInstructionFactory:
246
246
  info: Union[FieldInfo, Any, None] = None,
247
247
  ) -> FieldExistedAsInstruction:
248
248
  if info is None:
249
- info = cast(FieldInfo, Field())
249
+ info = cast("FieldInfo", Field())
250
250
  info.annotation = type
251
251
  return FieldExistedAsInstruction(is_hidden_from_changelog=False, schema=self.schema, name=self.name, field=info)
252
252
 
@@ -317,7 +317,7 @@ class AlterSchemaInstructionFactory:
317
317
  def validator(
318
318
  self, func: "Union[Callable[..., Any], classmethod[Any, Any, Any], PydanticDescriptorProxy]", /
319
319
  ) -> AlterValidatorInstructionFactory:
320
- func = cast(Union[Callable[..., Any], PydanticDescriptorProxy], unwrap_wrapped_function(func))
320
+ func = cast("Union[Callable[..., Any], PydanticDescriptorProxy]", unwrap_wrapped_function(func))
321
321
 
322
322
  if not isinstance(func, PydanticDescriptorProxy):
323
323
  if hasattr(func, "__self__"):
@@ -620,7 +620,7 @@ class VersionBundle:
620
620
  detail = response_info.body
621
621
  if detail is None:
622
622
  detail = http.HTTPStatus(response_info.status_code).phrase
623
- raised_exception.detail = cast(str, detail)
623
+ raised_exception.detail = cast("str", detail)
624
624
  raised_exception.headers = dict(response_info.headers)
625
625
  raised_exception.status_code = response_info.status_code
626
626
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cadwyn
3
- Version: 5.3.2
3
+ Version: 5.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
@@ -37,9 +37,10 @@ Requires-Python: >=3.9
37
37
  Requires-Dist: backports-strenum<2,>=1.3.1; python_version < '3.11'
38
38
  Requires-Dist: fastapi>=0.112.4
39
39
  Requires-Dist: jinja2>=3.1.2
40
- Requires-Dist: pydantic>=2.0.0
40
+ Requires-Dist: pydantic>=2.11.0
41
41
  Requires-Dist: starlette>=0.30.0
42
42
  Requires-Dist: typing-extensions>=4.8.0
43
+ Requires-Dist: typing-inspection>=0.4.0
43
44
  Provides-Extra: standard
44
45
  Requires-Dist: fastapi[standard]>=0.112.3; extra == 'standard'
45
46
  Requires-Dist: typer>=0.7.0; extra == 'standard'
@@ -59,7 +60,7 @@ Production-ready community-driven modern [Stripe-like](https://stripe.com/blog/a
59
60
  <img src="https://img.shields.io/codecov/c/github/zmievsa/cadwyn?color=%2334D058&logo=codecov" alt="Coverage">
60
61
  </a>
61
62
  <a href="https://pypi.org/project/cadwyn/" target="_blank">
62
- <img alt="PyPI" src="https://img.shields.io/pypi/v/cadwyn?color=%2334D058&logo=pypi&label=PyPI package" alt="Package version">
63
+ <img alt="PyPI" src="https://img.shields.io/pypi/v/cadwyn?color=%2334D058&logo=pypi&label=PyPI" alt="Package version">
63
64
  </a>
64
65
  <a href="https://pypi.org/project/cadwyn/" target="_blank">
65
66
  <img src="https://img.shields.io/pypi/pyversions/cadwyn?color=%2334D058&logo=python" alt="Supported Python versions">
@@ -71,12 +72,12 @@ Production-ready community-driven modern [Stripe-like](https://stripe.com/blog/a
71
72
 
72
73
  ## Who is this for?
73
74
 
74
- Cadwyn allows you to maintain the implementation just for your newest API version and get all the older versions generated automatically. You keep API versioning encapsulated in small and independent "version change" modules while your business logic stays simple and knows nothing about versioning.
75
+ Cadwyn allows you to maintain the implementation just for your newest API version and get all the older versions generated automatically. You keep API backward compatibility encapsulated in small and independent "version change" modules while your business logic stays simple and knows nothing about versioning.
75
76
 
76
- Its [approach](https://docs.cadwyn.dev/theory/how_we_got_here/#ii-migration-based-response-building) will be useful if you want to:
77
+ This [approach](https://docs.cadwyn.dev/theory/how_we_got_here/#ii-migration-based-response-building) may be useful if you want to:
77
78
 
78
79
  1. Support many API versions for a long time
79
- 2. Effortlessly backport features and bugfixes to older API versions
80
+ 2. Have features and bugfixes automatically backported to older API versions
80
81
 
81
82
  Whether you are a newbie in API versioning, a pro looking for a sophisticated tool, an experimenter looking to build a similar framework, or even someone who just wants to learn about all approaches to API versioning -- Cadwyn has the functionality, theory, and documentation to cover all the mentioned use cases.
82
83
 
@@ -86,6 +87,4 @@ The [documentation](https://docs.cadwyn.dev) has everything you need to succeed.
86
87
 
87
88
  ## Sponsors
88
89
 
89
- These are our gorgeous sponsors. They are using Cadwyn and are sponsoring it through various means. Contact [me](https://github.com/zmievsa) if you would like to become one too!
90
-
91
- [![Monite](https://docs.cadwyn.dev/img/sponsor_logos/monite.png)](https://docs.monite.com/)
90
+ These are our gorgeous sponsors. They are using Cadwyn and are sponsoring it through various means. Contact [me](https://github.com/zmievsa) if you would like to become one, too!
@@ -1,31 +1,31 @@
1
1
  cadwyn/__init__.py,sha256=uXmQDTDNA5BeRlLFn0cmIo6ohXvEApg2FSl2sFb8frw,1120
2
- cadwyn/__main__.py,sha256=fGoKJPNVueqqXW4rqwmRUBBMoDGeLEyATdT-rel5Pvs,2449
3
- cadwyn/_asts.py,sha256=QvqZmDdwH8U-Ocpj9vYR6MRrIANF8ugk9oZgAo76qLs,5223
2
+ cadwyn/__main__.py,sha256=GUbywGIt3-i_6JQ_QlHXgCQxUNFSMCIOFsVxdTkgtoU,2469
3
+ cadwyn/_asts.py,sha256=Gf43snDwH3n86nohu971EGY2YpIV9NlOaB9TFuy-p1Q,5225
4
4
  cadwyn/_importer.py,sha256=QV6HqODCG9K2oL4Vc15fAqL2-plMvUWw_cgaj4Ln4C8,1075
5
5
  cadwyn/_render.py,sha256=VAY2Twd_MfKaC8_X22AMIQd72_UHy87icdAbKL8hd90,5526
6
6
  cadwyn/_utils.py,sha256=q_mTtMKTNTDzqCza67XST-jaPSfuTgnFLmOe0dlGeYY,2295
7
- cadwyn/applications.py,sha256=sHfsgjy1ofotIPyLmL4FCAXyuzpjRtYLTQPR1ds471w,21133
8
- cadwyn/changelogs.py,sha256=aBTlsZ8PQpw9t4sSyezNTYDs6CMPtzIGulgAHA1ELPs,19622
7
+ cadwyn/applications.py,sha256=oWss-Xx-QZuyyMXLv-EXUVd2S1RU4razb7GkYvURjyI,21137
8
+ cadwyn/changelogs.py,sha256=5S0yt94LAi2ani_uk-BGR_rK247IYWbZ3NvGmwnL7es,19632
9
9
  cadwyn/dependencies.py,sha256=phUJ4Fy3UTegpOfDfHMjxsvASWo-1NQgwqphNnPdoVQ,241
10
10
  cadwyn/exceptions.py,sha256=8D1G7ewLrMF5jq7leald1g0ulcH9zQl8ufEK3b7HHAE,1749
11
11
  cadwyn/middleware.py,sha256=4Ziq1ysnc8j5KmeZpsr9VJKllEFC8uYwXnG01I2FPR4,4853
12
12
  cadwyn/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- cadwyn/route_generation.py,sha256=RTZYfml03oKaNm_-SJX8N6PnafFXdsPpN0qEapHSzTw,27181
13
+ cadwyn/route_generation.py,sha256=conoTBtsOtjyiV2NdUxwGQX-h1zLyIjDQjD5bT2YSgg,27185
14
14
  cadwyn/routing.py,sha256=Ii6Qbgm9lGks1IAk-kDuIu_dX3FXsA77KSfGOFmLbgc,7604
15
- cadwyn/schema_generation.py,sha256=ClAtq8Tnypj5g94rlRRcb2-GiZ8KJl0kj0FJtJantMI,47062
15
+ cadwyn/schema_generation.py,sha256=UNrNa_DSfQLH0NFNmoib0CqAlgls-LJspMTHHcqlwXg,46910
16
16
  cadwyn/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  cadwyn/_internal/context_vars.py,sha256=VcM8eAoSlvrIMFQhjZmjflV5o1yrPSEZZGkwOK4OSf4,378
18
18
  cadwyn/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  cadwyn/static/docs.html,sha256=WNm5ANJVy51TcIUFOaqKf1Z8eF86CC85TTHPxACtkzw,3455
20
20
  cadwyn/structure/__init__.py,sha256=Wgvjdq3vfl9Yhe-BkcFGAMi_Co11YOfTmJQqgF5Gzx4,655
21
21
  cadwyn/structure/common.py,sha256=YuyfYMxkJcj2c5SFh9teBoEC2xLO5_2QjPzYjwdZcTs,478
22
- cadwyn/structure/data.py,sha256=NWURVnP_84VI2ugp9ppo0Ofyve3pVYjymF9K82Jh-SA,7791
22
+ cadwyn/structure/data.py,sha256=eb4HlGTu3V_G5vJuQ4GLEaGd4LmPmFX3L8CXwJKzfOE,7795
23
23
  cadwyn/structure/endpoints.py,sha256=zUgzglNhBPnmWdJ03A8pFT4zPs_lj8nQ7c7Uo2d-ejU,6246
24
24
  cadwyn/structure/enums.py,sha256=4FCc9aniLE3VuWAVIacrNP_FWxTIUm9JkeeHA_zZdwQ,1254
25
- cadwyn/structure/schemas.py,sha256=O9yNw1OB0Qz-PvNB0FYlQm34gQsjyG2l9gg9x-RnJIY,10781
26
- cadwyn/structure/versions.py,sha256=yOZ-x24Rb0itcZvQBe-92x9BiCLZK4cMqo0iX0DVN2k,34708
27
- cadwyn-5.3.2.dist-info/METADATA,sha256=jZBEl2lneTuyyJAZmtGSPXyKJv2LZtoDiPDecalEJf8,4543
28
- cadwyn-5.3.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
- cadwyn-5.3.2.dist-info/entry_points.txt,sha256=mGX8wl-Xfhpr5M93SUmkykaqinUaYAvW9rtDSX54gx0,47
30
- cadwyn-5.3.2.dist-info/licenses/LICENSE,sha256=KeCWewiDQYpmSnzF-p_0YpoWiyDcUPaCuG8OWQs4ig4,1072
31
- cadwyn-5.3.2.dist-info/RECORD,,
25
+ cadwyn/structure/schemas.py,sha256=kuQJg60VpWHZkSPvrbvd9pe-Zetq8as5YYrERsG3IE8,10785
26
+ cadwyn/structure/versions.py,sha256=IrtX8sGswjNc8z_6HsU9Im-U7-agZB_pFaqSHz_0SMk,34710
27
+ cadwyn-5.4.1.dist-info/METADATA,sha256=sSAYDQjTxpZGhkAPIGhpFgQwoWUt6w30ZtsZ4Xo5Nn8,4504
28
+ cadwyn-5.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
+ cadwyn-5.4.1.dist-info/entry_points.txt,sha256=mGX8wl-Xfhpr5M93SUmkykaqinUaYAvW9rtDSX54gx0,47
30
+ cadwyn-5.4.1.dist-info/licenses/LICENSE,sha256=KeCWewiDQYpmSnzF-p_0YpoWiyDcUPaCuG8OWQs4ig4,1072
31
+ cadwyn-5.4.1.dist-info/RECORD,,
File without changes