comparison lookup.py @ 28:7c82ffbca5d0

py3 and k8s upgrade
author drewp@bigasterisk.com
date Sun, 12 Jul 2020 13:16:33 -0700
parents e02fc021ab89
children e86642cf7393
comparison
equal deleted inserted replaced
27:3d9dc1571ade 28:7c82ffbca5d0
6 /user/tag+tag+tag 6 /user/tag+tag+tag
7 7
8 and the add-bookmark stuff 8 and the add-bookmark stuff
9 9
10 """ 10 """
11 import pymongo, bottle, time, urllib, datetime, json, restkit, logging 11 import pymongo, bottle, time, urllib.request, urllib.parse, urllib.error, datetime, json, logging
12 import requests
12 from collections import defaultdict 13 from collections import defaultdict
13 from urllib2 import urlparse 14 from urllib.parse import urlparse
14 from dateutil.tz import tzlocal 15 from dateutil.tz import tzlocal
15 from bottle import static_file 16 from bottle import static_file
16 from jadestache import Renderer 17 from jadestache import Renderer
17 from pagetitle import PageTitle 18 from pagetitle import PageTitle
18 from link import Links, NotFound 19 from link import Links, NotFound
19 db = pymongo.Connection('bang', tz_aware=True)['href'] 20 db = pymongo.Connection('mongodb.default.svc.cluster.local', tz_aware=True)['href']
20 pageTitle = PageTitle(db) 21 pageTitle = PageTitle(db)
21 links = Links(db) 22 links = Links(db)
22 renderer = Renderer(search_dirs=['template'], debug=bottle.DEBUG) 23 renderer = Renderer(search_dirs=['template'], debug=bottle.DEBUG)
23 log = logging.getLogger() 24 log = logging.getLogger()
24 25
25 def getLoginBar(): 26 def getLoginBar():
26 openidProxy = restkit.Resource("http://bang:9023/") 27 return requests.get("http://openid-proxy.default.svc.cluster.local:9023/_loginBar",
27 return openidProxy.get("_loginBar",
28 headers={ 28 headers={
29 "Cookie" : bottle.request.headers.get('cookie'), 29 "Cookie" : bottle.request.headers.get('cookie'),
30 'x-site': 'http://bigasterisk.com/openidProxySite/href', 30 'x-site': 'http://bigasterisk.com/openidProxySite/href',
31 }).body_string() 31 }).text
32 32
33 def getUser(): 33 def getUser():
34 agent = bottle.request.headers.get('x-foaf-agent', None) 34 agent = bottle.request.headers.get('x-foaf-agent', None)
35 username = db['user'].find_one({'_id':agent})['username'] if agent else None 35 username = db['user'].find_one({'_id':agent})['username'] if agent else None
36 return username, agent 36 return username, agent
68 docTags = set(doc.get('extracted', {}).get('tags', [])) 68 docTags = set(doc.get('extracted', {}).get('tags', []))
69 if withTags and not withTags.issubset(docTags): 69 if withTags and not withTags.issubset(docTags):
70 continue 70 continue
71 for t in docTags.difference(withTags): 71 for t in docTags.difference(withTags):
72 count[t] = count[t] + 1 72 count[t] = count[t] + 1
73 byFreq = [(n, t) for t,n in count.iteritems()] 73 byFreq = [(n, t) for t,n in count.items()]
74 byFreq.sort(key=lambda (n,t): (-n, t)) 74 byFreq.sort(key=lambda n_t: (-n_t[0], n_t[1]))
75 return [{'label': t, 'count': n} for n, t in byFreq] 75 return [{'label': t, 'count': n} for n, t in byFreq]
76 76
77 def renderWithTime(name, data): 77 def renderWithTime(name, data):
78 t1 = time.time() 78 t1 = time.time()
79 rendered = renderer.render_name(name, data) 79 rendered = renderer.render_name(name, data)
124 124
125 125
126 @bottle.route('/tags') 126 @bottle.route('/tags')
127 def tagFilterComplete(): 127 def tagFilterComplete():
128 params = bottle.request.params 128 params = bottle.request.params
129 haveTags = filter(None, params['have'].split(',')) 129 haveTags = [_f for _f in params['have'].split(',') if _f]
130 if haveTags and len(haveTags[-1]) > 0: 130 if haveTags and len(haveTags[-1]) > 0:
131 haveTags, partialTerm = haveTags[:-1], haveTags[-1] 131 haveTags, partialTerm = haveTags[:-1], haveTags[-1]
132 else: 132 else:
133 partialTerm = "" 133 partialTerm = ""
134 134
143 143
144 return {'tags' : out} 144 return {'tags' : out}
145 145
146 @bottle.route('/<user>/') 146 @bottle.route('/<user>/')
147 def userSlash(user): 147 def userSlash(user):
148 bottle.redirect(siteRoot() + "/%s" % urllib.quote(user)) 148 bottle.redirect(siteRoot() + "/%s" % urllib.parse.quote(user))
149 149
150 @bottle.route('/<user>.json', method='GET') 150 @bottle.route('/<user>.json', method='GET')
151 def userAllJson(user): 151 def userAllJson(user):
152 data = recentLinks(user, [], allowEdit=getUser()[0] == user) 152 data = recentLinks(user, [], allowEdit=getUser()[0] == user)
153 data['toRoot'] = siteRoot() 153 data['toRoot'] = siteRoot()
160 160
161 @bottle.route('/<user>', method='POST') 161 @bottle.route('/<user>', method='POST')
162 def userAddLink(user): 162 def userAddLink(user):
163 if getUser()[0] != user: 163 if getUser()[0] != user:
164 raise ValueError("not logged in as %s" % user) 164 raise ValueError("not logged in as %s" % user)
165 print repr(bottle.request.params.__dict__) 165 print(repr(bottle.request.params.__dict__))
166 doc = links.fromPostdata(bottle.request.params, 166 doc = links.fromPostdata(bottle.request.params,
167 user, 167 user,
168 datetime.datetime.now(tzlocal())) 168 datetime.datetime.now(tzlocal()))
169 links.insertOrUpdate(doc) 169 links.insertOrUpdate(doc)
170 170
171 print "notify about sharing to", repr(doc['shareWith']) 171 print("notify about sharing to", repr(doc['shareWith']))
172 172
173 bottle.redirect(siteRoot() + '/' + user) 173 bottle.redirect(siteRoot() + '/' + user)
174 174
175 def parseTags(tagComponent): 175 def parseTags(tagComponent):
176 # the %20 is coming from davis.js, not me :( 176 # the %20 is coming from davis.js, not me :(
177 return filter(None, tagComponent.replace("%20", "+").split('+')) 177 return [_f for _f in tagComponent.replace("%20", "+").split('+') if _f]
178 178
179 @bottle.route('/<user>/<tags:re:.*>.json') 179 @bottle.route('/<user>/<tags:re:.*>.json')
180 def userLinksJson(user, tags): 180 def userLinksJson(user, tags):
181 tags = parseTags(tags) 181 tags = parseTags(tags)
182 data = recentLinks(user, tags, allowEdit=getUser()[0] == user) 182 data = recentLinks(user, tags, allowEdit=getUser()[0] == user)