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)