jenkins-bot has submitted this change and it was merged.
Change subject: Move Namespace.info into Namespace.__dict__
......................................................................
Move Namespace.info into Namespace.__dict__
The use of __getattr__ to map Namespace.info into attributes
has caused unpickling bugs and recent build breakages.
Use setattr to put the extra attributes into __dict__.
Change-Id: I7d1ea917a10c585d57500ebcd41e059078f28fea
---
M pywikibot/site.py
M tests/namespace_tests.py
2 files changed, 16 insertions(+), 22 deletions(-)
Approvals:
XZise: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 71f04c1..82a7299 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -244,15 +244,8 @@
else:
self.aliases = aliases
- self.info = kwargs
-
- def __getattr__(self, attr):
- """Look for undefined attributes in info."""
- if hasattr(self, 'info') and attr in self.info:
- return self.info[attr]
- else:
- raise AttributeError("%s instance has no attribute '%s'"
- % (self.__class__.__name__, attr))
+ for key, value in kwargs.items():
+ setattr(self, key, value)
def _distinct(self):
if self.custom_name == self.canonical_name:
@@ -358,13 +351,18 @@
def __repr__(self):
"""Return a reconstructable representation."""
- if self.info:
+ standard_attr = ['id', 'custom_name', 'canonical_name',
'aliases']
+ extra = [(key, self.__dict__[key])
+ for key in sorted(self.__dict__)
+ if key not in standard_attr]
+
+ if extra:
kwargs = ', ' + ', '.join([key + '=' + repr(value)
for (key, value) in
- [(key, self.info[key])
- for key in sorted(self.info)]])
+ extra])
else:
kwargs = ''
+
return '%s(id=%d, custom_name=%r, canonical_name=%r, aliases=%r%s)' \
% (self.__class__.__name__, self.id, self.custom_name,
self.canonical_name, self.aliases, kwargs)
@@ -4650,7 +4648,10 @@
self._property_namespace = False
for namespace in self.namespaces().values():
- content_model = namespace.info.get('defaultcontentmodel')
+ if not hasattr(namespace, 'defaultcontentmodel'):
+ continue
+
+ content_model = namespace.defaultcontentmodel
if content_model == 'wikibase-item':
self._item_namespace = namespace
elif content_model == 'wikibase-property':
diff --git a/tests/namespace_tests.py b/tests/namespace_tests.py
index 5dbd47d..e3c3f60 100644
--- a/tests/namespace_tests.py
+++ b/tests/namespace_tests.py
@@ -193,19 +193,13 @@
% (unicode('Foo'), unicode('Foo'))
self.assertEqual(s, r)
- a.info['defaultcontentmodel'] = 'bar'
- r = {'defaultcontentmodel': 'bar'}
- self.assertEqual(a.info, r)
-
+ a.defaultcontentmodel = 'bar'
s = repr(a)
r = "Namespace(id=0, custom_name=%r, canonical_name=%r, aliases=[],
defaultcontentmodel='bar')" \
% (unicode('Foo'), unicode('Foo'))
self.assertEqual(s, r)
- a.info['case'] = 'upper'
- r = {'defaultcontentmodel': 'bar', 'case':
'upper'}
- self.assertEqual(a.info, r)
-
+ a.case = 'upper'
s = repr(a)
r = "Namespace(id=0, custom_name=%r, canonical_name=%r, aliases=[],
case='upper', defaultcontentmodel='bar')" \
% (unicode('Foo'), unicode('Foo'))
@@ -213,7 +207,6 @@
b = eval(repr(a))
self.assertEqual(a, b)
- self.assertEqual(a.info, b.info)
if __name__ == '__main__':
--
To view, visit
https://gerrit.wikimedia.org/r/161181
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I7d1ea917a10c585d57500ebcd41e059078f28fea
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>