From 60be01fbdb948ad9bca63d4d495c651c0bb860d3 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 24 Nov 2023 02:37:27 +0100 Subject: [PATCH] fix tests, add border feature --- inkycal/custom/functions.py | 17 ++++++++--- inkycal/main.py | 6 ++++ inkycal/modules/ical_parser.py | 2 -- .../modules/inkycal_textfile_to_display.py | 16 +---------- tests/config.py | 4 ++- tests/test_inkycal_textfile_to_display.py | 11 ++++---- tests/test_inkycal_webshot.py | 8 +++--- tests/test_main.py | 28 +++++++++++++++++++ 8 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 tests/test_main.py diff --git a/inkycal/custom/functions.py b/inkycal/custom/functions.py index bb0e9fc..ac1e24d 100644 --- a/inkycal/custom/functions.py +++ b/inkycal/custom/functions.py @@ -9,7 +9,7 @@ import time import traceback import requests -from PIL import ImageFont +from PIL import ImageFont, ImageDraw, Image logs = logging.getLogger(__name__) logs.setLevel(level=logging.INFO) @@ -299,17 +299,17 @@ def draw_border(image, xy, size, radius=5, thickness=1, shrinkage=(0.1, 0.1)): colour = 'black' - # size from function paramter + # size from function parameter width, height = int(size[0] * (1 - shrinkage[0])), int(size[1] * (1 - shrinkage[1])) # shift cursor to move rectangle to center offset_x, offset_y = int((size[0] - width) / 2), int((size[1] - height) / 2) x, y, diameter = xy[0] + offset_x, xy[1] + offset_y, radius * 2 - # lenght of rectangle size + # length of rectangle size a, b = (width - diameter), (height - diameter) - # Set coordinates for staright lines + # Set coordinates for straight lines p1, p2 = (x + radius, y), (x + radius + a, y) p3, p4 = (x + width, y + radius), (x + width, y + radius + b) p5, p6 = (p2[0], y + height), (p1[0], y + height) @@ -333,3 +333,12 @@ def draw_border(image, xy, size, radius=5, thickness=1, shrinkage=(0.1, 0.1)): draw.arc((c3, c4), 270, 360, fill=colour, width=thickness) draw.arc((c5, c6), 0, 90, fill=colour, width=thickness) draw.arc((c7, c8), 90, 180, fill=colour, width=thickness) + + +def draw_border_2(im: Image, xy: tuple, size: tuple, radius: int): + draw = ImageDraw.Draw(im) + + x, y = xy + w, h = size + + draw.rounded_rectangle(xy=(x, y, x + w, y + h), outline="black", radius=radius) \ No newline at end of file diff --git a/inkycal/main.py b/inkycal/main.py index 6c6f4f7..b97e913 100644 --- a/inkycal/main.py +++ b/inkycal/main.py @@ -104,6 +104,8 @@ class Inkycal: # Option to use epaper image optimisation, reduces colours self.optimize = True + self.show_border = self.settings.get('border_around_modules', False) + # Load drivers if image should be rendered if self.render: # Init Display class with model in settings file @@ -203,6 +205,8 @@ class Inkycal: print(f'generating image(s) for {name}...', end="") try: black, colour = module.generate_image() + if self.show_border: + draw_border_2(im=black, xy=(1, 1), size=(black.width - 2, black.height - 2), radius=5) black.save(f"{self.image_folder}module{number}_black.png", "PNG") colour.save(f"{self.image_folder}module{number}_colour.png", "PNG") print('OK!') @@ -298,6 +302,8 @@ class Inkycal: try: black, colour = module.generate_image() + if self.show_border: + draw_border_2(im=black, xy=(1, 1), size=(black.width - 2, black.height - 2), radius=5) black.save(f"{self.image_folder}module{number}_black.png", "PNG") colour.save(f"{self.image_folder}module{number}_colour.png", "PNG") self.info += f"module {number}: OK " diff --git a/inkycal/modules/ical_parser.py b/inkycal/modules/ical_parser.py index 9fd8530..3251355 100755 --- a/inkycal/modules/ical_parser.py +++ b/inkycal/modules/ical_parser.py @@ -1,5 +1,3 @@ -#!python3 - """ Inkycal iCalendar parsing module Copyright by aceinnolab diff --git a/inkycal/modules/inkycal_textfile_to_display.py b/inkycal/modules/inkycal_textfile_to_display.py index 0680cdf..db28191 100644 --- a/inkycal/modules/inkycal_textfile_to_display.py +++ b/inkycal/modules/inkycal_textfile_to_display.py @@ -15,29 +15,15 @@ logger = logging.getLogger(__name__) class TextToDisplay(inkycal_module): - """TextToDisplay module + """TextToDisplay module - Display text from a local file on the display """ - name = "Text module - Display text from a local file on the display" - - requires = { - "filepath": { - "label": "Please enter a filepath or URL pointing to a .txt file", - }, - } - def __init__(self, config): """Initialize inkycal_textfile_to_display module""" super().__init__(config) config = config['config'] - - # Check if all required parameters are present - for param in self.requires: - if param not in config: - raise Exception(f'config is missing {param}') - # required parameters self.filepath = config["filepath"] diff --git a/tests/config.py b/tests/config.py index e7ba725..c3d3b03 100644 --- a/tests/config.py +++ b/tests/config.py @@ -27,7 +27,9 @@ class Config: # inkycal_todoist_test TODOIST_API_KEY = get("TODOIST_API_KEY") - TEMP_PATH = f"{basedir}/tmp" + TEMP_PATH = f"{basedir}/temp" + + TEST_SETTINGS_PATH = f"{basedir}/settings.json" diff --git a/tests/test_inkycal_textfile_to_display.py b/tests/test_inkycal_textfile_to_display.py index ac5e2b6..7c99f8e 100644 --- a/tests/test_inkycal_textfile_to_display.py +++ b/tests/test_inkycal_textfile_to_display.py @@ -16,8 +16,6 @@ merge = Inkyimage.merge logger = logging.getLogger(__name__) logging.basicConfig(level=logging.DEBUG) -temp_path = f"{Config.TEMP_PATH}/temp.txt" - dummy_data = [ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', ' Donec feugiat facilisis neque vel blandit.', 'Integer viverra dolor risus.', ' Etiam neque tellus, sollicitudin at nisi a, mollis ornare enim.', @@ -56,6 +54,8 @@ dummy_data = [ 'Duis facilisis sapien est, a elementum lorem maximus ut.' ] +temp_path = f"{Config.TEMP_PATH}/temp.txt" + tests = [ { "position": 1, @@ -74,7 +74,7 @@ tests = [ "name": "TextToFile", "config": { "size": [500, 400], - "filepath": "https://de.wikipedia.org/wiki/Nationale_Rotkreuz-_und_Rothalbmond-Gesellschaft", + "filepath": "https://raw.githubusercontent.com/aceinnolab/Inkycal/main/setup.py", "padding_x": 10, "padding_y": 10, "fontsize": 12, @@ -90,9 +90,8 @@ class TestTextToDisplay(unittest.TestCase): self.temp_path = temp_path if not os.path.exists(Config.TEMP_PATH): os.mkdir(Config.TEMP_PATH) - logger.info("could not find temporary file, creating now.") - with open(self.temp_path, encoding="utf-8", mode="w") as file: - file.writelines(dummy_data) + with open(self.temp_path, encoding="utf-8", mode="w") as file: + file.writelines(dummy_data) def test_generate_image(self): for test in tests: diff --git a/tests/test_inkycal_webshot.py b/tests/test_inkycal_webshot.py index 84c665d..3efcb55 100755 --- a/tests/test_inkycal_webshot.py +++ b/tests/test_inkycal_webshot.py @@ -16,7 +16,7 @@ tests = [ "name": "Webshot", "config": { "size": [400, 100], - "url": "https://google.com", + "url": "https://www.catsuthecat.com/blogs/comics/the-one-about-regeneration", "palette": "bwr", "padding_x": 10, "padding_y": 10, "fontsize": 12, "language": "en" } @@ -26,7 +26,7 @@ tests = [ "name": "Webshot", "config": { "size": [400, 200], - "url": "https://google.com", + "url": "https://www.catsuthecat.com/blogs/comics/the-one-about-crazy-friday-nights", "palette": "bwy", "padding_x": 10, "padding_y": 10, "fontsize": 12, "language": "en" } @@ -36,7 +36,7 @@ tests = [ "name": "Webshot", "config": { "size": [400, 300], - "url": "https://google.com", + "url": "https://www.catsuthecat.com/blogs/comics/the-one-about-teamwork", "palette": "bw", "padding_x": 10, "padding_y": 10, "fontsize": 12, "language": "en" } @@ -46,7 +46,7 @@ tests = [ "name": "Webshot", "config": { "size": [400, 400], - "url": "https://google.com", + "url": "https://www.catsuthecat.com/blogs/comics/the-one-about-addictions-1", "palette": "bwr", "padding_x": 10, "padding_y": 10, "fontsize": 12, "language": "en" } diff --git a/tests/test_main.py b/tests/test_main.py new file mode 100644 index 0000000..9cacfab --- /dev/null +++ b/tests/test_main.py @@ -0,0 +1,28 @@ +""" +Test main module +""" +import unittest + +from inkycal import Inkycal +from tests import Config + + +class TestMain(unittest.TestCase): + + def setUp(self): + self.settings_path = Config.TEST_SETTINGS_PATH + + def test_init(self): + inkycal = Inkycal(self.settings_path, render=False) + assert inkycal.settings["model"] == "image_file" + assert inkycal.settings["update_interval"] == 5 + assert inkycal.settings["orientation"] == 0 + assert inkycal.settings["info_section"] == True + assert inkycal.settings["info_section_height"] == 70 + assert inkycal.settings["border_around_modules"] == True + + def test_run(self): + inkycal = Inkycal(self.settings_path, render=False) + inkycal.test() + +