cookies.py now fits in with the new arguments, and works better.
authorTom Adams <tom@holizz.com>
Sun, 12 Jul 2009 21:22:49 +0000 (22:22 +0100)
committerTom Adams <tom@holizz.com>
Sun, 12 Jul 2009 21:38:12 +0000 (22:38 +0100)
examples/data/uzbl/scripts/cookies.py

index c8cf8c0..10f90fa 100755 (executable)
@@ -1,87 +1,37 @@
 #!/usr/bin/env python
 
-import cookielib, sys, os, urllib2
-
-class FakeRequest:
-    def __init__(self, argv):
-        self.argv = argv
-        self.cookies = None
-        if len(self.argv) == 12:
-            self.cookies = self.argv[11]
-    def get_full_url(self):
-        #TODO: this is a hack, fix in uzbl.c!
-        u = self.get_host()+self.argv[10]
-        if self.argv[6].startswith('https'):
-            u = 'https://'+u
-        else:
-            u = 'http://'+u
-        return u
-    def get_host(self):
-        return self.argv[9]
-    def get_type(self):
-        return self.get_full_url().split(':')[0]
-    def is_unverifiable(self):
-        return False
-    def get_origin_req_host(self):
-        return self.argv[9]
-    def has_header(self, header):
-        if header == 'Cookie':
-            return self.cookies!=None
-    def get_header(self, header_name, default=None):
-        if header_name == 'Cookie' and self.cookies:
-            return self.cookies
-        else:
-            return default
-    def header_items(self):
-        if self.cookies:
-            return [('Cookie',self.cookies)]
-        else:
-            return []
-    def add_unredirected_header(self, key, header):
-        if key == 'Cookie':
-            self.cookies = header
-
-class FakeHeaders:
-    def __init__(self, argv):
-        self.argv = argv
-    def getallmatchingheaders(self, header):
-        if header == 'Set-Cookie' and len(self.argv) == 12:
-            return ['Set-Cookie: '+self.argv[11]]
-        else:
-            return []
-    def getheaders(self, header):
-        if header == 'Set-Cookie' and len(self.argv) == 12:
-            return [self.argv[11]]
-        else:
-            return []
-class FakeResponse:
-    def __init__(self, argv):
-        self.argv = argv
-    def info(self):
-        return FakeHeaders(self.argv)
+import StringIO, cookielib, os, sys, urllib2
 
 if __name__ == '__main__':
+    action = sys.argv[8]
+    uri = urllib2.urlparse.ParseResult(
+            scheme=sys.argv[9],
+            netloc=sys.argv[10],
+            path=sys.argv[11],
+            params='',
+            query='',
+            fragment='').geturl()
+    set_cookie = sys.argv[12] if len(sys.argv)>12 else None
+
     if 'XDG_DATA_HOME' in os.environ.keys() and os.environ['XDG_DATA_HOME']:
-        jar = cookielib.MozillaCookieJar(
-          os.path.join(os.environ['XDG_DATA_HOME'],'uzbl/cookies.txt'))
+        f = os.path.join(os.environ['XDG_DATA_HOME'],'uzbl/cookies.txt')
     else:
-        jar = cookielib.MozillaCookieJar(
-          os.path.join(os.environ['HOME'],'.local/share/uzbl/cookies.txt'))
+        f = os.path.join(os.environ['HOME'],'.local/share/uzbl/cookies.txt')
+    jar = cookielib.MozillaCookieJar(f)
+
     try:
-        jar.load()
+        jar.load(ignore_discard=True)
     except:
         pass
 
-    req = FakeRequest(sys.argv)
-
-    action = sys.argv[8]
+    req = urllib2.Request(uri)
 
     if action == 'GET':
         jar.add_cookie_header(req)
-        if req.cookies:
-            print req.cookies
+        if req.has_header('Cookie'):
+            print req.get_header('Cookie')
     elif action == 'PUT':
-        res = FakeResponse(sys.argv)
+        hdr = urllib2.httplib.HTTPMessage(StringIO.StringIO('Set-Cookie: %s' % set_cookie))
+        res = urllib2.addinfourl(StringIO.StringIO(), hdr, req.get_full_url())
         jar.extract_cookies(res,req)
-        jar.save(ignore_discard=True) # save session cookies too
-        #jar.save() # save everything but session cookies
+        jar.save(ignore_discard=True)