From 9166790de90d90f1766ca6a17050365d0523ef55 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Sun, 2 Nov 2025 23:50:24 +0100 Subject: [PATCH] mo processing test --- app/services/mo.py | 6 +++++- app/services/passwords.py | 4 ++-- tests/__init__.py | 0 tests/files/test1/test.mo.yaml | 3 +++ tests/test_mo.py | 21 +++++++++++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 tests/__init__.py create mode 100644 tests/files/test1/test.mo.yaml create mode 100644 tests/test_mo.py diff --git a/app/services/mo.py b/app/services/mo.py index a1ae32c..d917e62 100644 --- a/app/services/mo.py +++ b/app/services/mo.py @@ -6,6 +6,10 @@ from injectable import injectable, autowired, Autowired from app.services import Passwords +class DotTemplate(Template): + # Pozwala na kropki w nazwach placeholderów, np. ${user.name.first} + idpattern = r'[_a-zA-Z][_a-zA-Z0-9.]*' + @injectable class Mo: @@ -17,7 +21,7 @@ class Mo: raw = '' with open(mo_file, "r") as mo: raw = mo.read() - tpl = Template(raw) + tpl = DotTemplate(raw) rendered = tpl.substitute(self._passwords.get_values(tpl.get_identifiers())) de_mo_ified = str(mo_file).replace(".mo", "") with open(de_mo_ified, "w") as mo: diff --git a/app/services/passwords.py b/app/services/passwords.py index 7f30567..9b11ca4 100644 --- a/app/services/passwords.py +++ b/app/services/passwords.py @@ -36,8 +36,8 @@ class Passwords: path = key_parts[:-2] if len(key_parts) > 2 else None entry_name = key_parts[-2] field_name = key_parts[-1] - kp_entry = self._kp_org.find_entries(path=path, first=True, name=entry_name)[0] - output[k] = kp_entry[field_name] + kp_entry = self._kp_org.find_entries(path=path, first=True, title=entry_name)[0] + output[k] = kp_entry[field_name] # TODO: TypeError: 'Entry' object is not subscriptable return output def save(self): diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/files/test1/test.mo.yaml b/tests/files/test1/test.mo.yaml new file mode 100644 index 0000000..af55ecc --- /dev/null +++ b/tests/files/test1/test.mo.yaml @@ -0,0 +1,3 @@ +value: ${sample.password} +nested: ${some.nested.value.password} +custom: ${custom.field} diff --git a/tests/test_mo.py b/tests/test_mo.py new file mode 100644 index 0000000..731dada --- /dev/null +++ b/tests/test_mo.py @@ -0,0 +1,21 @@ +import os +from pathlib import Path +from unittest import TestCase + +from app.services import Passwords +from app.services.mo import Mo + + +class TestMo(TestCase): + def test_process(self): + mo = Mo(Passwords()) + mo.process(Path('tests/files/test1/test.mo.yaml').absolute()) + self.assertTrue(os.path.exists('tests/files/test1/test.mo')) + with open('tests/files/test1/test.mo', 'r') as f: + content = f.read() + self.assertFalse(content.__contains__('${')) + """ + value: some_oass + nested: nested_pass + custom: custom_content + """