fetch emails through Zero MQ
This commit is contained in:
parent
8c5d4d7301
commit
47bda266a4
10 changed files with 62 additions and 27 deletions
6
app/conf/config.py
Normal file
6
app/conf/config.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# TODO move to JSON config
|
||||||
|
|
||||||
|
zmq = {'pub_port': 7701, 'sub_port':7702}
|
43
app/interface/zclient.py
Normal file
43
app/interface/zclient.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import zmq
|
||||||
|
from conf import config
|
||||||
|
from threading import Thread
|
||||||
|
import logging
|
||||||
|
import json
|
||||||
|
from app.services import processor
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
context = zmq.Context()
|
||||||
|
|
||||||
|
|
||||||
|
def process(message):
|
||||||
|
data = json.loads(message)
|
||||||
|
if data['topic'] == 'email:newmail':
|
||||||
|
logger.info('newmail => {}'.format(data))
|
||||||
|
processor.enqueue({'request': 'new_mail', 'data': data})
|
||||||
|
|
||||||
|
|
||||||
|
class Consumer(Thread):
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
zsub = context.socket(zmq.SUB)
|
||||||
|
zsub.connect('tcp://127.0.0.1:{}'.format(config.zmq['pub_port']))
|
||||||
|
zsub.setsockopt_string(zmq.SUBSCRIBE, '')
|
||||||
|
self.loop = True
|
||||||
|
while self.loop:
|
||||||
|
message = zsub.recv()
|
||||||
|
try:
|
||||||
|
process(message)
|
||||||
|
except:
|
||||||
|
logger.exception('cannot process broker message')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self.loop = False
|
||||||
|
|
||||||
|
|
||||||
|
def start():
|
||||||
|
c = Consumer()
|
||||||
|
c.start()
|
23
app/run.py
23
app/run.py
|
@ -18,10 +18,11 @@ for path in paths:
|
||||||
import config
|
import config
|
||||||
from app.services import database
|
from app.services import database
|
||||||
from app.services import processor
|
from app.services import processor
|
||||||
from app.controllers import api
|
from app.interface import api
|
||||||
from app.controllers import form
|
from app.interface import form
|
||||||
from app.controllers import report
|
from app.interface import report
|
||||||
from app.controllers import mail
|
#from app.controllers import mail
|
||||||
|
from app.interface import zclient
|
||||||
from app import app
|
from app import app
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,18 +48,8 @@ logger = logging.getLogger(__name__)
|
||||||
# initialize database
|
# initialize database
|
||||||
database.setup()
|
database.setup()
|
||||||
|
|
||||||
#from app.helpers.hashing import md5
|
# start broker client
|
||||||
#from app.models.comment import Comment
|
zclient.start()
|
||||||
#for comment in Comment.select():
|
|
||||||
# email = comment.author_email.strip().lower()
|
|
||||||
# if email:
|
|
||||||
# comment.author_gravatar = md5(email)
|
|
||||||
# comment.author_email = ''
|
|
||||||
# comment.save()
|
|
||||||
|
|
||||||
# routes
|
|
||||||
logger.debug('imported: %s ' % api.__name__)
|
|
||||||
logger.debug('imported: %s ' % mail.__name__)
|
|
||||||
|
|
||||||
# start processor
|
# start processor
|
||||||
template_path = os.path.abspath(os.path.join(current_path, 'templates'))
|
template_path = os.path.abspath(os.path.join(current_path, 'templates'))
|
||||||
|
|
|
@ -14,7 +14,6 @@ from app.models.reader import Reader
|
||||||
from app.models.report import Report
|
from app.models.report import Report
|
||||||
from app.models.comment import Comment
|
from app.models.comment import Comment
|
||||||
from app.helpers.hashing import md5
|
from app.helpers.hashing import md5
|
||||||
import requests
|
|
||||||
import json
|
import json
|
||||||
import config
|
import config
|
||||||
import PyRSS2Gen
|
import PyRSS2Gen
|
||||||
|
@ -392,7 +391,8 @@ def mail(to_email, subject, message):
|
||||||
'subject': subject,
|
'subject': subject,
|
||||||
'content': message
|
'content': message
|
||||||
}
|
}
|
||||||
r = requests.post(config.MAIL_URL, data=json.dumps(msg), headers=headers)
|
# do something smart here
|
||||||
|
# r = requests.post(config.MAIL_URL, data=json.dumps(msg), headers=headers)
|
||||||
if r.status_code in (200, 201):
|
if r.status_code in (200, 201):
|
||||||
logger.debug('Email for %s posted' % to_email)
|
logger.debug('Email for %s posted' % to_email)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
certifi==2017.11.5
|
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
click==6.7
|
click==6.7
|
||||||
Flask==0.12.2
|
Flask==0.12.2
|
||||||
Flask-Cors==3.0.3
|
|
||||||
idna==2.6
|
|
||||||
itsdangerous==0.24
|
itsdangerous==0.24
|
||||||
Jinja2==2.10
|
Jinja2==2.10
|
||||||
Markdown==2.6.9
|
Markdown==2.6.11
|
||||||
MarkupSafe==1.0
|
MarkupSafe==1.0
|
||||||
peewee==2.10.2
|
peewee==2.10.2
|
||||||
PyRSS2Gen==1.1
|
PyRSS2Gen==1.1
|
||||||
requests==2.18.4
|
pyzmq==16.0.3
|
||||||
six==1.11.0
|
Werkzeug==0.14.1
|
||||||
urllib3==1.22
|
|
||||||
Werkzeug==0.12.2
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue