marshmallow 3.20.2__py3-none-any.whl → 3.21.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.
- marshmallow/__init__.py +46 -7
- marshmallow/base.py +1 -0
- marshmallow/class_registry.py +5 -4
- marshmallow/exceptions.py +0 -1
- marshmallow/fields.py +26 -28
- marshmallow/schema.py +19 -20
- marshmallow/utils.py +2 -5
- marshmallow/validate.py +5 -6
- {marshmallow-3.20.2.dist-info → marshmallow-3.21.1.dist-info}/LICENSE +1 -1
- {marshmallow-3.20.2.dist-info → marshmallow-3.21.1.dist-info}/METADATA +24 -34
- marshmallow-3.21.1.dist-info/RECORD +18 -0
- {marshmallow-3.20.2.dist-info → marshmallow-3.21.1.dist-info}/WHEEL +1 -2
- marshmallow-3.20.2.dist-info/RECORD +0 -19
- marshmallow-3.20.2.dist-info/top_level.txt +0 -1
marshmallow/__init__.py
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import importlib.metadata
|
|
4
|
+
import typing
|
|
5
|
+
|
|
3
6
|
from packaging.version import Version
|
|
4
7
|
|
|
5
8
|
from marshmallow.decorators import (
|
|
@@ -16,13 +19,49 @@ from marshmallow.utils import EXCLUDE, INCLUDE, RAISE, missing, pprint
|
|
|
16
19
|
|
|
17
20
|
from . import fields
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
|
|
23
|
+
def __getattr__(name: str) -> typing.Any:
|
|
24
|
+
import warnings
|
|
25
|
+
|
|
26
|
+
if name == "__version__":
|
|
27
|
+
warnings.warn(
|
|
28
|
+
"The '__version__' attribute is deprecated and will be removed in"
|
|
29
|
+
" in a future version. Use feature detection or"
|
|
30
|
+
" 'importlib.metadata.version(\"marshmallow\")' instead.",
|
|
31
|
+
DeprecationWarning,
|
|
32
|
+
stacklevel=2,
|
|
33
|
+
)
|
|
34
|
+
return importlib.metadata.version("marshmallow")
|
|
35
|
+
|
|
36
|
+
if name == "__parsed_version__":
|
|
37
|
+
warnings.warn(
|
|
38
|
+
"The '__parsed_version__' attribute is deprecated and will be removed in"
|
|
39
|
+
" in a future version. Use feature detection or"
|
|
40
|
+
" 'packaging.Version(importlib.metadata.version(\"marshmallow\"))' instead.",
|
|
41
|
+
DeprecationWarning,
|
|
42
|
+
stacklevel=2,
|
|
43
|
+
)
|
|
44
|
+
return Version(importlib.metadata.version("marshmallow"))
|
|
45
|
+
|
|
46
|
+
if name == "__version_info__":
|
|
47
|
+
warnings.warn(
|
|
48
|
+
"The '__version_info__' attribute is deprecated and will be removed in"
|
|
49
|
+
" in a future version. Use feature detection or"
|
|
50
|
+
" 'packaging.Version(importlib.metadata.version(\"marshmallow\")).release' instead.",
|
|
51
|
+
DeprecationWarning,
|
|
52
|
+
stacklevel=2,
|
|
53
|
+
)
|
|
54
|
+
__parsed_version__ = Version(importlib.metadata.version("marshmallow"))
|
|
55
|
+
__version_info__: tuple[int, int, int] | tuple[
|
|
56
|
+
int, int, int, str, int
|
|
57
|
+
] = __parsed_version__.release # type: ignore[assignment]
|
|
58
|
+
if __parsed_version__.pre:
|
|
59
|
+
__version_info__ += __parsed_version__.pre # type: ignore[assignment]
|
|
60
|
+
return __version_info__
|
|
61
|
+
|
|
62
|
+
raise AttributeError(name)
|
|
63
|
+
|
|
64
|
+
|
|
26
65
|
__all__ = [
|
|
27
66
|
"EXCLUDE",
|
|
28
67
|
"INCLUDE",
|
marshmallow/base.py
CHANGED
marshmallow/class_registry.py
CHANGED
|
@@ -10,6 +10,7 @@ class:`fields.Nested <marshmallow.fields.Nested>`.
|
|
|
10
10
|
from __future__ import annotations
|
|
11
11
|
|
|
12
12
|
import typing
|
|
13
|
+
|
|
13
14
|
from marshmallow.exceptions import RegistryError
|
|
14
15
|
|
|
15
16
|
if typing.TYPE_CHECKING:
|
|
@@ -76,16 +77,16 @@ def get_class(classname: str, all: bool = False) -> list[SchemaType] | SchemaTyp
|
|
|
76
77
|
classes = _registry[classname]
|
|
77
78
|
except KeyError as error:
|
|
78
79
|
raise RegistryError(
|
|
79
|
-
"Class with name {!r} was not found. You may need "
|
|
80
|
-
"to import the class."
|
|
80
|
+
f"Class with name {classname!r} was not found. You may need "
|
|
81
|
+
"to import the class."
|
|
81
82
|
) from error
|
|
82
83
|
if len(classes) > 1:
|
|
83
84
|
if all:
|
|
84
85
|
return _registry[classname]
|
|
85
86
|
raise RegistryError(
|
|
86
|
-
"Multiple classes with name {!r} "
|
|
87
|
+
f"Multiple classes with name {classname!r} "
|
|
87
88
|
"were found. Please use the full, "
|
|
88
|
-
"module-qualified path."
|
|
89
|
+
"module-qualified path."
|
|
89
90
|
)
|
|
90
91
|
else:
|
|
91
92
|
return _registry[classname][0]
|
marshmallow/exceptions.py
CHANGED
marshmallow/fields.py
CHANGED
|
@@ -4,28 +4,30 @@ from __future__ import annotations
|
|
|
4
4
|
import collections
|
|
5
5
|
import copy
|
|
6
6
|
import datetime as dt
|
|
7
|
-
import numbers
|
|
8
|
-
import uuid
|
|
9
|
-
import ipaddress
|
|
10
7
|
import decimal
|
|
8
|
+
import ipaddress
|
|
11
9
|
import math
|
|
10
|
+
import numbers
|
|
12
11
|
import typing
|
|
12
|
+
import uuid
|
|
13
13
|
import warnings
|
|
14
|
-
from enum import Enum as EnumType
|
|
15
14
|
from collections.abc import Mapping as _Mapping
|
|
15
|
+
from enum import Enum as EnumType
|
|
16
16
|
|
|
17
|
-
from marshmallow import
|
|
17
|
+
from marshmallow import class_registry, types, utils, validate
|
|
18
18
|
from marshmallow.base import FieldABC, SchemaABC
|
|
19
|
+
from marshmallow.exceptions import (
|
|
20
|
+
FieldInstanceResolutionError,
|
|
21
|
+
StringNotCollectionError,
|
|
22
|
+
ValidationError,
|
|
23
|
+
)
|
|
19
24
|
from marshmallow.utils import (
|
|
25
|
+
is_aware,
|
|
20
26
|
is_collection,
|
|
21
|
-
missing as missing_,
|
|
22
27
|
resolve_field_instance,
|
|
23
|
-
is_aware,
|
|
24
28
|
)
|
|
25
|
-
from marshmallow.
|
|
26
|
-
|
|
27
|
-
StringNotCollectionError,
|
|
28
|
-
FieldInstanceResolutionError,
|
|
29
|
+
from marshmallow.utils import (
|
|
30
|
+
missing as missing_,
|
|
29
31
|
)
|
|
30
32
|
from marshmallow.validate import And, Length
|
|
31
33
|
from marshmallow.warnings import RemovedInMarshmallow4Warning
|
|
@@ -237,14 +239,12 @@ class Field(FieldABC):
|
|
|
237
239
|
|
|
238
240
|
def __repr__(self) -> str:
|
|
239
241
|
return (
|
|
240
|
-
"<fields.{
|
|
241
|
-
"attribute={self.attribute!r}, "
|
|
242
|
-
"validate={self.validate}, required={self.required}, "
|
|
243
|
-
"load_only={self.load_only}, dump_only={self.dump_only}, "
|
|
244
|
-
"load_default={self.load_default}, allow_none={self.allow_none}, "
|
|
245
|
-
"error_messages={self.error_messages})>"
|
|
246
|
-
ClassName=self.__class__.__name__, self=self
|
|
247
|
-
)
|
|
242
|
+
f"<fields.{self.__class__.__name__}(dump_default={self.dump_default!r}, "
|
|
243
|
+
f"attribute={self.attribute!r}, "
|
|
244
|
+
f"validate={self.validate}, required={self.required}, "
|
|
245
|
+
f"load_only={self.load_only}, dump_only={self.dump_only}, "
|
|
246
|
+
f"load_default={self.load_default}, allow_none={self.allow_none}, "
|
|
247
|
+
f"error_messages={self.error_messages})>"
|
|
248
248
|
)
|
|
249
249
|
|
|
250
250
|
def __deepcopy__(self, memo):
|
|
@@ -281,9 +281,9 @@ class Field(FieldABC):
|
|
|
281
281
|
except KeyError as error:
|
|
282
282
|
class_name = self.__class__.__name__
|
|
283
283
|
message = (
|
|
284
|
-
"ValidationError raised by `{class_name}`, but error key `{key}` does "
|
|
284
|
+
f"ValidationError raised by `{class_name}`, but error key `{key}` does "
|
|
285
285
|
"not exist in the `error_messages` dictionary."
|
|
286
|
-
)
|
|
286
|
+
)
|
|
287
287
|
raise AssertionError(message) from error
|
|
288
288
|
if isinstance(msg, (str, bytes)):
|
|
289
289
|
msg = msg.format(**kwargs)
|
|
@@ -297,9 +297,7 @@ class Field(FieldABC):
|
|
|
297
297
|
Use `make_error <marshmallow.fields.Field.make_error>` instead.
|
|
298
298
|
"""
|
|
299
299
|
warnings.warn(
|
|
300
|
-
'`Field.fail` is deprecated. Use `raise self.make_error("{}", ...)` instead.'
|
|
301
|
-
key
|
|
302
|
-
),
|
|
300
|
+
f'`Field.fail` is deprecated. Use `raise self.make_error("{key}", ...)` instead.',
|
|
303
301
|
RemovedInMarshmallow4Warning,
|
|
304
302
|
stacklevel=2,
|
|
305
303
|
)
|
|
@@ -611,7 +609,7 @@ class Nested(Field):
|
|
|
611
609
|
elif not isinstance(nested, (str, bytes)):
|
|
612
610
|
raise ValueError(
|
|
613
611
|
"`Nested` fields must be passed a "
|
|
614
|
-
"`Schema`, not {}."
|
|
612
|
+
f"`Schema`, not {nested.__class__}."
|
|
615
613
|
)
|
|
616
614
|
elif nested == "self":
|
|
617
615
|
schema_class = self.root.__class__
|
|
@@ -1827,9 +1825,9 @@ class IPInterface(Field):
|
|
|
1827
1825
|
return value.exploded
|
|
1828
1826
|
return value.compressed
|
|
1829
1827
|
|
|
1830
|
-
def _deserialize(
|
|
1831
|
-
|
|
1832
|
-
)
|
|
1828
|
+
def _deserialize(self, value, attr, data, **kwargs) -> None | (
|
|
1829
|
+
ipaddress.IPv4Interface | ipaddress.IPv6Interface
|
|
1830
|
+
):
|
|
1833
1831
|
if value is None:
|
|
1834
1832
|
return None
|
|
1835
1833
|
try:
|
marshmallow/schema.py
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
"""The :class:`Schema` class, including its metaclass and options (class Meta)."""
|
|
2
2
|
from __future__ import annotations
|
|
3
|
-
from abc import ABCMeta
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
from collections.abc import Mapping
|
|
7
|
-
from functools import lru_cache
|
|
4
|
+
import copy
|
|
8
5
|
import datetime as dt
|
|
9
|
-
import uuid
|
|
10
6
|
import decimal
|
|
11
|
-
import copy
|
|
12
7
|
import inspect
|
|
13
8
|
import json
|
|
14
9
|
import typing
|
|
10
|
+
import uuid
|
|
15
11
|
import warnings
|
|
12
|
+
from abc import ABCMeta
|
|
13
|
+
from collections import OrderedDict, defaultdict
|
|
14
|
+
from collections.abc import Mapping
|
|
15
|
+
from functools import lru_cache
|
|
16
16
|
|
|
17
|
-
from marshmallow import base,
|
|
18
|
-
from marshmallow
|
|
19
|
-
from marshmallow.exceptions import ValidationError, StringNotCollectionError
|
|
20
|
-
from marshmallow.orderedset import OrderedSet
|
|
17
|
+
from marshmallow import base, class_registry, types
|
|
18
|
+
from marshmallow import fields as ma_fields
|
|
21
19
|
from marshmallow.decorators import (
|
|
22
20
|
POST_DUMP,
|
|
23
21
|
POST_LOAD,
|
|
@@ -26,15 +24,18 @@ from marshmallow.decorators import (
|
|
|
26
24
|
VALIDATES,
|
|
27
25
|
VALIDATES_SCHEMA,
|
|
28
26
|
)
|
|
27
|
+
from marshmallow.error_store import ErrorStore
|
|
28
|
+
from marshmallow.exceptions import StringNotCollectionError, ValidationError
|
|
29
|
+
from marshmallow.orderedset import OrderedSet
|
|
29
30
|
from marshmallow.utils import (
|
|
30
|
-
RAISE,
|
|
31
31
|
EXCLUDE,
|
|
32
32
|
INCLUDE,
|
|
33
|
-
|
|
34
|
-
set_value,
|
|
33
|
+
RAISE,
|
|
35
34
|
get_value,
|
|
36
35
|
is_collection,
|
|
37
36
|
is_instance_or_subclass,
|
|
37
|
+
missing,
|
|
38
|
+
set_value,
|
|
38
39
|
validate_unknown_parameter_value,
|
|
39
40
|
)
|
|
40
41
|
from marshmallow.warnings import RemovedInMarshmallow4Warning
|
|
@@ -407,9 +408,7 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
|
|
|
407
408
|
self.error_messages = messages
|
|
408
409
|
|
|
409
410
|
def __repr__(self) -> str:
|
|
410
|
-
return "<{
|
|
411
|
-
ClassName=self.__class__.__name__, self=self
|
|
412
|
-
)
|
|
411
|
+
return f"<{self.__class__.__name__}(many={self.many})>"
|
|
413
412
|
|
|
414
413
|
@property
|
|
415
414
|
def dict_class(self) -> type:
|
|
@@ -1004,7 +1003,7 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
|
|
|
1004
1003
|
"The data_key argument for one or more fields collides "
|
|
1005
1004
|
"with another field's name or data_key argument. "
|
|
1006
1005
|
"Check the following field names and "
|
|
1007
|
-
"data_key arguments: {
|
|
1006
|
+
f"data_key arguments: {list(data_keys_duplicates)}"
|
|
1008
1007
|
)
|
|
1009
1008
|
load_attributes = [obj.attribute or name for name, obj in load_fields.items()]
|
|
1010
1009
|
if len(load_attributes) != len(set(load_attributes)):
|
|
@@ -1015,7 +1014,7 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
|
|
|
1015
1014
|
"The attribute argument for one or more fields collides "
|
|
1016
1015
|
"with another field's name or attribute argument. "
|
|
1017
1016
|
"Check the following field names and "
|
|
1018
|
-
"attribute arguments: {
|
|
1017
|
+
f"attribute arguments: {list(attributes_duplicates)}"
|
|
1019
1018
|
)
|
|
1020
1019
|
|
|
1021
1020
|
self.fields = fields_dict
|
|
@@ -1048,9 +1047,9 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
|
|
|
1048
1047
|
# the type checker's perspective.
|
|
1049
1048
|
if isinstance(field_obj, type) and issubclass(field_obj, base.FieldABC):
|
|
1050
1049
|
msg = (
|
|
1051
|
-
'Field for "{field_name}" must be declared as a '
|
|
1050
|
+
f'Field for "{field_name}" must be declared as a '
|
|
1052
1051
|
"Field instance, not a class. "
|
|
1053
|
-
'Did you mean "fields.{field_obj.__name__}()"?'
|
|
1052
|
+
f'Did you mean "fields.{field_obj.__name__}()"?' # type: ignore
|
|
1054
1053
|
)
|
|
1055
1054
|
raise TypeError(msg) from error
|
|
1056
1055
|
raise error
|
marshmallow/utils.py
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import collections
|
|
5
|
-
import functools
|
|
6
5
|
import datetime as dt
|
|
6
|
+
import functools
|
|
7
7
|
import inspect
|
|
8
8
|
import json
|
|
9
9
|
import re
|
|
@@ -311,10 +311,7 @@ def set_value(dct: dict[str, typing.Any], key: str, value: typing.Any):
|
|
|
311
311
|
target = dct.setdefault(head, {})
|
|
312
312
|
if not isinstance(target, dict):
|
|
313
313
|
raise ValueError(
|
|
314
|
-
"Cannot set {key} in {head} "
|
|
315
|
-
"due to existing value: {target}".format(
|
|
316
|
-
key=key, head=head, target=target
|
|
317
|
-
)
|
|
314
|
+
f"Cannot set {key} in {head} " f"due to existing value: {target}"
|
|
318
315
|
)
|
|
319
316
|
set_value(target, rest, value)
|
|
320
317
|
else:
|
marshmallow/validate.py
CHANGED
|
@@ -27,9 +27,7 @@ class Validator(ABC):
|
|
|
27
27
|
args = self._repr_args()
|
|
28
28
|
args = f"{args}, " if args else ""
|
|
29
29
|
|
|
30
|
-
return "<{self.__class__.__name__}({args}error={self.error!r})>"
|
|
31
|
-
self=self, args=args
|
|
32
|
-
)
|
|
30
|
+
return f"<{self.__class__.__name__}({args}error={self.error!r})>"
|
|
33
31
|
|
|
34
32
|
def _repr_args(self) -> str:
|
|
35
33
|
"""A string representation of the args passed to this validator. Used by
|
|
@@ -133,9 +131,9 @@ class URL(Validator):
|
|
|
133
131
|
# this is validated separately against allowed schemes, so in the regex
|
|
134
132
|
# we simply want to capture its existence
|
|
135
133
|
r"(?:[a-z0-9\.\-\+]*)://",
|
|
136
|
-
#
|
|
134
|
+
# userinfo, for URLs encoding authentication
|
|
137
135
|
# e.g. 'ftp://foo:bar@ftp.example.org/'
|
|
138
|
-
r"(?:[
|
|
136
|
+
r"(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?",
|
|
139
137
|
# netloc, the hostname/domain part of the URL plus the optional port
|
|
140
138
|
r"(?:",
|
|
141
139
|
"|".join(hostname_variants),
|
|
@@ -237,7 +235,8 @@ class Email(Validator):
|
|
|
237
235
|
|
|
238
236
|
DOMAIN_REGEX = re.compile(
|
|
239
237
|
# domain
|
|
240
|
-
r"(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+"
|
|
238
|
+
r"(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+"
|
|
239
|
+
r"(?:[A-Z]{2,6}|[A-Z0-9-]{2,})\Z"
|
|
241
240
|
# literal form, ipv4 address (SMTP 4.1.3)
|
|
242
241
|
r"|^\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)"
|
|
243
242
|
r"(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]\Z",
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: marshmallow
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.21.1
|
|
4
4
|
Summary: A lightweight library for converting complex datatypes to and from native Python datatypes.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Project-URL: Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html
|
|
10
|
-
Project-URL: Issues, https://github.com/marshmallow-code/marshmallow/issues
|
|
11
|
-
Project-URL: Funding, https://opencollective.com/marshmallow
|
|
12
|
-
Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi
|
|
13
|
-
Keywords: serialization,rest,json,api,marshal,marshalling,deserialization,validation,schema
|
|
5
|
+
Author-email: Steven Loria <sloria1@gmail.com>
|
|
6
|
+
Maintainer-email: Steven Loria <sloria1@gmail.com>, Jérôme Lafréchoux <jerome@jolimont.fr>, Jared Deckard <jared@shademaps.com>
|
|
7
|
+
Requires-Python: >=3.8
|
|
8
|
+
Description-Content-Type: text/x-rst
|
|
14
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
15
10
|
Classifier: Intended Audience :: Developers
|
|
16
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -20,27 +15,26 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
20
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
-
Requires-
|
|
24
|
-
|
|
25
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: packaging>=17.0
|
|
19
|
+
Requires-Dist: marshmallow[tests] ; extra == "dev"
|
|
20
|
+
Requires-Dist: tox ; extra == "dev"
|
|
21
|
+
Requires-Dist: pre-commit~=3.5 ; extra == "dev"
|
|
22
|
+
Requires-Dist: sphinx==7.2.6 ; extra == "docs"
|
|
23
|
+
Requires-Dist: sphinx-issues==4.0.0 ; extra == "docs"
|
|
24
|
+
Requires-Dist: alabaster==0.7.16 ; extra == "docs"
|
|
25
|
+
Requires-Dist: sphinx-version-warning==1.1.2 ; extra == "docs"
|
|
26
|
+
Requires-Dist: autodocsumm==0.2.12 ; extra == "docs"
|
|
27
|
+
Requires-Dist: pytest ; extra == "tests"
|
|
28
|
+
Requires-Dist: pytz ; extra == "tests"
|
|
29
|
+
Requires-Dist: simplejson ; extra == "tests"
|
|
30
|
+
Project-URL: Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html
|
|
31
|
+
Project-URL: Funding, https://opencollective.com/marshmallow
|
|
32
|
+
Project-URL: Issues, https://github.com/marshmallow-code/marshmallow/issues
|
|
33
|
+
Project-URL: Source, https://github.com/marshmallow-code/marshmallow
|
|
34
|
+
Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi
|
|
26
35
|
Provides-Extra: dev
|
|
27
|
-
Requires-Dist: pytest ; extra == 'dev'
|
|
28
|
-
Requires-Dist: pytz ; extra == 'dev'
|
|
29
|
-
Requires-Dist: simplejson ; extra == 'dev'
|
|
30
|
-
Requires-Dist: pre-commit <4.0,>=2.4 ; extra == 'dev'
|
|
31
|
-
Requires-Dist: tox ; extra == 'dev'
|
|
32
36
|
Provides-Extra: docs
|
|
33
|
-
Requires-Dist: sphinx ==7.2.6 ; extra == 'docs'
|
|
34
|
-
Requires-Dist: sphinx-issues ==3.0.1 ; extra == 'docs'
|
|
35
|
-
Requires-Dist: alabaster ==0.7.15 ; extra == 'docs'
|
|
36
|
-
Requires-Dist: sphinx-version-warning ==1.1.2 ; extra == 'docs'
|
|
37
|
-
Requires-Dist: autodocsumm ==0.2.12 ; extra == 'docs'
|
|
38
|
-
Provides-Extra: lint
|
|
39
|
-
Requires-Dist: pre-commit <4.0,>=2.4 ; extra == 'lint'
|
|
40
37
|
Provides-Extra: tests
|
|
41
|
-
Requires-Dist: pytest ; extra == 'tests'
|
|
42
|
-
Requires-Dist: pytz ; extra == 'tests'
|
|
43
|
-
Requires-Dist: simplejson ; extra == 'tests'
|
|
44
38
|
|
|
45
39
|
********************************************
|
|
46
40
|
marshmallow: simplified object serialization
|
|
@@ -61,11 +55,6 @@ marshmallow: simplified object serialization
|
|
|
61
55
|
.. image:: https://readthedocs.org/projects/marshmallow/badge/
|
|
62
56
|
:target: https://marshmallow.readthedocs.io/
|
|
63
57
|
:alt: Documentation
|
|
64
|
-
|
|
65
|
-
.. image:: https://badgen.net/badge/code%20style/black/000
|
|
66
|
-
:target: https://github.com/ambv/black
|
|
67
|
-
:alt: code style: black
|
|
68
|
-
|
|
69
58
|
|
|
70
59
|
**marshmallow** is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.
|
|
71
60
|
|
|
@@ -200,7 +189,7 @@ Project Links
|
|
|
200
189
|
- Docs: https://marshmallow.readthedocs.io/
|
|
201
190
|
- Changelog: https://marshmallow.readthedocs.io/en/latest/changelog.html
|
|
202
191
|
- Contributing Guidelines: https://marshmallow.readthedocs.io/en/latest/contributing.html
|
|
203
|
-
- PyPI: https://pypi.
|
|
192
|
+
- PyPI: https://pypi.org/project/marshmallow/
|
|
204
193
|
- Issues: https://github.com/marshmallow-code/marshmallow/issues
|
|
205
194
|
- Donate: https://opencollective.com/marshmallow
|
|
206
195
|
|
|
@@ -208,3 +197,4 @@ License
|
|
|
208
197
|
=======
|
|
209
198
|
|
|
210
199
|
MIT licensed. See the bundled `LICENSE <https://github.com/marshmallow-code/marshmallow/blob/dev/LICENSE>`_ file for more details.
|
|
200
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
marshmallow/__init__.py,sha256=zfCLhifu2WhV5WdSIvF-IgtOocF2Koc1iIJ30V9MCWw,2385
|
|
2
|
+
marshmallow/base.py,sha256=fo3i0f5YiT9MqY0rmdcmVy8iTNK9aOG0hFSGf4MxWEs,1345
|
|
3
|
+
marshmallow/class_registry.py,sha256=h-f1EKajePnuALkjqWInnbyv_xgt92nb_DZhxyk2BVc,2809
|
|
4
|
+
marshmallow/decorators.py,sha256=X9vNZgfrk3JvhHrVV9CPQxy2XMtGwewVwdvEeX_4u_o,8250
|
|
5
|
+
marshmallow/error_store.py,sha256=A7AxgLMw9ffSmaxRH4x3wcBWibx-DuGH4LwSDpVn50I,2223
|
|
6
|
+
marshmallow/exceptions.py,sha256=OIFlC_xY6c_4A6-1fYX-pIsgQegoLPiF5Ccur01MbPU,2325
|
|
7
|
+
marshmallow/fields.py,sha256=G97qL6WjmX2H0Qn9RF78X-bQkw50uUaxMSqRfdmCFe4,73145
|
|
8
|
+
marshmallow/orderedset.py,sha256=C2aAG6w1faIL1phinbAltbe3AUAnF5MN6n7fzESNDhI,2922
|
|
9
|
+
marshmallow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
marshmallow/schema.py,sha256=3pW0X5sVKzjn-JI4sWA7I2xRfMquwytesR3L7ktOPXI,49056
|
|
11
|
+
marshmallow/types.py,sha256=m1IhBT7dWHrYjTm7BQigHGX8UoYyt32WHwDK5Jppxf0,331
|
|
12
|
+
marshmallow/utils.py,sha256=nUZBXDeXxSv6kc1njj_PvmyFRCun2bgZBYZ7mS5gLh8,11789
|
|
13
|
+
marshmallow/validate.py,sha256=fZU2ftt9c-wlBgGmdnB0iZGrHpDLYgY7J7kHp0bAS9U,23914
|
|
14
|
+
marshmallow/warnings.py,sha256=vHQu7AluuWqLhvlw5noXtWWbya13zDXY6JMaVSUzmDs,65
|
|
15
|
+
marshmallow-3.21.1.dist-info/LICENSE,sha256=kGtdkFHkJhRMsXOtkRZnuOvQWpxYTCwmwTWzKj7RIAE,1064
|
|
16
|
+
marshmallow-3.21.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
17
|
+
marshmallow-3.21.1.dist-info/METADATA,sha256=s0YvGglPEV0lpSgQUFGR2U7dG6jvQvrh8UaX5qCMbBw,7240
|
|
18
|
+
marshmallow-3.21.1.dist-info/RECORD,,
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
marshmallow/__init__.py,sha256=OZm2C_79jM_inW-CXpf8oTeDLaXA2jK43bVEARgp26Y,968
|
|
2
|
-
marshmallow/base.py,sha256=5shImdVXepCDdr-WQ6uyP39K9gNoG8F8sv1pmfsS-W4,1344
|
|
3
|
-
marshmallow/class_registry.py,sha256=7C1DLdD-2D7ZKf-ZlfOV3bDrxT7Er7-qQI7M-bYHyac,2824
|
|
4
|
-
marshmallow/decorators.py,sha256=X9vNZgfrk3JvhHrVV9CPQxy2XMtGwewVwdvEeX_4u_o,8250
|
|
5
|
-
marshmallow/error_store.py,sha256=A7AxgLMw9ffSmaxRH4x3wcBWibx-DuGH4LwSDpVn50I,2223
|
|
6
|
-
marshmallow/exceptions.py,sha256=KrJEamfdoFj9zwmT8mtwONJlyHV4hpzZhkn9iHs2t_0,2326
|
|
7
|
-
marshmallow/fields.py,sha256=YuODki4r-LSe40pnftxddWT_VHiVRPIo-V5neydfpPs,73258
|
|
8
|
-
marshmallow/orderedset.py,sha256=C2aAG6w1faIL1phinbAltbe3AUAnF5MN6n7fzESNDhI,2922
|
|
9
|
-
marshmallow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
marshmallow/schema.py,sha256=61UK2cEiM8fEOJZckqe43Km6tdCxGm65MmLiqao3qVs,49091
|
|
11
|
-
marshmallow/types.py,sha256=m1IhBT7dWHrYjTm7BQigHGX8UoYyt32WHwDK5Jppxf0,331
|
|
12
|
-
marshmallow/utils.py,sha256=hemvvZB8GxndkC_Zx0ldXqWfYUtJWKpYatzNPhNGRj4,11883
|
|
13
|
-
marshmallow/validate.py,sha256=F6r-rGurleYhndgAW_pZfS6xe2KxtST1915RXL-AI7c,23938
|
|
14
|
-
marshmallow/warnings.py,sha256=vHQu7AluuWqLhvlw5noXtWWbya13zDXY6JMaVSUzmDs,65
|
|
15
|
-
marshmallow-3.20.2.dist-info/LICENSE,sha256=grsRP99dmM8-9O31HklhEeEoGLP1OSMzPXjFpdtnLhA,1069
|
|
16
|
-
marshmallow-3.20.2.dist-info/METADATA,sha256=VyYC5xPeCr1hTMHb-BESDvKwpOMS99IzuRlEvcKYu2Y,7488
|
|
17
|
-
marshmallow-3.20.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
18
|
-
marshmallow-3.20.2.dist-info/top_level.txt,sha256=B_yjxTA7Lx7T1LxnaUpTTd8CXt4shc4blEcScke_vVc,12
|
|
19
|
-
marshmallow-3.20.2.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
marshmallow
|