jenkins-bot has submitted this change and it was merged.
Change subject: tools.py: introduce class DotReadableDict(), super of Revision() and FileInfo() ......................................................................
tools.py: introduce class DotReadableDict(), super of Revision() and FileInfo()
Parent class of Page.Revision() and Page.FileInfo().
Provide: - __getitem__() - __unicode__() -__repr__().
Change-Id: I45877492693837da4f53f11f9869a52dea25c3b0 --- M pywikibot/page.py M pywikibot/tools.py 2 files changed, 38 insertions(+), 38 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/page.py b/pywikibot/page.py index bb1f515..1befe68 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -48,6 +48,7 @@ SiteDefinitionError ) from pywikibot.tools import ( + UnicodeMixin, DotReadableDict, ComparableMixin, deprecated, deprecate_arg, deprecated_args, remove_last_args, _NotImplementedWarning, OrderedDict, Counter, @@ -64,7 +65,7 @@ # Note: Link objects (defined later on) represent a wiki-page's title, while # Page objects (defined here) represent the page itself, including its contents.
-class BasePage(pywikibot.UnicodeMixin, ComparableMixin): +class BasePage(UnicodeMixin, ComparableMixin):
"""BasePage: Base object for a MediaWiki page.
@@ -4210,7 +4211,7 @@ }
-class Revision(pywikibot.UnicodeMixin): +class Revision(DotReadableDict):
"""A structure holding information about a single revision of a Page."""
@@ -4268,29 +4269,8 @@ return Revision.FullHistEntry(self.revid, self.timestamp, self.user, self.text, self.rollbacktoken)
- def __getitem__(self, key): - """Give access to Revision class values by key.
- Revision class may also give access to its values by keys - e.g. revid parameter may be assigned by revision['revid'] - as well as revision.revid. This makes formatting strings with - % operator easier. - - """ - return getattr(self, key) - - def __unicode__(self): - """Return string representation.""" - _content = u', '.join( - u'{0}: {1}'.format(k, v) for k, v in self.__dict__.items()) - return u'{{{0}}}'.format(_content) - - def __repr__(self): - """Return a more complete string representation.""" - return self.__dict__.__repr__() - - -class FileInfo(pywikibot.UnicodeMixin): +class FileInfo(DotReadableDict):
"""A structure holding imageinfo of latest rev. of FilePage.
@@ -4316,23 +4296,9 @@ self.__dict__.update(file_revision) self.timestamp = pywikibot.Timestamp.fromISOformat(self.timestamp)
- def __getitem__(self, key): - """Access attributes also with dict.like keys.""" - return getattr(self, key) - def __eq__(self, other): """Test if two File_info objects are equal.""" return self.__dict__ == other.__dict__ - - def __unicode__(self): - """Return string representation.""" - _content = u', '.join( - u'{0}: {1}'.format(k, v) for k, v in self.__dict__.items()) - return u'{{{0}}}'.format(_content) - - def __repr__(self): - """Return a more complete string representation.""" - return self.__dict__.__repr__()
class Link(ComparableMixin): diff --git a/pywikibot/tools.py b/pywikibot/tools.py index dd5ec2c..cb19499 100644 --- a/pywikibot/tools.py +++ b/pywikibot/tools.py @@ -136,6 +136,40 @@ return other != self._cmpkey()
+class DotReadableDict(UnicodeMixin): + + """Parent class of Revision() and FileInfo(). + + Provide: + - __getitem__(), __unicode__() and __repr__(). + + """ + + def __getitem__(self, key): + """Give access to class values by key. + + Revision class may also give access to its values by keys + e.g. revid parameter may be assigned by revision['revid'] + as well as revision.revid. This makes formatting strings with + % operator easier. + + """ + return getattr(self, key) + + def __unicode__(self): + """Return string representation.""" + if sys.version_info[0] > 2: + return repr(self.__dict__) + else: + _content = u', '.join( + u'{0}: {1}'.format(k, v) for k, v in self.__dict__.items()) + return u'{{{0}}}'.format(_content) + + def __repr__(self): + """Return a more complete string representation.""" + return repr(self.__dict___) + + def concat_options(message, line_length, options): """Concatenate options.""" indent = len(message) + 2