From 51c0c85518f0acdeca1f021ac7c790788757d6c4 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 17 Dec 2022 17:22:14 -0500 Subject: [PATCH 1/3] Add test capturing that a missing key raises a KeyError. Ref #371. --- tests/test_api.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index f65287a5..a9c1f194 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -141,6 +141,15 @@ def test_importlib_metadata_version(self): resolved = version('importlib-metadata') assert re.match(self.version_pattern, resolved) + @__import__('pytest').mark.xfail(reason="not implemented #371") + def test_missing_key(self): + """ + Attempting to request missing metadata raises KeyError. + """ + md = metadata('distinfo-pkg') + with self.assertRaises(KeyError): + md['does-not-exist'] + @staticmethod def _test_files(files): root = files[0].root From a7eb4ba9bdd2dc23dc5e583371537559d247ceeb Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 19 Mar 2022 15:33:08 -0400 Subject: [PATCH 2/3] When requesting an item from metadata, if it's not present, raise a KeyError. Fixes #371. --- importlib_metadata/_adapters.py | 14 ++++++++++++++ tests/test_api.py | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/importlib_metadata/_adapters.py b/importlib_metadata/_adapters.py index aa460d3e..c8576cd9 100644 --- a/importlib_metadata/_adapters.py +++ b/importlib_metadata/_adapters.py @@ -39,6 +39,20 @@ def __init__(self, *args, **kwargs): def __iter__(self): return super().__iter__() + def __getitem__(self, item): + """ + Prefer dict-like behavior for __getitem__ when keys are missing. + >>> msg = Message(email.message.Message()) + >>> msg['thing'] + Traceback (most recent call last): + ... + KeyError: 'thing' + """ + res = super().__getitem__(item) + if res is None: + raise KeyError(item) + return res + def _repair_headers(self): def redent(value): "Correct for RFC822 indentation" diff --git a/tests/test_api.py b/tests/test_api.py index a9c1f194..d3ae8144 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -141,7 +141,6 @@ def test_importlib_metadata_version(self): resolved = version('importlib-metadata') assert re.match(self.version_pattern, resolved) - @__import__('pytest').mark.xfail(reason="not implemented #371") def test_missing_key(self): """ Attempting to request missing metadata raises KeyError. From 141ef8bb13529e7662d74f8fa33b4a97ea0f609b Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 17 Dec 2022 17:33:54 -0500 Subject: [PATCH 3/3] Update changelog. --- CHANGES.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index cf7dcf16..4a03eb0b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,18 @@ +v6.0.0 +====== + +* #371: When a key is missing from metadata, raise a ``KeyError`` + instead of returning ``None``, matching the usual expectation for + mapping objects and also the protocol definition. + + Projects should update to expect the ``KeyError`` or wrap the call + to replace a ``KeyError`` with a ``None`` return, e.g.:: + + try: + value = metadata(pkg)['Name'] + except KeyError: + value = None + v5.1.0 ====== pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy