text-module enhancement
This allows an improved approach to load text from URL Also improved the function to check for a connection by attempting three times before giving up
This commit is contained in:
parent
3124ecd535
commit
bebe60aef3
@ -6,12 +6,12 @@ Inkycal custom-functions for ease-of-use
|
|||||||
Copyright by aceinnolab
|
Copyright by aceinnolab
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import traceback
|
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont, ImageColor
|
|
||||||
import requests
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
logs = logging.getLogger(__name__)
|
logs = logging.getLogger(__name__)
|
||||||
logs.setLevel(level=logging.INFO)
|
logs.setLevel(level=logging.INFO)
|
||||||
@ -267,13 +267,14 @@ def internet_available():
|
|||||||
>>> if internet_available():
|
>>> if internet_available():
|
||||||
>>> #...do something that requires internet connectivity
|
>>> #...do something that requires internet connectivity
|
||||||
"""
|
"""
|
||||||
|
for attempt in range(3):
|
||||||
try:
|
try:
|
||||||
requests.get('https://google.com', timeout=5)
|
requests.get('https://google.com', timeout=5)
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
print(f"Network could not be reached: {traceback.print_exc()}")
|
print(f"Network could not be reached: {traceback.print_exc()}")
|
||||||
return False
|
time.sleep(5)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def draw_border(image, xy, size, radius=5, thickness=1, shrinkage=(0.1, 0.1)):
|
def draw_border(image, xy, size, radius=5, thickness=1, shrinkage=(0.1, 0.1)):
|
||||||
|
@ -65,12 +65,6 @@ class TextToDisplay(inkycal_module):
|
|||||||
im_black = Image.new('RGB', size=im_size, color='white')
|
im_black = Image.new('RGB', size=im_size, color='white')
|
||||||
im_colour = Image.new('RGB', size=im_size, color='white')
|
im_colour = Image.new('RGB', size=im_size, color='white')
|
||||||
|
|
||||||
# Check if internet is available
|
|
||||||
if internet_available():
|
|
||||||
logger.info('Connection test passed')
|
|
||||||
else:
|
|
||||||
raise NetworkNotReachableError
|
|
||||||
|
|
||||||
# Set some parameters for formatting feeds
|
# Set some parameters for formatting feeds
|
||||||
line_spacing = 4
|
line_spacing = 4
|
||||||
text_bbox_height = self.font.getbbox("hg")
|
text_bbox_height = self.font.getbbox("hg")
|
||||||
@ -87,6 +81,11 @@ class TextToDisplay(inkycal_module):
|
|||||||
|
|
||||||
if self.make_request:
|
if self.make_request:
|
||||||
logger.info("Detected http path, making request")
|
logger.info("Detected http path, making request")
|
||||||
|
# Check if internet is available
|
||||||
|
if internet_available():
|
||||||
|
logger.info('Connection test passed')
|
||||||
|
else:
|
||||||
|
raise NetworkNotReachableError
|
||||||
file_content = urlopen(self.filepath).read().decode('utf-8')
|
file_content = urlopen(self.filepath).read().decode('utf-8')
|
||||||
else:
|
else:
|
||||||
# Create list containing all lines
|
# Create list containing all lines
|
||||||
|
@ -28,6 +28,8 @@ class Config:
|
|||||||
# inkycal_todoist_test
|
# inkycal_todoist_test
|
||||||
TODOIST_API_KEY = get("TODOIST_API_KEY")
|
TODOIST_API_KEY = get("TODOIST_API_KEY")
|
||||||
|
|
||||||
|
TEMP_PATH = f"{basedir}/tmp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,14 +3,16 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from inkycal.modules import TextToDisplay as Module
|
|
||||||
|
|
||||||
|
from inkycal.modules import TextToDisplay as Module
|
||||||
from inkycal.modules.inky_image import Inkyimage
|
from inkycal.modules.inky_image import Inkyimage
|
||||||
from inkycal.tests import Config
|
from inkycal.tests import Config
|
||||||
|
|
||||||
preview = Inkyimage.preview
|
preview = Inkyimage.preview
|
||||||
merge = Inkyimage.merge
|
merge = Inkyimage.merge
|
||||||
|
|
||||||
file_path = None
|
|
||||||
|
temp_path = f"{Config.TEMP_PATH}/temp.txt"
|
||||||
|
|
||||||
dummy_data = [
|
dummy_data = [
|
||||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', ' Donec feugiat facilisis neque vel blandit.',
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', ' Donec feugiat facilisis neque vel blandit.',
|
||||||
@ -56,7 +58,7 @@ tests = [
|
|||||||
"name": "TextToFile",
|
"name": "TextToFile",
|
||||||
"config": {
|
"config": {
|
||||||
"size": [500, 100],
|
"size": [500, 100],
|
||||||
"filepath": file_path,
|
"filepath": temp_path,
|
||||||
"padding_x": 10,
|
"padding_x": 10,
|
||||||
"padding_y": 10,
|
"padding_y": 10,
|
||||||
"fontsize": 12,
|
"fontsize": 12,
|
||||||
@ -68,7 +70,7 @@ tests = [
|
|||||||
"name": "TextToFile",
|
"name": "TextToFile",
|
||||||
"config": {
|
"config": {
|
||||||
"size": [500, 400],
|
"size": [500, 400],
|
||||||
"filepath": file_path,
|
"filepath": "https://de.wikipedia.org/wiki/Nationale_Rotkreuz-_und_Rothalbmond-Gesellschaft",
|
||||||
"padding_x": 10,
|
"padding_x": 10,
|
||||||
"padding_y": 10,
|
"padding_y": 10,
|
||||||
"fontsize": 12,
|
"fontsize": 12,
|
||||||
@ -80,31 +82,19 @@ tests = [
|
|||||||
|
|
||||||
class TestTextToDisplay(unittest.TestCase):
|
class TestTextToDisplay(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.temp_path = temp_path
|
||||||
|
if not os.path.exists(self.temp_path):
|
||||||
|
print("could not find temporary file, creating now.")
|
||||||
|
with open(self.temp_path, encoding="utf-8", mode="w") as file:
|
||||||
|
file.writelines(dummy_data)
|
||||||
|
|
||||||
def test_get_config(self):
|
def test_get_config(self):
|
||||||
print('getting data for web-ui...', end="")
|
print('getting data for web-ui...', end="")
|
||||||
Module.get_config()
|
Module.get_config()
|
||||||
print('OK')
|
print('OK')
|
||||||
|
|
||||||
def test_generate_image(self):
|
def test_generate_image(self):
|
||||||
delete_file_after_parse = False
|
|
||||||
|
|
||||||
if not file_path:
|
|
||||||
delete_file_after_parse = True
|
|
||||||
print("Filepath does not exist. Creating dummy file")
|
|
||||||
|
|
||||||
tmp_path = "tmp.txt"
|
|
||||||
with open(tmp_path, mode="w", encoding="utf-8") as file:
|
|
||||||
file.writelines(dummy_data)
|
|
||||||
|
|
||||||
# update tests with new temp path
|
|
||||||
for test in tests:
|
|
||||||
test["config"]["filepath"] = tmp_path
|
|
||||||
|
|
||||||
else:
|
|
||||||
make_request = bool(file_path.startswith("https://"))
|
|
||||||
if not make_request and not os.path.exists(file_path):
|
|
||||||
raise FileNotFoundError("Your text file could not be found")
|
|
||||||
|
|
||||||
for test in tests:
|
for test in tests:
|
||||||
print(f'test {tests.index(test) + 1} generating image..')
|
print(f'test {tests.index(test) + 1} generating image..')
|
||||||
module = Module(test)
|
module = Module(test)
|
||||||
@ -113,9 +103,10 @@ class TestTextToDisplay(unittest.TestCase):
|
|||||||
if Config.USE_PREVIEW:
|
if Config.USE_PREVIEW:
|
||||||
preview(merge(im_black, im_colour))
|
preview(merge(im_black, im_colour))
|
||||||
|
|
||||||
if delete_file_after_parse:
|
def tearDown(self):
|
||||||
print("cleaning up temp file")
|
if os.path.exists(self.temp_path):
|
||||||
os.remove("tmp.txt")
|
print("deleting temporary file.")
|
||||||
|
os.remove(self.temp_path)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -23,3 +23,4 @@ typing_extensions==4.8.0
|
|||||||
urllib3==2.0.7
|
urllib3==2.0.7
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.0
|
||||||
setuptools==68.2.2
|
setuptools==68.2.2
|
||||||
|
html2text==2020.1.16
|
||||||
|
Loading…
Reference in New Issue
Block a user