From 606d7bde0e5a2a56138d714980497c36c04a016b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=B8=D1=80=D0=B5=D1=86=D0=BA=D0=B8=D0=B9=20=D0=9C?= =?UTF-8?q?=D0=B8=D1=85=D0=B0=D0=B8=D0=BB?= Date: Tue, 17 Nov 2020 17:54:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20cut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- calculate/templates/template_engine.py | 3 +- calculate/templates/template_filters.py | 10 +++++ pytest.ini | 1 + tests/templates/test_template_filters.py | 52 ++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 calculate/templates/template_filters.py create mode 100644 tests/templates/test_template_filters.py diff --git a/calculate/templates/template_engine.py b/calculate/templates/template_engine.py index 2bb8c55..090e3e0 100644 --- a/calculate/templates/template_engine.py +++ b/calculate/templates/template_engine.py @@ -41,13 +41,14 @@ from calculate.variables.datavars import ( ) from calculate.variables.loader import Datavars +import calculate.templates.template_filters as template_filters # Типы шаблона: директория или файл. DIR, FILE, LINK = range(3) # Словарь, в котором можно регистрировать фильтры. -CALCULATE_FILTERS = {} +CALCULATE_FILTERS = {"cut": template_filters.cut} class IncorrectParameter(Exception): diff --git a/calculate/templates/template_filters.py b/calculate/templates/template_filters.py new file mode 100644 index 0000000..c253616 --- /dev/null +++ b/calculate/templates/template_filters.py @@ -0,0 +1,10 @@ +def cut(instr: str, field_num: int = 0, delimiter: str = "-") -> str: + """ + Разделить входную строку `instr` разделительем `delimiter` + и вернуть поле `field_num`. + """ + parts = instr.split(delimiter) + if field_num < len(parts): + return parts[field_num] + else: + return "" diff --git a/pytest.ini b/pytest.ini index 57ba61c..67bda3a 100644 --- a/pytest.ini +++ b/pytest.ini @@ -27,6 +27,7 @@ markers = gentoo: marker for running tests for utils.gentoo calculateini: marker for running tests for utils.calculateini + template_filters: marker for running tests for template_filters. template_engine: marker for running tests for TemplateEngine. directory_processor: marker for running tests for DirectoryProcessor. template_executor: marker for running tests for TemplateAction. diff --git a/tests/templates/test_template_filters.py b/tests/templates/test_template_filters.py new file mode 100644 index 0000000..fefece7 --- /dev/null +++ b/tests/templates/test_template_filters.py @@ -0,0 +1,52 @@ +import pytest +import calculate.templates.template_filters as filters + +@pytest.mark.parametrize('case', + [ + { + "name": "empty", + "data": "", + "params": (), + "result": "" + }, + { + "name": "default", + "data": "123", + "params": (), + "result": "123" + }, + { + "name": "default with delimiter", + "data": "123-456", + "params": (), + "result": "123" + }, + { + "name": "second field", + "data": "123-456", + "params": (1,), + "result": "456" + }, + { + "name": "second field empty", + "data": "", + "params": (1,), + "result": "" + }, + { + "name": "second field but one field", + "data": "123", + "params": (1,), + "result": "" + }, + { + "name": "use dilimeter", + "data": "123.456", + "params": (1,"."), + "result": "456" + }, + ], + ids=lambda x:x["name"]) +@pytest.mark.template_filters +def test_filter_cut(case): + assert filters.cut(case["data"], *case["params"]) == case["result"]