New Upstream Snapshot - python-marshmallow

Ready changes

Summary

Merged new upstream version: 3.19.0+git20230118.1.b80adb0 (was: 3.18.0+git20221026.1.82f5020).

Resulting package

Built on 2023-01-19T12:41 (took 5m4s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots python3-marshmallow-docapt install -t fresh-snapshots python3-marshmallow

Lintian Result

Diff

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 96d1cfd..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-open_collective: "marshmallow"
-tidelift: "pypi/marshmallow"
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 3f590c7..0000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: 2
-updates:
-- package-ecosystem: pip
-  directory: "/"
-  schedule:
-    interval: daily
-  open-pull-requests-limit: 10
-  ignore:
-  - dependency-name: sphinx
-    versions:
-    - 3.5.0
-    - 3.5.1
-    - 3.5.2
-    - 3.5.3
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
deleted file mode 100644
index 239f9a0..0000000
--- a/.pre-commit-config.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-repos:
-- repo: https://github.com/asottile/pyupgrade
-  rev: v2.31.1
-  hooks:
-  - id: pyupgrade
-    args: [--py37-plus]
-- repo: https://github.com/python/black
-  rev: 22.3.0
-  hooks:
-  - id: black
-    language_version: python3
-- repo: https://github.com/pycqa/flake8
-  rev: 4.0.1
-  hooks:
-  - id: flake8
-    additional_dependencies: [flake8-bugbear==22.1.11]
-- repo: https://github.com/pre-commit/mirrors-mypy
-  rev: v0.960
-  hooks:
-  - id: mypy
-    additional_dependencies: [types-simplejson, types-pytz, packaging]
-    # these files are checked under `tox -e mypy-test`
-    exclude: ^tests/mypy_test_cases/.*$
-- repo: https://github.com/asottile/blacken-docs
-  rev: v1.12.1
-  hooks:
-  - id: blacken-docs
-    additional_dependencies: [black==22.1.0]
diff --git a/.readthedocs.yml b/.readthedocs.yml
deleted file mode 100644
index d61a1ac..0000000
--- a/.readthedocs.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-version: 2
-sphinx:
-  configuration: docs/conf.py
-formats: []
-python:
-  version: 3.8
-  install:
-    - method: pip
-      path: .
-      extra_requirements:
-        - docs
diff --git a/AUTHORS.rst b/AUTHORS.rst
index f4aec16..a0a928a 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -170,3 +170,4 @@ Contributors (chronological)
 - Isira Seneviratne `@Isira-Seneviratne <https://github.com/Isira-Seneviratne>`_
 - Karthikeyan Singaravelan `@tirkarthi  <https://github.com/tirkarthi>`_
 - Marco Satti `@marcosatti  <https://github.com/marcosatti>`_
+- Ivo Reumkens `@vanHoi <https://github.com/vanHoi>`_
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index ec2a084..51cb1d4 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,23 @@
 Changelog
 ---------
 
+3.20.0 (unreleased)
+*******************
+
+Other changes:
+
+- Officially support Python 3.11 (:pr:`2067`).
+
+3.19.0 (2022-11-11)
+*******************
+
+Features:
+
+- Add ``timestamp`` and ``timestamp_ms`` formats to `fields.DateTime`
+  (:issue:`612`).
+  Thanks :user:`vgavro` for the suggestion and thanks :user:`vanHoi` for
+  the PR.
+
 3.18.0 (2022-09-15)
 *******************
 
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index c4fb805..0000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1 +0,0 @@
-For the marshmallow code of conduct, see https://marshmallow.readthedocs.io/en/dev/code_of_conduct.html
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..1d214dd
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,191 @@
+Metadata-Version: 2.1
+Name: marshmallow
+Version: 3.19.0
+Summary: A lightweight library for converting complex datatypes to and from native Python datatypes.
+Home-page: https://github.com/marshmallow-code/marshmallow
+Author: Steven Loria
+Author-email: sloria1@gmail.com
+License: MIT
+Project-URL: Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html
+Project-URL: Issues, https://github.com/marshmallow-code/marshmallow/issues
+Project-URL: Funding, https://opencollective.com/marshmallow
+Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi
+Keywords: serialization,rest,json,api,marshal,marshalling,deserialization,validation,schema
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Requires-Python: >=3.7
+Provides-Extra: dev
+Provides-Extra: docs
+Provides-Extra: lint
+Provides-Extra: tests
+License-File: LICENSE
+
+********************************************
+marshmallow: simplified object serialization
+********************************************
+
+.. image:: https://badgen.net/pypi/v/marshmallow
+    :target: https://pypi.org/project/marshmallow/
+    :alt: Latest version
+
+.. image:: https://dev.azure.com/sloria/sloria/_apis/build/status/marshmallow-code.marshmallow?branchName=dev
+    :target: https://dev.azure.com/sloria/sloria/_build/latest?definitionId=5&branchName=dev
+    :alt: Build status
+
+.. image:: https://readthedocs.org/projects/marshmallow/badge/
+   :target: https://marshmallow.readthedocs.io/
+   :alt: Documentation
+   
+.. image:: https://badgen.net/badge/code%20style/black/000
+    :target: https://github.com/ambv/black
+    :alt: code style: black
+
+
+**marshmallow** is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.
+
+.. code-block:: python
+
+    from datetime import date
+    from pprint import pprint
+
+    from marshmallow import Schema, fields
+
+
+    class ArtistSchema(Schema):
+        name = fields.Str()
+
+
+    class AlbumSchema(Schema):
+        title = fields.Str()
+        release_date = fields.Date()
+        artist = fields.Nested(ArtistSchema())
+
+
+    bowie = dict(name="David Bowie")
+    album = dict(artist=bowie, title="Hunky Dory", release_date=date(1971, 12, 17))
+
+    schema = AlbumSchema()
+    result = schema.dump(album)
+    pprint(result, indent=2)
+    # { 'artist': {'name': 'David Bowie'},
+    #   'release_date': '1971-12-17',
+    #   'title': 'Hunky Dory'}
+
+
+In short, marshmallow schemas can be used to:
+
+- **Validate** input data.
+- **Deserialize** input data to app-level objects.
+- **Serialize** app-level objects to primitive Python types. The serialized objects can then be rendered to standard formats such as JSON for use in an HTTP API.
+
+Get It Now
+==========
+
+::
+
+    $ pip install -U marshmallow
+
+
+Documentation
+=============
+
+Full documentation is available at https://marshmallow.readthedocs.io/ .
+
+Requirements
+============
+
+- Python >= 3.7
+
+Ecosystem
+=========
+
+A list of marshmallow-related libraries can be found at the GitHub wiki here:
+
+https://github.com/marshmallow-code/marshmallow/wiki/Ecosystem
+
+Credits
+=======
+
+Contributors
+------------
+
+This project exists thanks to all the people who contribute.
+
+**You're highly encouraged to participate in marshmallow's development.**
+Check out the `Contributing Guidelines <https://marshmallow.readthedocs.io/en/latest/contributing.html>`_ to see how you can help.
+
+Thank you to all who have already contributed to marshmallow!
+
+.. image:: https://opencollective.com/marshmallow/contributors.svg?width=890&button=false
+    :target: https://marshmallow.readthedocs.io/en/latest/authors.html
+    :alt: Contributors
+
+Backers
+-------
+
+If you find marshmallow useful, please consider supporting the team with
+a donation. Your donation helps move marshmallow forward.
+
+Thank you to all our backers! [`Become a backer`_]
+
+.. _`Become a backer`: https://opencollective.com/marshmallow#backer
+
+.. image:: https://opencollective.com/marshmallow/backers.svg?width=890
+    :target: https://opencollective.com/marshmallow#backers
+    :alt: Backers
+
+Sponsors
+--------
+
+Support this project by becoming a sponsor (or ask your company to support this project by becoming a sponsor).
+Your logo will show up here with a link to your website. [`Become a sponsor`_]
+
+.. _`Become a sponsor`: https://opencollective.com/marshmallow#sponsor
+
+.. image:: https://opencollective.com/marshmallow/sponsor/0/avatar.svg
+    :target: https://opencollective.com/marshmallow/sponsor/0/website
+    :alt: Sponsors
+
+.. image:: https://opencollective.com/static/images/become_sponsor.svg
+    :target: https://opencollective.com/marshmallow#sponsor
+    :alt: Become a sponsor
+
+
+Professional Support
+====================
+
+Professionally-supported marshmallow is now available through the
+`Tidelift Subscription <https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme>`_.
+
+Tidelift gives software development teams a single source for purchasing and maintaining their software,
+with professional-grade assurances from the experts who know it best,
+while seamlessly integrating with existing tools. [`Get professional support`_]
+
+.. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=marshmallow&utm_medium=referral&utm_campaign=github
+
+.. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png
+    :target: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme
+    :alt: Get supported marshmallow with Tidelift
+
+
+Project Links
+=============
+
+- Docs: https://marshmallow.readthedocs.io/
+- Changelog: https://marshmallow.readthedocs.io/en/latest/changelog.html
+- Contributing Guidelines: https://marshmallow.readthedocs.io/en/latest/contributing.html
+- PyPI: https://pypi.python.org/pypi/marshmallow
+- Issues: https://github.com/marshmallow-code/marshmallow/issues
+- Donate: https://opencollective.com/marshmallow
+
+License
+=======
+
+MIT licensed. See the bundled `LICENSE <https://github.com/marshmallow-code/marshmallow/blob/dev/LICENSE>`_ file for more details.
diff --git a/RELEASING.md b/RELEASING.md
deleted file mode 100644
index 7659fc0..0000000
--- a/RELEASING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Releasing
-
-1. Bump version in `src/marshmallow/__init__.py` and update the changelog
-   with today's date.
-2. Commit:  `git commit -m "Bump version and update changelog"`
-3. Tag the commit: `git tag x.y.z`
-4. Push: `git push --tags origin dev`. CI will take care of the
-   PyPI release.
-5. Add release notes on Tidelift.
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index 92ec2bb..0000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Security Contact Information
-
-To report a security vulnerability, please use the
-[Tidelift security contact](https://tidelift.com/security).
-Tidelift will coordinate the fix and disclosure.
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
deleted file mode 100644
index fd895e4..0000000
--- a/azure-pipelines.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-trigger:
-  branches:
-    include: [dev, 2.x-line, test-me-*]
-  tags:
-    include: ['*']
-
-resources:
-  repositories:
-    - repository: sloria
-      type: github
-      endpoint: github
-      name: sloria/azure-pipeline-templates
-      ref: refs/heads/sloria
-
-jobs:
-- template: job--python-tox.yml@sloria
-  parameters:
-    toxenvs: [lint, mypy-test, py37, py310]
-    os: linux
-- template: job--pypi-release.yml@sloria
-  parameters:
-    dependsOn:
-      - tox_linux
diff --git a/debian/changelog b/debian/changelog
index ecdafe2..834d05f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+python-marshmallow (3.19.0+git20230118.1.b80adb0-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Thu, 19 Jan 2023 12:37:58 -0000
+
 python-marshmallow (3.18.0-1) unstable; urgency=medium
 
   * New upstream release
diff --git a/debian/patches/0001-remove-privacy-breaches b/debian/patches/0001-remove-privacy-breaches
index fb53228..e419ea4 100644
--- a/debian/patches/0001-remove-privacy-breaches
+++ b/debian/patches/0001-remove-privacy-breaches
@@ -1,9 +1,11 @@
 From: Federico Ceratto <federico@debian.org>
 Subject: Remove privacy breaches
 
---- a/docs/conf.py
-+++ b/docs/conf.py
-@@ -13,9 +13,6 @@
+Index: python-marshmallow.git/docs/conf.py
+===================================================================
+--- python-marshmallow.git.orig/docs/conf.py
++++ python-marshmallow.git/docs/conf.py
+@@ -13,9 +13,6 @@ extensions = [
      "sphinx.ext.intersphinx",
      "sphinx.ext.viewcode",
      "alabaster",
@@ -13,7 +15,7 @@ Subject: Remove privacy breaches
  ]
  
  primary_domain = "py"
-@@ -59,10 +56,6 @@
+@@ -59,10 +56,6 @@ html_theme_options = {
      "logo": "marshmallow-logo.png",
      "description": "Object serialization and deserialization, lightweight and fluffy.",
      "description_font_style": "italic",
@@ -24,9 +26,11 @@ Subject: Remove privacy breaches
      "opencollective": "marshmallow",
      "tidelift_url": (
          "https://tidelift.com/subscription/pkg/pypi-marshmallow"
---- a/docs/_templates/donate.html
-+++ b/docs/_templates/donate.html
-@@ -17,7 +17,6 @@
+Index: python-marshmallow.git/docs/_templates/donate.html
+===================================================================
+--- python-marshmallow.git.orig/docs/_templates/donate.html
++++ python-marshmallow.git/docs/_templates/donate.html
+@@ -17,7 +17,6 @@ If you find marshmallow useful, please c
  {% if theme_opencollective %}
  <p>
  <a class="badge" href="https://opencollective.com/{{ theme_opencollective }}" target="_blank">
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..50441ab
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,2 @@
+marshmallow.docset
+marshmallow.tgz
diff --git a/docs/conf.py b/docs/conf.py
index 0066953..8831881 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -81,14 +81,14 @@ html_theme_options = {
 }
 
 html_sidebars = {
-    "index": ["about.html", "donate.html", "useful-links.html", "searchbox.html"],
+    "index": ["about.html", "searchbox.html", "donate.html", "useful-links.html"],
     "**": [
         "about.html",
+        "searchbox.html",
         "donate.html",
         "useful-links.html",
         "localtoc.html",
         "relations.html",
-        "searchbox.html",
     ],
 }
 
diff --git a/performance/benchmark.py b/performance/benchmark.py
deleted file mode 100644
index 9a30a1e..0000000
--- a/performance/benchmark.py
+++ /dev/null
@@ -1,155 +0,0 @@
-"""Simple benchmark for Marshmallow serialization of a moderately complex object.
-
-Uses the `timeit` module to benchmark serializing an object through Marshmallow.
-"""
-import argparse
-import cProfile
-import gc
-import timeit
-import datetime
-
-from marshmallow import Schema, fields, ValidationError, post_dump
-
-
-# Custom validator
-def must_not_be_blank(data):
-    if not data:
-        raise ValidationError("Data not provided.")
-
-
-class AuthorSchema(Schema):
-    id = fields.Int(dump_only=True)
-    first = fields.Str()
-    last = fields.Str()
-    book_count = fields.Float()
-    age = fields.Float()
-    address = fields.Str()
-    full_name = fields.Method("get_full_name")
-
-    def get_full_name(self, author):
-        return f"{author.last}, {author.first}"
-
-
-class QuoteSchema(Schema):
-    id = fields.Int(dump_only=True)
-    author = fields.Nested(AuthorSchema, validate=must_not_be_blank)
-    content = fields.Str(required=True, validate=must_not_be_blank)
-    posted_at = fields.DateTime(dump_only=True)
-    book_name = fields.Str()
-    page_number = fields.Float()
-    line_number = fields.Float()
-    col_number = fields.Float()
-
-    @post_dump
-    def add_full_name(self, data, **kwargs):
-        data["author_full"] = "{}, {}".format(
-            data["author"]["last"], data["author"]["first"]
-        )
-        return data
-
-
-class Author:
-    def __init__(self, id, first, last, book_count, age, address):
-        self.id = id
-        self.first = first
-        self.last = last
-        self.book_count = book_count
-        self.age = age
-        self.address = address
-
-
-class Quote:
-    def __init__(
-        self,
-        id,
-        author,
-        content,
-        posted_at,
-        book_name,
-        page_number,
-        line_number,
-        col_number,
-    ):
-        self.id = id
-        self.author = author
-        self.content = content
-        self.posted_at = posted_at
-        self.book_name = book_name
-        self.page_number = page_number
-        self.line_number = line_number
-        self.col_number = col_number
-
-
-def run_timeit(quotes, iterations, repeat, profile=False):
-    quotes_schema = QuoteSchema(many=True)
-    if profile:
-        profile = cProfile.Profile()
-        profile.enable()
-
-    gc.collect()
-    best = min(
-        timeit.repeat(
-            lambda: quotes_schema.dump(quotes),
-            "gc.enable()",
-            number=iterations,
-            repeat=repeat,
-        )
-    )
-    if profile:
-        profile.disable()
-        profile.dump_stats("marshmallow.pprof")
-
-    usec = best * 1e6 / iterations
-    return usec
-
-
-def main():
-    parser = argparse.ArgumentParser(description="Runs a benchmark of Marshmallow.")
-    parser.add_argument(
-        "--iterations",
-        type=int,
-        default=1000,
-        help="Number of iterations to run per test.",
-    )
-    parser.add_argument(
-        "--repeat",
-        type=int,
-        default=5,
-        help="Number of times to repeat the performance test.  The minimum will "
-        "be used.",
-    )
-    parser.add_argument(
-        "--object-count", type=int, default=20, help="Number of objects to dump."
-    )
-    parser.add_argument(
-        "--profile",
-        action="store_true",
-        help="Whether or not to profile Marshmallow while running the benchmark.",
-    )
-    args = parser.parse_args()
-
-    quotes = []
-
-    for i in range(args.object_count):
-        quotes.append(
-            Quote(
-                i,
-                Author(i, "Foo", "Bar", 42, 66, "123 Fake St"),
-                "Hello World",
-                datetime.datetime(2019, 7, 4, tzinfo=datetime.timezone.utc),
-                "The World",
-                34,
-                3,
-                70,
-            )
-        )
-
-    print(
-        "Benchmark Result: {:.2f} usec/dump".format(
-            run_timeit(quotes, args.iterations, args.repeat, profile=args.profile)
-        )
-    )
-
-
-if __name__ == "__main__":
-    main()
diff --git a/setup.cfg b/setup.cfg
index 330163a..99e8c91 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -2,10 +2,9 @@
 license_files = LICENSE
 
 [flake8]
-extend-ignore = E203, E266, E501, E731, B903
 max-line-length = 90
 max-complexity = 18
-select = B,C,E,F,W,T4,B9
+extend-ignore = E203, E266, E501, E731, B903
 
 [tool:pytest]
 norecursedirs = .git .ropeproject .tox docs env venv tests/mypy_test_cases
@@ -17,3 +16,8 @@ warn_unreachable = true
 warn_unused_ignores = true
 warn_redundant_casts = true
 no_implicit_optional = true
+
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index 286ec75..1911661 100644
--- a/setup.py
+++ b/setup.py
@@ -4,17 +4,17 @@ from setuptools import setup, find_packages
 EXTRAS_REQUIRE = {
     "tests": ["pytest", "pytz", "simplejson"],
     "lint": [
-        "mypy==0.971",
-        "flake8==5.0.4",
-        "flake8-bugbear==22.9.11",
+        "mypy==0.991",
+        "flake8==6.0.0",
+        "flake8-bugbear==23.1.17",
         "pre-commit~=2.4",
     ],
     "docs": [
-        "sphinx==5.1.1",
+        "sphinx==6.1.3",
         "sphinx-issues==3.0.1",
-        "alabaster==0.7.12",
+        "alabaster==0.7.13",
         "sphinx-version-warning==1.1.2",
-        "autodocsumm==0.2.9",
+        "autodocsumm==0.2.10",
     ],
 }
 EXTRAS_REQUIRE["dev"] = EXTRAS_REQUIRE["tests"] + EXTRAS_REQUIRE["lint"] + ["tox"]
@@ -83,6 +83,7 @@ setup(
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: 3.10",
+        "Programming Language :: Python :: 3.11",
     ],
     test_suite="tests",
     project_urls={
diff --git a/src/marshmallow.egg-info/PKG-INFO b/src/marshmallow.egg-info/PKG-INFO
new file mode 100644
index 0000000..1d214dd
--- /dev/null
+++ b/src/marshmallow.egg-info/PKG-INFO
@@ -0,0 +1,191 @@
+Metadata-Version: 2.1
+Name: marshmallow
+Version: 3.19.0
+Summary: A lightweight library for converting complex datatypes to and from native Python datatypes.
+Home-page: https://github.com/marshmallow-code/marshmallow
+Author: Steven Loria
+Author-email: sloria1@gmail.com
+License: MIT
+Project-URL: Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html
+Project-URL: Issues, https://github.com/marshmallow-code/marshmallow/issues
+Project-URL: Funding, https://opencollective.com/marshmallow
+Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi
+Keywords: serialization,rest,json,api,marshal,marshalling,deserialization,validation,schema
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Requires-Python: >=3.7
+Provides-Extra: dev
+Provides-Extra: docs
+Provides-Extra: lint
+Provides-Extra: tests
+License-File: LICENSE
+
+********************************************
+marshmallow: simplified object serialization
+********************************************
+
+.. image:: https://badgen.net/pypi/v/marshmallow
+    :target: https://pypi.org/project/marshmallow/
+    :alt: Latest version
+
+.. image:: https://dev.azure.com/sloria/sloria/_apis/build/status/marshmallow-code.marshmallow?branchName=dev
+    :target: https://dev.azure.com/sloria/sloria/_build/latest?definitionId=5&branchName=dev
+    :alt: Build status
+
+.. image:: https://readthedocs.org/projects/marshmallow/badge/
+   :target: https://marshmallow.readthedocs.io/
+   :alt: Documentation
+   
+.. image:: https://badgen.net/badge/code%20style/black/000
+    :target: https://github.com/ambv/black
+    :alt: code style: black
+
+
+**marshmallow** is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.
+
+.. code-block:: python
+
+    from datetime import date
+    from pprint import pprint
+
+    from marshmallow import Schema, fields
+
+
+    class ArtistSchema(Schema):
+        name = fields.Str()
+
+
+    class AlbumSchema(Schema):
+        title = fields.Str()
+        release_date = fields.Date()
+        artist = fields.Nested(ArtistSchema())
+
+
+    bowie = dict(name="David Bowie")
+    album = dict(artist=bowie, title="Hunky Dory", release_date=date(1971, 12, 17))
+
+    schema = AlbumSchema()
+    result = schema.dump(album)
+    pprint(result, indent=2)
+    # { 'artist': {'name': 'David Bowie'},
+    #   'release_date': '1971-12-17',
+    #   'title': 'Hunky Dory'}
+
+
+In short, marshmallow schemas can be used to:
+
+- **Validate** input data.
+- **Deserialize** input data to app-level objects.
+- **Serialize** app-level objects to primitive Python types. The serialized objects can then be rendered to standard formats such as JSON for use in an HTTP API.
+
+Get It Now
+==========
+
+::
+
+    $ pip install -U marshmallow
+
+
+Documentation
+=============
+
+Full documentation is available at https://marshmallow.readthedocs.io/ .
+
+Requirements
+============
+
+- Python >= 3.7
+
+Ecosystem
+=========
+
+A list of marshmallow-related libraries can be found at the GitHub wiki here:
+
+https://github.com/marshmallow-code/marshmallow/wiki/Ecosystem
+
+Credits
+=======
+
+Contributors
+------------
+
+This project exists thanks to all the people who contribute.
+
+**You're highly encouraged to participate in marshmallow's development.**
+Check out the `Contributing Guidelines <https://marshmallow.readthedocs.io/en/latest/contributing.html>`_ to see how you can help.
+
+Thank you to all who have already contributed to marshmallow!
+
+.. image:: https://opencollective.com/marshmallow/contributors.svg?width=890&button=false
+    :target: https://marshmallow.readthedocs.io/en/latest/authors.html
+    :alt: Contributors
+
+Backers
+-------
+
+If you find marshmallow useful, please consider supporting the team with
+a donation. Your donation helps move marshmallow forward.
+
+Thank you to all our backers! [`Become a backer`_]
+
+.. _`Become a backer`: https://opencollective.com/marshmallow#backer
+
+.. image:: https://opencollective.com/marshmallow/backers.svg?width=890
+    :target: https://opencollective.com/marshmallow#backers
+    :alt: Backers
+
+Sponsors
+--------
+
+Support this project by becoming a sponsor (or ask your company to support this project by becoming a sponsor).
+Your logo will show up here with a link to your website. [`Become a sponsor`_]
+
+.. _`Become a sponsor`: https://opencollective.com/marshmallow#sponsor
+
+.. image:: https://opencollective.com/marshmallow/sponsor/0/avatar.svg
+    :target: https://opencollective.com/marshmallow/sponsor/0/website
+    :alt: Sponsors
+
+.. image:: https://opencollective.com/static/images/become_sponsor.svg
+    :target: https://opencollective.com/marshmallow#sponsor
+    :alt: Become a sponsor
+
+
+Professional Support
+====================
+
+Professionally-supported marshmallow is now available through the
+`Tidelift Subscription <https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme>`_.
+
+Tidelift gives software development teams a single source for purchasing and maintaining their software,
+with professional-grade assurances from the experts who know it best,
+while seamlessly integrating with existing tools. [`Get professional support`_]
+
+.. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=marshmallow&utm_medium=referral&utm_campaign=github
+
+.. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png
+    :target: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme
+    :alt: Get supported marshmallow with Tidelift
+
+
+Project Links
+=============
+
+- Docs: https://marshmallow.readthedocs.io/
+- Changelog: https://marshmallow.readthedocs.io/en/latest/changelog.html
+- Contributing Guidelines: https://marshmallow.readthedocs.io/en/latest/contributing.html
+- PyPI: https://pypi.python.org/pypi/marshmallow
+- Issues: https://github.com/marshmallow-code/marshmallow/issues
+- Donate: https://opencollective.com/marshmallow
+
+License
+=======
+
+MIT licensed. See the bundled `LICENSE <https://github.com/marshmallow-code/marshmallow/blob/dev/LICENSE>`_ file for more details.
diff --git a/src/marshmallow.egg-info/SOURCES.txt b/src/marshmallow.egg-info/SOURCES.txt
new file mode 100644
index 0000000..42c6108
--- /dev/null
+++ b/src/marshmallow.egg-info/SOURCES.txt
@@ -0,0 +1,85 @@
+AUTHORS.rst
+CHANGELOG.rst
+CONTRIBUTING.rst
+LICENSE
+MANIFEST.in
+NOTICE
+README.rst
+pyproject.toml
+setup.cfg
+setup.py
+docs/.gitignore
+docs/about.rst.inc
+docs/api_reference.rst
+docs/authors.rst
+docs/changelog.rst
+docs/code_of_conduct.rst
+docs/conf.py
+docs/contributing.rst
+docs/custom_fields.rst
+docs/dashing.json
+docs/ecosystem.rst
+docs/examples.rst
+docs/extending.rst
+docs/index.rst
+docs/install.rst
+docs/kudos.rst
+docs/license.rst
+docs/marshmallow.class_registry.rst
+docs/marshmallow.decorators.rst
+docs/marshmallow.error_store.rst
+docs/marshmallow.exceptions.rst
+docs/marshmallow.fields.rst
+docs/marshmallow.schema.rst
+docs/marshmallow.utils.rst
+docs/marshmallow.validate.rst
+docs/nesting.rst
+docs/quickstart.rst
+docs/upgrading.rst
+docs/whos_using.rst
+docs/why.rst
+docs/_static/marshmallow-logo.png
+docs/_static/css/versionwarning.css
+docs/_templates/donate.html
+docs/_templates/useful-links.html
+examples/flask_example.py
+examples/inflection_example.py
+examples/package_json_example.py
+examples/peewee_example.py
+examples/textblob_example.py
+src/marshmallow/__init__.py
+src/marshmallow/base.py
+src/marshmallow/class_registry.py
+src/marshmallow/decorators.py
+src/marshmallow/error_store.py
+src/marshmallow/exceptions.py
+src/marshmallow/fields.py
+src/marshmallow/orderedset.py
+src/marshmallow/py.typed
+src/marshmallow/schema.py
+src/marshmallow/types.py
+src/marshmallow/utils.py
+src/marshmallow/validate.py
+src/marshmallow/warnings.py
+src/marshmallow.egg-info/PKG-INFO
+src/marshmallow.egg-info/SOURCES.txt
+src/marshmallow.egg-info/dependency_links.txt
+src/marshmallow.egg-info/not-zip-safe
+src/marshmallow.egg-info/requires.txt
+src/marshmallow.egg-info/top_level.txt
+tests/__init__.py
+tests/base.py
+tests/conftest.py
+tests/foo_serializer.py
+tests/test_decorators.py
+tests/test_deserialization.py
+tests/test_error_store.py
+tests/test_exceptions.py
+tests/test_fields.py
+tests/test_options.py
+tests/test_registry.py
+tests/test_schema.py
+tests/test_serialization.py
+tests/test_utils.py
+tests/test_validate.py
+tests/mypy_test_cases/test_validation_error.py
\ No newline at end of file
diff --git a/src/marshmallow.egg-info/dependency_links.txt b/src/marshmallow.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/marshmallow.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/src/marshmallow.egg-info/not-zip-safe b/src/marshmallow.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/marshmallow.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/src/marshmallow.egg-info/requires.txt b/src/marshmallow.egg-info/requires.txt
new file mode 100644
index 0000000..ca0e318
--- /dev/null
+++ b/src/marshmallow.egg-info/requires.txt
@@ -0,0 +1,29 @@
+packaging>=17.0
+
+[dev]
+flake8-bugbear==23.1.17
+flake8==6.0.0
+mypy==0.991
+pre-commit~=2.4
+pytest
+pytz
+simplejson
+tox
+
+[docs]
+alabaster==0.7.13
+autodocsumm==0.2.10
+sphinx-issues==3.0.1
+sphinx-version-warning==1.1.2
+sphinx==6.1.3
+
+[lint]
+flake8-bugbear==23.1.17
+flake8==6.0.0
+mypy==0.991
+pre-commit~=2.4
+
+[tests]
+pytest
+pytz
+simplejson
diff --git a/src/marshmallow.egg-info/top_level.txt b/src/marshmallow.egg-info/top_level.txt
new file mode 100644
index 0000000..85efe39
--- /dev/null
+++ b/src/marshmallow.egg-info/top_level.txt
@@ -0,0 +1 @@
+marshmallow
diff --git a/src/marshmallow/__init__.py b/src/marshmallow/__init__.py
index 6ff7589..3ec24fe 100644
--- a/src/marshmallow/__init__.py
+++ b/src/marshmallow/__init__.py
@@ -16,7 +16,7 @@ from marshmallow.utils import EXCLUDE, INCLUDE, RAISE, missing, pprint
 
 from . import fields
 
-__version__ = "3.18.0"
+__version__ = "3.19.0"
 __parsed_version__ = Version(__version__)
 __version_info__: tuple[int, int, int] | tuple[
     int, int, int, str, int
diff --git a/src/marshmallow/decorators.py b/src/marshmallow/decorators.py
index c71038d..bb96b87 100644
--- a/src/marshmallow/decorators.py
+++ b/src/marshmallow/decorators.py
@@ -61,7 +61,7 @@ Example: ::
 from __future__ import annotations
 
 import functools
-from typing import Any, Callable, Dict, Optional, Tuple, Union, cast
+from typing import Any, Callable, cast
 
 PRE_DUMP = "pre_dump"
 POST_DUMP = "post_dump"
@@ -72,9 +72,7 @@ VALIDATES_SCHEMA = "validates_schema"
 
 
 class MarshmallowHook:
-    __marshmallow_hook__ = (
-        None
-    )  # type: Optional[Dict[Union[Tuple[str, bool], str], Any]]
+    __marshmallow_hook__: dict[tuple[str, bool] | str, Any] | None = None
 
 
 def validates(field_name: str) -> Callable[..., Any]:
diff --git a/src/marshmallow/fields.py b/src/marshmallow/fields.py
index f153b5f..386aa7c 100644
--- a/src/marshmallow/fields.py
+++ b/src/marshmallow/fields.py
@@ -157,9 +157,9 @@ class Field(FieldABC):
         default: typing.Any = missing_,
         data_key: str | None = None,
         attribute: str | None = None,
-        validate: None
-        | (
-            typing.Callable[[typing.Any], typing.Any]
+        validate: (
+            None
+            | typing.Callable[[typing.Any], typing.Any]
             | typing.Iterable[typing.Callable[[typing.Any], typing.Any]]
         ) = None,
         required: bool = False,
@@ -1218,11 +1218,14 @@ class DateTime(Field):
     Example: ``'2014-12-22T03:12:58.019077+00:00'``
 
     :param format: Either ``"rfc"`` (for RFC822), ``"iso"`` (for ISO8601),
-        or a date format string. If `None`, defaults to "iso".
+        ``"timestamp"``, ``"timestamp_ms"`` (for a POSIX timestamp) or a date format string.
+        If `None`, defaults to "iso".
     :param kwargs: The same keyword arguments that :class:`Field` receives.
 
     .. versionchanged:: 3.0.0rc9
         Does not modify timezone information on (de)serialization.
+    .. versionchanged:: 3.19
+        Add timestamp as a format.
     """
 
     SERIALIZATION_FUNCS = {
@@ -1230,13 +1233,17 @@ class DateTime(Field):
         "iso8601": utils.isoformat,
         "rfc": utils.rfcformat,
         "rfc822": utils.rfcformat,
-    }  # type: typing.Dict[str, typing.Callable[[typing.Any], str]]
+        "timestamp": utils.timestamp,
+        "timestamp_ms": utils.timestamp_ms,
+    }  # type: typing.Dict[str, typing.Callable[[typing.Any], str | float]]
 
     DESERIALIZATION_FUNCS = {
         "iso": utils.from_iso_datetime,
         "iso8601": utils.from_iso_datetime,
         "rfc": utils.from_rfc,
         "rfc822": utils.from_rfc,
+        "timestamp": utils.from_timestamp,
+        "timestamp_ms": utils.from_timestamp_ms,
     }  # type: typing.Dict[str, typing.Callable[[str], typing.Any]]
 
     DEFAULT_FORMAT = "iso"
@@ -1252,7 +1259,7 @@ class DateTime(Field):
         "format": '"{input}" cannot be formatted as a {obj_type}.',
     }
 
-    def __init__(self, format: str | None = None, **kwargs):
+    def __init__(self, format: str | None = None, **kwargs) -> None:
         super().__init__(**kwargs)
         # Allow this to be None. It may be set later in the ``_serialize``
         # or ``_deserialize`` methods. This allows a Schema to dynamically set the
@@ -1267,7 +1274,7 @@ class DateTime(Field):
             or self.DEFAULT_FORMAT
         )
 
-    def _serialize(self, value, attr, obj, **kwargs):
+    def _serialize(self, value, attr, obj, **kwargs) -> str | float | None:
         if value is None:
             return None
         data_format = self.format or self.DEFAULT_FORMAT
@@ -1277,7 +1284,7 @@ class DateTime(Field):
         else:
             return value.strftime(data_format)
 
-    def _deserialize(self, value, attr, data, **kwargs):
+    def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime:
         if not value:  # Falsy values, e.g. '', None, [] are not valid
             raise self.make_error("invalid", input=value, obj_type=self.OBJ_TYPE)
         data_format = self.format or self.DEFAULT_FORMAT
@@ -1298,7 +1305,7 @@ class DateTime(Field):
                 ) from error
 
     @staticmethod
-    def _make_object_from_format(value, data_format):
+    def _make_object_from_format(value, data_format) -> dt.datetime:
         return dt.datetime.strptime(value, data_format)
 
 
@@ -1323,11 +1330,11 @@ class NaiveDateTime(DateTime):
         *,
         timezone: dt.timezone | None = None,
         **kwargs,
-    ):
+    ) -> None:
         super().__init__(format=format, **kwargs)
         self.timezone = timezone
 
-    def _deserialize(self, value, attr, data, **kwargs):
+    def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime:
         ret = super()._deserialize(value, attr, data, **kwargs)
         if is_aware(ret):
             if self.timezone is None:
@@ -1360,11 +1367,11 @@ class AwareDateTime(DateTime):
         *,
         default_timezone: dt.tzinfo | None = None,
         **kwargs,
-    ):
+    ) -> None:
         super().__init__(format=format, **kwargs)
         self.default_timezone = default_timezone
 
-    def _deserialize(self, value, attr, data, **kwargs):
+    def _deserialize(self, value, attr, data, **kwargs) -> dt.datetime:
         ret = super()._deserialize(value, attr, data, **kwargs)
         if not is_aware(ret):
             if self.default_timezone is None:
@@ -2017,14 +2024,14 @@ class Function(Field):
 
     def __init__(
         self,
-        serialize: None
-        | (
-            typing.Callable[[typing.Any], typing.Any]
+        serialize: (
+            None
+            | typing.Callable[[typing.Any], typing.Any]
             | typing.Callable[[typing.Any, dict], typing.Any]
         ) = None,
-        deserialize: None
-        | (
-            typing.Callable[[typing.Any], typing.Any]
+        deserialize: (
+            None
+            | typing.Callable[[typing.Any], typing.Any]
             | typing.Callable[[typing.Any, dict], typing.Any]
         ) = None,
         **kwargs,
diff --git a/src/marshmallow/schema.py b/src/marshmallow/schema.py
index 9215269..b9109a9 100644
--- a/src/marshmallow/schema.py
+++ b/src/marshmallow/schema.py
@@ -658,9 +658,17 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
                     d_kwargs["partial"] = sub_partial
                 else:
                     d_kwargs["partial"] = partial
-                getter = lambda val: field_obj.deserialize(
-                    val, field_name, data, **d_kwargs
-                )
+
+                def getter(
+                    val, field_obj=field_obj, field_name=field_name, d_kwargs=d_kwargs
+                ):
+                    return field_obj.deserialize(
+                        val,
+                        field_name,
+                        data,
+                        **d_kwargs,
+                    )
+
                 value = self._call_and_store(
                     getter_func=getter,
                     data=raw_value,
@@ -1047,15 +1055,15 @@ class Schema(base.SchemaABC, metaclass=SchemaMeta):
             # the type checker's perspective.
             if isinstance(field_obj, type) and issubclass(field_obj, base.FieldABC):
                 msg = (
-                    'Field for "{}" must be declared as a '
+                    'Field for "{field_name}" must be declared as a '
                     "Field instance, not a class. "
-                    'Did you mean "fields.{}()"?'.format(field_name, field_obj.__name__)
+                    'Did you mean "fields.{field_obj.__name__}()"?'
                 )
                 raise TypeError(msg) from error
             raise error
         self.on_bind_field(field_name, field_obj)
 
-    @lru_cache(maxsize=8)
+    @lru_cache(maxsize=8)  # noqa (https://github.com/PyCQA/flake8-bugbear/issues/310)
     def _has_processors(self, tag) -> bool:
         return bool(self._hooks[(tag, True)] or self._hooks[(tag, False)])
 
diff --git a/src/marshmallow/utils.py b/src/marshmallow/utils.py
index fd65133..7a16ff6 100644
--- a/src/marshmallow/utils.py
+++ b/src/marshmallow/utils.py
@@ -190,6 +190,34 @@ def from_iso_date(value):
     return dt.date(**kw)
 
 
+def from_timestamp(value: typing.Any) -> dt.datetime:
+    value = float(value)
+    if value < 0:
+        raise ValueError("Not a valid POSIX timestamp")
+
+    # Load a timestamp with utc as timezone to prevent using system timezone.
+    # Then set timezone to None, to let the Field handle adding timezone info.
+    return dt.datetime.fromtimestamp(value, tz=dt.timezone.utc).replace(tzinfo=None)
+
+
+def from_timestamp_ms(value: typing.Any) -> dt.datetime:
+    value = float(value)
+    return from_timestamp(value / 1000)
+
+
+def timestamp(
+    value: dt.datetime,
+) -> float:
+    if not is_aware(value):
+        # When a date is naive, use UTC as zone info to prevent using system timezone.
+        value = value.replace(tzinfo=dt.timezone.utc)
+    return value.timestamp()
+
+
+def timestamp_ms(value: dt.datetime) -> float:
+    return timestamp(value) * 1000
+
+
 def isoformat(datetime: dt.datetime) -> str:
     """Return the ISO8601-formatted representation of a datetime object.
 
diff --git a/tests/test_deserialization.py b/tests/test_deserialization.py
index c80a258..32aa099 100644
--- a/tests/test_deserialization.py
+++ b/tests/test_deserialization.py
@@ -526,6 +526,50 @@ class TestFieldDeserialization:
         else:
             assert field.deserialize(value) == expected
 
+    @pytest.mark.parametrize(
+        ("fmt", "value", "expected"),
+        [
+            ("timestamp", 1384043025, dt.datetime(2013, 11, 10, 0, 23, 45)),
+            ("timestamp", "1384043025", dt.datetime(2013, 11, 10, 0, 23, 45)),
+            ("timestamp", 1384043025, dt.datetime(2013, 11, 10, 0, 23, 45)),
+            ("timestamp", 1384043025.12, dt.datetime(2013, 11, 10, 0, 23, 45, 120000)),
+            (
+                "timestamp",
+                1384043025.123456,
+                dt.datetime(2013, 11, 10, 0, 23, 45, 123456),
+            ),
+            ("timestamp", 1, dt.datetime(1970, 1, 1, 0, 0, 1)),
+            ("timestamp_ms", 1384043025000, dt.datetime(2013, 11, 10, 0, 23, 45)),
+            ("timestamp_ms", 1000, dt.datetime(1970, 1, 1, 0, 0, 1)),
+        ],
+    )
+    def test_timestamp_field_deserialization(self, fmt, value, expected):
+        field = fields.DateTime(format=fmt)
+        assert field.deserialize(value) == expected
+
+        # By default, a datetime from a timestamp is never aware.
+        field = fields.NaiveDateTime(format=fmt)
+        assert field.deserialize(value) == expected
+
+        field = fields.AwareDateTime(format=fmt)
+        with pytest.raises(ValidationError, match="Not a valid aware datetime."):
+            field.deserialize(value)
+
+        # But it can be added by providing a default.
+        field = fields.AwareDateTime(format=fmt, default_timezone=central)
+        expected_aware = expected.replace(tzinfo=central)
+        assert field.deserialize(value) == expected_aware
+
+    @pytest.mark.parametrize("fmt", ["timestamp", "timestamp_ms"])
+    @pytest.mark.parametrize(
+        "in_value",
+        ["", "!@#", 0, -1, dt.datetime(2013, 11, 10, 1, 23, 45)],
+    )
+    def test_invalid_timestamp_field_deserialization(self, fmt, in_value):
+        field = fields.DateTime(format="timestamp")
+        with pytest.raises(ValidationError, match="Not a valid datetime."):
+            field.deserialize(in_value)
+
     @pytest.mark.parametrize(
         ("fmt", "timezone", "value", "expected"),
         [
diff --git a/tests/test_serialization.py b/tests/test_serialization.py
index 51671dd..56f0773 100644
--- a/tests/test_serialization.py
+++ b/tests/test_serialization.py
@@ -579,6 +579,38 @@ class TestFieldSerialization:
         field = fields.DateTime(format=fmt)
         assert field.serialize("d", {"d": value}) == expected
 
+    @pytest.mark.parametrize(
+        ("fmt", "value", "expected"),
+        [
+            ("timestamp", dt.datetime(1970, 1, 1), 0),
+            ("timestamp", dt.datetime(2013, 11, 10, 0, 23, 45), 1384043025),
+            (
+                "timestamp",
+                dt.datetime(2013, 11, 10, 0, 23, 45, tzinfo=dt.timezone.utc),
+                1384043025,
+            ),
+            (
+                "timestamp",
+                central.localize(dt.datetime(2013, 11, 10, 0, 23, 45), is_dst=False),
+                1384064625,
+            ),
+            ("timestamp_ms", dt.datetime(2013, 11, 10, 0, 23, 45), 1384043025000),
+            (
+                "timestamp_ms",
+                dt.datetime(2013, 11, 10, 0, 23, 45, tzinfo=dt.timezone.utc),
+                1384043025000,
+            ),
+            (
+                "timestamp_ms",
+                central.localize(dt.datetime(2013, 11, 10, 0, 23, 45), is_dst=False),
+                1384064625000,
+            ),
+        ],
+    )
+    def test_datetime_field_timestamp(self, fmt, value, expected):
+        field = fields.DateTime(format=fmt)
+        assert field.serialize("d", {"d": value}) == expected
+
     @pytest.mark.parametrize("fmt", ["iso", "iso8601", None])
     @pytest.mark.parametrize(
         ("value", "expected"),
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index af884d9..0000000
--- a/tox.ini
+++ /dev/null
@@ -1,35 +0,0 @@
-[tox]
-envlist = lint,mypy-test,py37,py38,py39,py310,docs
-
-[testenv]
-extras = tests
-commands = pytest {posargs}
-
-[testenv:lint]
-deps = pre-commit~=2.4
-skip_install = true
-commands = pre-commit run --all-files --show-diff-on-failure
-
-[testenv:mypy-test]
-deps = mypy
-commands = mypy --show-error-codes --warn-unused-ignores tests/mypy_test_cases/
-
-[testenv:docs]
-extras = docs
-commands = sphinx-build docs/ docs/_build {posargs}
-
-; Below tasks are for development only (not run in CI)
-
-[testenv:watch-docs]
-deps = sphinx-autobuild
-extras = docs
-commands = sphinx-autobuild --open-browser docs/ docs/_build {posargs} --watch src/marshmallow --delay 2
-
-[testenv:watch-readme]
-deps = restview
-skip_install = true
-commands = restview README.rst
-
-[testenv:benchmark]
-usedevelop = true
-commands = python performance/benchmark.py --iterations=100 --repeat=3

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.19.0.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.19.0.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.19.0.egg-info/not-zip-safe
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.19.0.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.19.0.egg-info/top_level.txt
lrwxrwxrwx  root/root   /usr/share/doc/python3-marshmallow/html/_static/_sphinx_javascript_frameworks_compat.js -> ../../../../javascript/sphinxdoc/1.0/_sphinx_javascript_frameworks_compat.js
lrwxrwxrwx  root/root   /usr/share/doc/python3-marshmallow/html/_static/sphinx_highlight.js -> ../../../../javascript/sphinxdoc/1.0/sphinx_highlight.js

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.18.0.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.18.0.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.18.0.egg-info/not-zip-safe
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.18.0.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/marshmallow-3.18.0.egg-info/top_level.txt

No differences were encountered between the control files of package python3-marshmallow

Control files of package python3-marshmallow-doc: lines which differ (wdiff format)

  • Depends: libjs-sphinxdoc (>= 4.3), 5.2), libjs-jquery, libjs-underscore

More details

Full run details