annotate lookup.py @ 42:530650b3bc40 default tip

something changed in pom to break pyjwt. switched to jwskate
author drewp@bigasterisk.com
date Wed, 14 Dec 2022 22:07:19 -0800
parents 293a694304b8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
1 """
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2 serve some queries over bookmarks:
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 /user
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5 /user/tag+tag+tag
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
7 and the add-bookmark stuff
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8 """
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
9 import datetime
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
10 import json
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
11 import logging
33
b82432594778 skaffold config and other updates
drewp@bigasterisk.com
parents: 32
diff changeset
12 import os
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
13 import time
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
14 import urllib.error
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
15 import urllib.parse
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
16 import urllib.request
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
17 from collections import defaultdict
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
18
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
19 import bottle
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
20 from bottle import static_file
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21 from dateutil.tz import tzlocal
40
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
22 from prometheus_client.exposition import generate_latest
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
23 from prometheus_client.registry import REGISTRY
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
24
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
25 from get_agent import bottleGetAgent
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26 from jadestache import Renderer
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
27 from link import Links, NotFound
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
28 from mongo_required import die_on_mongo_connection_errors, open_mongo_or_die
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
29 from pagetitle import PageTitle
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
30
38
f3a15a724483 mongo api and up-checking
drewp@bigasterisk.com
parents: 35
diff changeset
31 db = open_mongo_or_die()['href']
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
32 pageTitle = PageTitle(db)
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
33 links = Links(db)
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
34 renderer = Renderer(search_dirs=['template'], debug=bottle.DEBUG)
40
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
35 logging.basicConfig(level=logging.DEBUG)
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
36 log = logging.getLogger()
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
37
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
38
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
39 def getUser():
39
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
40 try:
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
41 agent = bottleGetAgent()
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
42 username = db['user'].find_one({'_id': str(agent)})['username'] if agent else None
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
43 except KeyError:
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
44 username = agent = None
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
45 return username, agent
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
46
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
47
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
48 def siteRoot():
40
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
49 return 'https://bigasterisk.com/href'
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
50
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
51
7
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
52 @bottle.route('/static/<path:path>')
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
53 def server_static(path):
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
54 return static_file(path, root='static')
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
56
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
57 def recentLinks(user, tags, allowEdit):
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
58 out = {'links': []}
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 t1 = time.time()
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
60 spec = {'user': user}
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61 if tags:
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
62 spec['extracted.tags'] = {'$all': tags}
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63 for doc in db['links'].find(spec, sort=[('t', -1)], limit=50):
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
64 link = links.forDisplay(doc)
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
65 link['allowEdit'] = allowEdit
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
66 out['links'].append(link)
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
67 out['stats'] = {'queryTimeMs': round((time.time() - t1) * 1000, 2)}
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
68 return out
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
69
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
70
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
71 def allTags(user, withTags=[]):
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
72 """withTags limits results to other tags that have been used with
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
73 those tags"""
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
74 withTags = set(withTags)
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
75 count = defaultdict(lambda: 0) # tag : count
33
b82432594778 skaffold config and other updates
drewp@bigasterisk.com
parents: 32
diff changeset
76 for doc in db['links'].find({'user': user}, projection=['extracted.tags']):
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
77 docTags = set(doc.get('extracted', {}).get('tags', []))
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
78 if withTags and not withTags.issubset(docTags):
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
79 continue
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
80 for t in docTags.difference(withTags):
7
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
81 count[t] = count[t] + 1
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
82 byFreq = [(n, t) for t, n in count.items()]
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
83 byFreq.sort(key=lambda n_t: (-n_t[0], n_t[1]))
7
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
84 return [{'label': t, 'count': n} for n, t in byFreq]
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
85
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
86
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
87 def renderWithTime(name, data):
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
88 t1 = time.time()
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
89 rendered = renderer.render_name(name, data)
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
90 dt = (time.time() - t1) * 1000
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
91 rendered = rendered.replace('TEMPLATETIME', "%.02f ms" % dt)
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
92 return rendered
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
93
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
94
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
95 @bottle.route('/addLink')
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
96 def addLink():
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
97 out = {
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
98 'toRoot': siteRoot(),
25
e02fc021ab89 rm old siteRoot variable
drewp@bigasterisk.com
parents: 24
diff changeset
99 'absRoot': siteRoot(),
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
100 'user': getUser()[0],
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
101 'withKnockout': True,
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
102 'fillHrefJson': json.dumps(bottle.request.params.get('url', '')),
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
103 }
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
104 return renderWithTime('add.jade', out)
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
105
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
106
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
107 @bottle.route('/addOverlay')
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
108 def addOverlay():
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
109 p = bottle.request.params
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
110
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
111 return ""
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
112
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
113
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
114 @bottle.route('/addLink/proposedUri')
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
115 def proposedUri():
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
116 uri = bottle.request.params.uri
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
117 user, _ = getUser()
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
118
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
119 try:
16
d44d3e4d415b don't show other user's tags as previously-saved tags to the current user
Drew Perttula <drewp@bigasterisk.com>
parents: 10
diff changeset
120 prevDoc = links.find(uri, user)
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
121 except NotFound:
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
122 prevDoc = None
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
123
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
124 return {
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
125 'description': prevDoc['description'] if prevDoc else pageTitle.pageTitle(uri),
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
126 'tag': prevDoc['tag'] if prevDoc else '',
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
127 'extended': prevDoc['extended'] if prevDoc else '',
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
128 'shareWith': prevDoc.get('shareWith', []) if prevDoc else [],
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
129 'suggestedTags': ['tag1', 'tag2'],
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
130 'existed': prevDoc is not None,
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
131 }
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
132
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
133
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
134 # proposal check existing links, get page title (stuff that in db), get tags from us and other serviecs. maybe the deferred ones ater
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
135
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
136
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
137 @bottle.route('/tags')
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
138 def tagFilterComplete():
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
139 params = bottle.request.params
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
140 haveTags = [_f for _f in params['have'].split(',') if _f]
22
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
141 if haveTags and len(haveTags[-1]) > 0:
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
142 haveTags, partialTerm = haveTags[:-1], haveTags[-1]
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
143 else:
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
144 partialTerm = ""
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
145
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
146 out = []
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
147 for t in allTags(params.user, withTags=haveTags):
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
148 if partialTerm and partialTerm not in t['label']:
fa55f4439977 fix autocomplete. less console.log
Drew Perttula <drewp@bigasterisk.com>
parents: 21
diff changeset
149 continue
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
150 out.append({'id': t['label'], 'text': "%s (%s%s)" % (t['label'], t['count'], " left" if haveTags else "")})
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
151
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
152 return {'tags': out}
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
153
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
154
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
155 @bottle.route('/<user>/')
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
156 def userSlash(user):
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
157 bottle.redirect(siteRoot() + "/%s" % urllib.parse.quote(user))
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
158
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
159
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
160 @bottle.route('/<user>.json', method='GET')
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
161 def userAllJson(user):
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
162 data = recentLinks(user, [], allowEdit=getUser()[0] == user)
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
163 data['toRoot'] = siteRoot()
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
164 return json.dumps(data)
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
165
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
166
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
167 @bottle.route('/<user>', method='GET')
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
168 def userAll(user):
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
169 return userLinks(user, "")
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
170
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
171
4
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
172 @bottle.route('/<user>', method='POST')
409da49c148d partway though add
drewp@bigasterisk.com
parents: 2
diff changeset
173 def userAddLink(user):
41
293a694304b8 reformat
drewp@bigasterisk.com
parents: 40
diff changeset
174 u = getUser()[0]
39
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
175 if u is None:
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
176 raise ValueError('not logged in')
c538dc39b851 user login fixes
drewp@bigasterisk.com
parents: 38
diff changeset
177 if u != user:
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
178 raise ValueError("not logged in as %s" % user)
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
179 print(repr(bottle.request.params.__dict__))
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
180 doc = links.fromPostdata(bottle.request.params, user, datetime.datetime.now(tzlocal()))
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
181 links.insertOrUpdate(doc)
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
182
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
183 print("notify about sharing to", repr(doc['shareWith']))
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
184
25
e02fc021ab89 rm old siteRoot variable
drewp@bigasterisk.com
parents: 24
diff changeset
185 bottle.redirect(siteRoot() + '/' + user)
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
186
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
187
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
188 def parseTags(tagComponent):
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
189 # the %20 is coming from davis.js, not me :(
28
7c82ffbca5d0 py3 and k8s upgrade
drewp@bigasterisk.com
parents: 25
diff changeset
190 return [_f for _f in tagComponent.replace("%20", "+").split('+') if _f]
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
191
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
192
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
193 @bottle.route('/<user>/<tags:re:.*>.json')
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
194 def userLinksJson(user, tags):
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
195 tags = parseTags(tags)
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
196 data = recentLinks(user, tags, allowEdit=getUser()[0] == user)
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
197 data['toRoot'] = siteRoot()
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
198 return json.dumps(data)
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
199
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
200
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
201 @bottle.route('/<user>/<tags>')
38
f3a15a724483 mongo api and up-checking
drewp@bigasterisk.com
parents: 35
diff changeset
202 @die_on_mongo_connection_errors()
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
203 def userLinks(user, tags):
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
204 tags = parseTags(tags)
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
205 log.info('userLinks user=%r tags=%r', user, tags)
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
206 data = recentLinks(user, tags, allowEdit=getUser()[0] == user)
34
c7b59377ab35 reformat
drewp@bigasterisk.com
parents: 33
diff changeset
207 data['desc'] = ("%s's recent links" % user) + (" tagged %s" % (tags,) if tags else "")
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
208 data['toRoot'] = siteRoot()
7
93d94f327e82 autocomplete in link page box
Drew Perttula <drewp@bigasterisk.com>
parents: 5
diff changeset
209 data['allTags'] = allTags(user)
10
e054949143e9 reworking addlink and shareWith support
drewp@bigasterisk.com
parents: 7
diff changeset
210 data['user'] = user
20
a8887fb93676 hide share data from the public. bug in links filter box
Drew Perttula <drewp@bigasterisk.com>
parents: 16
diff changeset
211 data['showPrivateData'] = (user == getUser()[0])
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
212
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
213 data['pageTags'] = [{"word": t} for t in tags]
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
214 data['stats']['template'] = 'TEMPLATETIME'
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
215 return renderWithTime('links.jade', data)
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
216
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
217
21
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
218 @bottle.route('/templates')
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
219 def templates():
8008ec2fd763 fix up link page reloading. tried davisjs; may not need it
Drew Perttula <drewp@bigasterisk.com>
parents: 20
diff changeset
220 return json.dumps({'linklist': renderer.load_template("linklist.jade")})
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
221
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
222
35
76f379c99317 /metrics
drewp@bigasterisk.com
parents: 34
diff changeset
223 @bottle.route('/metrics')
76f379c99317 /metrics
drewp@bigasterisk.com
parents: 34
diff changeset
224 def metrics():
40
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
225 bottle.response.content_type = "text/plain"
94181d521d6d prometheus, longer page title timeout, dead code, etc
drewp@bigasterisk.com
parents: 39
diff changeset
226 return generate_latest(REGISTRY)
35
76f379c99317 /metrics
drewp@bigasterisk.com
parents: 34
diff changeset
227
76f379c99317 /metrics
drewp@bigasterisk.com
parents: 34
diff changeset
228
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
229 @bottle.route('/')
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
230 def root():
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
231 data = {
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
232 'toRoot': siteRoot(),
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
233 'stats': {
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
234 'template': 'TEMPLATETIME'
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
235 },
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
236 'users': [{
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
237 'user': doc['username']
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
238 } for doc in db['user'].find()],
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
239 }
5
f8c4c7ce5f4a lots of href additions: add/edit, nav fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 4
diff changeset
240 return renderWithTime('index.jade', data)
30
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
241
e86642cf7393 style and requirements.txt cleanup
drewp@bigasterisk.com
parents: 28
diff changeset
242
2
80b11112c9e0 web app for query urls like /user and /user/tag+tag
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
243 if __name__ == '__main__':
24
ab9a6132529a redo siteRoot handling. fix some pathing bugs.
drewp@bigasterisk.com
parents: 22
diff changeset
244 logging.basicConfig(level=logging.INFO)
33
b82432594778 skaffold config and other updates
drewp@bigasterisk.com
parents: 32
diff changeset
245 bottle.run(server='gunicorn', host='0.0.0.0', port=10002, workers=1)