uricontext.py :  » Network » Grail-Internet-Browser » grail-0.6 » grailbase » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Network » Grail Internet Browser 
Grail Internet Browser » grail 0.6 » grailbase » uricontext.py
"""URI resolution context.

The use of 'url' in the method names is a historical accident.

"""
__version__ = '$Revision: 1.5 $'

import urlparse
__default_joiner = urlparse.urljoin
del urlparse

import re
__typematch = re.compile('^([^/:]+):').match
del re

def __splittype(url):
    match = __typematch(url)
    if match:
        return match.group(1)


def _urljoin(a, b):
    sa = __splittype(a)
    sb = __splittype(b)
    if sa and (sa == sb or not sb):
        import protocols
        joiner = protocols.protocol_joiner(sa)
        if joiner: return joiner(a, b)
    return __default_joiner(a, b)


class URIContext:
    """URI resolution context."""

    def __init__(self, url="", baseurl=""):
        self.__url = url or ""
        baseurl = baseurl or ""
        if url and baseurl:
            self.__baseurl = _urljoin(url, baseurl)
        else:
            self.__baseurl = baseurl

    def get_url(self):
        return self.__url

    def set_url(self, url, baseurl=None):
        """Set source URI and base URI for the current resource.

        The loaded URI is what this page was loaded from; the base URI
        is used to calculate relative links, and defaults to the
        loaded URI.

        """
        self.__url = url
        if baseurl:
            self.__baseurl = _urljoin(url, baseurl)
        else:
            self.__baseurl = url

    def get_baseurl(self, *relurls):
        """Return the base URI for the current page, joined with relative URIs.

        Without arguments, return the base URI.
        
        With arguments, return the base URI joined with all of the
        arguments.  Empty arguments don't contribute.

        """
        
        url = self.__baseurl or self.__url
        for rel in relurls:
            if rel:
                url = _urljoin(url, rel)
        return url

    def set_baseurl(self, baseurl):
        """Set the base URI for the current page.

        The base URI is taken relative to the existing base URI.

        """
        if baseurl:
            self.__baseurl = _urljoin(self.__baseurl or self.__url, baseurl)
        else:
            self.__baseurl = self.__baseurl or self.__url
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.