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}
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/680041
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ife5c3f09facbbdea67cb1fa0bd46d6af9e6b01b1
Gerrit-Change-Number: 680041
Gerrit-PatchSet: 3
Gerrit-Owner: Damian <atagar1(a)gmail.com>
Gerrit-Reviewer: D3r1ck01 <xsavitar.wiki(a)aol.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged