diff --git a/README.md b/README.md
index aad7e49..eafc12d 100644
--- a/README.md
+++ b/README.md
@@ -373,7 +373,7 @@ priceModel.RenderBokeh(fileName="index.html", viewInBrowser=True)
# Instead of the Bokeh library, you can use simple, non-interactive chart,
# via the Google Candlestick chart library. Just uncomment the next lines.
# Before calling priceModel.RenderGoogle(), you can set your custom template in self.j2template
-# priceModel.j2template = "google_template.j2" # template by default
+# priceModel.j2template = "google_template_example.j2" # file or multi-string variable with jinja2-template
# priceModel.RenderGoogle(fileName="index.html", viewInBrowser=True)
```
diff --git a/README_RU.md b/README_RU.md
index 20d30db..e37c5d0 100644
--- a/README_RU.md
+++ b/README_RU.md
@@ -373,7 +373,7 @@ priceModel.RenderBokeh(fileName="index.html", viewInBrowser=True)
# Вместо библиотеки Bokeh вы можете отрисовать цены на простом, не интерактивном графике,
# через библиотеку Google Candlestick chart. Просто раскомментируйте строчки ниже.
# Перед вызовом priceModel.RenderGoogle(), вы можете задать свой шаблон в переменной self.j2template
-# priceModel.j2template = "google_template.j2" # шаблон по умолчанию
+# priceModel.j2template = "google_template_example.j2" # полный путь до шаблона или мультистроковая переменная с jinja2-шаблоном
# priceModel.RenderGoogle(fileName="index.html", viewInBrowser=True)
```
diff --git a/pricegenerator/PriceGenerator.py b/pricegenerator/PriceGenerator.py
index 6e44181..2fa86b3 100644
--- a/pricegenerator/PriceGenerator.py
+++ b/pricegenerator/PriceGenerator.py
@@ -33,6 +33,154 @@
uLogger.handlers[0].level = 20 # info level by default for STDOUT
# uLogger.handlers[1].level = 10 # debug level by default for log.txt
+# Simple jinja2 template for rendering static html-page with not interactive Google Candlestick chart:
+GOOGLE_TEMPLATE_J2 = """{# This template based on Jinja markup language: http://jinja.pocoo.org/docs/dev/templates/ #}
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+ |
+
+ Info
+ |
+
+
+
+
+ |
+
+ {% for line in info %}
+ {{ line }}
+ {% endfor %}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+"""
+
class PriceGenerator:
"""
@@ -45,7 +193,7 @@ def __init__(self):
self.csvHeaders = ["date", "time", "open", "high", "low", "close", "volume"] # headers if .csv-file used
self.dfHeaders = ["datetime", "open", "high", "low", "close", "volume"] # dataframe headers
self.sep = "," # Separator in csv-file
- self.j2template = "google_template.j2" # path to custom jinja2 html template
+ self.j2template = GOOGLE_TEMPLATE_J2 # full path to custom jinja2 html template (e.g. "google_template_example.j2") or template as a long multi-string variable
self.j2model = None # dictionary of variables for jinja2 template, if None then auto-generating for default google_template.j2
self._precision = 2 # signs after comma
@@ -650,8 +798,14 @@ def RenderGoogle(self, fileName="index.html", viewInBrowser=False):
uLogger.debug("Using custom chart model")
# --- Rendering and saving chart as html-file and markdown-file with statistics:
- renderedTemplate = jinja2.Template(open(self.j2template, "r", encoding="UTF-8").read())
+ if os.path.exists(self.j2template):
+ renderedTemplate = jinja2.Template(open(self.j2template, "r", encoding="UTF-8").read())
+
+ else:
+ renderedTemplate = jinja2.Template(self.j2template)
+
htmlMain = renderedTemplate.render(self.j2model)
+
with open(fileName, "w", encoding="UTF-8") as fH:
fH.write(htmlMain)
with open("{}.md".format(fileName), "w", encoding="UTF-8") as fH:
diff --git a/pricegenerator/google_template.j2 b/pricegenerator/google_template_example.j2
similarity index 100%
rename from pricegenerator/google_template.j2
rename to pricegenerator/google_template_example.j2
diff --git a/setup.py b/setup.py
index bcefc36..669213a 100644
--- a/setup.py
+++ b/setup.py
@@ -74,10 +74,6 @@
"testdata",
],
- packages=[
- "pricegenerator",
- ],
-
tests_require=[
"pytest>=5.3.5",
"pandas>=1.0.1",
@@ -89,16 +85,16 @@
"bokeh>=1.4.0",
],
+ packages=[
+ "pricegenerator",
+ ],
+
package_data={
- "": [
- "./pricegenerator/*.py",
- "",
+ "pricegenerator": [
+ "*.j2",
],
},
- data_files = [
- ("./pricegenerator", ["./pricegenerator/google_template.j2"]),
- ],
-
+ include_package_data=True,
zip_safe=True,
)
diff --git a/tests/test_PriceGenerator.py b/tests/test_PriceGenerator.py
index 7202f1a..724eefa 100644
--- a/tests/test_PriceGenerator.py
+++ b/tests/test_PriceGenerator.py
@@ -51,7 +51,17 @@ def test_RenderBokeh(self):
assert os.path.exists(name), "Expected .html-file '{}' after saving but it is not exist!".format(name)
assert os.path.exists(nameMD), "Expected markdown file '{}' after saving but it is not exist!".format(nameMD)
- def test_RenderGoogle(self):
+ def test_RenderGoogleDefault(self):
+ self.model.horizon = 5
+ self.model.Generate()
+ suffix = random.uniform(0, 1000000000)
+ name = "test_render_google{}.html".format(suffix)
+ nameMD = "{}.md".format(name)
+ self.model.RenderGoogle(fileName=name, viewInBrowser=False)
+ assert os.path.exists(name), "Expected .html-file '{}' after saving but it is not exist!".format(name)
+ assert os.path.exists(nameMD), "Expected markdown file '{}' after saving but it is not exist!".format(nameMD)
+
+ def test_RenderGoogleFromFileTemplate(self):
self.model.horizon = 5
self.model.Generate()
suffix = random.uniform(0, 1000000000)