Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support enriched metadata #686

Merged
merged 55 commits into from Aug 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
6a8885b
Implement `Metadata` for `version` and `summary`
brettcannon Feb 6, 2023
1b76382
Add a missing period to a comment
brettcannon Feb 6, 2023
1d53b9c
Add a `validate` argument to `utils.canonicalize_name()`
brettcannon Feb 7, 2023
b93dfaf
Support `name`
brettcannon Feb 7, 2023
7b06d75
Support `Platform`
brettcannon Feb 8, 2023
8de6334
Support `Supported-Platform`
brettcannon Feb 8, 2023
a1d9f32
Support `Description-Content-Type`
brettcannon Feb 8, 2023
7396421
Handle simple cases
brettcannon Feb 8, 2023
26d39d2
Fix some names
brettcannon Feb 8, 2023
47a859a
Support `Project-URL`
brettcannon Mar 3, 2023
bd0431b
Support `Requires-Python`
brettcannon Mar 3, 2023
d92e29f
Another test for `Requires-Python`
brettcannon Mar 3, 2023
af34d9f
Support `Requires-External`
brettcannon Mar 3, 2023
64c8356
Introduce `utils.is_normalized_name()`
brettcannon Mar 3, 2023
f667527
Tweak the exception message for validation failure in `utils.canonica…
brettcannon Mar 3, 2023
137ac60
Support `Provides-Extra`
brettcannon Mar 3, 2023
448fe7c
Support `requires-dist`
brettcannon Mar 15, 2023
773be9a
Add support for `Dynamic`
brettcannon Mar 16, 2023
e775ee8
Support `Metadata-Version`
brettcannon Mar 16, 2023
872dee2
Add a `from_raw()` class method
brettcannon Mar 16, 2023
e04cd19
Record the metadata version a field was added in
brettcannon Mar 16, 2023
5162614
Convert some `XXX` to `TODO`
brettcannon Mar 16, 2023
49276f8
Add type hints to pass mypy
brettcannon Apr 2, 2023
fe2cb25
Tighten typing
brettcannon Apr 3, 2023
1c4ce33
Ditch validators
brettcannon Apr 3, 2023
c60a675
Drop an unused import
brettcannon Apr 3, 2023
54e496e
Rename `_LIST_STRING_FIELDS`
brettcannon Apr 3, 2023
8621a47
Drop the concept of converters
brettcannon Apr 3, 2023
644d8bb
Simplify processing methods
brettcannon Apr 4, 2023
a11022c
Make content-type comparison case-insensitive
brettcannon Jun 16, 2023
4d4a5e6
Don't consider metadata version 2.0 as valid
brettcannon Jun 16, 2023
5661266
Don't return the normalized name for `name`
brettcannon Jun 16, 2023
59c118a
Make the `validate` parameter for `canonicalize_name()` keyword-only
brettcannon Jun 16, 2023
5ca8db6
Remove an outdated comment
brettcannon Jun 16, 2023
9cbb9e2
Check for unparsed data
brettcannon Jul 8, 2023
78ca137
Validate raw metadata
brettcannon Jul 8, 2023
1455e37
Make the linters happy
brettcannon Jul 14, 2023
4db271f
Tweak a comment
brettcannon Jul 14, 2023
9c9b71f
Check that fields are not used with metadata versions that they did n…
brettcannon Jul 14, 2023
d9c7e9b
Make mypy happy
brettcannon Jul 14, 2023
32d4337
Add Python 3.8 compatibility
brettcannon Jul 14, 2023
0144c91
Get code coverage to 100%
brettcannon Jul 14, 2023
e6e6f7a
Merge branch 'main' into enriched-metadata
brettcannon Jul 14, 2023
8dc07b5
Make mypy happy
brettcannon Aug 4, 2023
181ba6b
Merge branch 'main' into enriched-metadata
brettcannon Aug 4, 2023
41bdb34
Remove positional-only parameters for Python 3.7 compatibility
brettcannon Aug 4, 2023
9d885b3
Document `packaging.metadata.Metadata`
brettcannon Aug 6, 2023
36b6664
Add new hypterlink targets for core metadata fields
brettcannon Aug 8, 2023
ef1be86
Fix reST markup error
brettcannon Aug 8, 2023
ef64e08
Add support for `requires`, `provides`, and `obsoletes`
brettcannon Aug 15, 2023
9963bf8
Add tests for `ExceptionGroup`
brettcannon Aug 16, 2023
110638e
Merge branch 'main' into enriched-metadata
brettcannon Aug 16, 2023
8a0b0e2
Normalize all validation exceptions to `InvalidMetadata`
brettcannon Aug 18, 2023
7d4e6ad
Python 3.7 doesn't like positional-only parameters
brettcannon Aug 18, 2023
ea3a10f
Update the changelog
brettcannon Aug 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.rst
Expand Up @@ -7,6 +7,9 @@ Changelog
* Enforce that the entire marker string is parsed (:issue:`687`)
* Requirement parsing no longer automatically validates the URL (:issue:`120`)
* Canonicalize names for requirements comparison (:issue:`644`)
* Introduce `metadata.Metadata` (along with `metadata.ExceptionGroup` and `metadata.InvalidMetadata`; :issue:`570`)
brettcannon marked this conversation as resolved.
Show resolved Hide resolved
* Introduce the `validate` keyword parameter to `utils.validate_name()` (:issue:`570`)
* Introduce `utils.is_normalized_name()` (:issue:`570`)

23.1 - 2023-04-12
~~~~~~~~~~~~~~~~~
Expand Down
26 changes: 25 additions & 1 deletion docs/metadata.rst
Expand Up @@ -25,15 +25,39 @@ Usage
'packaging'
>>> raw["version"]
'24.0'
>>> from packaging.metadata import Metadata
>>> parsed = Metadata.from_raw(raw)
>>> parsed.name
'packaging'
>>> parsed.version
<Version('24.0')>


Reference
---------

High Level Interface
''''''''''''''''''''

.. autoclass:: packaging.metadata.Metadata
:members:

Low Level Interface
'''''''''''''''''''

.. automodule:: packaging.metadata
.. autoclass:: packaging.metadata.RawMetadata
:members:

.. autofunction:: packaging.metadata.parse_email


Exceptions
''''''''''

.. autoclass:: packaging.metadata.InvalidMetadata
:members:

.. autoclass:: packaging.metadata.ExceptionGroup
:members:


Expand Down
26 changes: 25 additions & 1 deletion docs/utils.rst
Expand Up @@ -14,7 +14,7 @@ Reference

A :class:`typing.NewType` of :class:`str`, representing a normalized name.

.. function:: canonicalize_name(name)
.. function:: canonicalize_name(name, validate=False)
brettcannon marked this conversation as resolved.
Show resolved Hide resolved

This function takes a valid Python package or extra name, and returns the
normalized form of it.
Expand All @@ -23,7 +23,13 @@ Reference
checkers to help require that a string has passed through this function
before use.

If **validate** is true, then the function will check if **name** is a valid
distribution name before normalizing.

:param str name: The name to normalize.
:param bool validate: Check whether the name is a valid distribution name.
:raises InvalidName: If **validate** is true and the name is not an
acceptable distribution name.

.. doctest::

Expand All @@ -35,6 +41,21 @@ Reference
>>> canonicalize_name("requests")
'requests'

.. function:: is_normalized_name(name)

Check if a name is already normalized (i.e. :func:`canonicalize_name` would
roundtrip to the same value).

:param str name: The name to check.

.. doctest::

>>> from packaging.utils import is_normalized_name
>>> is_normalized_name("requests")
True
>>> is_normalized_name("Django")
False

.. function:: canonicalize_version(version)

This function takes a string representing a package version (or a
Expand Down Expand Up @@ -103,6 +124,9 @@ Reference
>>> ver == Version('1.0')
True

.. exception:: InvalidName

Raised when a distribution name is invalid.

.. exception:: InvalidWheelFilename

Expand Down