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)
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
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
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)
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
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
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
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)
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()
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
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
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
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
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)
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)
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>"""
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)