From 6ffdfa52efdde478d667add0b850742a084c9838 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Fri, 3 Mar 2017 20:42:23 -0600 Subject: [PATCH] Allow Wikicode objects to be pickled properly. --- CHANGELOG | 2 ++ docs/changelog.rst | 3 +++ mwparserfromhell/string_mixin.py | 3 +++ 3 files changed, 8 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 5b592cd..4480035 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ v0.5 (unreleased): - Made Template.remove(keep_field=True) behave more reasonably when the parameter is already empty. +- Wikicode objects can now be pickled properly (fixed infinite recursion error + on incompletely-constructed StringMixIn subclasses). - Fixed Wikicode.matches()'s behavior on iterables besides lists and tuples. - Fixed len() sometimes raising ValueError on empty node lists. - Fixed release script after changes to PyPI. diff --git a/docs/changelog.rst b/docs/changelog.rst index bf0f492..669b448 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,9 @@ Unreleased - Made :meth:`Template.remove(keep_field=True) <.Template.remove>` behave more reasonably when the parameter is already empty. +- :class:`.Wikicode` objects can now be pickled properly (fixed infinite + recursion error on incompletely-constructed :class:`.StringMixIn` + subclasses). - Fixed :meth:`.Wikicode.matches`\ 's behavior on iterables besides lists and tuples. - Fixed ``len()`` sometimes raising ``ValueError`` on empty node lists. diff --git a/mwparserfromhell/string_mixin.py b/mwparserfromhell/string_mixin.py index b5ba5a4..88898a1 100644 --- a/mwparserfromhell/string_mixin.py +++ b/mwparserfromhell/string_mixin.py @@ -108,6 +108,9 @@ class StringMixIn(object): return str(item) in self.__unicode__() def __getattr__(self, attr): + if not hasattr(str, attr): + raise AttributeError("{0!r} object has no attribute {1!r}".format( + type(self).__name__, attr)) return getattr(self.__unicode__(), attr) if py3k: