diff redirector/redirectors.py @ 0:af82aaec0377

initial import of redirector
author k0s <k0scist@gmail.com>
date Mon, 07 Sep 2009 15:15:48 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/redirector/redirectors.py	Mon Sep 07 15:15:48 2009 -0400
@@ -0,0 +1,71 @@
+from datetime import datetime
+from dateutil.parser import parse
+from ConfigParser import ConfigParser
+
+
+class TestRedirector(object):
+    def redirects(self):
+        return [ { 'from': '/foo.txt', 'to': '/bar.txt',
+                   'type': 301, 
+                   'created': datetime.now(),
+                   'expires': None },
+                 { 'from': 'http://127.0.0.1:5521/(.*)',
+                   'to': r'http://localhost:5521/\1',
+                   'type': 'metarefresh',
+                   'seconds': 10,
+                   'created': datetime.now(),
+                   'expires': None },
+                 ]
+    def set(self, _from, to, type=301, expires=None, seconds=None, reason=None):
+        # test only....does not set anything
+        return 
+
+    def add(self, _from, to, type=301, expires=None, seconds=None):
+        self.set(_from, to, type, expires, seconds)
+
+class IniRedirector(object):
+    def __init__(self, ini):
+        self.ini = ini
+
+    def redirects(self):
+        parser = ConfigParser()
+        parser.read(self.ini)
+
+        redirects = []
+
+        for section in parser.sections():
+            redirect = { 'from': section }
+            assert parser.has_option(section, 'to')
+            assert parser.has_option(section, 'type')
+            redirect['to'] = parser.get(section, 'to')
+            if parser.has_option(section, 'created'):
+                redirect['created'] = parse(parser.get(section, 'created'))
+            else:
+                redirect['created'] = None
+            _type = parser.get(section, 'type')
+            try:
+                _type = int(_type)
+            except ValueError:
+                assert _type == 'metarefresh'
+            redirect['type'] = _type
+            if parser.has_option(section, 'expires'):
+                redirect['expires'] = parse(parser.get(section, 'expires'))
+            else:
+                redirect['expires'] = None
+            if parser.has_option(section, 'reason'):
+                redirect['reason'] = parser.get(section, 'reason')
+            if parser.has_option(section, 'seconds'):
+                redirect['seconds'] = parser.getint(section, 'seconds')
+            redirects.append(redirect)
+        return redirects
+
+    def set(self, _from, to, type=301, expires=None, seconds=None, reason=None):
+        parser = ConfigParser()
+        parser.read(self.ini)
+        raise NotImplementedError # TODO
+
+    def add(self, _from, to, type=301, expires=None, seconds=None):
+        raise NotImplementedError # TODO
+        parser = ConfigParser()
+        parser.read(self.ini)
+        self.set(_from, to, type, expires, seconds)