Exemple #1
0
 def resolve(self, uri, base=None):
     scheme = Uri.GetScheme(uri)
     if not scheme:
         if base:
             scheme = Uri.GetScheme(base)
         if not scheme:
             #Another option is to fall back to Base class behavior
             raise Uri.UriException(Uri.UriException.SCHEME_REQUIRED,
                                base=base, ref=uri)
     func = self.handlers.get(scheme)
     if not func:
         func = self.handlers.get(None)
         if not func:
             return Uri.UriResolverBase.resolve(self, uri, base)
     return func(uri, base)
Exemple #2
0
    def _resolve_page(self, uri, base):
        """ URI will be resolved into StringIO with actual page content """
        from Ft.Lib import Uri
        base_uri = self.base_uri

        if uri.startswith(base_uri):
            pagename = uri[len(base_uri):]
            page = Page.Page(self.request, pagename)
            if page.exists():
                result = StringIO.StringIO(page.getPageText().encode(
                    config.charset))
            else:
                raise Uri.UriException(Uri.UriException.RESOURCE_ERROR,
                                       loc=uri,
                                       msg='Page does not exist')
        else:
            result = Uri.UriResolverBase.resolve(self, uri, base)

        return result
Exemple #3
0
    def resolve(self, uri, base=None):
        scheme = Uri.GetScheme(uri)
        if scheme == None:
            if base != None:
                scheme = Uri.GetScheme(base)
            if scheme == None:
                #Another option is to fall back to Base class behavior
                raise Uri.UriException(Uri.UriException.SCHEME_REQUIRED,
                                       base=base,
                                       ref=uri)

        # Add the files path to our sys.path

        if scheme == 'file':
            filename = uri[5:]
            try:
                index = filename.rindex('\\')
                sys.path.append(filename[:0 - (index + 1)])
                #print "Adding [%s]" % filename[: 0 - (index+1)]

            except:
                try:
                    index = filename.rindex('/')
                    sys.path.append(filename[:0 - (index + 1)])
                    #print "Adding [%s]" % filename[: 0 - (index+1)]

                except:
                    #print "Adding [.][%s]" % uri
                    sys.path.append('.')

        try:
            func = self.handlers.get(scheme)
            if func == None:
                func = self.handlers.get(None)
                if func == None:
                    return Uri.UriResolverBase.resolve(self, uri, base)

            return func(uri, base)

        except:

            if scheme != 'file':
                raise PeachException("Peach was unable to locate [%s]" % uri)

            # Lets try looking in our sys.path

            paths = []
            for path in sys.path:
                paths.append(path)
                paths.append("%s/Peach/Engine" % path)

            for path in paths:
                newuri = uri[:5] + path + '/' + uri[5:]
                #print "Trying: [%s]" % newuri

                try:
                    func = self.handlers.get(scheme)
                    if func == None:
                        func = self.handlers.get(None)
                        if func == None:
                            return Uri.UriResolverBase.resolve(
                                self, newuri, base)

                    return func(uri, base)
                except:
                    pass

            raise PeachException("Peach was unable to locate [%s]" % uri)