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"]