From 1631b49369186b78e31f96961c074029b93c9017 Mon Sep 17 00:00:00 2001 From: mirrin00 Date: Fri, 14 Jun 2024 20:26:21 +0100 Subject: [PATCH 1/3] Add support for multiline strings --- app/templater/lib/templater/__init__.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/templater/lib/templater/__init__.py b/app/templater/lib/templater/__init__.py index a2cdaad..09e40ac 100644 --- a/app/templater/lib/templater/__init__.py +++ b/app/templater/lib/templater/__init__.py @@ -1,6 +1,6 @@ import csv import xlrd -from docxtpl import DocxTemplate +from docxtpl import DocxTemplate, RichText from jinja2 import Environment, Template, meta from .custom_exceptions import TemplateTypeNotSupported, OutputNameTemplateSyntax from .custom_odt_renderer import CustomOdtRenderer @@ -20,23 +20,30 @@ def __init__(self): class TemplateRenderer(object): + MULTILINE_PREFIX = "&^<\\multiline>" + def __init__(self): self.contexts = [] self.fieldnames = [] self.raw_table = [] + def _preprocess_value(self, value): + if value.startswith(self.MULTILINE_PREFIX): + value = RichText(value[len(self.MULTILINE_PREFIX):]) + return value + # Load data from csv file def load_csv(self, csvfile, delimiter): # open csv file and prepare context array - lines = csvfile.read().decode("utf-8-sig").splitlines() - reader = csv.DictReader(lines, delimiter=delimiter) + lines = csvfile.read().decode("utf-8-sig") + reader = csv.DictReader(io.StringIO(lines), delimiter=delimiter) self.fieldnames = reader.fieldnames self.raw_table.append(self.fieldnames) for row in reader: context = {} r = [] for key, value in row.items(): - context[key] = value + context[key] = self._preprocess_value(value) r.append(value) self.contexts.append(context) self.raw_table.append(r) @@ -52,7 +59,7 @@ def load_excel(self, excelfile): r = [] for col in range(sh.ncols): value = str(sh.cell_value(rowx=row, colx=col)) - context[self.fieldnames[col]] = value + context[self.fieldnames[col]] = self._preprocess_value(value) r.append(value) self.contexts.append(context) self.raw_table.append(r) From 3a4b39a238ccf223431eebda0a07a18ce85b10d1 Mon Sep 17 00:00:00 2001 From: Mark Zaslavskiy Date: Thu, 20 Jun 2024 13:00:09 +0300 Subject: [PATCH 2/3] added fixes for readme and multiline handling --- README.md | 9 +++++++-- app/templater/lib/templater/__init__.py | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2742acd..cadff4a 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,15 @@ Из папки репозитория: Запуск: - + + cp .env_template .env docker-compose build docker-compose up +Деплой на production: + + ./build_and_run.sh + Запуск тестов (когда докер работает и прослушивает адрес localhost:5000): pytest ./app/templater/tests.py -s @@ -18,4 +23,4 @@ или запустите тестовую конфигурацию докера: docker-compose -f ./docker-compose.test.yml build - docker-compose -f ./docker-compose.test.yml up \ No newline at end of file + docker-compose -f ./docker-compose.test.yml up diff --git a/app/templater/lib/templater/__init__.py b/app/templater/lib/templater/__init__.py index 09e40ac..12f81d8 100644 --- a/app/templater/lib/templater/__init__.py +++ b/app/templater/lib/templater/__init__.py @@ -29,7 +29,7 @@ def __init__(self): def _preprocess_value(self, value): if value.startswith(self.MULTILINE_PREFIX): - value = RichText(value[len(self.MULTILINE_PREFIX):]) + value = RichText(value[len(self.MULTILINE_PREFIX):].replace("\\\\n","\n")) return value # Load data from csv file @@ -43,6 +43,7 @@ def load_csv(self, csvfile, delimiter): context = {} r = [] for key, value in row.items(): + value = value.lstrip('\"').rstrip('\"') context[key] = self._preprocess_value(value) r.append(value) self.contexts.append(context) From 91adbd44ee084173833e19b1b6c9f76b9c6ad8b6 Mon Sep 17 00:00:00 2001 From: Mark Zaslavskiy Date: Thu, 20 Jun 2024 14:31:39 +0300 Subject: [PATCH 3/3] reverting unnecessary replace --- app/templater/lib/templater/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templater/lib/templater/__init__.py b/app/templater/lib/templater/__init__.py index 12f81d8..0d65504 100644 --- a/app/templater/lib/templater/__init__.py +++ b/app/templater/lib/templater/__init__.py @@ -29,7 +29,7 @@ def __init__(self): def _preprocess_value(self, value): if value.startswith(self.MULTILINE_PREFIX): - value = RichText(value[len(self.MULTILINE_PREFIX):].replace("\\\\n","\n")) + value = RichText(value[len(self.MULTILINE_PREFIX):]) return value # Load data from csv file