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:
command: |
sudo pip install -r requirements.txt
sudo pip install pytest
python -m pytest ./tests/unit
name: Unit tests
sudo pip install pytest pytest-cov coveralls
pytest ./tests --cov=meme_otron
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*
*.pyc
.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
*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
start = sum(heights[:i]) / max_height
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))
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
except TypeError as e:
logger.warning(f"Item '{item_id}'({i + 1}) / Text {j + 1}: {e}")
for text in meme.texts:
text.update(meme.text_base)
for text in meme.texts:
text.update(meme.text_base)
else:
DATA[item_id] = meme
if not meme.abstract:
-1
View File
@@ -1,5 +1,4 @@
from typing import Optional, Tuple, List
import re
from PIL import Image
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):
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):
self.assertEqual("", utils.sanitize_input(""))
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(""))
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:"))
w1 = int(input("w1:"))
h1 = int(input("h1:"))
x1 = round(x0/w, 2)
y1 = round(y0/h, 2)
x2 = round((x0+w1)/w, 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 }')
except:
x1 = round(x0 / w, 2)
y1 = round(y0 / h, 2)
x2 = round((x0 + w1) / w, 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 }')
except ValueError:
pass
except:
pass
except ValueError:
pass
except KeyboardInterrupt:
pass
+2 -3
View File
@@ -3,7 +3,6 @@ import stat
import time
import datetime
import logging
from os import path
from meme_otron import img_factory
from meme_otron import meme_db
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")
dst_dir = utils.relative_path(__file__, "tmp")
if not path.exists(dst_dir):
if not os.path.exists(dst_dir):
os.mkdir(dst_dir)
last = None
@@ -32,6 +31,6 @@ while True:
meme = meme_db.get_meme(meme_id)
img = img_factory.build_from_template(meme.template, meme.texts, debug=True)
if img is not None:
img.save(path.join(dst_dir, meme.template))
img.save(os.path.join(dst_dir, meme.template))
count += 1
print(f"{datetime.datetime.now():%H:%M:%S} / {count} registered templates / {len(os.listdir(templates_dir))} files")