Skip to content

Commit

Permalink
moved from flup to uwsgi and other small fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
mahmoud committed Apr 20, 2015
1 parent 963fd8a commit bbb9136
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 18 deletions.
4 changes: 4 additions & 0 deletions .gitignore
@@ -1 +1,5 @@
.DS_Store
*.pyc
*.py~
*.log

3 changes: 3 additions & 0 deletions app.py
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from server import create_app
app = create_app()
7 changes: 7 additions & 0 deletions requirements.txt
@@ -0,0 +1,7 @@
Werkzeug==0.9.4
argparse==1.2.1
ashes==0.7.4
boltons==0.6.2
clastic==0.4.2
oursql==0.9.3.1
wsgiref==0.1.2
49 changes: 32 additions & 17 deletions server.py
Expand Up @@ -3,13 +3,14 @@
import sys
from os.path import join as pjoin

from flup.server.fcgi import WSGIServer
from clastic import Application, render_json, render_basic
from clastic import Application, render_json, render_basic, Middleware
from clastic.meta import MetaApplication
from clastic.render import AshesRenderFactory
from clastic.static import StaticApplication
import oursql

from boltons.strutils import find_hashtags
from boltons.tbutils import ExceptionInfo

DB_CONFIG_PATH = os.path.expanduser('~/replica.my.cnf')
FLUP_LOG_DIR = os.path.expanduser('~')
Expand All @@ -21,44 +22,61 @@
_CUR_PATH = os.path.dirname(__file__)


def get_hashtags(tag, lang=DEFAULT_LANG, days=DEFAULT_DAYS):
class ExceptionPrinter(Middleware):
def request(self, next, request, _route):
try:
return next()
except:
formatted_tb = ExceptionInfo.from_current().get_formatted()
print formatted_tb
import pdb;pdb.post_mortem()
return render_basic(request=request,
context=formatted_tb,
_route=_route)


def get_hashtags(tag=None, lang=DEFAULT_LANG, days=DEFAULT_DAYS):
query = '''
SELECT *
FROM recentchanges
WHERE rc_type = 0
AND rc_timestamp > DATE_FORMAT(DATE_SUB(NOW(),
INTERVAL ? DAY),
'%Y%m%d%H%i%s')
AND rc_comment REGEXP ?'''
AND rc_comment REGEXP ? ORDER BY rc_timestamp DESC'''
db_title = lang + 'wiki_p'
db_host = lang + 'wiki.labsdb'
connection = oursql.connect(db=db_title,
host=db_host,
read_default_file=DB_CONFIG_PATH,
charset=None)
charset=None,
use_unicode=True)
cursor = connection.cursor(oursql.DictCursor)
if tag is None:
tag_pattern = '(^| )#[[:alpha:]]{1}[[:alnum:]]*[[:>:]]'
else:
tag_pattern = '(^| )[#]{1}%s[[:>:]]' % tag
tag_pattern = '(^| )#%s[[:>:]]' % tag
cursor.execute(query, (days, tag_pattern))
ret = cursor.fetchall()
return ret


def process_revs(rev, lang):
url_str = '%s.wikipedia.org/wiki/?diff=%s&oldid=%s'
url_str = 'https://%s.wikipedia.org/wiki/?diff=%s&oldid=%s'
rev['diff_size'] = rev['rc_new_len'] - rev['rc_old_len']
rev['date'] = rev['rc_timestamp'] # TODO
rev['diff_url'] = url_str % (lang,
rev['rc_this_oldid'],
rev['rc_last_oldid'])
rev['tags'] = find_hashtags(rev['rc_comment'])
return rev


def generate_report(tag=None, lang=DEFAULT_LANG, days=DEFAULT_DAYS):
revs = get_hashtags(tag, lang, days)
ret = [process_revs(rev, lang) for rev in revs]
ret = [r for r in ret if not all(tag.lower() == 'redirect' for tag
in r['tags'])]
if tag is None:
tag = 'all tags'
return {'revisions': ret, 'tag': tag}
Expand All @@ -68,21 +86,18 @@ def create_app():
_template_dir = os.path.join(_CUR_PATH, TEMPLATES_PATH)
_static_dir = os.path.join(_CUR_PATH, STATIC_PATH)
templater = AshesRenderFactory(_template_dir)
routes = [('/', generate_report, 'design.html'),
routes = [('/all', generate_report, 'design.html'),
('/<tag>', generate_report, 'design.html'),
('/get/<tag>', get_hashtags, render_json),
('/get/<tag>/<lang>', get_hashtags, render_json),
('/get/<tag>/<lang>/<days>', get_hashtags, render_json),
('/static', StaticApplication(_static_dir)),
('/meta', MetaApplication())]
return Application(routes, render_factory=templater)
('/meta/', MetaApplication())]
return Application(routes,
middlewares=[ExceptionPrinter()],
render_factory=templater)


if __name__ == '__main__':
wsgi_app = create_app()
# we have to redirect stdout and stderr, otherwise we see no
# errors beyond this point.
sys.stdout = open(pjoin(FLUP_LOG_DIR, 'flup-stdout.log'), 'a')
sys.stderr = open(pjoin(FLUP_LOG_DIR, 'flup-stderr.log'), 'a')
wsgi_server = WSGIServer(wsgi_app)
wsgi_server.run()
app = create_app()
app.serve()
2 changes: 1 addition & 1 deletion templates/design.html
Expand Up @@ -61,7 +61,7 @@ <h2>Showing <span id="filter-header"><strong>{tag}</strong></span></h2>
<tr>
<td>{rc_user_text}</td>
<td><a href="{diff_url}">{rc_title}</a></td>
<td>#test</td>
<td>{#tags}{.}{@sep}, {/sep}{/tags}</td>
<td>{rc_comment}</td>
<td>{diff_size}</td>
<td>{date}</td>
Expand Down

0 comments on commit bbb9136

Please sign in to comment.