{ "info": { "author": "Alexander Tikhonov", "author_email": "random.gauss@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10" ], "description": "# mashumaro (\u30de\u30b7\u30e5\u30de\u30ed)\n\n> **mashumaro** is a fast and well tested serialization framework on top of dataclasses.\n\n[![Build Status](https://github.com/Fatal1ty/mashumaro/workflows/tests/badge.svg)](https://github.com/Fatal1ty/mashumaro/actions)\n[![Coverage Status](https://coveralls.io/repos/github/Fatal1ty/mashumaro/badge.svg?branch=master)](https://coveralls.io/github/Fatal1ty/mashumaro?branch=master)\n[![Latest Version](https://img.shields.io/pypi/v/mashumaro.svg)](https://pypi.python.org/pypi/mashumaro)\n[![Python Version](https://img.shields.io/pypi/pyversions/mashumaro.svg)](https://pypi.python.org/pypi/mashumaro)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n\nWhen using dataclasses, you often need to dump and load objects according to\nthe described scheme.\nThis framework not only adds this ability to serialize in different formats,\nbut also makes **serialization rapidly**.\n\nTable of contents\n--------------------------------------------------------------------------------\n* [Installation](#installation)\n* [Changelog](#changelog)\n* [Supported serialization formats](#supported-serialization-formats)\n* [Supported field types](#supported-field-types)\n* [Usage example](#usage-example)\n* [How does it work?](#how-does-it-work)\n* [Benchmark](#benchmark)\n* [Serialization mixins](#serialization-mixins)\n * [`DataClassDictMixin`](#dataclassdictmixin)\n * [`DataClassJSONMixin`](#dataclassjsonmixin)\n * [`DataClassMessagePackMixin`](#dataclassmessagepackmixin)\n * [`DataClassYAMLMixin`](#dataclassyamlmixin)\n* [Customization](#customization)\n * [`SerializableType` interface](#serializabletype-interface)\n * [Field options](#field-options)\n * [`serialize` option](#serialize-option)\n * [`deserialize` option](#deserialize-option)\n * [`serialization_strategy` option](#serialization_strategy-option)\n * [`alias` option](#alias-option)\n * [Config options](#config-options)\n * [`debug` config option](#debug-config-option)\n * [`code_generation_options` config option](#code_generation_options-config-option)\n * [`serialization_strategy` config option](#serialization_strategy-config-option)\n * [`aliases` config option](#aliases-config-option)\n * [`serialize_by_alias` config option](#serialize_by_alias-config-option)\n * [`namedtuple_as_dict` config option](#namedtuple_as_dict-config-option)\n * [`allow_postponed_evaluation` config option](#allow_postponed_evaluation-config-option)\n * [`dialect` config option](#dialect-config-option)\n * [Passing field values as is](#passing-field-values-as-is)\n * [Dialects](#dialects)\n * [`serialization_strategy` dialect option](#serialization_strategy-dialect-option)\n * [Changing the default dialect](#changing-the-default-dialect)\n * [Code generation options](#code-generation-options)\n * [Add `omit_none` keyword argument](#add-omit_none-keyword-argument)\n * [Add `by_alias` keyword argument](#add-by_alias-keyword-argument)\n * [Add `dialect` keyword argument](#add-dialect-keyword-argument)\n * [User-defined generic types](#user-defined-generic-types)\n * [User-defined generic dataclasses](#user-defined-generic-dataclasses)\n * [Generic dataclasses as field types](#generic-dataclasses-as-field-types)\n * [`GenericSerializableType` interface](#genericserializabletype-interface)\n * [Serialization hooks](#serialization-hooks)\n * [Before deserialization](#before-deserialization)\n * [After deserialization](#after-deserialization)\n * [Before serialization](#before-serialization)\n * [After serialization](#after-serialization)\n\nInstallation\n--------------------------------------------------------------------------------\n\nUse pip to install:\n```shell\n$ pip install mashumaro\n```\n\nChangelog\n--------------------------------------------------------------------------------\n\nThis project follows the principles of [Semantic Versioning](https://semver.org). \nChangelog is available on [GitHub Releases page](https://github.com/Fatal1ty/mashumaro/releases).\n\nSupported serialization formats\n--------------------------------------------------------------------------------\n\nThis framework adds methods for dumping to and loading from the\nfollowing formats:\n\n* [plain dict](https://docs.python.org/3/library/stdtypes.html#mapping-types-dict)\n* [JSON](https://www.json.org)\n* [YAML](https://yaml.org)\n* [MessagePack](https://msgpack.org)\n\nPlain dict can be useful when you need to pass a dict object to a\nthird-party library, such as a client for MongoDB.\n\nSupported field types\n--------------------------------------------------------------------------------\n\nThere is support for generic types from the standard [`typing`](https://docs.python.org/3/library/typing.html) module:\n* [`List`](https://docs.python.org/3/library/typing.html#typing.List)\n* [`Tuple`](https://docs.python.org/3/library/typing.html#typing.Tuple)\n* [`NamedTuple`](https://docs.python.org/3/library/typing.html#typing.NamedTuple)\n* [`Set`](https://docs.python.org/3/library/typing.html#typing.Set)\n* [`FrozenSet`](https://docs.python.org/3/library/typing.html#typing.FrozenSet)\n* [`Deque`](https://docs.python.org/3/library/typing.html#typing.Deque)\n* [`Dict`](https://docs.python.org/3/library/typing.html#typing.Dict)\n* [`OrderedDict`](https://docs.python.org/3/library/typing.html#typing.OrderedDict)\n* [`TypedDict`](https://docs.python.org/3/library/typing.html#typing.TypedDict)\n* [`Mapping`](https://docs.python.org/3/library/typing.html#typing.Mapping)\n* [`MutableMapping`](https://docs.python.org/3/library/typing.html#typing.MutableMapping)\n* [`Counter`](https://docs.python.org/3/library/typing.html#typing.Counter)\n* [`ChainMap`](https://docs.python.org/3/library/typing.html#typing.ChainMap)\n* [`Sequence`](https://docs.python.org/3/library/typing.html#typing.Sequence)\n\nfor standard generic types on [PEP 585](https://www.python.org/dev/peps/pep-0585/) compatible Python (3.9+):\n* [`list`](https://docs.python.org/3/library/stdtypes.html#list)\n* [`tuple`](https://docs.python.org/3/library/stdtypes.html#tuple)\n* [`namedtuple`](https://docs.python.org/3/library/collections.html#collections.namedtuple)\n* [`set`](https://docs.python.org/3/library/stdtypes.html#set)\n* [`frozenset`](https://docs.python.org/3/library/stdtypes.html#frozenset)\n* [`collections.abc.Set`](https://docs.python.org/3/library/collections.abc.html#collections.abc.Set)\n* [`collections.abc.MutableSet`](https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableSet)\n* [`collections.deque`](https://docs.python.org/3/library/collections.html#collections.deque)\n* [`dict`](https://docs.python.org/3/library/stdtypes.html#dict)\n* [`collections.OrderedDict`](https://docs.python.org/3/library/collections.html#collections.OrderedDict)\n* [`collections.abc.Mapping`](https://docs.python.org/3/library/collections.abc.html#collections.abc.Mapping)\n* [`collections.abc.MutableMapping`](https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableMapping)\n* [`collections.Counter`](https://docs.python.org/3/library/collections.html#collections.Counter)\n* [`collections.ChainMap`](https://docs.python.org/3/library/collections.html#collections.ChainMap)\n* [`collections.abc.Sequence`](https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence)\n* [`collections.abc.MutableSequence`](https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableSequence)\n\nfor special primitives from the [`typing`](https://docs.python.org/3/library/typing.html) module:\n* [`Any`](https://docs.python.org/3/library/typing.html#typing.Any)\n* [`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional)\n* [`Union`](https://docs.python.org/3/library/typing.html#typing.Union)\n* [`TypeVar`](https://docs.python.org/3/library/typing.html#typing.TypeVar)\n* [`NewType`](https://docs.python.org/3/library/typing.html#newtype)\n* [`Annotated`](https://docs.python.org/3/library/typing.html#typing.Annotated)\n* [`Literal`](https://docs.python.org/3/library/typing.html#typing.Literal)\n\nfor standard interpreter types from [`types`](https://docs.python.org/3/library/types.html#standard-interpreter-types) module:\n* [`NoneType`](https://docs.python.org/3/library/types.html#types.NoneType)\n* [`UnionType`](https://docs.python.org/3/library/types.html#types.UnionType)\n\nfor enumerations based on classes from the standard [`enum`](https://docs.python.org/3/library/enum.html) module:\n* [`Enum`](https://docs.python.org/3/library/enum.html#enum.Enum)\n* [`IntEnum`](https://docs.python.org/3/library/enum.html#enum.IntEnum)\n* [`Flag`](https://docs.python.org/3/library/enum.html#enum.Flag)\n* [`IntFlag`](https://docs.python.org/3/library/enum.html#enum.IntFlag)\n\nfor common built-in types:\n* [`int`](https://docs.python.org/3/library/functions.html#int)\n* [`float`](https://docs.python.org/3/library/functions.html#float)\n* [`bool`](https://docs.python.org/3/library/stdtypes.html#bltin-boolean-values)\n* [`str`](https://docs.python.org/3/library/stdtypes.html#str)\n* [`bytes`](https://docs.python.org/3/library/stdtypes.html#bytes)\n* [`bytearray`](https://docs.python.org/3/library/stdtypes.html#bytearray)\n\nfor built-in datetime oriented types (see [more](#deserialize-option) details):\n* [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime)\n* [`date`](https://docs.python.org/3/library/datetime.html#datetime.date)\n* [`time`](https://docs.python.org/3/library/datetime.html#datetime.time)\n* [`timedelta`](https://docs.python.org/3/library/datetime.html#datetime.timedelta)\n* [`timezone`](https://docs.python.org/3/library/datetime.html#datetime.timezone)\n* [`ZoneInfo`](https://docs.python.org/3/library/zoneinfo.html#zoneinfo.ZoneInfo)\n\nfor pathlike types:\n* [`PurePath`](https://docs.python.org/3/library/pathlib.html#pathlib.PurePath)\n* [`Path`](https://docs.python.org/3/library/pathlib.html#pathlib.Path)\n* [`PurePosixPath`](https://docs.python.org/3/library/pathlib.html#pathlib.PurePosixPath)\n* [`PosixPath`](https://docs.python.org/3/library/pathlib.html#pathlib.PosixPath)\n* [`PureWindowsPath`](https://docs.python.org/3/library/pathlib.html#pathlib.PureWindowsPath)\n* [`WindowsPath`](https://docs.python.org/3/library/pathlib.html#pathlib.WindowsPath)\n* [`os.PathLike`](https://docs.python.org/3/library/os.html#os.PathLike)\n\n\nfor other less popular built-in types:\n* [`uuid.UUID`](https://docs.python.org/3/library/uuid.html#uuid.UUID)\n* [`decimal.Decimal`](https://docs.python.org/3/library/decimal.html#decimal.Decimal)\n* [`fractions.Fraction`](https://docs.python.org/3/library/fractions.html#fractions.Fraction)\n* [`ipaddress.IPv4Address`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Address)\n* [`ipaddress.IPv6Address`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv6Address)\n* [`ipaddress.IPv4Network`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Network)\n* [`ipaddress.IPv6Network`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv6Network)\n* [`ipaddress.IPv4Interface`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Interface)\n* [`ipaddress.IPv6Interface`](https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv6Interface)\n\nfor backported types from [`typing-extensions`](https://github.com/python/typing/blob/master/typing_extensions/README.rst):\n* [`OrderedDict`](https://docs.python.org/3/library/typing.html#typing.OrderedDict)\n* [`TypedDict`](https://docs.python.org/3/library/typing.html#typing.TypedDict)\n* [`Annotated`](https://docs.python.org/3/library/typing.html#typing.Annotated)\n* [`Literal`](https://docs.python.org/3/library/typing.html#typing.Literal)\n\nfor arbitrary types:\n* [user-defined classes](#serializabletype-interface)\n* [user-defined generic types](#user-defined-generic-types)\n\nUsage example\n--------------------------------------------------------------------------------\n\n```python\nfrom enum import Enum\nfrom typing import List\nfrom dataclasses import dataclass\nfrom mashumaro.mixins.json import DataClassJSONMixin\n\nclass Currency(Enum):\n USD = \"USD\"\n EUR = \"EUR\"\n\n@dataclass\nclass CurrencyPosition(DataClassJSONMixin):\n currency: Currency\n balance: float\n\n@dataclass\nclass StockPosition(DataClassJSONMixin):\n ticker: str\n name: str\n balance: int\n\n@dataclass\nclass Portfolio(DataClassJSONMixin):\n currencies: List[CurrencyPosition]\n stocks: List[StockPosition]\n\nmy_portfolio = Portfolio(\n currencies=[\n CurrencyPosition(Currency.USD, 238.67),\n CurrencyPosition(Currency.EUR, 361.84),\n ],\n stocks=[\n StockPosition(\"AAPL\", \"Apple\", 10),\n StockPosition(\"AMZN\", \"Amazon\", 10),\n ]\n)\n\njson_string = my_portfolio.to_json()\nPortfolio.from_json(json_string) # same as my_portfolio\n```\n\nHow does it work?\n--------------------------------------------------------------------------------\n\nThis framework works by taking the schema of the data and generating a\nspecific parser and builder for exactly that schema.\nThis is much faster than inspection of field types on every call of parsing or\nbuilding at runtime.\n\nBenchmark\n--------------------------------------------------------------------------------\n\n* macOS 11.5.2 Big Sur\n* Apple M1\n* 16GB RAM\n* Python 3.9.1\n\nLoad and dump [sample data](https://github.com/Fatal1ty/mashumaro/blob/master/benchmark/sample.py) 1.000 times in 5 runs.\nThe following figures show the best overall time in each case.\n\n\n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n
FrameworkFrom dictTo dict
TimeSlowdown factorTimeSlowdown factor
mashumaro0.040961x0.027411x
cattrs0.073071.78x0.050621.85x
pydantic0.248476.07x0.122924.48x
marshmallow0.292057.13x0.093103.4x
dataclasses\u2014\u20140.225838.24x
dacite0.9155322.35x\u2014\u2014
\n\nTo run benchmark in your environment:\n```bash\ngit clone git@github.com:Fatal1ty/mashumaro.git\ncd mashumaro\npython3 -m venv env && source env/bin/activate\npip install -e .\npip install -r requirements-dev.txt\npython benchmark/run.py\n```\n\nSerialization mixins\n--------------------------------------------------------------------------------\n\nMashumaro provides mixins for each serialization format.\n\n#### [`DataClassDictMixin`](https://github.com/Fatal1ty/mashumaro/blob/master/mashumaro/mixins/dict.py#L9)\n\nCan be imported in two ways:\n```python\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.mixins.dict import DataClassDictMixin\n```\n\nThe core mixin that adds serialization functionality to a dataclass.\nThis mixin is a base class for all other serialization format mixins.\nIt adds methods `from_dict` and `to_dict`.\n\n#### [`DataClassJSONMixin`](https://github.com/Fatal1ty/mashumaro/blob/master/mashumaro/mixins/json.py#L22)\n\nCan be imported as:\n```python\nfrom mashumaro.mixins.json import DataClassJSONMixin\n```\n\nThis mixins adds json serialization functionality to a dataclass.\nIt adds methods `from_json` and `to_json`.\n\n#### [`DataClassMessagePackMixin`](https://github.com/Fatal1ty/mashumaro/blob/master/mashumaro/mixins/msgpack.py#L26)\n\nCan be imported as:\n```python\nfrom mashumaro.mixins.msgpack import DataClassMessagePackMixin\n```\n\nThis mixins adds MessagePack serialization functionality to a dataclass.\nIt adds methods `from_msgpack` and `to_msgpack`.\n\nIn order to use this mixin, the [`msgpack`](https://pypi.org/project/msgpack/) package must be installed.\nYou can install it manually or using an extra option for mashumaro:\n\n```shell\npip install mashumaro[msgpack]\n```\n\n#### [`DataClassYAMLMixin`](https://github.com/Fatal1ty/mashumaro/blob/master/mashumaro/mixins/yaml.py#L34)\n\nCan be imported as:\n```python\nfrom mashumaro.mixins.yaml import DataClassYAMLMixin\n```\n\nThis mixins adds YAML serialization functionality to a dataclass.\nIt adds methods `from_yaml` and `to_yaml`.\n\nIn order to use this mixin, the [`pyyaml`](https://pypi.org/project/PyYAML/) package must be installed.\nYou can install it manually or using an extra option for mashumaro:\n\n```shell\npip install mashumaro[yaml]\n```\n\nCustomization\n--------------------------------------------------------------------------------\n\n### SerializableType interface\n\nIf you already have a separate custom class, and you want to serialize\ninstances of it with *mashumaro*, you can achieve this by implementing\n`SerializableType` interface:\n\n```python\nfrom typing import Dict\nfrom datetime import datetime\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.types import SerializableType\n\nclass DateTime(datetime, SerializableType):\n def _serialize(self) -> Dict[str, int]:\n return {\n \"year\": self.year,\n \"month\": self.month,\n \"day\": self.day,\n \"hour\": self.hour,\n \"minute\": self.minute,\n \"second\": self.second,\n }\n\n @classmethod\n def _deserialize(cls, value: Dict[str, int]) -> 'DateTime':\n return DateTime(\n year=value['year'],\n month=value['month'],\n day=value['day'],\n hour=value['hour'],\n minute=value['minute'],\n second=value['second'],\n )\n\n\n@dataclass\nclass Holiday(DataClassDictMixin):\n when: DateTime = DateTime.now()\n\n\nnew_year = Holiday(when=DateTime(2019, 1, 1, 12))\ndictionary = new_year.to_dict()\n# {'x': {'year': 2019, 'month': 1, 'day': 1, 'hour': 0, 'minute': 0, 'second': 0}}\nassert Holiday.from_dict(dictionary) == new_year\n```\n\nIf you have a custom [generic type](https://docs.python.org/3/library/typing.html#user-defined-generic-types)\nand are looking for a generic version of such an interface, read [this](#genericserializabletype-interface).\n\n### Field options\n\nIn some cases creating a new class just for one little thing could be\nexcessive. Moreover, you may need to deal with third party classes that you are\nnot allowed to change. You can use[`dataclasses.field`](https://docs.python.org/3/library/dataclasses.html#dataclasses.field)\nfunction as a default field value to configure some serialization aspects\nthrough its `metadata` parameter. Next section describes all supported options\nto use in `metadata` mapping.\n\n#### `serialize` option\n\nThis option allows you to change the serialization method. When using\nthis option, the serialization behaviour depends on what type of value the\noption has. It could be either `Callable[[Any], Any]` or `str`.\n\nA value of type `Callable[[Any], Any]` is a generic way to specify any callable\nobject like a function, a class method, a class instance method, an instance\nof a callable class or even a lambda function to be called for serialization.\n\nA value of type `str` sets a specific engine for serialization. Keep in mind\nthat all possible engines depend on the field type that this option is used\nwith. At this moment there are next serialization engines to choose from:\n\n| Applicable field types | Supported engines | Description |\n|:-------------------------- |:-------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `NamedTuple`, `namedtuple` | `as_list`, `as_dict` | How to pack named tuples. By default `as_list` engine is used that means your named tuple class instance will be packed into a list of its values. You can pack it into a dictionary using `as_dict` engine. |\n\nIn addition, you can pass a field value as is without changes using\n[`pass_through`](#passing-field-values-as-is).\n\nExample:\n\n```python\nfrom datetime import datetime\nfrom dataclasses import dataclass, field\nfrom typing import NamedTuple\nfrom mashumaro import DataClassDictMixin\n\nclass MyNamedTuple(NamedTuple):\n x: int\n y: float\n\n@dataclass\nclass A(DataClassDictMixin):\n dt: datetime = field(\n metadata={\n \"serialize\": lambda v: v.strftime('%Y-%m-%d %H:%M:%S')\n }\n )\n t: MyNamedTuple = field(metadata={\"serialize\": \"as_dict\"})\n```\n\n#### `deserialize` option\n\nThis option allows you to change the deserialization method. When using\nthis option, the deserialization behaviour depends on what type of value the\noption has. It could be either `Callable[[Any], Any]` or `str`.\n\nA value of type `Callable[[Any], Any]` is a generic way to specify any callable\nobject like a function, a class method, a class instance method, an instance\nof a callable class or even a lambda function to be called for deserialization.\n\nA value of type `str` sets a specific engine for deserialization. Keep in mind\nthat all possible engines depend on the field type that this option is used\nwith. At this moment there are next deserialization engines to choose from:\n\n| Applicable field types | Supported engines | Description |\n|:---------------------------|:------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `datetime`, `date`, `time` | [`ciso8601`](https://github.com/closeio/ciso8601#supported-subset-of-iso-8601), [`pendulum`](https://github.com/sdispater/pendulum) | How to parse datetime string. By default native [`fromisoformat`](https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat) of corresponding class will be used for `datetime`, `date` and `time` fields. It's the fastest way in most cases, but you can choose an alternative. |\n| `NamedTuple`, `namedtuple` | `as_list`, `as_dict` | How to unpack named tuples. By default `as_list` engine is used that means your named tuple class instance will be created from a list of its values. You can unpack it from a dictionary using `as_dict` engine. |\n\nIn addition, you can pass a field value as is without changes using\n[`pass_through`](#passing-field-values-as-is).\n\nExample:\n\n```python\nfrom datetime import datetime\nfrom dataclasses import dataclass, field\nfrom typing import List, NamedTuple\nfrom mashumaro import DataClassDictMixin\nimport ciso8601\nimport dateutil\n\nclass MyNamedTuple(NamedTuple):\n x: int\n y: float\n\n@dataclass\nclass A(DataClassDictMixin):\n x: datetime = field(\n metadata={\"deserialize\": \"pendulum\"}\n )\n\nclass B(DataClassDictMixin):\n x: datetime = field(\n metadata={\"deserialize\": ciso8601.parse_datetime_as_naive}\n )\n\n@dataclass\nclass C(DataClassDictMixin):\n dt: List[datetime] = field(\n metadata={\n \"deserialize\": lambda l: list(map(dateutil.parser.isoparse, l))\n }\n )\n\n@dataclass\nclass D(DataClassDictMixin):\n x: MyNamedTuple = field(metadata={\"deserialize\": \"as_dict\"})\n```\n\n#### `serialization_strategy` option\n\nThis option is useful when you want to change the serialization behaviour\nfor a class depending on some defined parameters. For this case you can create\nthe special class implementing `SerializationStrategy` interface:\n\n```python\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.types import SerializationStrategy\n\nclass FormattedDateTime(SerializationStrategy):\n def __init__(self, fmt):\n self.fmt = fmt\n\n def serialize(self, value: datetime) -> str:\n return value.strftime(self.fmt)\n\n def deserialize(self, value: str) -> datetime:\n return datetime.strptime(value, self.fmt)\n\n@dataclass\nclass DateTimeFormats(DataClassDictMixin):\n short: datetime = field(\n metadata={\n \"serialization_strategy\": FormattedDateTime(\n fmt=\"%d%m%Y%H%M%S\",\n )\n }\n )\n verbose: datetime = field(\n metadata={\n \"serialization_strategy\": FormattedDateTime(\n fmt=\"%A %B %d, %Y, %H:%M:%S\",\n )\n }\n )\n\nformats = DateTimeFormats(\n short=datetime(2019, 1, 1, 12),\n verbose=datetime(2019, 1, 1, 12),\n)\ndictionary = formats.to_dict()\n# {'short': '01012019120000', 'verbose': 'Tuesday January 01, 2019, 12:00:00'}\nassert DateTimeFormats.from_dict(dictionary) == formats\n```\n\nIn addition, you can pass a field value as is without changes using\n[`pass_through`](#passing-field-values-as-is).\n\n#### `alias` option\n\nIn some cases it's better to have different names for a field in your class and\nin its serialized view. For example, a third-party legacy API you are working\nwith might operate with camel case style, but you stick to snake case style in\nyour code base. Or even you want to load data with keys that are invalid\nidentifiers in Python. This problem is easily solved by using aliases:\n\n```python\nfrom dataclasses import dataclass, field\nfrom mashumaro import DataClassDictMixin, field_options\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n a: int = field(metadata=field_options(alias=\"FieldA\"))\n b: int = field(metadata=field_options(alias=\"#invalid\"))\n\nx = DataClass.from_dict({\"FieldA\": 1, \"#invalid\": 2}) # DataClass(a=1, b=2)\nx.to_dict() # {\"a\": 1, \"b\": 2} # no aliases on serialization by default\n```\n\nIf you want to write all the field aliases in one place there is\n[such a config option](#aliases-config-option).\n\nIf you want to serialize all the fields by aliases you have two options to do so:\n* [`serialize_by_alias` config option](#serialize_by_alias-config-option)\n* [`by_alias` keyword argument in `to_dict` method](#add-by_alias-keyword-argument)\n\nIt's hard to imagine when it might be necessary to serialize only specific\nfields by alias, but such functionality is easily added to the library. Open\nthe issue if you need it.\n\nIf you don't want to remember the names of the options you can use\n`field_options` helper function:\n\n```python\nfrom dataclasses import dataclass, field\nfrom mashumaro import DataClassDictMixin, field_options\n\n@dataclass\nclass A(DataClassDictMixin):\n x: int = field(\n metadata=field_options(\n serialize=str,\n deserialize=int,\n ...\n )\n )\n```\n\nMore options are on the way. If you know which option would be useful for many,\nplease don't hesitate to create an issue or pull request.\n\n### Config options\n\nIf inheritance is not an empty word for you, you'll fall in love with the\n`Config` class. You can register `serialize` and `deserialize` methods, define\ncode generation options and other things just in one place. Or in some\nclasses in different ways if you need flexibility. Inheritance is always on the\nfirst place.\n\nThere is a base class `BaseConfig` that you can inherit for the sake of\nconvenience, but it's not mandatory.\n\nIn the following example you can see how\nthe `debug` flag is changed from class to class: `ModelA` will have debug mode enabled but\n`ModelB` will not.\n\n```python\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import BaseConfig\n\nclass BaseModel(DataClassDictMixin):\n class Config(BaseConfig):\n debug = True\n\nclass ModelA(BaseModel):\n a: int\n\nclass ModelB(BaseModel):\n b: int\n\n class Config(BaseConfig):\n debug = False\n```\n\nNext section describes all supported options to use in the config.\n\n#### `debug` config option\n\nIf you enable the `debug` option the generated code for your data class\nwill be printed.\n\n#### `code_generation_options` config option\n\nSome users may need functionality that wouldn't exist without extra cost such\nas valuable cpu time to execute additional instructions. Since not everyone\nneeds such instructions, they can be enabled by a constant in the list,\nso the fastest basic behavior of the library will always remain by default.\nThe following table provides a brief overview of all the available constants\ndescribed below.\n\n| Constant | Description |\n|:----------------------------------------------------------------|:---------------------------------------------------------------------------|\n| [`TO_DICT_ADD_OMIT_NONE_FLAG`](#add-omit_none-keyword-argument) | Adds `omit_none` keyword-only argument to `to_dict` method. |\n| [`TO_DICT_ADD_BY_ALIAS_FLAG`](#add-by_alias-keyword-argument) | Adds `by_alias` keyword-only argument to `to_dict` method. |\n| [`ADD_DIALECT_SUPPORT`](#add-dialect-keyword-argument) | Adds `dialect` keyword-only argument to `from_dict` and `to_dict` methods. |\n\n#### `serialization_strategy` config option\n\nYou can register custom `SerializationStrategy`, `serialize` and `deserialize`\nmethods for specific types just in one place. It could be configured using\na dictionary with types as keys. The value could be either a\n`SerializationStrategy` instance or a dictionary with `serialize` and\n`deserialize` values with the same meaning as in the\n[field options](#field-options).\n\n```python\nfrom dataclasses import dataclass\nfrom datetime import datetime, date\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import BaseConfig\nfrom mashumaro.types import SerializationStrategy\n\nclass FormattedDateTime(SerializationStrategy):\n def __init__(self, fmt):\n self.fmt = fmt\n\n def serialize(self, value: datetime) -> str:\n return value.strftime(self.fmt)\n\n def deserialize(self, value: str) -> datetime:\n return datetime.strptime(value, self.fmt)\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n\n datetime: datetime\n date: date\n\n class Config(BaseConfig):\n serialization_strategy = {\n datetime: FormattedDateTime(\"%Y\"),\n date: {\n # you can use specific str values for datetime here as well\n \"deserialize\": \"pendulum\",\n \"serialize\": date.isoformat,\n },\n }\n\ninstance = DataClass.from_dict({\"datetime\": \"2021\", \"date\": \"2021\"})\n# DataClass(datetime=datetime.datetime(2021, 1, 1, 0, 0), date=Date(2021, 1, 1))\ndictionary = instance.to_dict()\n# {'datetime': '2021', 'date': '2021-01-01'}\n```\n\n#### `aliases` config option\n\nSometimes it's better to write the field aliases in one place. You can mix\naliases here with [aliases in the field options](#alias-option), but the last ones will always\ntake precedence.\n\n```python\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import BaseConfig\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n a: int\n b: int\n\n class Config(BaseConfig):\n aliases = {\n \"a\": \"FieldA\",\n \"b\": \"FieldB\",\n }\n\nDataClass.from_dict({\"FieldA\": 1, \"FieldB\": 2}) # DataClass(a=1, b=2)\n```\n\n#### `serialize_by_alias` config option\n\nAll the fields with [aliases](#alias-option) will be serialized by them by\ndefault when this option is enabled. You can mix this config option with\n[`by_alias`](#add-by_alias-keyword-argument) keyword argument.\n\n```python\nfrom dataclasses import dataclass, field\nfrom mashumaro import DataClassDictMixin, field_options\nfrom mashumaro.config import BaseConfig\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n field_a: int = field(metadata=field_options(alias=\"FieldA\"))\n\n class Config(BaseConfig):\n serialize_by_alias = True\n\nDataClass(field_a=1).to_dict() # {'FieldA': 1}\n```\n\n#### `namedtuple_as_dict` config option\n\nDataclasses are a great way to declare and use data models. But it's not the only way.\nPython has a typed version of [namedtuple](https://docs.python.org/3/library/collections.html#collections.namedtuple)\ncalled [NamedTuple](https://docs.python.org/3/library/typing.html#typing.NamedTuple)\nwhich looks similar to dataclasses:\n\n```python\nfrom typing import NamedTuple\n\nclass Point(NamedTuple):\n x: int\n y: int\n```\n\nthe same with a dataclass will look like this:\n\n```python\nfrom dataclasses import dataclass\n\n@dataclass\nclass Point:\n x: int\n y: int\n```\n\nAt first glance, you can use both options. But imagine that you need to create\na bunch of instances of the `Point` class. Due to how dataclasses work you will\nhave more memory consumption compared to named tuples. In such a case it could\nbe more appropriate to use named tuples.\n\nBy default, all named tuples are packed into lists. But with `namedtuple_as_dict`\noption you have a drop-in replacement for dataclasses:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import List, NamedTuple\nfrom mashumaro import DataClassDictMixin\n\nclass Point(NamedTuple):\n x: int\n y: int\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n points: List[Point]\n\n class Config:\n namedtuple_as_dict = True\n\nobj = DataClass.from_dict({\"points\": [{\"x\": 0, \"y\": 0}, {\"x\": 1, \"y\": 1}]})\nprint(obj.to_dict()) # {\"points\": [{\"x\": 0, \"y\": 0}, {\"x\": 1, \"y\": 1}]}\n```\n\nIf you want to serialize only certain named tuple fields as dictionaries, you\ncan use the corresponding [serialization](#serialize-option) and\n[deserialization](#deserialize-option) engines.\n\n#### `allow_postponed_evaluation` config option\n\n[PEP 563](https://www.python.org/dev/peps/pep-0563/) solved the problem of forward references by postponing the evaluation\nof annotations, so you can write the following code:\n\n```python\nfrom __future__ import annotations\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\n\n@dataclass\nclass A(DataClassDictMixin):\n x: B\n\n@dataclass\nclass B(DataClassDictMixin):\n y: int\n\nobj = A.from_dict({'x': {'y': 1}})\n```\n\nYou don't need to write anything special here, forward references work out of\nthe box. If a field of a dataclass has a forward reference in the type\nannotations, building of `from_dict` and `to_dict` methods of this dataclass\nwill be postponed until they are called once. However, if for some reason you\ndon't want the evaluation to be possibly postponed, you can disable it using\n`allow_postponed_evaluation` option:\n\n```python\nfrom __future__ import annotations\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\n\n@dataclass\nclass A(DataClassDictMixin):\n x: B\n\n class Config:\n allow_postponed_evaluation = False\n\n# UnresolvedTypeReferenceError: Class A has unresolved type reference B\n# in some of its fields\n\n@dataclass\nclass B(DataClassDictMixin):\n y: int\n```\n\nIn this case you will get `UnresolvedTypeReferenceError` regardless of whether\nclass B is declared below or not.\n\n#### `dialect` config option\n\nThis option is described [below](#changing-the-default-dialect) in the\nDialects section.\n\n### Passing field values as is\n\nIn some cases it's needed to pass a field value as is without any changes\nduring serialization / deserialization. There is a predefined\n[`pass_through`](https://github.com/Fatal1ty/mashumaro/blob/master/mashumaro/helper.py#L46)\nobject that can be used as `serialization_strategy` or\n`serialize` / `deserialize` options:\n\n```python\nfrom dataclasses import dataclass, field\nfrom mashumaro import DataClassDictMixin, pass_through\n\nclass MyClass:\n def __init__(self, some_value):\n self.some_value = some_value\n\n@dataclass\nclass A1(DataClassDictMixin):\n x: MyClass = field(\n metadata={\n \"serialize\": pass_through,\n \"deserialize\": pass_through,\n }\n )\n\n@dataclass\nclass A2(DataClassDictMixin):\n x: MyClass = field(\n metadata={\n \"serialization_strategy\": pass_through,\n }\n )\n\n@dataclass\nclass A3(DataClassDictMixin):\n x: MyClass\n\n class Config:\n serialization_strategy = {\n MyClass: pass_through,\n }\n\n@dataclass\nclass A4(DataClassDictMixin):\n x: MyClass\n\n class Config:\n serialization_strategy = {\n MyClass: {\n \"serialize\": pass_through,\n \"deserialize\": pass_through,\n }\n }\n\nmy_class_instance = MyClass(42)\n\nassert A1.from_dict({'x': my_class_instance}).x == my_class_instance\nassert A2.from_dict({'x': my_class_instance}).x == my_class_instance\nassert A3.from_dict({'x': my_class_instance}).x == my_class_instance\nassert A4.from_dict({'x': my_class_instance}).x == my_class_instance\n\na1_dict = A1(my_class_instance).to_dict()\na2_dict = A2(my_class_instance).to_dict()\na3_dict = A3(my_class_instance).to_dict()\na4_dict = A4(my_class_instance).to_dict()\n\nassert a1_dict == a2_dict == a3_dict == a4_dict == {\"x\": my_class_instance}\n```\n\n### Dialects\n\nSometimes it's needed to have different serialization and deserialization\nmethods depending on the data source where entities of the dataclass are\nstored or on the API to which the entities are being sent or received from.\nThere is a special Dialect type that may contain all the differences from the\ndefault serialization and deserialization methods. You can create different\ndialects and use each of them for the same dataclass depending on\nthe situation.\n\nSuppose we have the following dataclass with a field of type `date`:\n```python\n@dataclass\nclass Entity(DataClassDictMixin):\n dt: date\n```\n\nBy default, a field of `date` type serializes to a string in ISO 8601 format,\nso the serialized entity will look like `{'dt': '2021-12-31'}`. But what if we\nhave, for example, two sensitive legacy Ethiopian and Japanese APIs that use\ntwo different formats for dates \u2014 `dd/mm/yyyy` and `yyyy\u5e74mm\u6708dd\u65e5`? Instead of\ncreating two similar dataclasses we can have one dataclass and two dialects:\n```python\nfrom dataclasses import dataclass\nfrom datetime import date, datetime\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import ADD_DIALECT_SUPPORT\nfrom mashumaro.dialect import Dialect\nfrom mashumaro.types import SerializationStrategy\n\nclass DateTimeSerializationStrategy(SerializationStrategy):\n def __init__(self, fmt: str):\n self.fmt = fmt\n\n def serialize(self, value: date) -> str:\n return value.strftime(self.fmt)\n\n def deserialize(self, value: str) -> date:\n return datetime.strptime(value, self.fmt).date()\n\nclass EthiopianDialect(Dialect):\n serialization_strategy = {\n date: DateTimeSerializationStrategy(\"%d/%m/%Y\")\n }\n\nclass JapaneseDialect(Dialect):\n serialization_strategy = {\n date: DateTimeSerializationStrategy(\"%Y\u5e74%m\u6708%d\u65e5\")\n }\n\n@dataclass\nclass Entity(DataClassDictMixin):\n dt: date\n\n class Config:\n code_generation_options = [ADD_DIALECT_SUPPORT]\n\nentity = Entity(date(2021, 12, 31))\nentity.to_dict(dialect=EthiopianDialect) # {'dt': '31/12/2021'}\nentity.to_dict(dialect=JapaneseDialect) # {'dt': '2021\u5e7412\u670831\u65e5'}\nEntity.from_dict({'dt': '2021\u5e7412\u670831\u65e5'}, dialect=JapaneseDialect)\n```\n\n#### `serialization_strategy` dialect option\n\nThis dialect option has the same meaning as the\n[similar config option](#serialization_strategy-config-option)\nbut for the dialect scope. You can register custom `SerializationStrategy`,\n`serialize` and `deserialize` methods for specific types.\n\n#### Changing the default dialect\n\nYou can change the default serialization and deserialization methods for\na dataclass not only in the\n[`serialization_strategy`](#serialization_strategy-config-option) config option\nbut using the `dialect` config option. If you have multiple dataclasses without\na common parent class the default dialect can help you to reduce the number of\ncode lines written:\n\n```python\n@dataclass\nclass Entity(DataClassDictMixin):\n dt: date\n\n class Config:\n dialect = JapaneseDialect\n\nentity = Entity(date(2021, 12, 31))\nentity.to_dict() # {'dt': '2021\u5e7412\u670831\u65e5'}\nassert Entity.from_dict({'dt': '2021\u5e7412\u670831\u65e5'}) == entity\n```\n\n### Code generation options\n\n#### Add `omit_none` keyword argument\n\nIf you want to have control over whether to skip `None` values on serialization\nyou can add `omit_none` parameter to `to_dict` method using the\n`code_generation_options` list:\n\n```python\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import BaseConfig, TO_DICT_ADD_OMIT_NONE_FLAG\n\n@dataclass\nclass Inner(DataClassDictMixin):\n x: int = None\n # \"x\" won't be omitted since there is no TO_DICT_ADD_OMIT_NONE_FLAG here\n\n@dataclass\nclass Model(DataClassDictMixin):\n x: Inner\n a: int = None\n b: str = None # will be omitted\n\n class Config(BaseConfig):\n code_generation_options = [TO_DICT_ADD_OMIT_NONE_FLAG]\n\nModel(x=Inner(), a=1).to_dict(omit_none=True) # {'x': {'x': None}, 'a': 1}\n```\n\n#### Add `by_alias` keyword argument\n\nIf you want to have control over whether to serialize fields by their\n[aliases](#alias-option) you can add `by_alias` parameter to `to_dict` method\nusing the `code_generation_options` list. The default value of `by_alias`\nparameter depends on whether the [`serialize_by_alias`](#serialize_by_alias-config-option)\nconfig option is enabled.\n\n```python\nfrom dataclasses import dataclass, field\nfrom mashumaro import DataClassDictMixin, field_options\nfrom mashumaro.config import BaseConfig, TO_DICT_ADD_BY_ALIAS_FLAG\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n field_a: int = field(metadata=field_options(alias=\"FieldA\"))\n\n class Config(BaseConfig):\n code_generation_options = [TO_DICT_ADD_BY_ALIAS_FLAG]\n\nDataClass(field_a=1).to_dict() # {'field_a': 1}\nDataClass(field_a=1).to_dict(by_alias=True) # {'FieldA': 1}\n```\n\n#### Add `dialect` keyword argument\n\nSupport for [dialects](#dialects) is disabled by default for performance reasons. You can enable\nit using a `ADD_DIALECT_SUPPORT` constant:\n```python\nfrom dataclasses import dataclass\nfrom datetime import date\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.config import BaseConfig, ADD_DIALECT_SUPPORT\n\n@dataclass\nclass Entity(DataClassDictMixin):\n dt: date\n\n class Config(BaseConfig):\n code_generation_options = [ADD_DIALECT_SUPPORT]\n```\n\n### User-defined generic types\n\nThere is support for [user-defined generic types](https://docs.python.org/3/library/typing.html#user-defined-generic-types).\nYou can inherit generic dataclasses along with overwriting types in them, use generic\ndataclasses as field types, or create your own generic types with serialization\nunder your control.\n\n#### User-defined generic dataclasses\n\nIf you have a generic version of a dataclass and want to serialize and\ndeserialize its instances depending on the concrete types, you can achieve\nthis using inheritance:\n\n```python\nfrom dataclasses import dataclass\nfrom datetime import date\nfrom typing import Generic, Mapping, TypeVar\nfrom mashumaro import DataClassDictMixin\n\nKT = TypeVar(\"KT\")\nVT = TypeVar(\"VT\", date, str)\n\n@dataclass\nclass GenericDataClass(Generic[KT, VT]):\n x: Mapping[KT, VT]\n\n@dataclass\nclass ConcreteDataClass(GenericDataClass[str, date], DataClassDictMixin):\n pass\n\nConcreteDataClass.from_dict({\"x\": {\"a\": \"2021-01-01\"}}) # ok\nConcreteDataClass.from_dict({\"x\": {\"a\": \"not a date but str\"}}) # error\n```\n\nYou can override `TypeVar` field with a concrete type or another `TypeVar`.\nPartial specification of concrete types is also allowed. If a generic dataclass\nis inherited without type overriding the types of its fields remain untouched.\n\n#### Generic dataclasses as field types\n\nAnother approach is to specify concrete types in the field type hints. This can\nhelp to have different versions of the same generic dataclass:\n\n```python\nfrom dataclasses import dataclass\nfrom datetime import date\nfrom typing import Generic, TypeVar\nfrom mashumaro import DataClassDictMixin\n\nT = TypeVar('T')\n\n@dataclass\nclass GenericDataClass(Generic[T], DataClassDictMixin):\n x: T\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n date: GenericDataClass[date]\n str: GenericDataClass[str]\n\ninstance = DataClass(\n date=GenericDataClass(x=date(2021, 1, 1)),\n str=GenericDataClass(x='2021-01-01'),\n)\ndictionary = {'date': {'x': '2021-01-01'}, 'str': {'x': '2021-01-01'}}\nassert DataClass.from_dict(dictionary) == instance\n```\n\n#### GenericSerializableType interface\n\nThere is a generic alternative to [`SerializableType`](#serializabletype-interface)\ncalled `GenericSerializableType`. It makes it possible to serialize and deserialize\ninstances of generic types depending on the types provided:\n\n```python\nfrom typing import Dict, TypeVar\nfrom dataclasses import dataclass\nfrom mashumaro import DataClassDictMixin\nfrom mashumaro.types import GenericSerializableType\n\nKT = TypeVar(\"KT\", int, str)\nVT = TypeVar(\"VT\", int, str)\n\nclass GenericDict(Dict[KT, VT], GenericSerializableType):\n def _serialize(self, types) -> Dict[KT, VT]:\n k_type, v_type = types\n if k_type not in (int, str) or v_type not in (int, str):\n raise TypeError\n return {k_type(k): v_type(v) for k, v in self.items()}\n\n @classmethod\n def _deserialize(cls, value, types) -> 'GenericDict[KT, VT]':\n k_type, v_type = types\n if k_type not in (int, str) or v_type not in (int, str):\n raise TypeError\n return cls({k_type(k): v_type(v) for k, v in value.items()})\n\n@dataclass\nclass DataClass(DataClassDictMixin):\n x: GenericDict[int, str]\n y: GenericDict[str, int]\n\ninstance = DataClass(GenericDict({1: 'a'}), GenericDict({'b': 2}))\ndictionary = instance.to_dict() # {'x': {1: 'a'}, 'y': {'b': 2}}\nassert DataClass.from_dict(dictionary) == instance\n```\n\nThe difference between [`SerializableType`](#serializabletype-interface) and\n[`GenericSerializableType`](#genericserializabletype-interface) is that\nthe methods of [`GenericSerializableType`](#genericserializabletype-interface)\nhave a parameter `types`, to which the concrete types will be passed.\nIf you don't need this information you can still use\n[`SerializableType`](#serializabletype-interface) interface even with generic\ntypes.\n\n### Serialization hooks\n\nIn some cases you need to prepare input / output data or do some extraordinary\nactions at different stages of the deserialization / serialization lifecycle.\nYou can do this with different types of hooks.\n\n#### Before deserialization\n\nFor doing something with a dictionary that will be passed to deserialization\nyou can use `__pre_deserialize__` class method:\n\n```python\n@dataclass\nclass A(DataClassJSONMixin):\n abc: int\n\n @classmethod\n def __pre_deserialize__(cls, d: Dict[Any, Any]) -> Dict[Any, Any]:\n return {k.lower(): v for k, v in d.items()}\n\nprint(DataClass.from_dict({\"ABC\": 123})) # DataClass(abc=123)\nprint(DataClass.from_json('{\"ABC\": 123}')) # DataClass(abc=123)\n```\n\n#### After deserialization\n\nFor doing something with a dataclass instance that was created as a result\nof deserialization you can use `__post_deserialize__` class method:\n\n```python\n@dataclass\nclass A(DataClassJSONMixin):\n abc: int\n\n @classmethod\n def __post_deserialize__(cls, obj: 'A') -> 'A':\n obj.abc = 456\n return obj\n\nprint(DataClass.from_dict({\"abc\": 123})) # DataClass(abc=456)\nprint(DataClass.from_json('{\"abc\": 123}')) # DataClass(abc=456)\n```\n\n#### Before serialization\n\nFor doing something before serialization you can use `__pre_serialize__`\nmethod:\n\n```python\n@dataclass\nclass A(DataClassJSONMixin):\n abc: int\n counter: ClassVar[int] = 0\n\n def __pre_serialize__(self) -> 'A':\n self.counter += 1\n return self\n\nobj = DataClass(abc=123)\nobj.to_dict()\nobj.to_json()\nprint(obj.counter) # 2\n```\n\n#### After serialization\n\nFor doing something with a dictionary that was created as a result of\nserialization you can use `__post_serialize__` method:\n\n```python\n@dataclass\nclass A(DataClassJSONMixin):\n user: str\n password: str\n\n def __post_serialize__(self, d: Dict[Any, Any]) -> Dict[Any, Any]:\n d.pop('password')\n return d\n\nobj = DataClass(user=\"name\", password=\"secret\")\nprint(obj.to_dict()) # {\"user\": \"name\"}\nprint(obj.to_json()) # '{\"user\": \"name\"}'\n```\n\nTODO\n--------------------------------------------------------------------------------\n\n* add optional validation\n* write custom useful types such as URL, Email etc\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Fatal1ty/mashumaro", "keywords": "", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "mashumaro", "package_url": "https://pypi.org/project/mashumaro/", "platform": "all", "project_url": "https://pypi.org/project/mashumaro/", "project_urls": { "Homepage": "https://github.com/Fatal1ty/mashumaro" }, "release_url": "https://pypi.org/project/mashumaro/3.0.1/", "requires_dist": [ "typing-extensions", "dataclasses ; python_version == \"3.6\"", "backports-datetime-fromisoformat ; python_version == \"3.6\"", "msgpack (>=0.5.6) ; extra == 'msgpack'", "pyyaml (>=3.13) ; extra == 'yaml'" ], "requires_python": ">=3.6", "summary": "Fast serialization framework on top of dataclasses", "version": "3.0.1", "yanked": false, "yanked_reason": null }, "last_serial": 13391576, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d4a36f2b94360ea1943588954ac33798", "sha256": "2c5aeab6864e1aa2c52e1f7f36469de4e263aa6a1a6298984bb040451445ba95" }, "downloads": -1, "filename": "mashumaro-0.1.tar.gz", "has_sig": false, "md5_digest": "d4a36f2b94360ea1943588954ac33798", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2995, "upload_time": "2018-09-11T08:59:17", "upload_time_iso_8601": "2018-09-11T08:59:17.753616Z", "url": "https://files.pythonhosted.org/packages/4c/92/321218ad7534467525f48badec6b433a08ee3c066b9c5cbc93060d4762c0/mashumaro-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "63ab15b91698b0a53a91192ebc84d13a", "sha256": "56c226b8dae160fc45c3cd3fd6e9fe00eeb1c57842a126ec1c0db109d1f4bba9" }, "downloads": -1, "filename": "mashumaro-0.1.1.tar.gz", "has_sig": false, "md5_digest": "63ab15b91698b0a53a91192ebc84d13a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3045, "upload_time": "2018-09-11T09:09:42", "upload_time_iso_8601": "2018-09-11T09:09:42.761250Z", "url": "https://files.pythonhosted.org/packages/26/94/9aceaa29ace1185e1e7424851507a8287112299fedfa583dcd58c66e2b19/mashumaro-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f701fb302bdfe644e5dc371ae5dd6460", "sha256": "24ff9177f266269b00fa5ac671557dab6926196a62ef28656d24a614c961241f" }, "downloads": -1, "filename": "mashumaro-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f701fb302bdfe644e5dc371ae5dd6460", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5261, "upload_time": "2018-09-17T15:40:52", "upload_time_iso_8601": "2018-09-17T15:40:52.718752Z", "url": "https://files.pythonhosted.org/packages/d6/de/ddc1952211f04f655962af376b64d4452ba949cf66379632253a99f80f3f/mashumaro-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b7013046b05932d67348c4555d5a5ec2", "sha256": "2a7942a5f7c6a802643dabffc83c40a3f9abb4a2c86c851ce2689b8104010881" }, "downloads": -1, "filename": "mashumaro-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b7013046b05932d67348c4555d5a5ec2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5332, "upload_time": "2018-09-25T11:22:47", "upload_time_iso_8601": "2018-09-25T11:22:47.267008Z", "url": "https://files.pythonhosted.org/packages/52/a7/04df0a4e082a41583acdfba199a9ce6916c48175269fa76ff88e84c0c3da/mashumaro-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "4c74c8a81ab12c8292d6b6e52a05d31e", "sha256": "a30b8eb18e21d58f26b67415b996d5a489b1c603935645b0e43773010438e29f" }, "downloads": -1, "filename": "mashumaro-0.2.tar.gz", "has_sig": false, "md5_digest": "4c74c8a81ab12c8292d6b6e52a05d31e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4970, "upload_time": "2018-10-29T15:11:07", "upload_time_iso_8601": "2018-10-29T15:11:07.824949Z", "url": "https://files.pythonhosted.org/packages/be/93/40aab768dd8b93032db1daf673f78e25716bbb02639fa2821205d4508c6b/mashumaro-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3": [ { "comment_text": "", "digests": { "md5": "0252619568648623ccf7909e0a0aa7a4", "sha256": "c65dad57af049a269268c6cb01ed8a8bc2a5c4b4bf9761f37b3a1f99fe42bb8d" }, "downloads": -1, "filename": "mashumaro-0.3.tar.gz", "has_sig": false, "md5_digest": "0252619568648623ccf7909e0a0aa7a4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4905, "upload_time": "2018-10-30T13:05:18", "upload_time_iso_8601": "2018-10-30T13:05:18.973810Z", "url": "https://files.pythonhosted.org/packages/17/16/53b53d5f679dee6371445ab38067f9b752ea7d728d7cb8ad35470bbc669a/mashumaro-0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "efe1f9aea1dc43b1e51feb2ec6b4eb09", "sha256": "b37e41d35d6531d492ac374b8d7328e0c23602a9392b924aaec9a014c4667fd6" }, "downloads": -1, "filename": "mashumaro-0.3.1.tar.gz", "has_sig": false, "md5_digest": "efe1f9aea1dc43b1e51feb2ec6b4eb09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4739, "upload_time": "2018-10-30T13:12:52", "upload_time_iso_8601": "2018-10-30T13:12:52.447439Z", "url": "https://files.pythonhosted.org/packages/64/a8/c355b28c9b670a2e05f9c6c49c5ed8353f80b0a9f0eca2a7272f09234cb8/mashumaro-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4": [ { "comment_text": "", "digests": { "md5": "8ae95a04d84f72ef7077ff39698e11cc", "sha256": "217a1da4968dc28e6a28da1e1fffe573e10571bc74eb39e03cb9c97b1bd2ec77" }, "downloads": -1, "filename": "mashumaro-0.4.tar.gz", "has_sig": false, "md5_digest": "8ae95a04d84f72ef7077ff39698e11cc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5198, "upload_time": "2018-11-03T14:52:46", "upload_time_iso_8601": "2018-11-03T14:52:46.026843Z", "url": "https://files.pythonhosted.org/packages/59/42/763207861a4f3d223e5f816773ba9251206cfadd30d9c3161c7ff4b7fcf7/mashumaro-0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5": [ { "comment_text": "", "digests": { "md5": "e35ef749f2dec3c18fec4d9dfa4797cd", "sha256": "d2e900c1d9bd1556bb395e2c11e59165175f44722c74948755390802737a971f" }, "downloads": -1, "filename": "mashumaro-0.5.tar.gz", "has_sig": false, "md5_digest": "e35ef749f2dec3c18fec4d9dfa4797cd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7403, "upload_time": "2018-11-23T10:00:40", "upload_time_iso_8601": "2018-11-23T10:00:40.287453Z", "url": "https://files.pythonhosted.org/packages/12/19/a6bc7ea6699b28b70d33522df47e3161ef664453ce69aedffdcbb7adf9cf/mashumaro-0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6": [ { "comment_text": "", "digests": { "md5": "04e288973b17b5f74556ec503642f7dd", "sha256": "b92da33dc72daf71bcda64b2359f8ec8b532cb3d94e9461888f17c079d77169c" }, "downloads": -1, "filename": "mashumaro-0.6.tar.gz", "has_sig": false, "md5_digest": "04e288973b17b5f74556ec503642f7dd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7397, "upload_time": "2018-11-23T15:02:50", "upload_time_iso_8601": "2018-11-23T15:02:50.418121Z", "url": "https://files.pythonhosted.org/packages/0b/6a/a4ebde7ffecc941f82f76149ad2bedbc76074043ebd4546516a555d633f6/mashumaro-0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7": [ { "comment_text": "", "digests": { "md5": "9bc7aadd2e8c3e4fb462dc742af20ce3", "sha256": "1542bcfba123d361facaa669f2ac67bd6892b6c5c3b589d5446c6f5f151419f7" }, "downloads": -1, "filename": "mashumaro-0.7.tar.gz", "has_sig": false, "md5_digest": "9bc7aadd2e8c3e4fb462dc742af20ce3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7400, "upload_time": "2018-11-26T10:04:01", "upload_time_iso_8601": "2018-11-26T10:04:01.534819Z", "url": "https://files.pythonhosted.org/packages/f2/1f/f47534d5ec69135c3a69f3cfa443bcc759439e561f5a2a69ce9fbfee2d01/mashumaro-0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8": [ { "comment_text": "", "digests": { "md5": "4c636ffa4a2453b52a209d30dfa09890", "sha256": "ba114284709a0d12091be574e961094b33b4f90f2f932c1b425f1f3936b2b29b" }, "downloads": -1, "filename": "mashumaro-0.8.tar.gz", "has_sig": false, "md5_digest": "4c636ffa4a2453b52a209d30dfa09890", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7438, "upload_time": "2018-11-26T10:22:13", "upload_time_iso_8601": "2018-11-26T10:22:13.810841Z", "url": "https://files.pythonhosted.org/packages/12/aa/3d4e25da783c8fcf125a01cdf682de6549a89df8e30abbac061dc3068d71/mashumaro-0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "289a0a1ea0d01775d3c40c4ca3ef2b76", "sha256": "0a1b5e3fce888b36026cf0881f9f813c925cfd7e16b98bd187c154c992230e6b" }, "downloads": -1, "filename": "mashumaro-0.8.1.tar.gz", "has_sig": false, "md5_digest": "289a0a1ea0d01775d3c40c4ca3ef2b76", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9832, "upload_time": "2018-11-26T10:33:08", "upload_time_iso_8601": "2018-11-26T10:33:08.334308Z", "url": "https://files.pythonhosted.org/packages/d3/33/33fef6977d67beb037b9743f829214eaa722add8fe2f7c8780d737ca1740/mashumaro-0.8.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9": [ { "comment_text": "", "digests": { "md5": "4972213fb7564312d8ac201e477c55c8", "sha256": "a346d653e1cb9b3dc3920c864a6f5a315fce9e4ecc33a4a65e995d05f8375bfd" }, "downloads": -1, "filename": "mashumaro-0.9.tar.gz", "has_sig": false, "md5_digest": "4972213fb7564312d8ac201e477c55c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9802, "upload_time": "2018-11-26T14:12:43", "upload_time_iso_8601": "2018-11-26T14:12:43.831092Z", "url": "https://files.pythonhosted.org/packages/1d/5f/7e4b97917064edb37e17b2ceec1fe822dfff9efba9c254b03b40b139ee7f/mashumaro-0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0": [ { "comment_text": "", "digests": { "md5": "662e9cbc640a7557138c0a1f6aefc460", "sha256": "21b1ab5c3ad2e54a5593cda897d59b2714f0a80c215fbd6edd1f93cd47c155ed" }, "downloads": -1, "filename": "mashumaro-1.0.tar.gz", "has_sig": false, "md5_digest": "662e9cbc640a7557138c0a1f6aefc460", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10069, "upload_time": "2018-11-27T11:14:40", "upload_time_iso_8601": "2018-11-27T11:14:40.721523Z", "url": "https://files.pythonhosted.org/packages/9e/c7/26aa45dd03f42ef2e5c51c7d4b1893143ee7c23092cf6b45704922933e01/mashumaro-1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1": [ { "comment_text": "", "digests": { "md5": "4a4801548a9a320ce5ef4c8addae930c", "sha256": "7c86514345dc42ac8029eb6d8f85b4a792d6d177c60954bfe4285b653c01a0be" }, "downloads": -1, "filename": "mashumaro-1.1.tar.gz", "has_sig": false, "md5_digest": "4a4801548a9a320ce5ef4c8addae930c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10004, "upload_time": "2018-11-27T12:06:43", "upload_time_iso_8601": "2018-11-27T12:06:43.979568Z", "url": "https://files.pythonhosted.org/packages/ea/2b/60450664341e3185b08df78ac936515411f9a4d94bc38b82ab6c9449faf5/mashumaro-1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.10": [ { "comment_text": "", "digests": { "md5": "6177e3128ec8147481b3f33f3cd5866b", "sha256": "80f5d9a02be005ea54fb3ba954293cfc4919aa838c245efe6d12c5b17c4252d4" }, "downloads": -1, "filename": "mashumaro-1.10.tar.gz", "has_sig": false, "md5_digest": "6177e3128ec8147481b3f33f3cd5866b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13588, "upload_time": "2019-12-10T17:35:43", "upload_time_iso_8601": "2019-12-10T17:35:43.366961Z", "url": "https://files.pythonhosted.org/packages/0b/04/16c9c5b0b293329d598046c2f8cb0640467e95f1a202e43f70819a3ed37f/mashumaro-1.10.tar.gz", "yanked": false, "yanked_reason": null } ], "1.11": [ { "comment_text": "", "digests": { "md5": "5ea0e3fcc03f91c0b5c488ca204b8f39", "sha256": "32fc2463bd17f0ae63ba8fb898697e8d0b80abef5ba7216187111de2671deb20" }, "downloads": -1, "filename": "mashumaro-1.11.tar.gz", "has_sig": false, "md5_digest": "5ea0e3fcc03f91c0b5c488ca204b8f39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13738, "upload_time": "2019-12-12T21:57:40", "upload_time_iso_8601": "2019-12-12T21:57:40.080666Z", "url": "https://files.pythonhosted.org/packages/b0/4a/669f216a2c14cbc4f1bedc7814fc7aa5b83ac7939ea081afc6e2275b1594/mashumaro-1.11.tar.gz", "yanked": false, "yanked_reason": null } ], "1.12": [ { "comment_text": "", "digests": { "md5": "0916ed3cf85ddbaf26e30277dd74698d", "sha256": "328bd252eeb51959a66c5a465a8ef4877f5ea8ac396af11278ac4bdb06cc49f8" }, "downloads": -1, "filename": "mashumaro-1.12.tar.gz", "has_sig": false, "md5_digest": "0916ed3cf85ddbaf26e30277dd74698d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13731, "upload_time": "2019-12-13T21:37:53", "upload_time_iso_8601": "2019-12-13T21:37:53.783606Z", "url": "https://files.pythonhosted.org/packages/bb/ac/d3c6295c49efcb7913fa416d4ef78803c6fc9f5e8e99abe634207a211918/mashumaro-1.12.tar.gz", "yanked": false, "yanked_reason": null } ], "1.13": [ { "comment_text": "", "digests": { "md5": "f171df600ffc3f808e4b90fdfa06d1c0", "sha256": "8caafe3415ecc8ca41c9d9a07a88882e490b563a243a3b57b1bb2b87a8bbce11" }, "downloads": -1, "filename": "mashumaro-1.13.tar.gz", "has_sig": false, "md5_digest": "f171df600ffc3f808e4b90fdfa06d1c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13698, "upload_time": "2020-09-18T10:28:00", "upload_time_iso_8601": "2020-09-18T10:28:00.482800Z", "url": "https://files.pythonhosted.org/packages/de/38/c6ae8b01a7bd4864487ae3b85443727f7d2b3e5a98d037cecffac686a103/mashumaro-1.13.tar.gz", "yanked": false, "yanked_reason": null } ], "1.14": [ { "comment_text": "", "digests": { "md5": "828303ae0603e447b57840ee8ad585a4", "sha256": "3d3f34ab5a7cfcae4311e71123068b5191f6b6a693e1d9bd74a4443c9d4c109c" }, "downloads": -1, "filename": "mashumaro-1.14.tar.gz", "has_sig": false, "md5_digest": "828303ae0603e447b57840ee8ad585a4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13742, "upload_time": "2020-11-19T22:18:26", "upload_time_iso_8601": "2020-11-19T22:18:26.185624Z", "url": "https://files.pythonhosted.org/packages/01/5e/91bcef43cd5d7cad962536067de9dd8476580475661f3f44675f735d1d0f/mashumaro-1.14.tar.gz", "yanked": false, "yanked_reason": null } ], "1.15": [ { "comment_text": "", "digests": { "md5": "315ae826cace3b343f277d90bfa6e5ea", "sha256": "4e98ce49a8e7ab4c7c9f5751d7443f49b0359513baa3ce26b98b5298ebc1d074" }, "downloads": -1, "filename": "mashumaro-1.15.tar.gz", "has_sig": false, "md5_digest": "315ae826cace3b343f277d90bfa6e5ea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13778, "upload_time": "2020-11-21T15:12:21", "upload_time_iso_8601": "2020-11-21T15:12:21.076371Z", "url": "https://files.pythonhosted.org/packages/69/9d/b8335239893f7e5ebbbde3f85f0bd081e4a8319127eaaaa8d4139bd0ee5d/mashumaro-1.15.tar.gz", "yanked": false, "yanked_reason": null } ], "1.16": [ { "comment_text": "", "digests": { "md5": "5e435b3dcc5d8111e1b44fa5a0819774", "sha256": "941959efeae08889cb72f77a28692213e8b2020f4c3a95ca7fbb0d5e1f69ea1a" }, "downloads": -1, "filename": "mashumaro-1.16.tar.gz", "has_sig": false, "md5_digest": "5e435b3dcc5d8111e1b44fa5a0819774", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13922, "upload_time": "2020-12-18T22:07:36", "upload_time_iso_8601": "2020-12-18T22:07:36.290781Z", "url": "https://files.pythonhosted.org/packages/7c/28/ac2a93ca65c4754772531eb1161db203dd62fb90c7757157ef225e10fa05/mashumaro-1.16.tar.gz", "yanked": false, "yanked_reason": null } ], "1.17": [ { "comment_text": "", "digests": { "md5": "b54d93a2b5aabcb90978d18c57eff64f", "sha256": "1792a408af04af760e278d1b21d18947aa881e230bd07652e49fc27edc06a8a1" }, "downloads": -1, "filename": "mashumaro-1.17.tar.gz", "has_sig": false, "md5_digest": "b54d93a2b5aabcb90978d18c57eff64f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14108, "upload_time": "2020-12-22T09:48:50", "upload_time_iso_8601": "2020-12-22T09:48:50.847646Z", "url": "https://files.pythonhosted.org/packages/f2/ac/b07fa91cadc64afb61bcd8eb95850b60f596607a07be628e3997af27ae97/mashumaro-1.17.tar.gz", "yanked": false, "yanked_reason": null } ], "1.18": [ { "comment_text": "", "digests": { "md5": "467669079d5d4b81a1b3bcfe713b5575", "sha256": "eaf57a9cbbf1ed03e7fea32c4870860b416b8df9f0192097c6dffda34034847f" }, "downloads": -1, "filename": "mashumaro-1.18.tar.gz", "has_sig": false, "md5_digest": "467669079d5d4b81a1b3bcfe713b5575", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18138, "upload_time": "2021-01-04T13:48:39", "upload_time_iso_8601": "2021-01-04T13:48:39.204943Z", "url": "https://files.pythonhosted.org/packages/a8/de/ee4d364670668e5de3cd1ac57e0890ab5bedf1af432a66c9edc994241e36/mashumaro-1.18.tar.gz", "yanked": false, "yanked_reason": null } ], "1.19": [ { "comment_text": "", "digests": { "md5": "788f924c078903eb9eb62effe964decb", "sha256": "dba967ebabb5c39782988d6621a2e81eb942fac63a0cd75faf4c7772d025bfa6" }, "downloads": -1, "filename": "mashumaro-1.19.tar.gz", "has_sig": false, "md5_digest": "788f924c078903eb9eb62effe964decb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18493, "upload_time": "2021-01-09T14:02:45", "upload_time_iso_8601": "2021-01-09T14:02:45.634851Z", "url": "https://files.pythonhosted.org/packages/bd/1d/5b67d9280f0701bec3c48fa5cc191de0c1d5db85137fae10d4e4300e27fb/mashumaro-1.19.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2": [ { "comment_text": "", "digests": { "md5": "5e15afa86771eac769560fbc516d7108", "sha256": "751369b07745dc91e2ddd70c8a8c37bfe256aa3ca14073fcecda1eaf0569d903" }, "downloads": -1, "filename": "mashumaro-1.2.tar.gz", "has_sig": false, "md5_digest": "5e15afa86771eac769560fbc516d7108", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10078, "upload_time": "2018-12-12T15:16:23", "upload_time_iso_8601": "2018-12-12T15:16:23.907462Z", "url": "https://files.pythonhosted.org/packages/51/38/d6a8245e0de315b73812d27d4e07dae9a474ddf1f7f2d93b4da76666eb14/mashumaro-1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.post1": [ { "comment_text": "", "digests": { "md5": "d9a03d2fa013243150002a7cf08f6840", "sha256": "44e49be7211966f2c43dd2fb591fd8d1c0a4ce42eaa9da859235ddfa9b789de5" }, "downloads": -1, "filename": "mashumaro-1.2.post1.tar.gz", "has_sig": false, "md5_digest": "d9a03d2fa013243150002a7cf08f6840", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9641, "upload_time": "2018-12-12T15:25:13", "upload_time_iso_8601": "2018-12-12T15:25:13.581076Z", "url": "https://files.pythonhosted.org/packages/71/4e/790a8d304502ee2b9658d9df53c0a9f176a21965c34dcd09850da298c381/mashumaro-1.2.post1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.20": [ { "comment_text": "", "digests": { "md5": "39de7e2b9328e6d758bdcab0083635fc", "sha256": "6ab2aaeeeb32151e0dc2dfc920d063346874f60520954ee1dcbd2e1462f9ae92" }, "downloads": -1, "filename": "mashumaro-1.20.tar.gz", "has_sig": false, "md5_digest": "39de7e2b9328e6d758bdcab0083635fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20180, "upload_time": "2021-01-09T20:59:54", "upload_time_iso_8601": "2021-01-09T20:59:54.441858Z", "url": "https://files.pythonhosted.org/packages/8e/36/1e914dc4f66db5e8051c04a3c3825b66b3ce22a9f426f224bc844196f067/mashumaro-1.20.tar.gz", "yanked": false, "yanked_reason": null } ], "1.21": [ { "comment_text": "", "digests": { "md5": "de56b9499303bd2a10328e322da2edab", "sha256": "90d260b13427bad5dd654155dbca786594268c9e12dd853d7c3dcdfbbfcb83db" }, "downloads": -1, "filename": "mashumaro-1.21.tar.gz", "has_sig": false, "md5_digest": "de56b9499303bd2a10328e322da2edab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20742, "upload_time": "2021-01-10T16:49:00", "upload_time_iso_8601": "2021-01-10T16:49:00.357132Z", "url": "https://files.pythonhosted.org/packages/49/ce/eb50899d70ac2e068b8e8bee5fc8e21c168e93558ec0b015191b7d9e1575/mashumaro-1.21.tar.gz", "yanked": false, "yanked_reason": null } ], "1.22": [ { "comment_text": "", "digests": { "md5": "f2d2240fdaefefd2f0ba227fb0d47c49", "sha256": "63b7acd90428e3d254b87eccc674a5c5eb181e4054d704e06d1cb9771f32664c" }, "downloads": -1, "filename": "mashumaro-1.22.tar.gz", "has_sig": false, "md5_digest": "f2d2240fdaefefd2f0ba227fb0d47c49", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20898, "upload_time": "2021-01-15T01:03:57", "upload_time_iso_8601": "2021-01-15T01:03:57.455581Z", "url": "https://files.pythonhosted.org/packages/c6/b9/f8ac3698a0bbe7bb60fbd3a8a7fd4ddbd9dcf6531a4aa9e60a796b76d11c/mashumaro-1.22.tar.gz", "yanked": false, "yanked_reason": null } ], "1.23": [ { "comment_text": "", "digests": { "md5": "b471733849426e5285282294cacb5be2", "sha256": "d83aa9e0cf7a2013a0017bb2a8ced776ac8b694ac7c5b387fd29949189c46154" }, "downloads": -1, "filename": "mashumaro-1.23.tar.gz", "has_sig": false, "md5_digest": "b471733849426e5285282294cacb5be2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20928, "upload_time": "2021-01-27T22:07:06", "upload_time_iso_8601": "2021-01-27T22:07:06.073596Z", "url": "https://files.pythonhosted.org/packages/d3/69/8164aba1760b64c84710fd91832027ab4aa59f76d6249c9bf4e087a19160/mashumaro-1.23.tar.gz", "yanked": false, "yanked_reason": null } ], "1.24": [ { "comment_text": "", "digests": { "md5": "8d8854dffd7175a39d5dd4bb7e1d6775", "sha256": "5b517060e4e06c951bff7befe5c906f2c322dc25142114c1090c5c6dcc927c8d" }, "downloads": -1, "filename": "mashumaro-1.24.tar.gz", "has_sig": false, "md5_digest": "8d8854dffd7175a39d5dd4bb7e1d6775", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22917, "upload_time": "2021-02-06T17:16:25", "upload_time_iso_8601": "2021-02-06T17:16:25.063889Z", "url": "https://files.pythonhosted.org/packages/7f/c0/45682646e694a797e3ebaf20575a21af68cec959b930bf8993fa9c0eaf8c/mashumaro-1.24.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3": [ { "comment_text": "", "digests": { "md5": "0ebc2c62d448f4a2051579a178161da6", "sha256": "25db13be0e9c2d6fc3bbf319dc4b86b579d9ffcf445f6e35fd2377b0459a9566" }, "downloads": -1, "filename": "mashumaro-1.3.tar.gz", "has_sig": false, "md5_digest": "0ebc2c62d448f4a2051579a178161da6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10171, "upload_time": "2019-01-09T15:10:49", "upload_time_iso_8601": "2019-01-09T15:10:49.504891Z", "url": "https://files.pythonhosted.org/packages/aa/73/41f4a42485093ef74e182ff32cf252c75d3f69237bad5d2169299c8829ce/mashumaro-1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4": [ { "comment_text": "", "digests": { "md5": "2603a9926c6320f4ae4533e01336c0e4", "sha256": "818e1401c1cee16a769b9afd4cd03c3334e8f19905eec9374da4d5b089faafe9" }, "downloads": -1, "filename": "mashumaro-1.4.tar.gz", "has_sig": false, "md5_digest": "2603a9926c6320f4ae4533e01336c0e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10119, "upload_time": "2019-01-20T09:51:18", "upload_time_iso_8601": "2019-01-20T09:51:18.741622Z", "url": "https://files.pythonhosted.org/packages/b6/ff/48ffe310aad1b4bc0016e1328558b43a671d4d1a7b6a18ea7960c4b46a1c/mashumaro-1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5": [ { "comment_text": "", "digests": { "md5": "2ff5a519585fe67aa79459fb23ccb64d", "sha256": "89590637f248e3be47e4e7b5f85db18739d3bfd60b59268da6a5609676fc83d7" }, "downloads": -1, "filename": "mashumaro-1.5.tar.gz", "has_sig": false, "md5_digest": "2ff5a519585fe67aa79459fb23ccb64d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10288, "upload_time": "2019-02-18T13:11:36", "upload_time_iso_8601": "2019-02-18T13:11:36.912679Z", "url": "https://files.pythonhosted.org/packages/d7/99/da453458bb72931a889f5a8c6768fb1b0a657becd6b9eba4fe9f4bb9a663/mashumaro-1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6": [ { "comment_text": "", "digests": { "md5": "7b4fe20403a82b7710171cba5d43273f", "sha256": "d241f7c957cc5a3b9f12af5a39dac378ad5713fd34ed3e918cc40ac88715c6fb" }, "downloads": -1, "filename": "mashumaro-1.6.tar.gz", "has_sig": false, "md5_digest": "7b4fe20403a82b7710171cba5d43273f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10799, "upload_time": "2019-02-23T12:15:55", "upload_time_iso_8601": "2019-02-23T12:15:55.000550Z", "url": "https://files.pythonhosted.org/packages/89/c0/8f1807179971eaf6f6179bc093431659b507eac4490c692ccb16cfd69cd5/mashumaro-1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "961c75a5ebbb0998c5a3d68be9aafa1a", "sha256": "f93a014c111bd44ef8c5a3fbc7f5eac4641191f9c9a3a5507257045ad48f0b36" }, "downloads": -1, "filename": "mashumaro-1.6.1.tar.gz", "has_sig": false, "md5_digest": "961c75a5ebbb0998c5a3d68be9aafa1a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12769, "upload_time": "2019-02-28T15:19:38", "upload_time_iso_8601": "2019-02-28T15:19:38.488820Z", "url": "https://files.pythonhosted.org/packages/fa/d3/13dd3b046a44f200320c8fa55bef874072ee79bdd0b37cf47956afdd7c87/mashumaro-1.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "8fd098d8b0fed730af7dc99735046946", "sha256": "3ac362aac0641a42b516bc7569a476a1179ea82082a03961202824310a49e753" }, "downloads": -1, "filename": "mashumaro-1.6.2.tar.gz", "has_sig": false, "md5_digest": "8fd098d8b0fed730af7dc99735046946", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12923, "upload_time": "2019-03-16T17:14:46", "upload_time_iso_8601": "2019-03-16T17:14:46.810817Z", "url": "https://files.pythonhosted.org/packages/90/5e/1cb91bc4e1f50daad9a5a1b27037827d55b3098abf2758f22c198039ed78/mashumaro-1.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7": [ { "comment_text": "", "digests": { "md5": "ce6ea008965d6eccd7bf56fa2eb966da", "sha256": "0e513d5c39c4c0db360628988bc86dfb7a4cbcefc6559d7aa42340caf639b4e5" }, "downloads": -1, "filename": "mashumaro-1.7.tar.gz", "has_sig": false, "md5_digest": "ce6ea008965d6eccd7bf56fa2eb966da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13129, "upload_time": "2019-06-22T14:38:40", "upload_time_iso_8601": "2019-06-22T14:38:40.417897Z", "url": "https://files.pythonhosted.org/packages/5e/82/98d7044758fad83d95ff669575abad324af14927cc64c2db2cf94a42d6e5/mashumaro-1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8": [ { "comment_text": "", "digests": { "md5": "358974bf6bbf891cb15dcd772cccf1df", "sha256": "2e39d085408b52e98fd01df66609dbc33853498bb32a52862831792084036fb3" }, "downloads": -1, "filename": "mashumaro-1.8.tar.gz", "has_sig": false, "md5_digest": "358974bf6bbf891cb15dcd772cccf1df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13185, "upload_time": "2019-10-27T13:40:00", "upload_time_iso_8601": "2019-10-27T13:40:00.786319Z", "url": "https://files.pythonhosted.org/packages/05/d5/48f9154a77f974ba793bf1ec3037a2440c950b762821c3b8acfde55fa675/mashumaro-1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.9": [ { "comment_text": "", "digests": { "md5": "1386cf8024293837875d4323536291fb", "sha256": "99e066ba40892ef77b589c91220b68780ed6160f6be707f39a2e60b7b885387e" }, "downloads": -1, "filename": "mashumaro-1.9.tar.gz", "has_sig": false, "md5_digest": "1386cf8024293837875d4323536291fb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13504, "upload_time": "2019-11-04T21:05:47", "upload_time_iso_8601": "2019-11-04T21:05:47.796352Z", "url": "https://files.pythonhosted.org/packages/53/99/bd7aff207c5cf247bd3ab65f2a052092f9e4610cc296bd0f0a62f7af254f/mashumaro-1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0": [ { "comment_text": "", "digests": { "md5": "4ed5e80952121eb03078fcc18b7b2180", "sha256": "fcb883057d1c7eccd8b2b567bbc6f7eac821e5bb0550ddf50010e70ef0a018eb" }, "downloads": -1, "filename": "mashumaro-2.0.tar.gz", "has_sig": false, "md5_digest": "4ed5e80952121eb03078fcc18b7b2180", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 25964, "upload_time": "2021-03-02T08:09:34", "upload_time_iso_8601": "2021-03-02T08:09:34.338542Z", "url": "https://files.pythonhosted.org/packages/4d/5d/72b2a2f0b7efc040374f6f44392c566f787e786e1a0f0a3b08f152a9ec4a/mashumaro-2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "de9ef99d19a9352245fe9bfb4c23cc5e", "sha256": "9e32266225b9523ccf55837cd098291512e6416c4e1b27106089ab99eb96a6a3" }, "downloads": -1, "filename": "mashumaro-2.0.1.tar.gz", "has_sig": false, "md5_digest": "de9ef99d19a9352245fe9bfb4c23cc5e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 26193, "upload_time": "2021-03-07T09:00:03", "upload_time_iso_8601": "2021-03-07T09:00:03.438507Z", "url": "https://files.pythonhosted.org/packages/8f/0e/623da98edfdc4c36c7a1702bf40058b1ca294820fa9eefc9154db18dda81/mashumaro-2.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "c58be972047834b41488fcc04ae5b702", "sha256": "ade42256bdf8dc9fe3c65a89645151c263719efd0d9463660329415caa79fcd2" }, "downloads": -1, "filename": "mashumaro-2.0.2.tar.gz", "has_sig": false, "md5_digest": "c58be972047834b41488fcc04ae5b702", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 26191, "upload_time": "2021-03-11T20:13:29", "upload_time_iso_8601": "2021-03-11T20:13:29.587492Z", "url": "https://files.pythonhosted.org/packages/35/bb/c97642c9ecf6eea4a45abe3190036a1afdbcb8e095a036489e13055d23a8/mashumaro-2.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1": [ { "comment_text": "", "digests": { "md5": "495c5b42c75648994113964fc28b98ff", "sha256": "45beec4365025562844e86253c09ff26f20b370a4067c84aa90f2c1b0778267e" }, "downloads": -1, "filename": "mashumaro-2.1.tar.gz", "has_sig": false, "md5_digest": "495c5b42c75648994113964fc28b98ff", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 33440, "upload_time": "2021-04-06T21:31:51", "upload_time_iso_8601": "2021-04-06T21:31:51.414791Z", "url": "https://files.pythonhosted.org/packages/aa/4b/284eb04685c54602984512dcbd0e7ddab6198b156b426e0b316c70f6568d/mashumaro-2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.10": [ { "comment_text": "", "digests": { "md5": "504d69df5a3316dca3c5bb1002a73ff3", "sha256": "22ba1287f99ca94143fc9ef1f04c36e904e1a513e0d3bbc8794b7c5b72d08ccb" }, "downloads": -1, "filename": "mashumaro-2.10-py3-none-any.whl", "has_sig": false, "md5_digest": "504d69df5a3316dca3c5bb1002a73ff3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 36582, "upload_time": "2021-12-30T20:38:55", "upload_time_iso_8601": "2021-12-30T20:38:55.481835Z", "url": "https://files.pythonhosted.org/packages/d8/2a/f72fef2fcbdb14ed31f39d39bef096531f0a3c979f3e97a6ebf0869b6e4e/mashumaro-2.10-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2fa7478439e9a8e56df3947d54999838", "sha256": "4ab1688e2ca655b1c68067e2c4cba1a3ae1ab70769cc6d101170f78ceccd1475" }, "downloads": -1, "filename": "mashumaro-2.10.tar.gz", "has_sig": false, "md5_digest": "2fa7478439e9a8e56df3947d54999838", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 53399, "upload_time": "2021-12-30T20:38:58", "upload_time_iso_8601": "2021-12-30T20:38:58.095393Z", "url": "https://files.pythonhosted.org/packages/1b/40/db650ee11703dfd005e396d5ae2235d271681c724c055ee01cd18b07df53/mashumaro-2.10.tar.gz", "yanked": false, "yanked_reason": null } ], "2.10.1": [ { "comment_text": "", "digests": { "md5": "d1bebd00356e12e9afe1ec20118e151b", "sha256": "ee734ed3dd378f4aa2da2fe0dd521b90740eaea8791ce4f051f736b54ccedeba" }, "downloads": -1, "filename": "mashumaro-2.10.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d1bebd00356e12e9afe1ec20118e151b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 36618, "upload_time": "2021-12-30T23:12:17", "upload_time_iso_8601": "2021-12-30T23:12:17.568251Z", "url": "https://files.pythonhosted.org/packages/25/dc/fbb7cb45c0a02f8d932f0e8b49abf078aed7e79ae4c519ba997bd488dc71/mashumaro-2.10.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5ac52e2b6d8334dd0ab9984d62bc3a52", "sha256": "1ae8239154801a24d6b58118b5a474b1a1bbaa5f2f751d551ed91295ad555881" }, "downloads": -1, "filename": "mashumaro-2.10.1.tar.gz", "has_sig": false, "md5_digest": "5ac52e2b6d8334dd0ab9984d62bc3a52", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 53444, "upload_time": "2021-12-30T23:12:20", "upload_time_iso_8601": "2021-12-30T23:12:20.200548Z", "url": "https://files.pythonhosted.org/packages/32/21/f517daaa0a14f506031d3d242913b9bb3635df8e34841b4d1a04aebb0d17/mashumaro-2.10.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.11": [ { "comment_text": "", "digests": { "md5": "73dfdfe9fe00b0f34bb3c9bf85a29e87", "sha256": "63ea9036ff07ff3c7c9cfdbf4fc29b563d99ea483dbe21bd8e7dcc3c18ceda34" }, "downloads": -1, "filename": "mashumaro-2.11-py3-none-any.whl", "has_sig": false, "md5_digest": "73dfdfe9fe00b0f34bb3c9bf85a29e87", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 36812, "upload_time": "2022-01-04T20:06:12", "upload_time_iso_8601": "2022-01-04T20:06:12.711445Z", "url": "https://files.pythonhosted.org/packages/92/9f/6870e7ae736674967558637eac65ce7ad37d61cc3ba41ad15ef6dd8990e4/mashumaro-2.11-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6fd1a6fe4ba216c633e3e0677e257693", "sha256": "0ead94075840ab4bbeb14138b8470fe99627dc209cd85020c37827b2a9364ed4" }, "downloads": -1, "filename": "mashumaro-2.11.tar.gz", "has_sig": false, "md5_digest": "6fd1a6fe4ba216c633e3e0677e257693", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 53724, "upload_time": "2022-01-04T20:06:15", "upload_time_iso_8601": "2022-01-04T20:06:15.700495Z", "url": "https://files.pythonhosted.org/packages/23/21/2d03a7dd52cd4a666087fef45d182a0028f61131e92175dd36f3a2ddc6da/mashumaro-2.11.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2": [ { "comment_text": "", "digests": { "md5": "f6780f3b7ad74d3d94b13a504f6c121d", "sha256": "1b61255364d33f1428dd6111fbd5a35c97de12dcce2deda1c9dc6a3d771a3dba" }, "downloads": -1, "filename": "mashumaro-2.2.tar.gz", "has_sig": false, "md5_digest": "f6780f3b7ad74d3d94b13a504f6c121d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 33489, "upload_time": "2021-04-08T22:53:48", "upload_time_iso_8601": "2021-04-08T22:53:48.790414Z", "url": "https://files.pythonhosted.org/packages/e9/ff/a570d8f124d23b041e0f61e02b847c611230d40e4adb32c0ddaca377f2af/mashumaro-2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3": [ { "comment_text": "", "digests": { "md5": "b2e043be7c25b458de6a8b9f34d37b41", "sha256": "c2c9fe3120f76ad974d9bd0c7586f85a9c3afd4289c2dc9dcc8a86042b4fee74" }, "downloads": -1, "filename": "mashumaro-2.3.tar.gz", "has_sig": false, "md5_digest": "b2e043be7c25b458de6a8b9f34d37b41", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 33603, "upload_time": "2021-04-19T13:23:07", "upload_time_iso_8601": "2021-04-19T13:23:07.000262Z", "url": "https://files.pythonhosted.org/packages/c2/3d/c295d002cf20ebeffd5a837096ebe4ada49ca49bdd551fb547505a520b67/mashumaro-2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.4": [ { "comment_text": "", "digests": { "md5": "7655f36fe3b5ae98a522d1313a8bc84b", "sha256": "2cc6cf093da7851dc0604d0fd5fea30cab9bf5ddc2de3a12f7f545303ccfa246" }, "downloads": -1, "filename": "mashumaro-2.4.tar.gz", "has_sig": false, "md5_digest": "7655f36fe3b5ae98a522d1313a8bc84b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 33768, "upload_time": "2021-04-22T12:41:38", "upload_time_iso_8601": "2021-04-22T12:41:38.478771Z", "url": "https://files.pythonhosted.org/packages/f0/b8/cce8b093283395d19bd0208ff480bce8ab20bf5ba3c902ddb0b77b18cd91/mashumaro-2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.5": [ { "comment_text": "", "digests": { "md5": "2361793773c1066cffa370f8fcf11c9e", "sha256": "ec402ecbbcc6b5d9b12a1ebfa90af4954fcd7583b745bcf22da156f2a55d1355" }, "downloads": -1, "filename": "mashumaro-2.5.tar.gz", "has_sig": false, "md5_digest": "2361793773c1066cffa370f8fcf11c9e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 33786, "upload_time": "2021-04-28T19:01:13", "upload_time_iso_8601": "2021-04-28T19:01:13.284724Z", "url": "https://files.pythonhosted.org/packages/0e/46/9761cb1b19758f1a5570c948c9759d4b46284c02c093c8595a1d48db2cad/mashumaro-2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6": [ { "comment_text": "", "digests": { "md5": "e20922395cb00fe7cbf98d7270f8d12c", "sha256": "e74c14f1c1dd27f1b1670c54d8405f5669e865b5f714ab2c40c45ff154aa217f" }, "downloads": -1, "filename": "mashumaro-2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "e20922395cb00fe7cbf98d7270f8d12c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 27819, "upload_time": "2021-07-31T11:41:00", "upload_time_iso_8601": "2021-07-31T11:41:00.538081Z", "url": "https://files.pythonhosted.org/packages/24/5a/d483cacbce647b89a877bfcb20e6b526993238d9e49255e77873972b9777/mashumaro-2.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "54acdd7e93bcbc15013e6e9fbf536ca5", "sha256": "6abdddc0f4820947ceaeedd7828077b0b3075e540d6fc050e8afad653d2a9279" }, "downloads": -1, "filename": "mashumaro-2.6.tar.gz", "has_sig": false, "md5_digest": "54acdd7e93bcbc15013e6e9fbf536ca5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 34323, "upload_time": "2021-07-31T11:41:02", "upload_time_iso_8601": "2021-07-31T11:41:02.849367Z", "url": "https://files.pythonhosted.org/packages/8c/11/83b2651352adf0a1fcafd486b2bc869c3a946a4f715397f4457124959595/mashumaro-2.6.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6.1": [ { "comment_text": "", "digests": { "md5": "139c5e0f87bf56035c9f3ec9bc9eae06", "sha256": "af9ea4c8a94d1f225fd11b1fa96b12a700593291875a6be9f9aecc18645e001a" }, "downloads": -1, "filename": "mashumaro-2.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "139c5e0f87bf56035c9f3ec9bc9eae06", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28233, "upload_time": "2021-08-02T11:52:56", "upload_time_iso_8601": "2021-08-02T11:52:56.314226Z", "url": "https://files.pythonhosted.org/packages/4a/60/46fba009f5040cea6df24d983278c8661b6680702637bcaea9cb0829a078/mashumaro-2.6.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "56748e62392d59b6821d2c7fbdbbd011", "sha256": "0a10c62d5f35d7c73765d5fdf8b2cd35939c6d89cff83488ddc6ad16fc6f8a93" }, "downloads": -1, "filename": "mashumaro-2.6.1.tar.gz", "has_sig": false, "md5_digest": "56748e62392d59b6821d2c7fbdbbd011", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 36141, "upload_time": "2021-08-02T11:52:58", "upload_time_iso_8601": "2021-08-02T11:52:58.002786Z", "url": "https://files.pythonhosted.org/packages/37/45/1f172faf72eef3056ef056597385b3ad0d6613c9d4ee237df6c60da0e6c4/mashumaro-2.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6.2": [ { "comment_text": "", "digests": { "md5": "2acc833cd717373fbcfd1333a23cb773", "sha256": "b5c67f8ca8e7016b8dfb117d8959b420d60b8c7dbda18483a3b0fea69de1bc03" }, "downloads": -1, "filename": "mashumaro-2.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2acc833cd717373fbcfd1333a23cb773", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28275, "upload_time": "2021-08-13T14:45:20", "upload_time_iso_8601": "2021-08-13T14:45:20.047970Z", "url": "https://files.pythonhosted.org/packages/0b/26/92b8fa06b5bfd3aa7937d5905232d4d0ab3bf25dfba333852e40e203aa18/mashumaro-2.6.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a0ab56c23f641c38f2c04e7657fdf1ee", "sha256": "036c04e71fd0360c0849780ab66fd546a1a00ec28b02630f6f77b7e3a10ff024" }, "downloads": -1, "filename": "mashumaro-2.6.2.tar.gz", "has_sig": false, "md5_digest": "a0ab56c23f641c38f2c04e7657fdf1ee", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 36150, "upload_time": "2021-08-13T14:45:22", "upload_time_iso_8601": "2021-08-13T14:45:22.009938Z", "url": "https://files.pythonhosted.org/packages/ce/7c/db85a0476d4b1ad4d4b013017c61fa31a76871d877f6b54cc6ee2635c137/mashumaro-2.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6.3": [ { "comment_text": "", "digests": { "md5": "84271db207965aac1ee91abd66807383", "sha256": "daee3ea52a5b5fee1d5e141329a53f702d73f4d64514f21b0f7e0d9424b9f5e2" }, "downloads": -1, "filename": "mashumaro-2.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "84271db207965aac1ee91abd66807383", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28270, "upload_time": "2021-08-23T08:27:10", "upload_time_iso_8601": "2021-08-23T08:27:10.823996Z", "url": "https://files.pythonhosted.org/packages/93/e4/8dcfe475a9a69c957f4827b41fcace38e5c10ae5a2a2973f606be202d038/mashumaro-2.6.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0f40e722e941b0faaa87a160a267fc1c", "sha256": "416f358731aad4043877e7f03a254129e95e4acbb01ca83cf5bc9be15a9adee9" }, "downloads": -1, "filename": "mashumaro-2.6.3.tar.gz", "has_sig": false, "md5_digest": "0f40e722e941b0faaa87a160a267fc1c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 36154, "upload_time": "2021-08-23T08:27:13", "upload_time_iso_8601": "2021-08-23T08:27:13.310470Z", "url": "https://files.pythonhosted.org/packages/93/91/7a3417c7720ddab5448b33d92a42eea35a23153e4393f019a580dad625f4/mashumaro-2.6.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6.4": [ { "comment_text": "", "digests": { "md5": "79d48e5e63d6442a99d6e05eb2f6511e", "sha256": "78891eef5e3cca577361d54b3d38d9302e468b82e390d66465b148d18768be1b" }, "downloads": -1, "filename": "mashumaro-2.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "79d48e5e63d6442a99d6e05eb2f6511e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 28401, "upload_time": "2021-09-03T08:11:03", "upload_time_iso_8601": "2021-09-03T08:11:03.280703Z", "url": "https://files.pythonhosted.org/packages/56/68/e47a45f3959ce0d669a51e471cb274db323758300f5dfc2e02c070a57380/mashumaro-2.6.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2fc3cbcaf6254805347e94886f0c289d", "sha256": "131a01821f9c795f1445ec5add674ff5227b6482213594ca1bbca9d226349773" }, "downloads": -1, "filename": "mashumaro-2.6.4.tar.gz", "has_sig": false, "md5_digest": "2fc3cbcaf6254805347e94886f0c289d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 36312, "upload_time": "2021-09-03T08:11:04", "upload_time_iso_8601": "2021-09-03T08:11:04.962704Z", "url": "https://files.pythonhosted.org/packages/96/8e/5c746dbc0fe2cc9ea9e957afa105fcf5f64562a0eb8be42d972ec440516b/mashumaro-2.6.4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.7": [ { "comment_text": "", "digests": { "md5": "fc325f6deb055ba18660ea9d99fff13f", "sha256": "4611c4df152c8eeb63de00033ff7408b8b50789f9e776f483d120415e9fd683f" }, "downloads": -1, "filename": "mashumaro-2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "fc325f6deb055ba18660ea9d99fff13f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 30640, "upload_time": "2021-09-14T19:33:11", "upload_time_iso_8601": "2021-09-14T19:33:11.556749Z", "url": "https://files.pythonhosted.org/packages/e3/d8/61ab55474aafe6ea8e372c235fef4f43db2f69fc8987f887c0adcd80d580/mashumaro-2.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5f50e3a36aa429423577b713dcf50cf7", "sha256": "17fcee91b4e74b7185d3d9ca9c2a2ab872cdaa0b2811e0905d350155171676e4" }, "downloads": -1, "filename": "mashumaro-2.7.tar.gz", "has_sig": false, "md5_digest": "5f50e3a36aa429423577b713dcf50cf7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 40616, "upload_time": "2021-09-14T19:33:13", "upload_time_iso_8601": "2021-09-14T19:33:13.571082Z", "url": "https://files.pythonhosted.org/packages/d7/00/3d46538d1347a1350b4f398b0d688344489b366fa1dd660ee8b341d056fb/mashumaro-2.7.tar.gz", "yanked": false, "yanked_reason": null } ], "2.8": [ { "comment_text": "", "digests": { "md5": "ca2d23c788deaa0c10a7f2598084cd58", "sha256": "04bdd898a3f73cf18c3e645dc44d3c9d36e9be7b3ed552b37be5d9680307c9d7" }, "downloads": -1, "filename": "mashumaro-2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "ca2d23c788deaa0c10a7f2598084cd58", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 32018, "upload_time": "2021-10-16T16:50:18", "upload_time_iso_8601": "2021-10-16T16:50:18.356736Z", "url": "https://files.pythonhosted.org/packages/e2/95/611d29de6d984e9b6d435ef73791dba87daefadcab9eabb5727645d51bf4/mashumaro-2.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2f2c6ba3d1e213566c12eb027b300983", "sha256": "fa7ff89e1f8d600423e3c0795a931a4d4429284de7c7548037e768191e376c66" }, "downloads": -1, "filename": "mashumaro-2.8.tar.gz", "has_sig": false, "md5_digest": "2f2c6ba3d1e213566c12eb027b300983", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 45732, "upload_time": "2021-10-16T16:50:21", "upload_time_iso_8601": "2021-10-16T16:50:21.898291Z", "url": "https://files.pythonhosted.org/packages/59/7e/2a0333ca05716f97e87e8aafc96cf1974a96e9e8bc62472816c8bfbb90ce/mashumaro-2.8.tar.gz", "yanked": false, "yanked_reason": null } ], "2.9": [ { "comment_text": "", "digests": { "md5": "26783d6909ba7ee7a46bb0000fd2121f", "sha256": "f616df410d82936b8bb2b4d32af570556685d77f49acf4228134b50230a69799" }, "downloads": -1, "filename": "mashumaro-2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "26783d6909ba7ee7a46bb0000fd2121f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34298, "upload_time": "2021-11-02T07:28:52", "upload_time_iso_8601": "2021-11-02T07:28:52.605250Z", "url": "https://files.pythonhosted.org/packages/bd/fb/3311c08e2bc136d2d23ba3773a08e706a18e74b692adeeddeb6bd26ac338/mashumaro-2.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "76da4a4d0b80c3a3238d94cee8650dd5", "sha256": "343b6e2d3e432e31973688c4c8821dcd6ef41fd33264b992afc4aecbfd155f18" }, "downloads": -1, "filename": "mashumaro-2.9.tar.gz", "has_sig": false, "md5_digest": "76da4a4d0b80c3a3238d94cee8650dd5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 49461, "upload_time": "2021-11-02T07:28:54", "upload_time_iso_8601": "2021-11-02T07:28:54.679177Z", "url": "https://files.pythonhosted.org/packages/7e/63/444b64d7177a49337e0698ce7b6d19d47509c5c963b3793c5ddf671d08f7/mashumaro-2.9.tar.gz", "yanked": false, "yanked_reason": null } ], "2.9.1": [ { "comment_text": "", "digests": { "md5": "3100889a8da510244f71e9a77aa82caa", "sha256": "14047540cdf9689b61c2d7bf18cdeae4bd63b521946a316811a5ab462077d5bb" }, "downloads": -1, "filename": "mashumaro-2.9.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3100889a8da510244f71e9a77aa82caa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34407, "upload_time": "2021-12-18T14:37:08", "upload_time_iso_8601": "2021-12-18T14:37:08.149856Z", "url": "https://files.pythonhosted.org/packages/9d/64/7c0d10e7e07f12c9d552f76a0546547abb82efc438fd13678de2d203162b/mashumaro-2.9.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "dd66beb99231d401cc46448aa4af52ec", "sha256": "6f800e734f2d060a097bc8b0e284994a0c37cc8c30380e7d0ffa368419b48fb7" }, "downloads": -1, "filename": "mashumaro-2.9.1.tar.gz", "has_sig": false, "md5_digest": "dd66beb99231d401cc46448aa4af52ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 49625, "upload_time": "2021-12-18T14:37:11", "upload_time_iso_8601": "2021-12-18T14:37:11.179446Z", "url": "https://files.pythonhosted.org/packages/eb/0e/919f2353dbfb5846734484e73cd025bd0a1dcbb4ee53e98e93aa68b46028/mashumaro-2.9.1.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0": [ { "comment_text": "", "digests": { "md5": "6cf675d9d22db16f9998b33d6c9c0f85", "sha256": "2537081099d004d0bdb2916c7d5c6e7616f10defd860b90ffa93fcf5902e4e60" }, "downloads": -1, "filename": "mashumaro-3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6cf675d9d22db16f9998b33d6c9c0f85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 55014, "upload_time": "2022-02-09T13:51:38", "upload_time_iso_8601": "2022-02-09T13:51:38.574589Z", "url": "https://files.pythonhosted.org/packages/67/d6/bdc59773a6e3e229a9670760f0896ed103296538fa54b15237241bf1761c/mashumaro-3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2abe349a27fd6240ed111d441715b70f", "sha256": "0e5c06faf17c9b7731e138c280fec56d8ccf9ffaccb7b0e2d9d8a923c850ff66" }, "downloads": -1, "filename": "mashumaro-3.0.tar.gz", "has_sig": false, "md5_digest": "2abe349a27fd6240ed111d441715b70f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 56060, "upload_time": "2022-02-09T13:51:41", "upload_time_iso_8601": "2022-02-09T13:51:41.213078Z", "url": "https://files.pythonhosted.org/packages/d8/8e/836a7ad835f57cc99ad8b10442a30f99249091f211eb7b796f6e10b862e9/mashumaro-3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "4f68be90ec1a8d7b1ae74e34171b53eb", "sha256": "47e9bacfe5c07fc887cc696ca42d0bc55012de342dce5d5a1c953c725fcaffcd" }, "downloads": -1, "filename": "mashumaro-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4f68be90ec1a8d7b1ae74e34171b53eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53974, "upload_time": "2022-04-03T11:30:48", "upload_time_iso_8601": "2022-04-03T11:30:48.347168Z", "url": "https://files.pythonhosted.org/packages/43/fa/2ccc7bf40095a4757988821f4a3c0f8f9c4b05115578ba22e8380060db11/mashumaro-3.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d1a5998dcaf8fa00a0d4ead4d1bc8112", "sha256": "c4947ace98e21f0ffe922ec30c2be41be8f4621361832f2042a3751932928eb8" }, "downloads": -1, "filename": "mashumaro-3.0.1.tar.gz", "has_sig": false, "md5_digest": "d1a5998dcaf8fa00a0d4ead4d1bc8112", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 56096, "upload_time": "2022-04-03T11:30:53", "upload_time_iso_8601": "2022-04-03T11:30:53.571000Z", "url": "https://files.pythonhosted.org/packages/77/ac/801214d297c3cac394e4f319b79d9c3164a881ff92ea618b4dbac7c440c2/mashumaro-3.0.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4f68be90ec1a8d7b1ae74e34171b53eb", "sha256": "47e9bacfe5c07fc887cc696ca42d0bc55012de342dce5d5a1c953c725fcaffcd" }, "downloads": -1, "filename": "mashumaro-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4f68be90ec1a8d7b1ae74e34171b53eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53974, "upload_time": "2022-04-03T11:30:48", "upload_time_iso_8601": "2022-04-03T11:30:48.347168Z", "url": "https://files.pythonhosted.org/packages/43/fa/2ccc7bf40095a4757988821f4a3c0f8f9c4b05115578ba22e8380060db11/mashumaro-3.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d1a5998dcaf8fa00a0d4ead4d1bc8112", "sha256": "c4947ace98e21f0ffe922ec30c2be41be8f4621361832f2042a3751932928eb8" }, "downloads": -1, "filename": "mashumaro-3.0.1.tar.gz", "has_sig": false, "md5_digest": "d1a5998dcaf8fa00a0d4ead4d1bc8112", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 56096, "upload_time": "2022-04-03T11:30:53", "upload_time_iso_8601": "2022-04-03T11:30:53.571000Z", "url": "https://files.pythonhosted.org/packages/77/ac/801214d297c3cac394e4f319b79d9c3164a881ff92ea618b4dbac7c440c2/mashumaro-3.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }