view 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 source

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)