# Copyright (C) 2009, Tutorius.org # Copyright (C) 2009, Vincent Vinet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """ Universal Addressing Mechanism module Allows addressing Events, signals, widgets, etc for supported platforms """ from urllib2 import urlparse import gtkparser import gobjectparser SCHEME="tap" #Tutorius Adressing Protocol __parsers = { gtkparser.SCHEME:gtkparser.parse_gtk, gobjectparser.SCHEME:gobjectparser.parse_gobject, } def __add_to_urlparse(name): #Add to uses_netloc if not name in urlparse.uses_netloc: urlparse.uses_netloc.append(name) #Add to uses_relative if not name in urlparse.uses_relative: urlparse.uses_relative.append(name) # #Add to uses_params # if not name in urlparse.uses_params: # urlparse.uses_params.append(name) #Add to uses_query if not name in urlparse.uses_query: urlparse.uses_query.append(name) #Add to uses_frament if not name in urlparse.uses_fragment: urlparse.uses_fragment.append(name) #Add schemes to urlparse __add_to_urlparse(SCHEME) for subscheme in [".".join([SCHEME,s]) for s in __parsers]: __add_to_urlparse(subscheme) class SchemeError(Exception): def __init__(self, message): Exception.__init__(self, message) self.message = message def parse_uri(uri): res = urlparse.urlparse(uri) scheme = res.scheme.split(".")[0] subscheme = ".".join(res.scheme.split(".")[1:]) if not scheme == SCHEME: raise SchemeError("Scheme %s not supported" % scheme) if subscheme != "" and not subscheme in __parsers: raise SchemeError("SubScheme %s not supported" % subscheme) if subscheme: return __parsers[subscheme](res) return res