jenkins-bot submitted this change.

View Change

Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
[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(-)

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 change 680041. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ife5c3f09facbbdea67cb1fa0bd46d6af9e6b01b1
Gerrit-Change-Number: 680041
Gerrit-PatchSet: 3
Gerrit-Owner: Damian <atagar1@gmail.com>
Gerrit-Reviewer: D3r1ck01 <xsavitar.wiki@aol.com>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged