Added oauth wrapper
diff --git a/oauth_wrap.py b/oauth_wrap.py
new file mode 100644
index 0000000..2c0786f
--- /dev/null
+++ b/oauth_wrap.py
@@ -0,0 +1,78 @@
+# Copyright (C) 2010 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import httplib2
+import oauth2 as oauth
+import simplejson
+
+
+def oauth_wrap(consumer, token, http):
+    """
+    Args:
+       http - An instance of httplib2.Http
+           or something that acts like it.
+
+    Returns:
+       A modified instance of http that was passed in.
+
+    Example:
+
+      h = httplib2.Http()
+      h = oauth_wrap(h)
+
+    Grumble. You can't create a new OAuth
+    subclass of httplib2.Authenication because
+    it never gets passed the absolute URI, which is
+    needed for signing. So instead we have to overload
+    'request' with a closure that adds in the
+    Authorization header and then calls the original version
+    of 'request().
+    """
+    request_orig = http.request
+    signer = oauth.SignatureMethod_HMAC_SHA1()
+
+    def new_request(uri, method='GET', body=None, headers=None,
+        redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None):
+      """Modify the request headers to add the appropriate
+      Authorization header."""
+      req = oauth.Request.from_consumer_and_token(
+          consumer, token, http_method=method, http_url=uri)
+      req.sign_request(signer, consumer, token)
+      if headers == None:
+        headers = {}
+      headers.update(req.to_header())
+      headers['user-agent'] = 'jcgregorio-test-client'
+      return request_orig(uri, method, body, headers, redirections,
+          connection_type)
+
+    http.request = new_request
+    return http
+
+def get_authorised_http(oauth_params):
+  consumer = oauth.Consumer(oauth_params['consumer_key'],
+      oauth_params['consumer_secret'])
+  token = oauth.Token(oauth_params['oauth_token'],
+      oauth_params['oauth_token_secret'])
+
+  # Create a simple monkeypatch for httplib2.Http.request
+  # just adds in the oauth authorization header and then calls
+  # the original request().
+  http = httplib2.Http()
+  return oauth_wrap(consumer, token, http)
+
+def get_wrapped_http(filename='oauth_token.dat'):
+  f = open(filename, 'r')
+  oauth_params = simplejson.loads(f.read())
+
+  return get_authorised_http(oauth_params)