|
1
|
|
|
# pylint: disable=no-member |
|
2
|
|
|
|
|
3
|
1 |
|
import os |
|
4
|
1 |
|
import logging |
|
5
|
|
|
|
|
6
|
1 |
|
import sqlalchemy as sa |
|
|
|
|
|
|
7
|
|
|
|
|
8
|
1 |
|
from ..extensions import db |
|
9
|
|
|
|
|
10
|
1 |
|
log = logging.getLogger(__name__) |
|
11
|
|
|
|
|
12
|
|
|
|
|
13
|
1 |
|
class MemeModel(db.Model): |
|
|
|
|
|
|
14
|
1 |
|
__tablename__ = 'memes' |
|
15
|
1 |
|
id = sa.Column(sa.Integer, primary_key=True, nullable=False) |
|
16
|
1 |
|
key = sa.Column(sa.String, nullable=False) |
|
17
|
|
|
|
|
18
|
1 |
|
def __repr__(self): |
|
19
|
|
|
return "<Meme(id='%s', key='%s')>" % (self.id, self.key) |
|
20
|
|
|
|
|
21
|
1 |
|
def save(self): |
|
22
|
|
|
db.session.add(self) |
|
23
|
|
|
db.session.commit() |
|
24
|
|
|
|
|
25
|
|
|
|
|
26
|
1 |
|
class WordModel(db.Model): |
|
|
|
|
|
|
27
|
1 |
|
__tablename__ = 'words' |
|
28
|
1 |
|
id = sa.Column(sa.String, primary_key=True, nullable=False) |
|
29
|
1 |
|
meme_id = sa.Column(sa.Integer, sa.ForeignKey('memes.id'), nullable=False) |
|
30
|
1 |
|
occurances = sa.Column(sa.Integer) |
|
31
|
|
|
|
|
32
|
1 |
|
def __repr__(self): |
|
33
|
|
|
return "<Word(id='%s', meme_id='%s', occurances='%s')>" \ |
|
34
|
|
|
% (self.id, self.meme_id, self.occurances) |
|
35
|
|
|
|
|
36
|
|
|
|
|
37
|
1 |
|
class ImageModel: |
|
38
|
1 |
|
def __init__(self, image): |
|
39
|
1 |
|
self._word_models = {} |
|
40
|
1 |
|
self._words = [] |
|
41
|
1 |
|
self.key = image.template.key |
|
42
|
|
|
|
|
43
|
|
|
# append all the individual words into an array |
|
44
|
1 |
|
for line in image.text.lines: |
|
45
|
1 |
|
self._words += line.lower().split(' ') |
|
46
|
|
|
|
|
47
|
1 |
|
meme = (db.session.query(MemeModel) |
|
48
|
|
|
.filter_by(key=image.template.key) |
|
49
|
|
|
.first()) |
|
50
|
1 |
|
if not meme: |
|
51
|
1 |
|
meme = MemeModel(key=image.template.key) |
|
52
|
1 |
|
db.session.add(meme) |
|
53
|
1 |
|
db.session.commit() |
|
54
|
|
|
|
|
55
|
|
|
# look-up the word from the database, count the |
|
56
|
|
|
# occurances in this particular set of text |
|
57
|
1 |
|
for word in self._words: |
|
58
|
|
|
# is there no entry? should we query for one |
|
59
|
|
|
# or create a new one? |
|
60
|
1 |
|
if not self._word_models.get(word): |
|
61
|
1 |
|
model = ( |
|
62
|
|
|
db.session.query(WordModel) |
|
63
|
|
|
.filter(WordModel.id == word) |
|
64
|
|
|
.first() |
|
65
|
|
|
) |
|
66
|
|
|
|
|
67
|
|
|
# doesn't exist, create a new model |
|
68
|
1 |
|
if not model: |
|
69
|
1 |
|
model = WordModel(id=word, meme_id=meme.id, occurances=0) |
|
70
|
|
|
|
|
71
|
1 |
|
model.occurances += 1 |
|
72
|
1 |
|
self._word_models[word] = model |
|
73
|
|
|
|
|
74
|
|
|
else: |
|
75
|
1 |
|
self._word_models[word].occurances += 1 |
|
76
|
|
|
|
|
77
|
|
|
# save all the updated occurance counts |
|
78
|
1 |
|
for key in self._word_models: |
|
79
|
1 |
|
if self._word_models[key]: |
|
80
|
1 |
|
db.session.add(self._word_models[key]) |
|
81
|
1 |
|
db.session.commit() |
|
82
|
|
|
|
|
83
|
|
|
|
|
84
|
1 |
|
class ImageStore: |
|
85
|
|
|
|
|
86
|
1 |
|
LATEST = "latest.jpg" |
|
87
|
|
|
|
|
88
|
1 |
|
def __init__(self, root, config): |
|
89
|
1 |
|
self.root = root |
|
90
|
1 |
|
self.debug = config.get('DEBUG', False) |
|
91
|
|
|
|
|
92
|
1 |
|
@property |
|
93
|
|
|
def latest(self): |
|
94
|
1 |
|
return os.path.join(self.root, self.LATEST) |
|
95
|
|
|
|
|
96
|
1 |
|
def exists(self, image): |
|
97
|
1 |
|
image.root = self.root |
|
98
|
|
|
# TODO: add a way to determine if the styled image was already generated |
|
99
|
1 |
|
return os.path.isfile(image.path) and not image.style |
|
100
|
|
|
|
|
101
|
1 |
|
def create(self, image): |
|
102
|
1 |
|
if self.exists(image) and not self.debug: |
|
103
|
|
|
return |
|
104
|
|
|
|
|
105
|
1 |
|
ImageModel(image) |
|
106
|
|
|
|
|
107
|
1 |
|
image.root = self.root |
|
108
|
1 |
|
image.generate() |
|
109
|
|
|
|
|
110
|
1 |
|
try: |
|
111
|
1 |
|
os.remove(self.latest) |
|
112
|
1 |
|
except IOError: |
|
113
|
1 |
|
pass |
|
114
|
|
|
os.symlink(image.path, self.latest) |
|
115
|
|
|
|
This can be caused by one of the following:
1. Missing Dependencies
This error could indicate a configuration issue of Pylint. Make sure that your libraries are available by adding the necessary commands.
2. Missing __init__.py files
This error could also result from missing
__init__.pyfiles in your module folders. Make sure that you place one file in each sub-folder.