Mercurial > code > home > repos > href
view lookup.py @ 4:409da49c148d
partway though add
Ignore-this: 330d1f3393bb91ca56267d2138e3bb22
author | drewp@bigasterisk.com |
---|---|
date | Sun, 17 Feb 2013 21:12:53 -0800 |
parents | 80b11112c9e0 |
children | f8c4c7ce5f4a |
line wrap: on
line source
#!bin/python """ serve some queries over bookmarks: /user /user/tag+tag+tag """ import pymongo, bottle, time, urllib, datetime 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(name, data) dt = (time.time() - t1) * 1000 rendered = rendered.replace('TEMPLATETIME', "%.02f ms" % dt) return rendered def getUser(): return 'drewpca' # logged in user @bottle.route('/addLink') def addLink(): out = {'toRoot': '.'} out['user'] = getUser() out['withKnockout'] = True return renderWithTime('add.jade', out) @bottle.route('/addOverlay') def addOverlay(): p = bottle.request.params return "" proposal check existing links, get page title (stuff that in db), get tags from us and other serviecs. maybe the deferred ones ater @bottle.route('/<user>/') def userSlash(user): bottle.redirect("/%s" % urllib.quote(user)) @bottle.route('/<user>', method='GET') 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>', method='POST') def userAddLink(user): p = bottle.request.params doc = dict( user=user, description=p.description, extended=p.extended, href=p.href, #private=p.private, == checked, #shared ?? tag=p.tag, t=datetime.datetime.now(tzlocal()), ) db['links'].insert(doc, safe=True) bottle.redirect(user) @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)