Skip to content
Snippets Groups Projects
Verified Commit c8242836 authored by Daniel Hornung's avatar Daniel Hornung
Browse files

Merge branch 'f-fix-93' into f-sav-converter

parents 61df7fe9 b3f14469
No related branches found
No related tags found
2 merge requests!178FIX: #96 Better error output for crawl.py script.,!171sav/spss converter
Pipeline #51520 passed with warnings
......@@ -52,12 +52,16 @@ from .utils import has_parent
# by the converters:
SPECIAL_PROPERTIES = ("description", "name", "id", "path",
"file", "checksum", "size")
SINGLE_VAR_RE = re.compile(r"^\$(\{)?(?P<varname>\w+)(\})?$")
ID_PATTERN = r"\D[.\w]*"
SINGLE_VAR_RE = re.compile(r"^\$(\{)?(?P<varname>" + ID_PATTERN + r")(\})?$")
logger = logging.getLogger(__name__)
class CrawlerTemplate(Template):
braceidpattern = r"(?a:[_a-z][_\.a-z0-9]*)"
# This also adds a dot to the default pattern.
# See: https://docs.python.org/3/library/string.html#template-strings
# Default flags is re.IGNORECASE
braceidpattern = ID_PATTERN
def _only_max(children_with_keys):
......
......@@ -22,7 +22,7 @@
from pytest import mark
from caoscrawler.converters import replace_variables
from caoscrawler.converters import replace_variables, CrawlerTemplate
from caoscrawler.crawl import Crawler
from caoscrawler.structure_elements import DictElement
from caoscrawler.stores import GeneralStore
......@@ -115,11 +115,35 @@ def test_issue_93():
cfood.yaml does not allow umlaut in $expression"""
values = GeneralStore()
expressions = [
"1",
"foo",
"foo.bär",
"_1",
"Ä",
"ųøîµ",
]
for exp in expressions:
values[exp] = f"This is {exp}"
# ## Test preliminary check
# With braces
for exp in expressions:
assert replace_variables(f"${{{exp}}}", values) == f"This is {exp}"
# Without braces
for exp in expressions:
assert replace_variables(f"${exp}", values) == f"This is {exp}"
# ## Test actual replacement
for exp in expressions:
# as-is
propvalue = f"${{{exp}}}"
propvalue_template = CrawlerTemplate(propvalue)
# from IPython import embed
# embed()
assert propvalue_template.safe_substitute(**values.get_storage()) == f"This is {exp}"
# String embedded into context
propvalue = f"some text before >> ${{{exp}}} << some text after"
print(propvalue)
propvalue_template = CrawlerTemplate(propvalue)
assert (propvalue_template.safe_substitute(**values.get_storage())
== f"some text before >> This is {exp} << some text after")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment