Upgrading marshmallow 2 to 3
Breaking2.21.0 → 3.26.2Breaking53Security2Platform9Deprecated14New38Changed35Fixed86Other40
SecurityMedium · CVSS 5.3Fixes CVE-2025-68480 by merging error store messages without rebuilding collections.GHSA-428g-f7cq-pgp5 · CVE-2025-68480 ↗
BreakingUpgrade verdict
53 breaking changes and 9 platform requirement changes and 2 security fixes.
In plain terms
- 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.
Must act 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).
What you must change
Breaking53
Removes UUID validation from fields.UUID for consistency with other fields.
fields.UUIDValidation no longer occurs on serialization, significantly improving serialization performance.
DateTime no longer affects timezone information on serialization and deserialization.
DateTimeList no longer wraps single values in a list on serialization.
ListRemoves LocalDateTime.
LocalDateTimeRemoves marshmallow.utils.utc; use datetime.timezone.utc instead.
marshmallow.utils.utcdatetime.timezone.utcRenames 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_fieldRemoves special-casing in fields.List and fields.Tuple for accessing nested attributes; use fields.List(fields.Pluck(...)) instead.
fields.Listfields.Tuplefields.PluckRemoves fields.FormattedString; use fields.Function or fields.Method instead.
fields.FormattedStringfields.Functionfields.MethodRemoves 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_isoRemoves unused marshmallow.compat.string_types.
marshmallow.compat.string_typesExtra keyword arguments passed to
ValidationError in validators are no longer passed to the final ValidationError raised upon validation completion.ValidationErrorRenames DateTime's dateformat Meta option to datetimeformat; dateformat now applies to Date.
DateTimedateformatdatetimeformatDateRemoves support for passing a string as only to fields.Nested; use fields.Pluck instead.
fields.Nestedfields.PluckonlyFloat gains an allow_nan parameter defaulting to False, so nan and inf are no longer serialized or deserialized by default.
Floatallow_nanThe unknown option now defaults to RAISE.
unknownRAISEPre/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.missingdefaultSchemas are always strict and the strict parameter is removed.
strictEmail and URL fields no longer validate on serialization, making them consistent with other fields and improving serialization performance.
EmailURLNumber fields no longer accept booleans as valid input.
Numberskip_on_field_errors defaults to True for validates_schema.
skip_on_field_errorsvalidates_schemaBackwards-incompatible: fields.Method and fields.Function no longer swallow AttributeErrors.
fields.Methodfields.FunctionAttributeErrorsberealBackwards-incompatible: validators.Length is no longer a subclass of validators.Range.
validators.Lengthvalidators.Rangedeckar01Backwards-incompatible: utils.get_func_args no longer returns bound arguments.
utils.get_func_argsinspect.signaturedeckar01Remove func parameter of fields.Function.
funcfields.Functionmethod_namefields.MethodserializeMakes marshmallow.validate.Validator an abstract base class.
marshmallow.validate.ValidatorDecorated 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_schemamanypartialUses keyword-only arguments.
Changes ordering of keys and values arguments to fields.Dict, incompatible with previous 3.x versions.
fields.DictRemoves the internal
marshmallow.marshalling module.marshmallow.marshallingRaises a
ValueError when the missing parameter is passed for required fields.missingrequiredValueErrorReworks the ValidationError API to expect a single field name, merging error structures in the final ValidationError raised when validation completes.
ValidationErrorRequires _serialize and _deserialize on all fields.Field subclasses to accept **kwargs.
fields.Field_serialize_deserialize**kwargsRemoves the prefix parameter from the Schema class; use a @post_dump method instead.
prefixSchema@post_dumpNested 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.onlyexcludeValueErrorRemoves `
ValidationError.fields; access field instances from Schema.fields` instead.ValidationError.fieldsSchema.fieldsAdds a data_key parameter to fields that specifies the key in input and output data, replacing load_from and dump_to.
data_keyload_fromdump_toWith 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_dataStops recursively checking nested required fields when the Nested field's key is missing, reverting PR 235.
NestedChanges error message collection for the Dict field, incompatible with previous 3.0.0bX versions.
DictField name is not checked when load_from is specified.
load_fromvalidate.ContainsOnly now allows empty and duplicate values.
validate.ContainsOnlyBackwards-incompatible: Don't unconditionally call callable attributes (, reverts ). Thanks mirko for the suggestion.
mirkoRemove __error_handler__, accessor, @Schema.error_handler, and @Schema.accessor.
__error_handler____accessor__@Schema.error_handler@Schema.accessorSchema.handle_errorSchema.get_attributeRemove extra parameter from Schema.
extraSchema@post_dumpSchema.handle_error receives many and partial as keyword arguments.
Schema.handle_errorRaises ValueError on Schema instantiation when attribute or data_key collide.
SchemaValueErrorattributedata_keyWhen 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().dumpSchema().load(None) raises a ValidationError.
Schema().loadValidationErrorBackwards-incompatible: Change the signature of utils.get_value and Schema.get_attribute for consistency with Python builtins (e.g. getattr).
utils.get_valueSchema.get_attributegetattrstasdeckar01Security2
Fixes CVE-2025-68480 by merging error store messages without rebuilding collections.
Medium · CVSS 5.3In 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.
Deprecations to plan for
Deprecated14
Deprecates the ordered class Meta option; field order is already preserved by default.
orderedmarshmallow.Schema.Metamarshmallow.Schema.dict_classcollections.OrderedDictRestores marshmallow.base.SchemaABC for backwards compatibility, deprecated and slated for removal in marshmallow 4.
marshmallow.base.SchemaABCmarshmallow.schema.SchemaCustom validators should raise ValidationError for invalid values; returning False is no longer supported.
ValidationErrormarshmallow.exceptions.ValidationErrorDeprecates the context parameter of Schema; use contextVars.ContextVar to pass context data instead.
Schemamarshmallow.schema.SchemacontextcontextVars.ContextVarField, Mapping, and Number should no longer be used as fields within schemas; use their subclasses instead.
Fieldmarshmallow.fields.FieldMappingmarshmallow.fields.MappingNumbermarshmallow.fields.NumberDeprecates 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_defaultDeprecates passing field metadata via keyword arguments, to be removed in marshmallow 4; use the explicit metadata= argument instead.
metadataDeprecates marshmallow.pprint, which will be removed in marshmallow 4.
marshmallow.pprintPassing the string "self" to fields.Nested is deprecated; use a callable instead.
fields.Nestedfields.ListDeprecates Field.fail in favor of Field.make_error.
Field.failField.make_errorWarns that the default for `
unknown will change to RAISE` in the next release.unknownRAISEDeprecates utils.from_iso in favor of utils.from_iso_datetime, a backwards-incompatible change.
utils.from_isoutils.from_iso_datetimeDeprecates the json_module option in favor of render_module.
json_modulerender_moduleAPI changes
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)