0001# -*- coding: utf-8 -*-
0002
0003"""Namespace handling."""
0004
0005__revision__ = "$Rev: 492 $"
0006__date__ = "$Date: 2007-07-06 21:38:45 -0400 (Fri, 06 Jul 2007) $"
0007__author__ = "Ryan Tomayko (rtomayko@gmail.com)"
0008__copyright__ = "Copyright 2004-2005, Ryan Tomayko"
0009__license__ = "MIT <http://www.opensource.org/licenses/mit-license.php>"
0010
0011__all__ = ['Namespace', 'xml', 'xhtml', 'atom', 'rdf', 'rss', 'nons']
0012
0013
0014namespaces = {}
0015
0016class Namespace(object):
0017    def __init__(self, uri, prefix=None):
0018        self.uri = uri
0019        self.prefix = prefix
0020        if prefix:
0021            namespaces[uri] = prefix
0022
0023    def qname(self, name):
0024        if self.prefix:
0025            return '%s:%s' % (self.prefix, name)
0026        else:
0027            return name
0028
0029    def clarkname(self, name):
0030        if self.uri:
0031            return '{%s}%s' % (self.uri, name)
0032        else:
0033            return name
0034
0035    __getattr__ = clarkname
0036    __getitem__ = clarkname
0037
0038    def __str__(self):
0039        return self.uri
0040
0041    def __unicode__(self):
0042        return unicode(self.uri)
0043
0044    def __repr__(self):
0045        return 'Namespace(%r, %r)' % (self.uri, self.prefix)
0046
0047    def __equals__(self, other):
0048        if isinstance(other, basestring):
0049            return self.uri == other
0050        elif isinstance(other, Namespace):
0051            return self.uri == other.uri
0052        else:
0053            return False
0054
0055xml = Namespace('http://www.w3.org/XML/1998/namespace', 'xml')
0056xhtml = Namespace('http://www.w3.org/1999/xhtml', 'html')
0057atom = Namespace('http://purl.org/atom/ns#', 'atom')
0058rdf = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf')
0059rss = Namespace('http://purl.org/rss/1.0/', 'rss')
0060nons = Namespace(None, None)