Skip to content

Upgrading marshmallow 2 to 3

Breaking2.21.0 → 3.26.2Breaking53Security2Platform9Deprecated14New38Changed35Fixed86Other40

BreakingUpgrade verdict

53 breaking changes and 9 platform requirement changes and 2 security fixes.

  • fields.UUID no longer checks that values are valid UUIDs.
  • When converting data to its output form, marshmallow no longer runs validators, which makes it much faster.
  • The DateTime field now leaves timezone information alone instead of changing it when reading or writing values.
  • When serializing, a List field no longer turns a lone value into a one-item list.
Top 5 of 78 that need code or config changes

Requires Python >=3.9 from 3.23.0 (none stated before).

Adds packaging >=17.0.

Installs 1 package in all (was 0).

Breaking53
Removes UUID validation from fields.UUID for consistency with other fields.
fields.UUID
Validation no longer occurs on serialization, significantly improving serialization performance.
DateTime no longer affects timezone information on serialization and deserialization.
DateTime
List no longer wraps single values in a list on serialization.
List
Removes LocalDateTime.
LocalDateTime
Removes marshmallow.utils.utc; use datetime.timezone.utc instead.
marshmallow.utils.utcdatetime.timezone.utc
Renames fields.List.container to fields.List.inner, fields.Dict.key_container to fields.Dict.key_field, and fields.Dict.value_container to fields.Dict.value_field.
fields.List.containerfields.List.innerfields.Dict.key_containerfields.Dict.key_fieldfields.Dict.value_containerfields.Dict.value_field
Removes special-casing in fields.List and fields.Tuple for accessing nested attributes; use fields.List(fields.Pluck(...)) instead.
fields.Listfields.Tuplefields.Pluck
Removes fields.FormattedString; use fields.Function or fields.Method instead.
fields.FormattedStringfields.Functionfields.Method
Removes unused code in marshmallow.utils: is_indexable_but_not_string, float_to_decimal, decimal_to_fixed, from_iso.
marshmallow.utils.is_indexable_but_not_stringmarshmallow.utils.float_to_decimalmarshmallow.utils.decimal_to_fixedmarshmallow.utils.from_iso
Removes unused marshmallow.compat.string_types.
marshmallow.compat.string_types
Extra keyword arguments passed to ValidationError in validators are no longer passed to the final ValidationError raised upon validation completion.
ValidationError
Renames DateTime's dateformat Meta option to datetimeformat; dateformat now applies to Date.
DateTimedateformatdatetimeformatDate
Removes support for passing a string as only to fields.Nested; use fields.Pluck instead.
fields.Nestedfields.Pluckonly
Float gains an allow_nan parameter defaulting to False, so nan and inf are no longer serialized or deserialized by default.
Floatallow_nan
The unknown option now defaults to RAISE.
unknownRAISE
Pre/Post-processors must return modified data; returning `None` no longer implies data were mutated.
Passes missing and default values in deserialized form, a backwards-incompatible change.
missingdefault
Schemas are always strict and the strict parameter is removed.
strict
Email and URL fields no longer validate on serialization, making them consistent with other fields and improving serialization performance.
EmailURL
Number fields no longer accept booleans as valid input.
Number
skip_on_field_errors defaults to True for validates_schema.
skip_on_field_errorsvalidates_schema
Backwards-incompatible: fields.Method and fields.Function no longer swallow AttributeErrors.
fields.Methodfields.FunctionAttributeErrorsbereal
Backwards-incompatible: validators.Length is no longer a subclass of validators.Range.
validators.Lengthvalidators.Rangedeckar01
Backwards-incompatible: utils.get_func_args no longer returns bound arguments.
utils.get_func_argsinspect.signaturedeckar01
Remove func parameter of fields.Function.
funcfields.Functionmethod_namefields.Methodserialize
Makes marshmallow.validate.Validator an abstract base class.
marshmallow.validate.Validator
Decorated pre_load, post_load, pre_dump, post_dump and validates_schema methods now receive many and partial as keyword arguments.
pre_loadpost_loadpre_dumppost_dumpvalidates_schemamanypartial
Uses keyword-only arguments.
Changes ordering of keys and values arguments to fields.Dict, incompatible with previous 3.x versions.
fields.Dict
Removes the internal marshmallow.marshalling module.
marshmallow.marshalling
Raises a ValueError when the missing parameter is passed for required fields.
missingrequiredValueError
Reworks the ValidationError API to expect a single field name, merging error structures in the final ValidationError raised when validation completes.
ValidationError
Requires _serialize and _deserialize on all fields.Field subclasses to accept **kwargs.
fields.Field_serialize_deserialize**kwargs
Removes the prefix parameter from the Schema class; use a @post_dump method instead.
prefixSchema@post_dump
Nested field now defaults to unknown=RAISE instead of EXCLUDE, matching Schema.
NestedunknownRAISEEXCLUDESchema
`only and exclude are bound by declared and additional fields; a ValueError` is raised for invalid fields.
onlyexcludeValueError
Removes `ValidationError.fields; access field instances from Schema.fields` instead.
ValidationError.fieldsSchema.fields
Adds a data_key parameter to fields that specifies the key in input and output data, replacing load_from and dump_to.
data_keyload_fromdump_to
With pass_original=True and a collection being (de)serialized, original_data is a single object unless pass_many=True is also passed.
pass_originalpass_manyoriginal_data
Stops recursively checking nested required fields when the Nested field's key is missing, reverting PR 235.
Nested
Changes error message collection for the Dict field, incompatible with previous 3.0.0bX versions.
Dict
Field name is not checked when load_from is specified.
load_from
validate.ContainsOnly now allows empty and duplicate values.
validate.ContainsOnly
Backwards-incompatible: Don't unconditionally call callable attributes (, reverts ). Thanks mirko for the suggestion.
mirko
Remove __error_handler__, accessor, @Schema.error_handler, and @Schema.accessor.
__error_handler____accessor__@Schema.error_handler@Schema.accessorSchema.handle_errorSchema.get_attribute
Remove extra parameter from Schema.
extraSchema@post_dump
Schema.handle_error receives many and partial as keyword arguments.
Schema.handle_error
Raises ValueError on Schema instantiation when attribute or data_key collide.
SchemaValueErrorattributedata_key
When a schema error is raised with a dict payload, the dict overwrites any existing error list instead of being appended.
Schema().load and Schema().dump return data instead of a (data, errors) tuple.
Schema().loadSchema().dump
Schema().load(None) raises a ValidationError.
Schema().loadValidationError
Backwards-incompatible: Change the signature of utils.get_value and Schema.get_attribute for consistency with Python builtins (e.g. getattr).
utils.get_valueSchema.get_attributegetattrstasdeckar01
Security2
Fixes CVE-2025-68480 by merging error store messages without rebuilding collections.
Medium · CVSS 5.3
In the marshmallow library before 2.15.1 and 3.x before 3.0.0b9 for Python, the schema "only" option treats an empty list as implying no "only" option, which allows a request that was intended to expose no fields to instead expose all fields (if the schema is being filtered dynamically using the "only" option, and there is a user role that produces an empty value for "only").
Platform9
Officially supports Python 3.13.
Drops support for Python 3.8.
Officially supports Python 3.12.
Officially supports Python 3.11.
Drops support for Python 3.7.
Drops support for Python 3.6.
Drops support for Python 3.5.
Removes support for Python 2; only Python>=3.5 is supported.
Drop support for Python 2.6 and 3.3.
Deprecated14
Deprecates the ordered class Meta option; field order is already preserved by default.
orderedmarshmallow.Schema.Metamarshmallow.Schema.dict_classcollections.OrderedDict
Restores marshmallow.base.SchemaABC for backwards compatibility, deprecated and slated for removal in marshmallow 4.
marshmallow.base.SchemaABCmarshmallow.schema.Schema
Custom validators should raise ValidationError for invalid values; returning False is no longer supported.
ValidationErrormarshmallow.exceptions.ValidationError
Deprecates the context parameter of Schema; use contextVars.ContextVar to pass context data instead.
Schemamarshmallow.schema.SchemacontextcontextVars.ContextVar
Field, Mapping, and Number should no longer be used as fields within schemas; use their subclasses instead.
Fieldmarshmallow.fields.FieldMappingmarshmallow.fields.MappingNumbermarshmallow.fields.Number
Deprecates the __version__, __parsed_version__, and __version_info__ attributes.
__version____parsed_version____version_info__importlib.metadata.version()
Deprecates missing/default field parameters, to be removed in marshmallow 4; use load_default/dump_default instead.
missingdefaultload_defaultdump_default
Deprecates passing field metadata via keyword arguments, to be removed in marshmallow 4; use the explicit metadata= argument instead.
metadata
Deprecates marshmallow.pprint, which will be removed in marshmallow 4.
marshmallow.pprint
Passing the string "self" to fields.Nested is deprecated; use a callable instead.
fields.Nestedfields.List
Deprecates Field.fail in favor of Field.make_error.
Field.failField.make_error
Warns that the default for `unknown will change to RAISE` in the next release.
unknownRAISE
Deprecates utils.from_iso in favor of utils.from_iso_datetime, a backwards-incompatible change.
utils.from_isoutils.from_iso_datetime
Deprecates the json_module option in favor of render_module.
json_modulerender_module

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • removed: export MarshalResult
  • removed: export UnmarshalResult
  • added: export EXCLUDE
  • added: export INCLUDE
  • added: export RAISE
  • removed: field FieldABC.name
  • removed: field FieldABC.parent
  • changed: class FieldABC(object) → class FieldABC(ABC)
  • changed: class SchemaABC(object) → class SchemaABC(ABC)
  • changed: method SchemaABC.dump(obj) → method SchemaABC.dump(obj, *, many: bool | None=…)
  • changed: method SchemaABC.dumps(obj, *args, **kwargs) → method SchemaABC.dumps(obj, *, many: bool | None=…)
  • changed: method SchemaABC.load(data) → method SchemaABC.load(data, *, many: bool | None=…, partial=…, unknown=…)
  • changed: method SchemaABC.loads(data) → method SchemaABC.loads(json_data, *, many: bool | None=…, partial=…, unknown=…, **kwargs)
  • changed: function get_class(classname, all=…) → function get_class(classname: str, *, all: typing.Literal[False]=…) -> SchemaType | (classname: str, *, all: typing.Literal[True]=…) -> list[SchemaType]
  • changed: function register(classname, cls) → function register(classname: str, cls: SchemaType) -> None
  • added: variable SchemaType
  • removed: function get_func_args(func)
  • removed: function with_metaclass(meta, *bases)
  • removed: variable PY2
  • removed: variable PY26
  • removed: variable basestring
  • removed: variable binary_type
  • removed: variable iteritems
  • removed: variable iterkeys
  • removed: variable itervalues
  • removed: variable string_types
  • removed: variable text_type
  • removed: variable unicode
  • removed: variable urlparse
  • removed: variable zip_longest
  • removed: function tag_processor(tag_name, fn, pass_many, **kwargs)
  • changed: function post_dump(fn=…, pass_many=…, pass_original=…) → function post_dump(fn: Callable[..., Any] | None=…, pass_many: bool=…, pass_original: bool=…) -> Callable[..., Any]
  • changed: function post_load(fn=…, pass_many=…, pass_original=…) → function post_load(fn: Callable[..., Any] | None=…, pass_many: bool=…, pass_original: bool=…) -> Callable[..., Any]
  • changed: function pre_dump(fn=…, pass_many=…) → function pre_dump(fn: Callable[..., Any] | None=…, pass_many: bool=…) -> Callable[..., Any]
  • changed: function pre_load(fn=…, pass_many=…) → function pre_load(fn: Callable[..., Any] | None=…, pass_many: bool=…) -> Callable[..., Any]
  • changed: function validates(field_name) → function validates(field_name: str) -> Callable[..., Any]
  • changed: function validates_schema(fn=…, pass_many=…, pass_original=…, skip_on_field_errors=…) → function validates_schema(fn: Callable[..., Any] | None=…, pass_many: bool=…, pass_original: bool=…, skip_on_field_errors: bool=…) -> Callable[..., Any]
  • added: class MarshmallowHook
  • added: function set_hook(fn: Callable[..., Any] | None, tag: str, many: bool=…, **kwargs: Any) -> Callable[..., Any]
  • added: class ErrorStore
  • added: constructor ErrorStore()
  • added: function copy_containers(errors)
  • added: function merge_errors(errors1, errors2)
  • added: method ErrorStore.store_error(messages, field_name=…, index=…)
  • changed: constructor ValidationError(message, field_names=…, fields=…, data=…, **kwargs) → constructor ValidationError(message: str | list | dict, field_name: str=…, data: typing.Mapping[str, typing.Any] | typing.Iterable[typing.Mapping[str, typing.Any]] | None=…, valid_data: list[dict[str, typing.Any]] | dict[str, typing.Any] | None=…, **kwargs)
  • changed: method ValidationError.normalized_messages(no_field_name=…) → method ValidationError.normalized_messages()
  • added: class FieldInstanceResolutionError(MarshmallowError, TypeError)
  • added: class StringNotCollectionError(MarshmallowError, TypeError)
  • added: property ValidationError.messages_dict -> dict[str, typing.Any]
  • added: variable SCHEMA
  • removed: class FormattedString(Field)
  • removed: class LocalDateTime(DateTime)
  • removed: constructor FormattedString(src_str, *args, **kwargs)
  • removed: field DateTime.DATEFORMAT_DESERIALIZATION_FUNCS
  • removed: field DateTime.DATEFORMAT_SERIALIZATION_FUNCS
  • removed: field DateTime.localtime
  • removed: field Dict.default_error_messages
  • removed: field FormattedString.default_error_messages
  • removed: field LocalDateTime.localtime
  • removed: field Time.default_error_messages
  • removed: method List.get_value(attr, obj, accessor=…)
  • removed: property Field.context
  • removed: property Field.root
  • removed: property Nested.schema
  • changed: class Date(Field) → class Date(DateTime)
  • changed: class Decimal(Number) → class Decimal(Number[decimal.Decimal])
  • changed: class Dict(Field) → class Dict(Mapping)
  • changed: class Email(ValidatedField, String) → class Email(String)
  • changed: class Float(Number) → class Float(Number[float])
  • changed: class Integer(Number) → class Integer(Number[int])
  • changed: class Number(Field) → class Number(Field, typing.Generic[_NumType])
  • changed: class Time(Field) → class Time(DateTime)
  • changed: class Url(ValidatedField, String) → class Url(String)
  • changed: constructor Constant(constant, **kwargs) → constructor Constant(constant: typing.Any, **kwargs)
  • changed: constructor DateTime(format=…, **kwargs) → constructor DateTime(format: str | None=…, **kwargs) -> None
  • changed: constructor Decimal(places=…, rounding=…, allow_nan=…, as_string=…, **kwargs) → constructor Decimal(places: int | None=…, rounding: str | None=…, *, allow_nan: bool=…, as_string: bool=…, **kwargs)
  • changed: constructor Email(*args, **kwargs) → constructor Email(*args, **kwargs) -> None
  • changed: constructor Field(default=…, attribute=…, load_from=…, dump_to=…, error=…, validate=…, required=…, allow_none=…, load_only=…, dump_only=…, missing=…, error_messages=…, **metadata) → constructor Field(*, load_default: typing.Any=…, missing: typing.Any=…, dump_default: typing.Any=…, default: typing.Any=…, data_key: str | None=…, attribute: str | None=…, validate: types.Validator | typing.Iterable[types.Validator] | None=…, required: bool=…, allow_none: bool | None=…, load_only: bool=…, dump_only: bool=…, error_messages: dict[str, str] | None=…, metadata: typing.Mapping[str, ty…
  • changed: constructor Function(serialize=…, deserialize=…, func=…, **kwargs) → constructor Function(serialize: typing.Callable[[typing.Any], typing.Any] | typing.Callable[[typing.Any, dict], typing.Any] | None=…, deserialize: typing.Callable[[typing.Any], typing.Any] | typing.Callable[[typing.Any, dict], typing.Any] | None=…, **kwargs)
  • changed: constructor List(cls_or_instance, **kwargs) → constructor List(cls_or_instance: Field | type[Field], **kwargs)
  • changed: constructor Method(serialize=…, deserialize=…, method_name=…, **kwargs) → constructor Method(serialize: str | None=…, deserialize: str | None=…, **kwargs)
  • changed: constructor Nested(nested, default=…, exclude=…, only=…, **kwargs) → constructor Nested(nested: Schema | SchemaMeta | str | dict[str, Field] | typing.Callable[[], Schema | SchemaMeta | dict[str, Field]], *, dump_default: typing.Any=…, default: typing.Any=…, only: types.StrSequenceOrSet | None=…, exclude: types.StrSequenceOrSet=…, many: bool=…, unknown: str | None=…, **kwargs)
  • changed: constructor Number(as_string=…, **kwargs) → constructor Number(*, as_string: bool=…, **kwargs)
  • changed: constructor TimeDelta(precision=…, error=…, **kwargs) → constructor TimeDelta(precision: str=…, serialization_type: type[int | float]=…, **kwargs)
  • changed: constructor Url(relative=…, schemes=…, **kwargs) → constructor Url(*, relative: bool=…, absolute: bool=…, schemes: types.StrSequenceOrSet | None=…, require_tld: bool=…, **kwargs)
  • changed: field Field.default_error_messages → field Field.default_error_messages: dict[str, str]
  • changed: field Number.num_type → field Number.num_type: type
  • changed: method Field.deserialize(value, attr=…, data=…) → method Field.deserialize(value: typing.Any, attr: str | None=…, data: typing.Mapping[str, typing.Any] | None=…, **kwargs)
  • changed: method Field.fail(key, **kwargs) → method Field.fail(key: str, **kwargs)
  • changed: method Field.get_value(attr, obj, accessor=…, default=…) → method Field.get_value(obj: typing.Any, attr: str, accessor: typing.Callable[[typing.Any, str, typing.Any], typing.Any] | None=…, default: typing.Any=…)
  • changed: method Field.serialize(attr, obj, accessor=…) → method Field.serialize(attr: str, obj: typing.Any, accessor: typing.Callable[[typing.Any, str, typing.Any], typing.Any] | None=…, **kwargs)
  • added: class AwareDateTime(DateTime)
  • added: class Enum(Field)
  • added: class IP(Field)
  • added: class IPInterface(Field)
  • added: class IPv4(IP)
  • added: class IPv4Interface(IPInterface)
  • added: class IPv6(IP)
  • added: class IPv6Interface(IPInterface)
  • added: class Mapping(Field)
  • added: class NaiveDateTime(DateTime)
  • added: class Pluck(Nested)
  • added: class Tuple(Field)
  • added: constructor AwareDateTime(format: str | None=…, *, default_timezone: dt.tzinfo | None=…, **kwargs) -> None
  • added: constructor Boolean(*, truthy: typing.Iterable | None=…, falsy: typing.Iterable | None=…, **kwargs)
  • added: constructor Enum(enum: type[EnumType], *, by_value: bool | Field | type[Field]=…, **kwargs)
  • added: constructor Float(*, allow_nan: bool=…, as_string: bool=…, **kwargs)
  • added: constructor IP(*args, exploded=…, **kwargs)
  • added: constructor IPInterface(*args, exploded: bool=…, **kwargs)
  • added: constructor Integer(*, strict: bool=…, **kwargs)
  • added: constructor Mapping(keys: Field | type[Field] | None=…, values: Field | type[Field] | None=…, **kwargs)
  • added: constructor NaiveDateTime(format: str | None=…, *, timezone: dt.timezone | None=…, **kwargs) -> None
  • added: constructor Pluck(nested: Schema | SchemaMeta | str | typing.Callable[[], Schema], field_name: str, *, many: bool=…, unknown: str | None=…, **kwargs)
  • added: constructor Tuple(tuple_fields: typing.Iterable[Field] | typing.Iterable[type[Field]], **kwargs)
  • added: field AwareDateTime.AWARENESS
  • added: field Date.DEFAULT_FORMAT
  • added: field Date.DESERIALIZATION_FUNCS
  • added: field Date.OBJ_TYPE
  • added: field Date.SCHEMA_OPTS_VAR_NAME
  • added: field Date.SERIALIZATION_FUNCS
  • added: field DateTime.DESERIALIZATION_FUNCS: dict[str, typing.Callable[[str], typing.Any]]
  • added: field DateTime.OBJ_TYPE
  • added: field DateTime.SCHEMA_OPTS_VAR_NAME
  • added: field DateTime.SERIALIZATION_FUNCS: dict[str, typing.Callable[[typing.Any], str | float]]
  • added: field Dict.mapping_type
  • added: field Enum.default_error_messages
  • added: field Float.default_error_messages
  • added: field IP.DESERIALIZATION_CLASS: type | None
  • added: field IP.default_error_messages
  • added: field IPInterface.DESERIALIZATION_CLASS: type | None
  • added: field IPInterface.default_error_messages
  • added: field IPv4.DESERIALIZATION_CLASS
  • added: field IPv4.default_error_messages
  • added: field IPv4Interface.DESERIALIZATION_CLASS
  • added: field IPv4Interface.default_error_messages
  • added: field IPv6.DESERIALIZATION_CLASS
  • added: field IPv6.default_error_messages
  • added: field IPv6Interface.DESERIALIZATION_CLASS
  • added: field IPv6Interface.default_error_messages
  • added: field Mapping.default_error_messages
  • added: field Mapping.mapping_type
  • added: field NaiveDateTime.AWARENESS
  • added: field Nested.default_error_messages
  • added: field Time.DEFAULT_FORMAT
  • added: field Time.DESERIALIZATION_FUNCS
  • added: field Time.OBJ_TYPE
  • added: field Time.SCHEMA_OPTS_VAR_NAME
  • added: field Time.SERIALIZATION_FUNCS
  • added: field TimeDelta.HOURS
  • added: field TimeDelta.MILLISECONDS
  • added: field TimeDelta.MINUTES
  • added: field TimeDelta.WEEKS
  • added: field Tuple.default_error_messages
  • added: method Field.make_error(key: str, **kwargs) -> ValidationError
  • added: property Field.context -> dict | None
  • added: property Field.default
  • added: property Field.missing
  • added: property Nested.schema -> Schema
  • removed: class Marshaller(ErrorStore)
  • removed: class Unmarshaller(ErrorStore)
  • removed: constructor Marshaller(prefix=…)
  • removed: field Unmarshaller.default_schema_validation_error
  • removed: method Marshaller.serialize(obj, fields_dict, many=…, accessor=…, dict_class=…, index_errors=…, index=…)
  • removed: method Unmarshaller.deserialize(data, fields_dict, many=…, partial=…, dict_class=…, index_errors=…, index=…)
  • removed: method Unmarshaller.run_validator(validator_func, output, original_data, fields_dict, index=…, many=…, pass_original=…)
  • removed: class OrderedDict(dict, DictMixin)
  • removed: constructor OrderedDict(*args, **kwds)
  • removed: field OrderedDict.items
  • removed: field OrderedDict.iteritems
  • removed: field OrderedDict.iterkeys
  • removed: field OrderedDict.itervalues
  • removed: field OrderedDict.pop
  • removed: field OrderedDict.setdefault
  • removed: field OrderedDict.update
  • removed: field OrderedDict.values
  • removed: method OrderedDict.clear()
  • removed: method OrderedDict.copy()
  • removed: method OrderedDict.keys()
  • removed: method OrderedDict.popitem(last=…)
  • removed: static method OrderedDict.fromkeys(iterable, value=…)
  • removed: class BaseSchema(base.SchemaABC)
  • removed: class BaseSchema.Meta(object)
  • removed: constructor BaseSchema(extra=…, only=…, exclude=…, prefix=…, strict=…, many=…, context=…, load_only=…, dump_only=…, partial=…)
  • removed: field BaseSchema.OPTIONS_CLASS
  • removed: field BaseSchema.TYPE_MAPPING
  • removed: method BaseSchema.dump(obj, many=…, update_fields=…, **kwargs)
  • removed: method BaseSchema.dumps(obj, many=…, update_fields=…, *args, **kwargs)
  • removed: method BaseSchema.get_attribute(attr, obj, default)
  • removed: method BaseSchema.handle_error(error, data)
  • removed: method BaseSchema.load(data, many=…, partial=…)
  • removed: method BaseSchema.loads(json_data, many=…, *args, **kwargs)
  • removed: method BaseSchema.on_bind_field(field_name, field_obj)
  • removed: method BaseSchema.validate(data, many=…, partial=…)
  • removed: property BaseSchema.dict_class
  • removed: property BaseSchema.set_class
  • removed: static method BaseSchema.accessor(func)
  • removed: static method BaseSchema.error_handler(func)
  • removed: variable MarshalResult
  • removed: variable UnmarshalResult
  • changed: class Schema(with_metaclass(SchemaMeta, BaseSchema)) → class Schema(base.SchemaABC)
  • changed: class SchemaMeta(type) → class SchemaMeta(ABCMeta)
  • changed: class SchemaOpts(object) → class SchemaOpts
  • changed: constructor SchemaOpts(meta) → constructor SchemaOpts(meta: type, ordered: bool=…)
  • changed: static method SchemaMeta.get_declared_fields(klass, cls_fields, inherited_fields, dict_cls) → static method SchemaMeta.get_declared_fields(klass: SchemaMeta, cls_fields: list[tuple[str, Field]], inherited_fields: list[tuple[str, Field]], dict_cls: type[dict]=…) -> dict[str, Field]
  • added: class Schema.Meta
  • added: constructor Schema(*, only: types.StrSequenceOrSet | None=…, exclude: types.StrSequenceOrSet=…, many: bool | None=…, context: dict | None=…, load_only: types.StrSequenceOrSet=…, dump_only: types.StrSequenceOrSet=…, partial: bool | types.StrSequenceOrSet | None=…, unknown: str | None=…)
  • added: field Schema.Meta.additional: typing.ClassVar[tuple[str, ...] | list[str]]
  • added: field Schema.Meta.dateformat: typing.ClassVar[str]
  • added: field Schema.Meta.datetimeformat: typing.ClassVar[str]
  • added: field Schema.Meta.dump_only: typing.ClassVar[tuple[str, ...] | list[str]]
  • added: field Schema.Meta.exclude: typing.ClassVar[tuple[str, ...] | list[str]]
  • added: field Schema.Meta.fields: typing.ClassVar[tuple[str, ...] | list[str]]
  • added: field Schema.Meta.include: typing.ClassVar[dict[str, Field]]
  • added: field Schema.Meta.index_errors: typing.ClassVar[bool]
  • added: field Schema.Meta.load_only: typing.ClassVar[tuple[str, ...] | list[str]]
  • added: field Schema.Meta.many: typing.ClassVar[bool]
  • added: field Schema.Meta.ordered: typing.ClassVar[bool]
  • added: field Schema.Meta.register: typing.ClassVar[bool]
  • added: field Schema.Meta.render_module: typing.Any
  • added: field Schema.Meta.timeformat: typing.ClassVar[str]
  • added: field Schema.Meta.unknown: typing.ClassVar[str]
  • added: field Schema.OPTIONS_CLASS: type
  • added: field Schema.TYPE_MAPPING: dict[type, type[Field]]
  • added: field Schema.error_messages: dict[str, str]
  • added: field Schema.opts: typing.Any
  • added: field Schema.set_class
  • added: field SchemaMeta.Meta: type
  • added: field SchemaMeta.OPTIONS_CLASS: type
  • added: field SchemaMeta.opts: typing.Any
  • added: method Schema.dump(obj: typing.Any, *, many: bool | None=…)
  • added: method Schema.dumps(obj: typing.Any, *args, many: bool | None=…, **kwargs)
  • added: method Schema.get_attribute(obj: typing.Any, attr: str, default: typing.Any)
  • added: method Schema.handle_error(error: ValidationError, data: typing.Any, *, many: bool, **kwargs)
  • added: method Schema.load(data: typing.Mapping[str, typing.Any] | typing.Iterable[typing.Mapping[str, typing.Any]], *, many: bool | None=…, partial: bool | types.StrSequenceOrSet | None=…, unknown: str | None=…)
  • added: method Schema.loads(json_data: str | bytes | bytearray, *, many: bool | None=…, partial: bool | types.StrSequenceOrSet | None=…, unknown: str | None=…, **kwargs)
  • added: method Schema.on_bind_field(field_name: str, field_obj: Field) -> None
  • added: method Schema.validate(data: typing.Mapping[str, typing.Any] | typing.Iterable[typing.Mapping[str, typing.Any]], *, many: bool | None=…, partial: bool | types.StrSequenceOrSet | None=…) -> dict[str, list[str]]
  • added: method SchemaMeta.resolve_hooks() -> dict[str, list[tuple[str, bool, dict]]]
  • added: property Schema.dict_class -> type[dict]
  • added: static method Schema.from_dict(fields: dict[str, Field], *, name: str=…) -> type[Schema]
  • added: variable BaseSchema
  • added: class RenderModule(typing.Protocol)
  • added: class SchemaValidator(typing.Protocol)
  • added: method RenderModule.dumps(obj: typing.Any, *args: typing.Any, **kwargs: typing.Any) -> str
  • added: method RenderModule.loads(json_data: str | bytes | bytearray, *args: typing.Any, **kwargs: typing.Any) -> typing.Any
  • added: variable StrSequenceOrSet
  • added: variable Validator
  • removed: class UTC(datetime.tzinfo)
  • removed: field UTC.zone
  • removed: function decimal_to_fixed(value, precision)
  • removed: function float_to_decimal(f)
  • removed: function from_datestring(datestring)
  • removed: function from_iso(datestring, use_dateutil=…)
  • removed: function if_none(value, default)
  • removed: function is_indexable_but_not_string(obj)
  • removed: function local_rfcformat(dt)
  • removed: function to_marshallable_type(obj, field_names=…)
  • removed: method UTC.dst(dt)
  • removed: method UTC.fromutc(dt)
  • removed: method UTC.localize(dt, is_dst=…)
  • removed: method UTC.normalize(dt, is_dst=…)
  • removed: method UTC.tzname(dt)
  • removed: method UTC.utcoffset(dt)
  • removed: variable HOUR
  • removed: variable UTC
  • removed: variable ZERO
  • removed: variable ZERO_DECIMAL
  • removed: variable dateutil_available
  • removed: variable get_func_args
  • removed: variable utc
  • changed: function ensure_text_type(val) → function ensure_text_type(val: str | bytes) -> str
  • changed: function from_iso_date(datestring, use_dateutil=…) → function from_iso_date(value)
  • changed: function from_iso_time(timestring, use_dateutil=…) → function from_iso_time(value)
  • changed: function from_rfc(datestring, use_dateutil=…) → function from_rfc(datestring: str) -> dt.datetime
  • changed: function get_value(key, obj, default=…) → function get_value(obj, key: int | str, default=…)
  • changed: function is_collection(obj) → function is_collection(obj) -> bool
  • changed: function is_generator(obj) → function is_generator(obj) -> bool
  • changed: function is_instance_or_subclass(val, class_) → function is_instance_or_subclass(val, class_) -> bool
  • changed: function is_iterable_but_not_string(obj) → function is_iterable_but_not_string(obj) -> bool
  • changed: function is_keyed_tuple(obj) → function is_keyed_tuple(obj) -> bool
  • changed: function isoformat(dt, localtime=…, *args, **kwargs) → function isoformat(datetime: dt.datetime) -> str
  • changed: function pluck(dictlist, key) → function pluck(dictlist: list[dict[str, typing.Any]], key: str)
  • changed: function pprint(obj, *args, **kwargs) → function pprint(obj, *args, **kwargs) -> None
  • changed: function rfcformat(dt, localtime=…) → function rfcformat(datetime: dt.datetime) -> str
  • changed: function set_value(dct, key, value) → function set_value(dct: dict[str, typing.Any], key: str, value: typing.Any)
  • added: function from_iso_datetime(value)
  • added: function from_timestamp(value: typing.Any) -> dt.datetime
  • added: function from_timestamp_ms(value: typing.Any) -> dt.datetime
  • added: function get_fixed_timezone(offset: float | dt.timedelta) -> dt.timezone
  • added: function get_func_args(func: typing.Callable) -> list[str]
  • added: function is_aware(datetime: dt.datetime) -> bool
  • added: function resolve_field_instance(cls_or_instance: type[Field] | Field) -> Field
  • added: function timedelta_to_microseconds(value: dt.timedelta) -> int
  • added: function timestamp(value: dt.datetime) -> float
  • added: function timestamp_ms(value: dt.datetime) -> float
  • added: function to_iso_date(date: dt.date) -> str
  • added: function to_iso_time(time: dt.time) -> str
  • added: function validate_unknown_parameter_value(obj: typing.Any) -> str
  • added: variable EXCLUDE
  • added: variable INCLUDE
  • added: variable RAISE
  • changed: class Length(Range) → class Length(Validator)
  • changed: class URL.RegexMemoizer(object) → class URL.RegexMemoizer
  • changed: class Validator(object) → class Validator(ABC)
  • changed: constructor Email(error=…) → constructor Email(*, error: str | None=…)
  • changed: constructor Equal(comparable, error=…) → constructor Equal(comparable, *, error: str | None=…)
  • changed: constructor Length(min=…, max=…, error=…, equal=…) → constructor Length(min: int | None=…, max: int | None=…, *, equal: int | None=…, error: str | None=…)
  • changed: constructor NoneOf(iterable, error=…) → constructor NoneOf(iterable: typing.Iterable, *, error: str | None=…)
  • changed: constructor OneOf(choices, labels=…, error=…) → constructor OneOf(choices: typing.Iterable, labels: typing.Iterable[str] | None=…, *, error: str | None=…)
  • changed: constructor Predicate(method, error=…, **kwargs) → constructor Predicate(method: str, *, error: str | None=…, **kwargs)
  • changed: constructor Range(min=…, max=…, error=…) → constructor Range(min=…, max=…, *, min_inclusive: bool=…, max_inclusive: bool=…, error: str | None=…)
  • changed: constructor Regexp(regex, flags=…, error=…) → constructor Regexp(regex: str | bytes | typing.Pattern, flags: int=…, *, error: str | None=…)
  • changed: constructor URL(relative=…, error=…, schemes=…, require_tld=…) → constructor URL(*, relative: bool=…, absolute: bool=…, schemes: types.StrSequenceOrSet | None=…, require_tld: bool=…, error: str | None=…)
  • changed: method OneOf.options(valuegetter=…) → method OneOf.options(valuegetter: str | typing.Callable[[typing.Any], typing.Any]=…) -> typing.Iterable[tuple[typing.Any, str]]
  • added: class And(Validator)
  • added: class ContainsNoneOf(NoneOf)
  • added: constructor And(*validators: types.Validator, error: str | None=…)
  • added: field And.default_error_message
  • added: field ContainsNoneOf.default_message
  • added: field Range.message_gt
  • added: field Range.message_gte
  • added: field Range.message_lt
  • added: field Range.message_lte
  • added: field Validator.error: str | None
  • removed: class ChangedInMarshmallow3Warning(FutureWarning)
  • removed: class RemovedInMarshmallow3Warning(DeprecationWarning)
  • removed: function unused_and_removed_in_ma3(f)
  • added: class ChangedInMarshmallow4Warning(Marshmallow4Warning)
  • added: class Marshmallow4Warning(DeprecationWarning)
  • added: class RemovedInMarshmallow4Warning(Marshmallow4Warning)