Mercurial > code > home > repos > href
diff lookup.py @ 5:f8c4c7ce5f4a
lots of href additions: add/edit, nav fixes
Ignore-this: 863335c4680ac9bcc6a7fc5867638d61
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Thu, 21 Feb 2013 01:39:01 -0800 |
parents | 409da49c148d |
children | 93d94f327e82 |
line wrap: on
line diff
--- a/lookup.py Sun Feb 17 21:12:53 2013 -0800 +++ b/lookup.py Thu Feb 21 01:39:01 2013 -0800 @@ -5,16 +5,33 @@ /user /user/tag+tag+tag +and the add-bookmark stuff + """ -import pymongo, bottle, time, urllib, datetime +import pymongo, bottle, time, urllib, datetime, json, restkit from urllib2 import urlparse from dateutil.tz import tzlocal from bottle import static_file from jadestache import Renderer +from pagetitle import PageTitle +from link import Links, NotFound db = pymongo.Connection('bang', tz_aware=True)['href'] - +pageTitle = PageTitle(db) +links = Links(db) renderer = Renderer(search_dirs=['template'], debug=bottle.DEBUG) +siteRoot = 'https://bigasterisk.com/href' + +def getLoginBar(): + openidProxy = restkit.Resource("http://bang:9023/") + return openidProxy.get("_loginBar", + headers={"Cookie" : bottle.request.headers.get('cookie')}).body_string() + +def getUser(): + agent = bottle.request.headers.get('x-foaf-agent', None) + username = db['user'].find_one({'_id':agent})['username'] if agent else None + return username, agent + @bottle.route('/static/<filename>') def server_static(filename): return static_file(filename, root='static') @@ -35,6 +52,7 @@ doc['tagWords'] = [{'word' : w} for w in doc['tag'].split(None)] doc['domain'] = urlparse.urlparse(doc['href']).netloc + doc['editLink'] = 'addLink?' + urllib.urlencode([('url', doc['href'])]) out['links'].append(doc) out['stats'] = {'queryTimeMs' : round((time.time() - t1) * 1000, 2)} @@ -46,15 +64,17 @@ 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 + out = { + 'toRoot': '.', + 'absRoot': siteRoot, + 'user': getUser()[0], + 'withKnockout': True, + 'fillHrefJson': json.dumps(bottle.request.params.get('url', '')), + 'loginBar': getLoginBar(), + } return renderWithTime('add.jade', out) @bottle.route('/addOverlay') @@ -63,8 +83,27 @@ return "" + +@bottle.route('/addLink/proposedUri') +def proposedUri(): + uri = bottle.request.params.uri + user, _ = getUser() - proposal check existing links, get page title (stuff that in db), get tags from us and other serviecs. maybe the deferred ones ater + try: + prevDoc = links.find(uri) + except NotFound: + prevDoc = None + + return { + 'description': prevDoc['description'] if prevDoc else pageTitle.pageTitle(uri), + 'tag' : prevDoc['tag'] if prevDoc else '', + 'extended' : prevDoc['extended'] if prevDoc else '', + 'suggestedTags':['tag1', 'tag2'], + 'existed':prevDoc is not None, + } + +if 0: + pass#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>/') @@ -75,6 +114,7 @@ def userAll(user): data = recentTags(user, tags=None) + data['loginBar'] = getLoginBar() data['desc'] = "%s's recent links" % user data['toRoot'] = "." data['stats']['template'] = 'TEMPLATETIME' @@ -83,7 +123,9 @@ @bottle.route('/<user>', method='POST') def userAddLink(user): p = bottle.request.params - doc = dict( + if getUser()[0] != user: + raise ValueError("not logged in as %s" % user) + links.insertOrUpdate(dict( user=user, description=p.description, extended=p.extended, @@ -92,21 +134,31 @@ #shared ?? tag=p.tag, t=datetime.datetime.now(tzlocal()), - ) - db['links'].insert(doc, safe=True) + )) - bottle.redirect(user) + bottle.redirect(siteRoot + '/' + user) @bottle.route('/<user>/<tags>') def userLinks(user, tags): tags = tags.split('+') data = recentTags(user, tags) + data['loginBar'] = getLoginBar() 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) + +@bottle.route('/') +def root(): + data = { + 'loginBar': getLoginBar(), + 'toRoot': ".", + 'stats': {'template': 'TEMPLATETIME'}, + 'users': [{'user':doc['username']} for doc in db['user'].find()], + } + return renderWithTime('index.jade', data) if __name__ == '__main__': bottle.run(server='gunicorn', host='0.0.0.0', port=10002, workers=4)