CONTRIBUTING.rst
So you're interested in contributing to marshmallow or one of our associated projects <https://github.com/marshmallow-code>__? That's awesome! We
welcome contributions from anyone willing to work in good faith with
other contributors and the community (see also our
:doc:code_of_conduct).
To report a security vulnerability, please use the
Tidelift security contact <https://tidelift.com/security>_.
Tidelift will coordinate the fix and disclosure.
…should all be reported on the Github Issue Tracker_ .
.. _Github Issue Tracker: https://github.com/marshmallow-code/marshmallow/issues?state=open
open issues <https://github.com/marshmallow-code/marshmallow/issues>_ (especially those labeled "feedback welcome" <https://github.com/marshmallow-code/marshmallow/issues?q=is%3Aopen+is%3Aissue+label%3A%22feedback+welcome%22>_). Share a solution or workaround. Make a suggestion for how a feature can be made better. Opinions are welcome!the docs <https://marshmallow.readthedocs.io>_.
For straightforward edits, click the edit button in the top-right corner of the page.
See the :ref:Documentation <contributing_documentation> section of this page if you want to build the docs locally.open an issue <https://github.com/marshmallow-code/marshmallow/issues>_.example usage <contributing_examples> of marshmallow.labeled "help wanted" <https://github.com/marshmallow-code/marshmallow/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22>_). The next section details how to contribute code.Setting up for local development ++++++++++++++++++++++++++++++++
.. code-block:: shell-session
$ git clone https://github.com/marshmallow-code/marshmallow.git
$ cd marshmallow
2. Install uv <https://docs.astral.sh/uv/getting-started/installation/>_.
.. code-block:: shell-session
$ uv sync
4. (Optional but recommended) Install the pre-commit hooks, which will format and lint your git staged files.
.. code-block:: shell-session
$ uv run pre-commit install --allow-missing-config
Git branch structure ++++++++++++++++++++
marshmallow abides by the following branching model:
dev
Current development branch. New features should branch off here.
X.Y-line
Maintenance branch for release X.Y. Bug fixes should be sent to the most recent release branch. A maintainer will forward-port the fix to dev. Note: exceptions may be made for bug fixes that introduce large code changes.
Always make a new branch for your work, no matter how small. Also, do not put unrelated changes in the same branch or pull request. This makes it more difficult to merge your changes.
Pull requests ++++++++++++++
For a new feature:
.. code-block:: shell-session
$ git checkout -b name-of-feature dev
For a bugfix:
.. code-block:: shell-session
$ git checkout -b fix-something 3.x-line
2. Commit your changes. Write good commit messages <https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html>_.
.. code-block:: shell-session
$ git commit -m "Detailed commit message"
$ git push origin name-of-feature
3. Before submitting a pull request, check the following:
AUTHORS.rst.marshmallow-code:dev or the appropriate maintenance branch. The CI <https://dev.azure.com/sloria1/sloria/_build/latest?definitionId=5&branchName=dev>_ build must be passing before your pull request is merged.Running tests +++++++++++++
To run all tests:
.. code-block:: shell-session
$ uv run pytest
To run formatting and syntax checks:
.. code-block:: shell-session
$ uv run tox -e lint
(Optional) To run tests in all supported Python versions in their own virtual environments (must have each interpreter installed):
.. code-block:: shell-session
$ uv run tox
.. _contributing_documentation:
Documentation +++++++++++++
Contributions to the documentation are welcome. Documentation is written in reStructuredText_ (rST). A quick rST reference can be found here <https://docutils.sourceforge.io/docs/user/rst/quickref.html>. Builds are powered by Sphinx.
To build and serve the docs in "watch" mode:
.. code-block:: shell-session
$ uv run tox -e docs-serve
Changes to documentation will automatically trigger a rebuild.
.. _contributing_examples:
Contributing examples +++++++++++++++++++++
Have a usage example you'd like to share? A custom Field <marshmallow.fields.Field> that others might find useful? Feel free to add it to the examples <https://github.com/marshmallow-code/marshmallow/tree/dev/examples>_ directory and send a pull request.
.. _Sphinx: https://www.sphinx-doc.org/
.. _reStructuredText: https://docutils.sourceforge.io/rst.html
.. _marshmallow: https://github.com/marshmallow-code/marshmallow