diff lookup.py @ 7:93d94f327e82

autocomplete in link page box Ignore-this: 9e2c68e81aaac5dcf25ddbbe6c1f25d6
author Drew Perttula <drewp@bigasterisk.com>
date Wed, 06 Mar 2013 23:18:39 -0800
parents f8c4c7ce5f4a
children e054949143e9
line wrap: on
line diff
--- a/lookup.py	Fri Mar 01 01:24:05 2013 -0800
+++ b/lookup.py	Wed Mar 06 23:18:39 2013 -0800
@@ -9,6 +9,7 @@
 
 """
 import pymongo, bottle, time, urllib, datetime, json, restkit
+from collections import defaultdict
 from urllib2 import urlparse
 from dateutil.tz import tzlocal
 from bottle import static_file
@@ -32,9 +33,9 @@
     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')
+@bottle.route('/static/<path:path>')
+def server_static(path):
+    return static_file(path, root='static')
 
 def recentTags(user, tags=None):
     out = {'links':[]}
@@ -58,6 +59,15 @@
     out['stats'] = {'queryTimeMs' : round((time.time() - t1) * 1000, 2)}
     return out
 
+def allTags(user):
+    count = defaultdict(lambda: 0) # tag : count
+    for doc in db['links'].find({'user':user}, fields=['extracted.tags']):
+        for t in doc.get('extracted', {}).get('tags', []):
+            count[t] = count[t] + 1
+    byFreq = [(n, t) for t,n in count.iteritems()]
+    byFreq.sort(key=lambda (n,t): (-n, t))
+    return [{'label': t, 'count': n} for n, t in byFreq]
+    
 def renderWithTime(name, data):
     t1 = time.time()
     rendered = renderer.render_name(name, data)
@@ -112,13 +122,7 @@
     
 @bottle.route('/<user>', method='GET')
 def userAll(user):
-    data = recentTags(user, tags=None)
-
-    data['loginBar'] = getLoginBar()
-    data['desc'] = "%s's recent links" % user
-    data['toRoot'] = "."
-    data['stats']['template'] = 'TEMPLATETIME'
-    return renderWithTime('links.jade', data)
+    return userLinks(user, "", toRoot=".")
 
 @bottle.route('/<user>', method='POST')
 def userAddLink(user):
@@ -139,12 +143,13 @@
     bottle.redirect(siteRoot + '/' + user)
     
 @bottle.route('/<user>/<tags>')
-def userLinks(user, tags):
+def userLinks(user, tags, toRoot=".."):
     tags = tags.split('+')
     data = recentTags(user, tags)
     data['loginBar'] = getLoginBar()
-    data['desc'] = "%s's recent links tagged %s"  % (user, tags)
-    data['toRoot'] = ".."
+    data['desc'] = ("%s's recent links" % user) + (" tagged %s"  % (tags,) if tags else "")
+    data['toRoot'] = toRoot
+    data['allTags'] = allTags(user)
 
     data['pageTags'] = [{"word":t} for t in tags]
     data['stats']['template'] = 'TEMPLATETIME'