Skip to content

Commit

Permalink
Removed deprecated support for Distribution subclasses not implementi…
Browse files Browse the repository at this point in the history
…ng abstract methods.
  • Loading branch information
jaraco committed Jun 23, 2024
1 parent b76931d commit 32c14aa
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 37 deletions.
2 changes: 0 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,4 @@
('py:class', 'importlib_metadata._meta._T'),
# Workaround for #435
('py:class', '_T'),
# Other workarounds
('py:class', 'importlib_metadata.DeprecatedNonAbstract'),
]
23 changes: 1 addition & 22 deletions importlib_metadata/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import pathlib
import operator
import textwrap
import warnings
import functools
import itertools
import posixpath
Expand Down Expand Up @@ -334,27 +333,7 @@ def __repr__(self) -> str:
return f'<FileHash mode: {self.mode} value: {self.value}>'


class DeprecatedNonAbstract:
# Required until Python 3.14
def __new__(cls, *args, **kwargs):
all_names = {
name for subclass in inspect.getmro(cls) for name in vars(subclass)
}
abstract = {
name
for name in all_names
if getattr(getattr(cls, name), '__isabstractmethod__', False)
}
if abstract:
warnings.warn(
f"Unimplemented abstract methods {abstract}",
DeprecationWarning,
stacklevel=2,
)
return super().__new__(cls)


class Distribution(DeprecatedNonAbstract):
class Distribution(metaclass=abc.ABCMeta):
"""
An abstract Python distribution package.
Expand Down
1 change: 1 addition & 0 deletions newsfragments/+8256a9d7.removal.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Removed deprecated support for Distribution subclasses not implementing abstract methods.
13 changes: 0 additions & 13 deletions tests/test_main.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import re
import pickle
import unittest
import warnings
import importlib
import importlib_metadata
import contextlib
from .compat.py39 import os_helper

import pyfakefs.fake_filesystem_unittest as ffs

from . import fixtures
from ._context import suppress
from ._path import Symlink
from importlib_metadata import (
Distribution,
Expand All @@ -25,13 +22,6 @@
)


@contextlib.contextmanager
def suppress_known_deprecation():
with warnings.catch_warnings(record=True) as ctx:
warnings.simplefilter('default', category=DeprecationWarning)
yield ctx


class BasicTests(fixtures.DistInfoPkg, unittest.TestCase):
version_pattern = r'\d+\.\d+(\.\d)?'

Expand All @@ -56,9 +46,6 @@ def test_package_not_found_mentions_metadata(self):

assert "metadata" in str(ctx.exception)

# expected to fail until ABC is enforced
@suppress(AssertionError)
@suppress_known_deprecation()
def test_abc_enforced(self):
with self.assertRaises(TypeError):
type('DistributionSubclass', (Distribution,), {})()
Expand Down

0 comments on commit 32c14aa

Please sign in to comment.