Esempio n. 1
0
class SavingReader(Reader.Reader):
    def __init__(self, context, url, *args, **kw):
        self.__filename = kw['filename']
        del kw['filename']
        apply(Reader.Reader.__init__, (self, context, '') + args, kw)
        context.rmreader(self)
        self.url = url
        self.restart(url)

    def handle_meta(self, errcode, errmsg, headers):
        if not self.handle_meta_prelim(errcode, errmsg, headers):
            return
        # now save:
        self.stop()
        try:
            self.save_file = open(self.__filename, "wb")
        except IOError, msg:
            self.context.error_dialog(IOError, msg)
            return
        #
        # add to history without destroying any title already known:
        #
        history = grailutil.get_grailapp().global_history
        title, when = history.lookup_url(self.url)
        history.remember_url(self.url, title or '')
        #
        Reader.TransferDisplay(self.last_context, self.__filename, self)
Esempio n. 2
0
def convert_to_url(urn):
    prefs = grailutil.get_grailapp().prefs
    urn = string.lower(urn)
    m = _reference_rx.match(urn)
    if m:
        type, number = m.group(1, 2)
        vars = {"type": type, "number": int(number)}
        which = "document-template"
    else:
        m = _draft_rx.match(urn)
        if m:
            draft = m.group(1)
            draft, format = os.path.splitext(draft)
            if format and format[0] == ".":
                format = format[1:]
            format = format or "txt"
            which = "internet-draft-template"
            vars = {"draft": draft, "format": format}
        else:
            m = _meeting_rx.match(urn)
            if not m:
                raise ValueError, "not a valid ietf URN"
            wgbofname = m.group(2)
            try:
                date = _number_to_date[int(m.group(1))]
            except KeyError:
                raise ValueError, "unknown IETF meeting number: " + m.group(1)
            which = "meeting-template"
            vars = {"date": date, "wg": wgbofname}
    return prefs.Get(PREF_GROUP, which) % vars
Esempio n. 3
0
def convert_to_url(urn):
    prefs = grailutil.get_grailapp().prefs
    urn = string.lower(urn)
    m = _reference_rx.match(urn)
    if m:
        type, number = m.group(1, 2)
        vars = {"type": type, "number": int(number)}
        which = "document-template"
    else:
        m = _draft_rx.match(urn)
        if m:
            draft = m.group(1)
            draft, format = os.path.splitext(draft)
            if format and format[0] == ".":
                format = format[1:]
            format = format or "txt"
            which = "internet-draft-template"
            vars = {"draft": draft, "format": format}
        else:
            m = _meeting_rx.match(urn)
            if not m:
                raise ValueError, "not a valid ietf URN"
            wgbofname = m.group(2)
            try:
                date = _number_to_date[int(m.group(1))]
            except KeyError:
                raise ValueError, "unknown IETF meeting number: " + m.group(1)
            which = "meeting-template"
            vars = {"date": date, "wg": wgbofname}
    return prefs.Get(PREF_GROUP, which) % vars
Esempio n. 4
0
    def __init__(self, hdl, method, params):
        self._msgattrs = {"title": "Ambiguous handle resolution",
                          "error": ""}
        nullAPI.null_access.__init__(self, hdl, method, params)

        self._hdl, self._attrs = parse_handle(hdl)
        self.app = grailutil.get_grailapp()

        if self._attrs.has_key('type'):
            t = string.lower(self._attrs['type'])
            mname = "hdl_type_" + t
            tname = string.upper(mname)
            try:
                m = self.app.get_loader('protocols').find_module(mname)
                if not m:
                    self._msgattrs["title"] = (
                        "hdlAPI: Could not load %s data type handler" % mname)
                    self._msgattrs["error"] = sys.exc_value + "<p>"
                    raise ImportError, mname
                types = m.handle_types
                formatter = m.data_formatter
            except (ImportError, AttributeError), msg:
                if hdllib.data_map.has_key(tname):
                    self._types = [hdllib.data_map[tname]]
                else:
                    try:
                        n = string.atoi(t)
                    except ValueError:
                        self._types = [] # Request all types
                    else:
                        self._types = [n]
            else:
                self._types = types
                if formatter:
                    self._formatter = formatter
Esempio n. 5
0
 def __init__(self, resturl, method, params, data=None):
     self.app = grailutil.get_grailapp()
     self.args = (resturl, method, params, data)
     self.state = WAIT
     self.h = None
     self.reader_callback = None
     self.app.sq.request_socket(self, self.open)
Esempio n. 6
0
 def __init__(self, resturl, method, params, data=None):
     self.app = grailutil.get_grailapp()
     self.args = (resturl, method, params, data)
     self.state = WAIT
     self.h = None
     self.reader_callback = None
     self.app.sq.request_socket(self, self.open)
Esempio n. 7
0
def isPILAllowed():
    """Return true if PIL should be used by the caller."""
    global _pil_allowed
    if _pil_allowed is None:
        app = grailutil.get_grailapp()
        _pil_allowed = (app.prefs.GetBoolean("browser", "enable-pil")
                        and pil_installed())
    return _pil_allowed
Esempio n. 8
0
def isPILAllowed():
    """Return true if PIL should be used by the caller."""
    global _pil_allowed
    if _pil_allowed is None:
        app = grailutil.get_grailapp()
        _pil_allowed = (app.prefs.GetBoolean("browser", "enable-pil")
                        and pil_installed())
    return _pil_allowed
Esempio n. 9
0
def protocol_joiner(scheme):
    scheme = string.lower(scheme)
    sanitized = re.sub("[^a-zA-Z0-9]", "_", scheme)
    modname = sanitized + "API"
    app = grailutil.get_grailapp()
    m = app.find_extension('protocols', modname)
    if m:
        return m.join
    return None
Esempio n. 10
0
def protocol_joiner(scheme):
    scheme = string.lower(scheme)
    sanitized = regsub.gsub("[^a-zA-Z0-9]", "_", scheme)
    modname = sanitized + "API"
    app = grailutil.get_grailapp()
    m = app.find_extension('protocols', modname)
    if m:
        return m.join
    return None
Esempio n. 11
0
    def __init__(self, master, app=None,
                 width=None, height=None,
                 geometry=None):
        self.master = master
        if not app:
            app = grailutil.get_grailapp()
        prefs = app.prefs
        self.app = app

        if not width: width = prefs.GetInt('browser', 'default-width')
        if not height: height = prefs.GetInt('browser', 'default-height')

        self.create_widgets(width=width, height=height, geometry=geometry)
        self.root.iconname('Grail')
        app.add_browser(self)
Esempio n. 12
0
 def checkapi(self, *args):
     if not self.callback:
         print "*** checkapi -- too late ***"
         if self.fno >= 0:
             fno = self.fno
             self.fno = -1
             tkinter.deletefilehandler(fno)
         return
     try:
         self.callback()  # Call via function pointer
     except:
         if self.context and self.context.app:
             app = self.context.app
         else:
             app = grailutil.get_grailapp()
         app.exception_dialog("in BaseReader")
         self.kill()
Esempio n. 13
0
 def checkapi(self, *args):
     if not self.callback:
         print "*** checkapi -- too late ***"
         if self.fno >= 0:
             fno = self.fno
             self.fno = -1
             tkinter.deletefilehandler(fno)
         return
     try:
         self.callback()                     # Call via function pointer
     except:
         if self.context and self.context.app:
             app = self.context.app
         else:
             app = grailutil.get_grailapp()
         app.exception_dialog("in BaseReader")
         self.kill()
Esempio n. 14
0
 def getreply(self, file):
     self.file = file
     line = self.file.readline()
     if self.debuglevel > 0: print 'reply:', ` line `
     if replyprog.match(line) < 0:
         # Not an HTTP/1.0 response.  Fall back to HTTP/0.9.
         # Push the data back into the file.
         self.file.seek(-len(line), 1)
         self.headers = {}
         app = grailutil.get_grailapp()
         c_type, c_encoding = app.guess_type(self.selector)
         if c_encoding:
             self.headers['content-encoding'] = c_encoding
         # HTTP/0.9 sends HTML by default
         self.headers['content-type'] = c_type or "text/html"
         return 200, "OK", self.headers
     errcode, errmsg = replyprog.group(1, 2)
     errcode = string.atoi(errcode)
     errmsg = string.strip(errmsg)
     self.headers = mimetools.Message(self.file, 0)
     return errcode, errmsg, self.headers
Esempio n. 15
0
 def getreply(self, file):
     self.file = file
     line = self.file.readline()
     if self.debuglevel > 0: print 'reply:', `line`
     if replyprog.match(line) < 0:
         # Not an HTTP/1.0 response.  Fall back to HTTP/0.9.
         # Push the data back into the file.
         self.file.seek(-len(line), 1)
         self.headers = {}
         app = grailutil.get_grailapp()
         c_type, c_encoding = app.guess_type(self.selector)
         if c_encoding:
             self.headers['content-encoding'] = c_encoding
         # HTTP/0.9 sends HTML by default
         self.headers['content-type'] = c_type or "text/html"
         return 200, "OK", self.headers
     errcode, errmsg = replyprog.group(1, 2)
     errcode = string.atoi(errcode)
     errmsg = string.strip(errmsg)
     self.headers = mimetools.Message(self.file, 0)
     return errcode, errmsg, self.headers
Esempio n. 16
0
    def __init__(self, url, method, params):
        from urllib import url2pathname, pathname2url

        self.url = url
        self.redirect = None
        pathname = url2pathname(url)
        if not os.path.isabs(pathname):
            try:
                pwd = os.getcwd()
            except os.error:
                pass
            else:
                pathname = os.path.expanduser(pathname)
                pathname = os.path.join(pwd, pathname)
                pathname = os.path.normpath(pathname)
                self.redirect = 1
        self.pathname = pathname
        self.url = "file:" + pathname2url(pathname)
        self.method = method
        self.params = params
        self.headers = {}
        try:
            stats = os.stat(self.pathname)
        except (IOError, os.error, AttributeError):
            pass
        else:
            self.headers["content-length"] = str(stats[ST_SIZE])
            self.headers["last-modified"] = ht_time.unparse(stats[ST_MTIME])
        if os.path.isdir(self.pathname):
            self.format_directory()
        else:
            self.fp = open(self.pathname, "rb")  # May raise IOError!
            app = grailutil.get_grailapp()
            ctype, cencoding = app.guess_type(self.pathname)
            if ctype:
                self.headers["content-type"] = ctype
            if cencoding:
                self.headers["content-encoding"] = cencoding
        self.state = META
Esempio n. 17
0
 def __init__(self, url, method, params):
     from urllib import url2pathname, pathname2url
     self.url = url
     self.redirect = None
     pathname = url2pathname(url)
     if not os.path.isabs(pathname):
         try:
             pwd = os.getcwd()
         except os.error:
             pass
         else:
             pathname = os.path.expanduser(pathname)
             pathname = os.path.join(pwd, pathname)
             pathname = os.path.normpath(pathname)
             self.redirect = 1
     self.pathname = pathname
     self.url = "file:" + pathname2url(pathname)
     self.method = method
     self.params = params
     self.headers = {}
     try:
         stats = os.stat(self.pathname)
     except (IOError, os.error, AttributeError):
         pass
     else:
         self.headers['content-length'] = str(stats[ST_SIZE])
         self.headers['last-modified'] = ht_time.unparse(stats[ST_MTIME])
     if os.path.isdir(self.pathname):
         self.format_directory()
     else:
         self.fp = open(self.pathname, 'rb')  # May raise IOError!
         app = grailutil.get_grailapp()
         ctype, cencoding = app.guess_type(self.pathname)
         if ctype: self.headers['content-type'] = ctype
         if cencoding: self.headers['content-encoding'] = cencoding
     self.state = META
Esempio n. 18
0
 def __init__(self, url, method, params, data=None):
     null_access.__init__(self, url, method, params)
     # when a form's action is a mail URL, the data field will be
     # non-None.  In that case, initialize the dialog with the data
     # contents
     toplevel = MailDialog(grailutil.get_grailapp().root, url, data)
Esempio n. 19
0
def protocol_access(url, mode, params, data=None):
    scheme, resturl = splittype(url)
    if not scheme:
        raise IOError, ("protocol error", "no scheme identifier in URL", url)
    scheme = string.lower(scheme)
    sanitized = regsub.gsub("[^a-zA-Z0-9]", "_", scheme)
    #
    # Check first to see if proxies are enabled
    manual_proxy_enabled = grailutil.pref_or_getenv('manual_proxy_enabled',
                                                    type_name='int')

    app = grailutil.get_grailapp()
    if manual_proxy_enabled:
        proxy_name = sanitized + "_proxy"
        if manual_proxy_enabled == -1:
            #
            # We should only get here when there are no user preferences
            # for proxies, which should only happen once... so check the
            # environment for the rest of the known scheme proxy env vars
            # and load them into prefs if they exist.
            app.prefs.Set('proxies', 'manual_proxy_enabled', 0)
            proxy = None
            for next_proxy_name in VALID_PROXIES:
                next_proxy = grailutil.pref_or_getenv(next_proxy_name,
                                                      check_ok=VALID_PROXIES)
                if next_proxy:
                    app.prefs.Set('proxies', 'manual_proxy_enabled', 1)

                if next_proxy_name == proxy_name:
                    proxy = next_proxy

            no_proxy_enabled = grailutil.pref_or_getenv('no_proxy_enabled',
                                                        type_name='int')
            if no_proxy_enabled == -1:
                no_proxy = grailutil.pref_or_getenv('no_proxy')
            if no_proxy:
                app.prefs.Set('proxies', 'no_proxy_enabled', 1)
            else:
                app.prefs.Set('proxies', 'no_proxy_enabled', 0)
        else:
            proxy = grailutil.pref_or_getenv(proxy_name,
                                             check_ok=VALID_PROXIES)
    else:
        proxy = None

    if proxy:
        if not valid_proxy(proxy):
            error = 'Invalid proxy: ' + proxy
            raise IOError, error
        no_proxy_enabled = grailutil.pref_or_getenv('no_proxy_enabled',
                                                    type_name='int')
        if no_proxy_enabled:
            no_proxy = grailutil.pref_or_getenv('no_proxy')
        else:
            no_proxy = None

        do_proxy = 1
        if no_proxy:
            list = map(string.strip, string.split(no_proxy, ","))
            url_host, url_remains = splithost(resturl)
            url_host = string.lower(url_host or '')
            if proxy_exception(url_host, list):
                do_proxy = 0
            else:
                url_host, url_port = splitport(url_host)
                if proxy_exception(url_host, list):
                    do_proxy = 0
        if do_proxy:
            proxy_scheme, proxy_resturl = splittype(proxy)
            proxy_host, proxy_remains = splithost(proxy_resturl)
            resturl = (proxy_host, url)
            scheme = string.lower(proxy_scheme)
            sanitized = regsub.gsub("[^a-zA-Z0-9]", "_", scheme)


##          print "Sending", url
##          print "     to", scheme, "proxy", proxy_host
    modname = sanitized + "API"
    app = grailutil.get_grailapp()
    access = app.find_extension('protocols', sanitized).access
    if not access:
        raise IOError, ("protocol error", "no class for %s" % scheme)
    try:
        if data:
            return access(resturl, mode, params, data)
        else:
            return access(resturl, mode, params)
    except socket.error, msg:
        raise IOError, ("socket error", msg)
Esempio n. 20
0
 def __init__(self, url, method, params, data=None):
     null_access.__init__(self, url, method, params)
     # when a form's action is a mail URL, the data field will be
     # non-None.  In that case, initialize the dialog with the data
     # contents
     toplevel = MailDialog(grailutil.get_grailapp().root, url, data)
Esempio n. 21
0

import string
import regex
import regsub

import ftplib
from urllib import unquote, splithost, splitport, splituser, \
     splitpasswd, splitattr, splitvalue, quote
from urlparse import urljoin
import mimetools
from Assert import Assert
import grailutil
import socket

app = grailutil.get_grailapp()          # app.guess_type(url)


# Stages
META = 'META'
DATA = 'DATA'
EOF = 'EOF'
DONE = 'DONE'


LISTING_HEADER = """<HTML>
<HEAD><TITLE>FTP Directory: %(url)s</TITLE></HEAD>
<BODY>
<H1>FTP Directory: %(url)s</H1>
<PRE>"""
Esempio n. 22
0
def protocol_access(url, mode, params, data=None):
    scheme, resturl = splittype(url)
    if not scheme:
        raise IOError, ("protocol error", "no scheme identifier in URL", url)
    scheme = string.lower(scheme)
    sanitized = re.sub("[^a-zA-Z0-9]", "_", scheme)
    #
    # Check first to see if proxies are enabled
    manual_proxy_enabled = grailutil.pref_or_getenv('manual_proxy_enabled',
                                                    type_name='int')

    app = grailutil.get_grailapp()
    if manual_proxy_enabled:
        proxy_name = sanitized + "_proxy"
        if manual_proxy_enabled == -1:
            #
            # We should only get here when there are no user preferences
            # for proxies, which should only happen once... so check the
            # environment for the rest of the known scheme proxy env vars
            # and load them into prefs if they exist.
            app.prefs.Set('proxies', 'manual_proxy_enabled', 0)
            proxy = None
            for next_proxy_name in VALID_PROXIES:
                next_proxy = grailutil.pref_or_getenv(next_proxy_name,
                                              check_ok=VALID_PROXIES)
                if next_proxy:
                    app.prefs.Set('proxies', 'manual_proxy_enabled', 1)
                    
                if next_proxy_name == proxy_name:
                    proxy = next_proxy
                    
            no_proxy_enabled = grailutil.pref_or_getenv('no_proxy_enabled',
                                                        type_name='int')
            if no_proxy_enabled == -1:
                no_proxy = grailutil.pref_or_getenv('no_proxy')
            if no_proxy:
                app.prefs.Set('proxies', 'no_proxy_enabled', 1)
            else:
                app.prefs.Set('proxies', 'no_proxy_enabled', 0)
        else:   
            proxy = grailutil.pref_or_getenv(proxy_name,
                                             check_ok=VALID_PROXIES)
    else:
        proxy = None
        
    if proxy:
        if not valid_proxy(proxy):
            error = 'Invalid proxy: ' + proxy
            raise IOError, error
        no_proxy_enabled = grailutil.pref_or_getenv('no_proxy_enabled',
                                                    type_name='int')
        if no_proxy_enabled:
            no_proxy = grailutil.pref_or_getenv('no_proxy')
        else:
            no_proxy = None
            
        do_proxy = 1
        if no_proxy:
            list = map(string.strip, string.split(no_proxy, ","))
            url_host, url_remains = splithost(resturl)
            url_host = string.lower(url_host or '')
            if proxy_exception(url_host, list):
                do_proxy = 0
            else:
                url_host, url_port = splitport(url_host)
                if proxy_exception(url_host, list):
                    do_proxy = 0
        if do_proxy:
            proxy_scheme, proxy_resturl = splittype(proxy)
            proxy_host, proxy_remains = splithost(proxy_resturl)
            resturl = (proxy_host, url)
            scheme = string.lower(proxy_scheme)
            sanitized = re.sub("[^a-zA-Z0-9]", "_", scheme)
##          print "Sending", url
##          print "     to", scheme, "proxy", proxy_host
    modname = sanitized + "API"
    app = grailutil.get_grailapp()
    ext = app.find_extension('protocols', sanitized)
    if ext:
        access = ext.access
    else:
        access = None
    if not access:
        raise IOError, ("protocol error", "no class for %s" % scheme)
    try:
        if data:
            return access(resturl, mode, params, data)
        else:
            return access(resturl, mode, params)
    except socket.error, msg:
        raise IOError, ("socket error", msg)