jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/680041 )
Change subject: [cleanup] Deprecate frozenmap ......................................................................
[cleanup] Deprecate frozenmap
PEP 416 considered adding a frozendict [1] but added a MappingProxyType class to types that does the same instead [2][3]. Switching us to the builtin class.
[1] https://www.python.org/dev/peps/pep-0416/ [2] https://stackoverflow.com/a/38770783 [3] https://docs.python.org/3/library/types.html#types.MappingProxyType
Change-Id: Ife5c3f09facbbdea67cb1fa0bd46d6af9e6b01b1 --- M pywikibot/family.py M pywikibot/tools/__init__.py M scripts/archivebot.py M tests/family_tests.py 4 files changed, 20 insertions(+), 14 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/family.py b/pywikibot/family.py index 01ec119..c122af1 100644 --- a/pywikibot/family.py +++ b/pywikibot/family.py @@ -9,6 +9,7 @@ import re import string import sys +import types import urllib.parse as urlparse import warnings
@@ -26,7 +27,6 @@ classproperty, deprecated, deprecated_args, - frozenmap, ModuleDeprecationWrapper, )
@@ -954,7 +954,7 @@ """ data = {code: None for code in self.interwiki_removals} data.update(self.interwiki_replacements) - return frozenmap(data) + return types.MappingProxyType(data)
@obsolete.setter def obsolete(self, data): @@ -1190,7 +1190,7 @@ @classproperty def interwiki_replacements(cls): """Return an interwiki code replacement mapping.""" - return frozenmap(cls.code_aliases) + return types.MappingProxyType(cls.code_aliases)
def shared_image_repository(self, code): """Return Wikimedia Commons as the shared image repository.""" diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init__.py index 31c3196..f68af5d 100644 --- a/pywikibot/tools/__init__.py +++ b/pywikibot/tools/__init__.py @@ -1930,3 +1930,7 @@ wrapper = ModuleDeprecationWrapper(__name__) wrapper._add_deprecated_attr('DotReadableDict', replacement_name='', since='20210416', future_warning=True) +wrapper._add_deprecated_attr('frozenmap', + replacement_name='types.MappingProxyType', + since='20210415', + future_warning=True) diff --git a/scripts/archivebot.py b/scripts/archivebot.py index e103d3d..d7a33f9 100755 --- a/scripts/archivebot.py +++ b/scripts/archivebot.py @@ -98,6 +98,7 @@ import os import re import time +import types
from collections import defaultdict, OrderedDict from hashlib import md5 @@ -112,7 +113,7 @@ from pywikibot import i18n from pywikibot.textlib import (extract_sections, findmarker, TimeStripper, to_local_digits) -from pywikibot.tools import frozenmap, issue_deprecation_warning +from pywikibot.tools import issue_deprecation_warning
ShouldArchive = Tuple[str, str] @@ -120,7 +121,7 @@
ZERO = datetime.timedelta(0)
-MW_KEYS = frozenmap({ +MW_KEYS = types.MappingProxyType({ 's': 'seconds', 'h': 'hours', 'd': 'days', diff --git a/tests/family_tests.py b/tests/family_tests.py index bd60bab..765a84f 100644 --- a/tests/family_tests.py +++ b/tests/family_tests.py @@ -21,9 +21,6 @@
"""Test cases for Family methods."""
- UNKNOWNFAMILY_RE = 'Family unknown does not exist' - FROZEN_TYPEERROR_RE = r"'frozen\w+' object does not support item " \ - 'assignment' net = False
def test_family_load_valid(self): @@ -62,7 +59,7 @@ """Test that an invalid family raised UnknownFamily exception.""" with self.assertRaisesRegex( UnknownFamily, - self.UNKNOWNFAMILY_RE): + 'Family unknown does not exist'): Family.load('unknown')
def test_new_same_family_singleton(self): @@ -99,7 +96,7 @@ other = 'unknown' with self.assertRaisesRegex( UnknownFamily, - self.UNKNOWNFAMILY_RE): + 'Family unknown does not exist'): family.__eq__(other)
def test_get_obsolete_wp(self): @@ -132,17 +129,21 @@ """Test obsolete result not updatable.""" family = Family.load('wikipedia') with self.assertRaisesRegex( - AttributeError, - "'frozenmap' object has no attribute 'update'"): + AttributeError, + "'mappingproxy' object has no attribute 'update'"): family.obsolete.update({})
- with self.assertRaisesRegex(TypeError, self.FROZEN_TYPEERROR_RE): + with self.assertRaisesRegex( + TypeError, + "'mappingproxy' object does not support item assignment"): family.obsolete['a'] = 'b'
def test_WikimediaFamily_obsolete_readonly(self): """Test WikimediaFamily obsolete is readonly.""" family = Family.load('wikipedia') - with self.assertRaisesRegex(TypeError, self.FROZEN_TYPEERROR_RE): + with self.assertRaisesRegex( + TypeError, + "'frozenset' object does not support item assignment"): family.obsolete = {'a': 'b', 'c': None}
pywikibot-commits@lists.wikimedia.org