8 Commits

Author SHA1 Message Date
klemek edeec37c40 coveralls integration 2020-05-02 16:10:23 +02:00
klemek ef4a28f40c coveralls integration 2020-05-02 16:09:35 +02:00
klemek a2ffd83ca1 coveralls integration 2020-05-02 16:05:18 +02:00
klemek 8312589ab4 shit 2020-05-02 16:00:39 +02:00
klemek 84510530ce coveralls integration 2020-05-02 15:59:05 +02:00
klemek f9c78e8892 coveralls integration 2020-05-02 15:55:12 +02:00
klemek 9a45b0a205 moved some tests to integration 2020-05-02 15:55:00 +02:00
klemek 7f1337e412 code quality improvement 2020-05-02 15:42:59 +02:00
13 changed files with 57 additions and 43 deletions
+4 -3
View File
@@ -37,6 +37,7 @@ jobs:
- run: - run:
command: | command: |
sudo pip install -r requirements.txt sudo pip install -r requirements.txt
sudo pip install pytest sudo pip install pytest pytest-cov coveralls
python -m pytest ./tests/unit pytest ./tests --cov=meme_otron
name: Unit tests coveralls
name: Tests
+2
View File
@@ -0,0 +1,2 @@
service_name: circle-ci
parallel: true
+1
View File
@@ -6,3 +6,4 @@ tmp
.key* .key*
*.pyc *.pyc
.pytest_cache .pytest_cache
.coverage
+4
View File
@@ -1,3 +1,7 @@
[![Total alerts](https://img.shields.io/lgtm/alerts/g/Klemek/meme-otron.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Klemek/meme-otron/alerts/)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/Klemek/meme-otron.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Klemek/meme-otron/context:python)
[![Coverage Status](https://coveralls.io/repos/github/Klemek/meme-otron/badge.svg?branch=master)](https://coveralls.io/github/Klemek/meme-otron?branch=master)
# Meme-Otron # Meme-Otron
*When making a meme need to be instantaneous* *When making a meme need to be instantaneous*
-1
View File
@@ -68,7 +68,6 @@ def build_text_only(texts: List[Text], debug: bool = False) -> Image.Image:
range_factor = heights[i] / max_height range_factor = heights[i] / max_height
start = sum(heights[:i]) / max_height start = sum(heights[:i]) / max_height
text.y_range = (start + text.y_range[0] * range_factor, start + text.y_range[1] * range_factor) text.y_range = (start + text.y_range[0] * range_factor, start + text.y_range[1] * range_factor)
pass
txt_img = Image.new('RGBA', (TEXT_IMAGE_WIDTH, max_height), (255, 255, 255)) txt_img = Image.new('RGBA', (TEXT_IMAGE_WIDTH, max_height), (255, 255, 255))
return apply_texts(txt_img, texts, debug=debug) return apply_texts(txt_img, texts, debug=debug)
+2 -2
View File
@@ -91,8 +91,8 @@ def load_item(i: int, item: dict):
meme.texts_len = current_text - 1 meme.texts_len = current_text - 1
except TypeError as e: except TypeError as e:
logger.warning(f"Item '{item_id}'({i + 1}) / Text {j + 1}: {e}") logger.warning(f"Item '{item_id}'({i + 1}) / Text {j + 1}: {e}")
for text in meme.texts: for text in meme.texts:
text.update(meme.text_base) text.update(meme.text_base)
else: else:
DATA[item_id] = meme DATA[item_id] = meme
if not meme.abstract: if not meme.abstract:
-1
View File
@@ -1,5 +1,4 @@
from typing import Optional, Tuple, List from typing import Optional, Tuple, List
import re
from PIL import Image from PIL import Image
from io import BytesIO from io import BytesIO
View File
@@ -0,0 +1,31 @@
from unittest import TestCase
from meme_otron import utils
class TestUtilsLang(TestCase):
def test_find_nearest(self):
self.assertEqual("test", utils.find_nearest("tost", ["test", "example", "what"]))
self.assertIsNone(utils.find_nearest("unknown", ["test", "example", "what"], threshold=2))
self.assertEqual("test", utils.find_nearest("unknown", ["test", "example", "what"], threshold=200))
class TestUtilsWeb(TestCase):
def test_read_web_file(self):
out, err = utils.read_web_file("http:invalid.url")
self.assertIsNone(out)
self.assertEqual('Invalid URL', err)
out, err = utils.read_web_file("http://unknown.domain/")
self.assertIsNone(out)
self.assertEqual('Could not connect to server', err)
out, err = utils.read_web_file("http://httpbin.org/status/418")
self.assertIsNone(out)
self.assertEqual('Could not connect: HTTP Error 418: I\'M A TEAPOT', err)
out, err = utils.read_web_file("http://httpbin.org/bytes/1024", max_file_size=1000)
self.assertIsNone(out)
self.assertEqual('File too big', err)
# out, err = utils.read_web_file("http://httpbin.org/delay/1", timeout=0.1)
# self.assertIsNone(out)
# self.assertEqual('Could not connect to server', err)
out, err = utils.read_web_file("http://httpbin.org/base64/dGVzdA==")
self.assertIsNone(err)
self.assertEqual('test', out.decode("utf-8"))
-25
View File
@@ -88,11 +88,6 @@ class TestUtilsDict(TestCase):
class TestUtilsLang(TestCase): class TestUtilsLang(TestCase):
def test_find_nearest(self):
self.assertEqual("test", utils.find_nearest("tost", ["test", "example", "what"]))
self.assertIsNone(utils.find_nearest("unknown", ["test", "example", "what"], threshold=2))
self.assertEqual("test", utils.find_nearest("unknown", ["test", "example", "what"], threshold=200))
def test_sanitize_input(self): def test_sanitize_input(self):
self.assertEqual("", utils.sanitize_input("")) self.assertEqual("", utils.sanitize_input(""))
self.assertEqual("a b_c", utils.sanitize_input(" A+=¤$ bé_cè:* ")) self.assertEqual("a b_c", utils.sanitize_input(" A+=¤$ bé_cè:* "))
@@ -173,23 +168,3 @@ class TestUtilsWeb(TestCase):
self.assertFalse(utils.validate_url("https:google.com/page#anchor?key=value&query")) self.assertFalse(utils.validate_url("https:google.com/page#anchor?key=value&query"))
self.assertFalse(utils.validate_url("")) self.assertFalse(utils.validate_url(""))
self.assertFalse(utils.validate_url("google.com")) self.assertFalse(utils.validate_url("google.com"))
def test_read_web_file(self):
out, err = utils.read_web_file("http:invalid.url")
self.assertIsNone(out)
self.assertEqual('Invalid URL', err)
out, err = utils.read_web_file("http://unknown.domain/")
self.assertIsNone(out)
self.assertEqual('Could not connect to server', err)
out, err = utils.read_web_file("http://httpbin.org/status/418")
self.assertIsNone(out)
self.assertEqual('Could not connect: HTTP Error 418: I\'M A TEAPOT', err)
out, err = utils.read_web_file("http://httpbin.org/bytes/1024", max_file_size=1000)
self.assertIsNone(out)
self.assertEqual('File too big', err)
# out, err = utils.read_web_file("http://httpbin.org/delay/1", timeout=0.1)
# self.assertIsNone(out)
# self.assertEqual('Could not connect to server', err)
out, err = utils.read_web_file("http://httpbin.org/base64/dGVzdA==")
self.assertIsNone(err)
self.assertEqual('test', out.decode("utf-8"))
+11 -8
View File
@@ -8,12 +8,15 @@ try:
y0 = int(input("y0:")) y0 = int(input("y0:"))
w1 = int(input("w1:")) w1 = int(input("w1:"))
h1 = int(input("h1:")) h1 = int(input("h1:"))
x1 = round(x0/w, 2) x1 = round(x0 / w, 2)
y1 = round(y0/h, 2) y1 = round(y0 / h, 2)
x2 = round((x0+w1)/w, 2) x2 = round((x0 + w1) / w, 2)
y2 = round((y0+h1)/h, 2) y2 = round((y0 + h1) / h, 2)
print(',{\n "x_range": '+f"[{x1:.2f}, {x2:.2f}]"+',\n "y_range": '+f"[{y1:.2f}, {y2:.2f}]"+'\n }') print(
except: ',{\n "x_range": ' + f"[{x1:.2f}, {x2:.2f}]" + ',\n "y_range": ' + f"[{y1:.2f}, {y2:.2f}]" + '\n }')
except ValueError:
pass pass
except: except ValueError:
pass pass
except KeyboardInterrupt:
pass
+2 -3
View File
@@ -3,7 +3,6 @@ import stat
import time import time
import datetime import datetime
import logging import logging
from os import path
from meme_otron import img_factory from meme_otron import img_factory
from meme_otron import meme_db from meme_otron import meme_db
from meme_otron import utils from meme_otron import utils
@@ -16,7 +15,7 @@ db_file = utils.relative_path(__file__, "..", meme_db.DATA_FILE)
templates_dir = utils.relative_path(__file__, "..", "templates") templates_dir = utils.relative_path(__file__, "..", "templates")
dst_dir = utils.relative_path(__file__, "tmp") dst_dir = utils.relative_path(__file__, "tmp")
if not path.exists(dst_dir): if not os.path.exists(dst_dir):
os.mkdir(dst_dir) os.mkdir(dst_dir)
last = None last = None
@@ -32,6 +31,6 @@ while True:
meme = meme_db.get_meme(meme_id) meme = meme_db.get_meme(meme_id)
img = img_factory.build_from_template(meme.template, meme.texts, debug=True) img = img_factory.build_from_template(meme.template, meme.texts, debug=True)
if img is not None: if img is not None:
img.save(path.join(dst_dir, meme.template)) img.save(os.path.join(dst_dir, meme.template))
count += 1 count += 1
print(f"{datetime.datetime.now():%H:%M:%S} / {count} registered templates / {len(os.listdir(templates_dir))} files") print(f"{datetime.datetime.now():%H:%M:%S} / {count} registered templates / {len(os.listdir(templates_dir))} files")