Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| edeec37c40 | |||
| ef4a28f40c | |||
| a2ffd83ca1 | |||
| 8312589ab4 | |||
| 84510530ce | |||
| f9c78e8892 | |||
| 9a45b0a205 | |||
| 7f1337e412 |
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
service_name: circle-ci
|
||||
parallel: true
|
||||
@@ -6,3 +6,4 @@ tmp
|
||||
.key*
|
||||
*.pyc
|
||||
.pytest_cache
|
||||
.coverage
|
||||
@@ -1,3 +1,7 @@
|
||||
[](https://lgtm.com/projects/g/Klemek/meme-otron/alerts/)
|
||||
[](https://lgtm.com/projects/g/Klemek/meme-otron/context:python)
|
||||
[](https://coveralls.io/github/Klemek/meme-otron?branch=master)
|
||||
|
||||
# Meme-Otron
|
||||
|
||||
*When making a meme need to be instantaneous*
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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,5 +1,4 @@
|
||||
from typing import Optional, Tuple, List
|
||||
import re
|
||||
from PIL import Image
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
@@ -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"))
|
||||
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user