-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
executable file
·102 lines (80 loc) · 2.76 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
# PSL imports
import cgi
import logging
import os
import wsgiref.handlers
import xml.dom.minidom
# App Engine imports
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
# Our imports
import models
import pubsubhandlers
import twitterutil
import twitteroauthhandlers
class MainHandler(webapp.RequestHandler):
def get(self):
values = {}
if 'token' in self.request.cookies:
user = twitterutil.get_user_by_token_key(self.request.cookies['token'])
if user:
values['user'] = user
query = models.TopicSubscription.all()
query.filter('user_id = ', user.user_id)
values['subscriptions'] = query.fetch(1000)
text = template.render('templates/index.tpl', values)
self.response.out.write(text)
class LogOutHander(webapp.RequestHandler):
def get(self):
self.response.headers.add_header('Set-Cookie', 'token=;Max-Age=0')
self.redirect('/')
def _get_text(nodelist):
rc = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc
_TWEET_FORM = """
<html>
<body>
<form action="/tweet" method=POST>
<input name="tweet" type="text">
<input value="tweet" type="submit">
</form>
</body>
</html>
"""
class TweetHandler(webapp.RequestHandler):
def post(self):
user = twitterutil.get_user_by_token_key(self.request.cookies['token'])
key, secret = twitterutil.get_key_and_secret(user.user_id)
response = twitterutil.set_status(self.request.get('tweet'), key, secret)
res_doc = xml.dom.minidom.parseString(response)
user_elem = res_doc.getElementsByTagName('user')[0]
screen_name_elem = user_elem.getElementsByTagName('screen_name')[0]
screen_name = _get_text(screen_name_elem.childNodes)
self.redirect('http://twitter.com/%s' % screen_name)
def get(self):
pass
# Uncomment to use for testing.
# self.response.out.write(_TWEET_FORM)
def main():
logging.getLogger().setLevel(logging.DEBUG)
application = webapp.WSGIApplication([
('/', MainHandler),
('/logout', LogOutHander),
('/authenticate', twitteroauthhandlers.AuthenticateHandler),
('/tweet', TweetHandler),
('/oauth_callback', twitteroauthhandlers.CallbackHandler),
('/pubsub', pubsubhandlers.PubSubHandler),
('/pubsub/add_subscription', pubsubhandlers.AddSubscriptionHandler),
('/pubsub/delete_subscription', pubsubhandlers.DeleteSubscriptionHandler),
# Admin
('/admin/oauth_config', twitteroauthhandlers.OAuthConfigHandler),
('/admin/test_add_sub', pubsubhandlers.AddSubscriptionFormHandler),
], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()