Browse Source

nodes: add a `default` param to Template.get

Similar to dict.get, Template.get with a default param supplied will
return that value instead of raising an exception. If default is unset,
Template.get will keep its previous behavior and raise an exception.
pull/252/head
AntiCompositeNumber 4 years ago
parent
commit
c8dbc5f8cd
No known key found for this signature in database GPG Key ID: A888A323AB506229
1 changed files with 11 additions and 5 deletions
  1. +11
    -5
      mwparserfromhell/nodes/template.py

+ 11
- 5
mwparserfromhell/nodes/template.py View File

@@ -29,6 +29,8 @@ from ..utils import parse_anything
__all__ = ["Template"] __all__ = ["Template"]


FLAGS = re.DOTALL | re.UNICODE FLAGS = re.DOTALL | re.UNICODE
# Used to allow None as a valid fallback value
_UNSET = object()


class Template(Node): class Template(Node):
"""Represents a template in wikicode, like ``{{foo}}``.""" """Represents a template in wikicode, like ``{{foo}}``."""
@@ -212,19 +214,23 @@ class Template(Node):
self.has(name, ignore_empty) self.has(name, ignore_empty)
has_param.__doc__ = "Alias for :meth:`has`." has_param.__doc__ = "Alias for :meth:`has`."


def get(self, name):
def get(self, name, default=_UNSET):
"""Get the parameter whose name is *name*. """Get the parameter whose name is *name*.


The returned object is a :class:`.Parameter` instance. Raises The returned object is a :class:`.Parameter` instance. Raises
:exc:`ValueError` if no parameter has this name. Since multiple
parameters can have the same name, we'll return the last match, since
the last parameter is the only one read by the MediaWiki parser.
:exc:`ValueError` if no parameter has this name. If *default* is set,
returns that instead. Since multiple parameters can have the same name,
we'll return the last match, since the last parameter is the only one
read by the MediaWiki parser.
""" """
name = str(name).strip() name = str(name).strip()
for param in reversed(self.params): for param in reversed(self.params):
if param.name.strip() == name: if param.name.strip() == name:
return param return param
raise ValueError(name)
if default is _UNSET:
raise ValueError(name)
else:
return default


def add(self, name, value, showkey=None, before=None, def add(self, name, value, showkey=None, before=None,
preserve_spacing=True): preserve_spacing=True):


Loading…
Cancel
Save