Mercurial > code > home > repos > href
diff lookup.py @ 2:80b11112c9e0
web app for query urls like /user and /user/tag+tag
Ignore-this: bb1f40dd6bbff4c3ee463b440738726d
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sun, 17 Feb 2013 03:56:28 -0800 |
parents | |
children | 409da49c148d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lookup.py Sun Feb 17 03:56:28 2013 -0800 @@ -0,0 +1,75 @@ +#!bin/python +""" +serve some queries over bookmarks: + +/user +/user/tag+tag+tag + +""" +import pymongo, bottle, time, urllib +from urllib2 import urlparse +from dateutil.tz import tzlocal +from bottle import static_file +from jadestache import Renderer +db = pymongo.Connection('bang', tz_aware=True)['href'] + +renderer = Renderer(search_dirs=['template'], debug=bottle.DEBUG) + +@bottle.route('/static/<filename>') +def server_static(filename): + return static_file(filename, root='static') + +def recentTags(user, tags=None): + out = {'links':[]} + t1 = time.time() + spec = {'user':user} + if tags: + spec['extracted.tags'] = {'$all' : tags} + for doc in db['links'].find(spec, sort=[('t', -1)], limit=50): + del doc['_id'] + doc['t'] = doc['t'].astimezone(tzlocal()).isoformat() + if not doc['description'].strip(): + doc['displayDescription'] = doc['href'] + else: + doc['displayDescription'] = doc['description'] + + doc['tagWords'] = [{'word' : w} for w in doc['tag'].split(None)] + doc['domain'] = urlparse.urlparse(doc['href']).netloc + + out['links'].append(doc) + out['stats'] = {'queryTimeMs' : round((time.time() - t1) * 1000, 2)} + return out + +def renderWithTime(name, data): + t1 = time.time() + rendered = renderer.render_name("links.jade", data) + dt = (time.time() - t1) * 1000 + rendered = rendered.replace('TEMPLATETIME', "%.02f ms" % dt) + return rendered + +@bottle.route('/<user>/') +def userSlash(user): + bottle.redirect("/%s" % urllib.quote(user)) + +@bottle.route('/<user>') +def userAll(user): + data = recentTags(user, tags=None) + + data['desc'] = "%s's recent links" % user + data['toRoot'] = "." + data['stats']['template'] = 'TEMPLATETIME' + return renderWithTime('links.jade', data) + +@bottle.route('/<user>/<tags>') +def userLinks(user, tags): + tags = tags.split('+') + data = recentTags(user, tags) + data['desc'] = "%s's recent links tagged %s" % (user, tags) + data['toRoot'] = ".." + + data['pageTags'] = [{"word":t} for t in tags] + data['stats']['template'] = 'TEMPLATETIME' + return renderWithTime('links.jade', data) + +if __name__ == '__main__': + bottle.run(server='gunicorn', host='0.0.0.0', port=10002, workers=4)