Pārlūkot izejas kodu

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 pirms 1 gada
committed by GitHub
vecāks
revīzija
5f57d2e373
Šim parakstam datu bāzē netika atrasta zināma atslēga GPG atslēgas ID: B5690EEEBB952194
3 mainītis faili ar 30 papildinājumiem un 2 dzēšanām
  1. +1
    -0
      .gitignore
  2. +11
    -2
      src/mwparserfromhell/nodes/template.py
  3. +18
    -0
      tests/test_template.py

+ 1
- 0
.gitignore Parādīt failu

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

+ 11
- 2
src/mwparserfromhell/nodes/template.py Parādīt failu

@@ -17,7 +17,6 @@
# 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
# SOFTWARE.

from collections import defaultdict
import re

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


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

@@ -330,6 +328,17 @@ class Template(Node):
self.params.append(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):
return self.add(name, value)



+ 18
- 0
tests/test_template.py Parādīt failu

@@ -394,6 +394,24 @@ def test_add():
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():
"""test Template.remove()"""
node1 = Template(wraptext("foobar"))


Notiek ielāde…
Atcelt
Saglabāt