2011/04/18

GoogleCLでDeprecationWarningが発生したときの対処

環境: Ubuntu 10.04, Python 2.6.5, GoogleCL 0.9.13

GoogleCLでgoogle blogger listすると次のエラーが出た。


/usr/lib/pymodules/python2.6/atom/http.py:225: DeprecationWarning: socket.ssl() is deprecated.  Use ssl.wrap_socket() instead.
ssl = socket.ssl(p_sock, None, None)
/usr/lib/pymodules/python2.6/atom/http.py:226: DeprecationWarning: FakeSocket is deprecated, and won't be in 3.x. Use the result of ssl.wrap_socket() directly instead.
fake_sock = httplib.FakeSocket(p_sock, ssl)
Traceback (most recent call last):
File "/usr/bin/google", line 849, in
main()
File "/usr/bin/google", line 835, in main
run_once(options, args)
...
...
File "/usr/lib/python2.6/httplib.py", line 755, in send
self.sock.sendall(str)
AttributeError: sendall


これはGoogle Data APIs Python Client Libraryを最新にすることで解決した。Ubuntu 10.04のaptで入るpython-gdataは1.2.4。元サイトの最新版は2.0.14。ちなみにUbuntu 10.10のaptでは2.0.8だったので問題は発生しなかった。

1.2.4のままでも /usr/lib/pymodules/python2.6/atom/http.py を以下のように修正したら動いた。

@@ -42,6 +42,7 @@
import atom.http_interface
import socket
import base64
+import ssl

@@ -222,12 +223,10 @@
raise ProxyError('Error status=%s' % str(p_status))

# Trivial setup for ssl socket.
- ssl = socket.ssl(p_sock, None, None)
- fake_sock = httplib.FakeSocket(p_sock, ssl)

# Initalize httplib and replace with the proxy socket.
connection = httplib.HTTPConnection(proxy_url.host)
- connection.sock=fake_sock
+ connection.sock=ssl.wrap_socket(p_sock, None, None)
return connection

0 件のコメント:

コメントを投稿