Merge lp:~xndchn/gwibber/buzz into lp:gwibber

Proposed by xndcn
Status: Rejected
Rejected by: Ken VanDine
Proposed branch: lp:~xndchn/gwibber/buzz
Merge into: lp:gwibber
Diff against target: 189 lines (+86/-16)
2 files modified
gwibber/microblog/plugins/buzz/__init__.py (+83/-12)
gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py (+3/-4)
To merge this branch: bzr merge lp:~xndchn/gwibber/buzz
Reviewer Review Type Date Requested Status
Ken VanDine Disapprove
Review via email: mp+43187@code.launchpad.net

Description of the change

Fix buzz Authorize
Add buzz features: search, like and delete.
Fix buzz features: reply.

To post a comment you must log in.
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Buzz is no longer supported, thanks for your submission.

review: Disapprove
Revision history for this message
xndcn (xndchn) wrote :

Wow! One and half years ago! I really forgot it! :-)

Unmerged revisions

935. By xndcn

Fix buzz Authorize

934. By xndcn

Fix buzz login.
Add buzz features: search, like and delete.
Fix buzz features: reply.

933. By xndcn

Fix Buzz

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'gwibber/microblog/plugins/buzz/__init__.py'
--- gwibber/microblog/plugins/buzz/__init__.py 2010-10-18 21:56:15 +0000
+++ gwibber/microblog/plugins/buzz/__init__.py 2010-12-09 11:17:54 +0000
@@ -1,10 +1,11 @@
1from gwibber.microblog import network, util1from gwibber.microblog import network, util
2import urllib, pycurl, StringIO
2import json3import json
3from oauth import oauth4from oauth import oauth
45
5PROTOCOL_INFO = {6PROTOCOL_INFO = {
6 "name": "Buzz",7 "name": "Buzz",
7 "version": "1.0",8 "version": "1.1",
89
9 "config": [10 "config": [
10 "color",11 "color",
@@ -19,9 +20,12 @@
19 "color": "#0773DD",20 "color": "#0773DD",
2021
21 "features": [22 "features": [
23 "search",
22 "receive",24 "receive",
23 "send",25 "send",
24 "reply",26 "reply",
27 "delete",
28 "like",
25 "send_thread",29 "send_thread",
26 "user_messages",30 "user_messages",
27 ],31 ],
@@ -37,10 +41,10 @@
37 def __init__(self, acct):41 def __init__(self, acct):
38 self.account = acct42 self.account = acct
39 self.sigmethod = oauth.OAuthSignatureMethod_HMAC_SHA1()43 self.sigmethod = oauth.OAuthSignatureMethod_HMAC_SHA1()
40 self.consumer = oauth.OAuthConsumer("anonymous", "anonymous")44 self.consumer = oauth.OAuthConsumer("anonymous", "anonymous")
41 self.token = oauth.OAuthToken(acct["access_token"], acct["secret_token"])45 self.token = oauth.OAuthToken(acct["access_token"], acct["secret_token"])
4246
43 def _actor(self, user):47 def _actor(self, user):
44 return {48 return {
45 "name": user["name"],49 "name": user["name"],
46 "nick": user["id"],50 "nick": user["id"],
@@ -97,39 +101,106 @@
97101
98 return m102 return m
99103
100 def _get(self, path, collection="items", parse="message", post=False, single=False, body=None, **args):104 def _get(self, path, count=util.COUNT, collection="items", parse="message", post=False, single=False, body=None, **args):
101 url = "/".join((URL_PREFIX, path))105 url = "/".join((URL_PREFIX, path))
102 args.update({"alt": "json"})106 args.update({"alt": "json"})
103 107 args.update({"max-results": count})
108
104 request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,109 request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
105 http_method=post and "POST" or "GET", http_url=url, parameters=util.compact(args))110 http_method=post and "POST" or "GET", http_url=url, parameters=util.compact(args))
106 request.sign_request(self.sigmethod, self.consumer, self.token)111 request.sign_request(self.sigmethod, self.consumer, self.token)
107112
108 data = network.Download(request.to_url(), None, post,113 data = network.Download(request.to_url(), None, post,
109 header=["Content-Type: application/json"] if body else None, body=body)114 header=["Content-Type: application/json"] if body else None, body=body)
110 115
111 data = data.get_json()116 data = data.get_json()
112117
113 if single: return [getattr(self, "_%s" % parse)(data["data"])]118 if single: return [getattr(self, "_%s" % parse)(data["data"])]
114 if parse: return [getattr(self, "_%s" % parse)(m) for m in data["data"][collection]]119 if parse: return [getattr(self, "_%s" % parse)(m) for m in data["data"][collection]]
115 else: return []120 else: return []
121
122 def _del(self, path):
123 url = "/".join((URL_PREFIX, path))
124 curl = pycurl.Curl()
125
126 request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
127 http_method="DELETE", http_url=url)
128 request.sign_request(self.sigmethod, self.consumer, self.token)
129
130 curl.setopt(pycurl.URL, str(request.to_url()))
131 curl.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json']);
132 curl.setopt(pycurl.FOLLOWLOCATION, 1)
133 curl.setopt(pycurl.MAXREDIRS, 5)
134 curl.setopt(pycurl.TIMEOUT, 150)
135
136 curl.setopt(pycurl.CUSTOMREQUEST, "DELETE")
137 curl.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0)
138 content = StringIO.StringIO()
139 curl.setopt(pycurl.WRITEFUNCTION, content.write)
140
141 try:
142 curl.perform()
143 except pycurl.error, e:
144 log.logger.error("Network failure - error: %d - %s", e[0], e[1])
145 return []
146
147 return []
148
149 def _put(self, path, body):
150 url = "/".join((URL_PREFIX, path))
151 curl = pycurl.Curl()
152
153 request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
154 http_method="PUT", http_url=url)
155 request.sign_request(self.sigmethod, self.consumer, self.token)
156
157 curl.setopt(pycurl.URL, str(request.to_url()))
158 curl.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Content-Length: %d' % len(body)]);
159 curl.setopt(pycurl.FOLLOWLOCATION, 1)
160 curl.setopt(pycurl.MAXREDIRS, 5)
161 curl.setopt(pycurl.TIMEOUT, 150)
162
163 curl.setopt(pycurl.INFILESIZE, len(body))
164 curl.setopt(pycurl.UPLOAD, 1)
165 curl.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0)
166 content = StringIO.StringIO()
167 curl.setopt(pycurl.WRITEFUNCTION, content.write)
168 s = StringIO.StringIO(body)
169 curl.setopt(pycurl.READFUNCTION, s.read)
170
171 try:
172 curl.perform()
173 except pycurl.error, e:
174 log.logger.error("Network failure - error: %d - %s", e[0], e[1])
175 return []
176 return []
116177
117 def __call__(self, opname, **args):178 def __call__(self, opname, **args):
118 return getattr(self, opname)(**args)179 return getattr(self, opname)(**args)
180
181 def search(self, **args):
182 return self._get("activities/search", q=args["query"])
119183
120 def receive(self, count=util.COUNT, since=None):184 def receive(self, count=util.COUNT, since=None):
121 return self._get("activities/@me/@consumption")185 return self._get("activities/@me/@consumption", count)
122186
123 def user_messages(self, id, count=util.COUNT, since=None):187 def user_messages(self, id, count=util.COUNT, since=None):
124 print id188 return self._get("activities/%s/@self" % id, count)
125 return self._get("activities/%s/@self" % id)189
190 def delete(self, message):
191 self._del("activities/@me/@self/" + message["mid"])
192 return []
126193
127 def send(self, message):194 def send(self, message):
128 text = json.dumps({"data": {"object": {"type": "note", "content": message}}})195 text = json.dumps({"data": {"object": {"type": "note", "content": message}}})
129 return self._get("activities/@me/@self", post=True, single=True, body=text)196 return self._get("activities/@me/@self", post=True, single=True, body=text)
130197
198 def like(self, message):
199 path = "activities/@me/@liked/%s" % (message["mid"])
200 return self._put(path, body="")
201
131 def send_thread(self, message, target):202 def send_thread(self, message, target):
132 text = json.dumps({"data": {"object": {"content": message}}})203 text = json.dumps({"data": {"content": message}})
133 path = "activities/%s/@self/%s/@comments" % (target["sender"]["id"], target["mid"])204 path = "activities/%s/@self/%s/@comments" % (target["sender"]["id"], target["mid"])
134 self._get(path, post=True, single=True, body=text)205 self._get(path, post=True, single=True, body=text)
135 return []206 return []
136207
=== modified file 'gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py'
--- gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py 2010-10-27 22:36:59 +0000
+++ gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py 2010-12-09 11:17:54 +0000
@@ -64,8 +64,7 @@
6464
65 tokendata = urllib2.urlopen(request.http_url, request.to_postdata()).read()65 tokendata = urllib2.urlopen(request.http_url, request.to_postdata()).read()
66 self.token = oauth.OAuthToken.from_string(tokendata)66 self.token = oauth.OAuthToken.from_string(tokendata)
6767 url = "https://www.google.com/buzz/api/auth/OAuthAuthorizeToken?oauth_token=" + self.token.key + "&domain=gwibber.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbuzz"
68 url = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=" + self.token.key
6968
70 web.open(url)69 web.open(url)
71 web.set_size_request(450, 340)70 web.set_size_request(450, 340)
@@ -82,7 +81,7 @@
8281
83 def on_buzz_auth_title_change(self, web=None, title=None, data=None):82 def on_buzz_auth_title_change(self, web=None, title=None, data=None):
84 if title.get_title() == "Success":83 if title.get_title() == "Success":
85 url = web.get_main_frame().get_uri()84 url = web.get_main_frame().get_uri()
86 data = urlparse.parse_qs(url.split("?", 1)[1])85 data = urlparse.parse_qs(url.split("?", 1)[1])
87 verifier = data["oauth_verifier"][0]86 verifier = data["oauth_verifier"][0]
88 self.token.set_verifier(verifier)87 self.token.set_verifier(verifier)
@@ -93,7 +92,7 @@
9392
94 tokendata = urllib2.urlopen(request.to_url()).read()93 tokendata = urllib2.urlopen(request.to_url()).read()
95 data = urlparse.parse_qs(tokendata)94 data = urlparse.parse_qs(tokendata)
9695
97 self.account["access_token"] = data["oauth_token"][0]96 self.account["access_token"] = data["oauth_token"][0]
98 self.account["secret_token"] = data["oauth_token_secret"][0]97 self.account["secret_token"] = data["oauth_token_secret"][0]
9998

Subscribers

People subscribed via source and target branches