Parcourir la source

feat: update template via encapsulated method (#337)

* feat: update template via encapsulated method

* remove type-hints

* refactor: by lahwaacz

Co-authored-by: Jakub Klinkovský <lahwaacz@users.noreply.github.com>

* fix: tweak

* refactor: dict.update() -like style

---------

Co-authored-by: Jakub Klinkovský <lahwaacz@users.noreply.github.com>
tags/v0.7.0
Cateon il y a 1 an
committed by GitHub
Parent
révision
5f57d2e373
Aucune clé connue n'a été trouvée dans la base pour cette signature ID de la clé GPG: B5690EEEBB952194
3 fichiers modifiés avec 30 ajouts et 2 suppressions
  1. +1
    -0
      .gitignore
  2. +11
    -2
      src/mwparserfromhell/nodes/template.py
  3. +18
    -0
      tests/test_template.py

+ 1
- 0
.gitignore Voir le fichier

@@ -16,3 +16,4 @@ htmlcov/
compile_commands.json compile_commands.json
.idea/ .idea/
.pytest_cache/ .pytest_cache/
.venv

+ 11
- 2
src/mwparserfromhell/nodes/template.py Voir le fichier

@@ -17,7 +17,6 @@
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.

from collections import defaultdict from collections import defaultdict
import re import re


@@ -33,7 +32,6 @@ FLAGS = re.DOTALL | re.UNICODE
# Used to allow None as a valid fallback value # Used to allow None as a valid fallback value
_UNSET = object() _UNSET = object()



class Template(Node): class Template(Node):
"""Represents a template in wikicode, like ``{{foo}}``.""" """Represents a template in wikicode, like ``{{foo}}``."""


@@ -330,6 +328,17 @@ class Template(Node):
self.params.append(param) self.params.append(param)
return param return param


def update(self, params, **kwargs):
"""Update the template with multiple parameters at once.
Args:
params: A dictionary mapping parameter names to values.
**kwargs: Optional arguments that will be applied to all parameters,
matching the same arguments in :meth:`add` (showkey, before,
after, preserve_spacing)
"""
for name, value in params.items():
self.add(name, value, **kwargs)

def __setitem__(self, name, value): def __setitem__(self, name, value):
return self.add(name, value) return self.add(name, value)




+ 18
- 0
tests/test_template.py Voir le fichier

@@ -394,6 +394,24 @@ def test_add():
assert "{{a|b=c|d=e|f=g|new_param=value}}" == node44 assert "{{a|b=c|d=e|f=g|new_param=value}}" == node44




def test_update():
"""test template.update()"""
node1 = Template(wraptext("a"))
node1.update({"b": "c", "d": "e"})
assert "{{a|b=c|d=e}}" == node1

node2 = Template(wraptext("a"))
node2.update({"1": "b"}, showkey=False)
assert "{{a|b}}" == node2

node3 = Template(wraptext("a\n"), [
pgens("b ", "c\n"),
pgens("d ", " e")
])
node3.update({"b ": "f"}, preserve_spacing=False)
assert "{{a\n|b =f|d = e}}" == node3


def test_remove(): def test_remove():
"""test Template.remove()""" """test Template.remove()"""
node1 = Template(wraptext("foobar")) node1 = Template(wraptext("foobar"))


Chargement…
Annuler
Enregistrer