home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 January / Gamestar_80_2006-01_dvd.iso / Dema / Civilization4 / data1.cab / Civ4DemoComponent / Assets / Python / System / webbrowser.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2005-11-09  |  11.0 KB  |  400 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''Interfaces for launching and remotely controlling Web browsers.'''
  5. import os
  6. import sys
  7. __all__ = [
  8.     'Error',
  9.     'open',
  10.     'get',
  11.     'register']
  12.  
  13. class Error(Exception):
  14.     pass
  15.  
  16. _browsers = { }
  17. _tryorder = []
  18.  
  19. def register(name, klass, instance = None):
  20.     '''Register a browser connector and, optionally, connection.'''
  21.     _browsers[name.lower()] = [
  22.         klass,
  23.         instance]
  24.  
  25.  
  26. def get(using = None):
  27.     '''Return a browser launcher instance appropriate for the environment.'''
  28.     if using is not None:
  29.         alternatives = [
  30.             using]
  31.     else:
  32.         alternatives = _tryorder
  33.     for browser in alternatives:
  34.         if '%s' in browser:
  35.             return GenericBrowser(browser)
  36.             continue
  37.         
  38.         try:
  39.             command = _browsers[browser.lower()]
  40.         except KeyError:
  41.             command = _synthesize(browser)
  42.  
  43.         if command[1] is None:
  44.             return command[0]()
  45.             continue
  46.         return command[1]
  47.     
  48.     raise Error('could not locate runnable browser')
  49.  
  50.  
  51. def open(url, new = 0, autoraise = 1):
  52.     get().open(url, new, autoraise)
  53.  
  54.  
  55. def open_new(url):
  56.     get().open(url, 1)
  57.  
  58.  
  59. def _synthesize(browser):
  60.     """Attempt to synthesize a controller base on existing controllers.
  61.  
  62.     This is useful to create a controller when a user specifies a path to
  63.     an entry in the BROWSER environment variable -- we can copy a general
  64.     controller to operate using a specific installation of the desired
  65.     browser in this way.
  66.  
  67.     If we can't create a controller in this way, or if there is no
  68.     executable for the requested browser, return [None, None].
  69.  
  70.     """
  71.     if not os.path.exists(browser):
  72.         return [
  73.             None,
  74.             None]
  75.     
  76.     name = os.path.basename(browser)
  77.     
  78.     try:
  79.         command = _browsers[name.lower()]
  80.     except KeyError:
  81.         return [
  82.             None,
  83.             None]
  84.  
  85.     controller = command[1]
  86.     if controller and name.lower() == controller.basename:
  87.         import copy
  88.         controller = copy.copy(controller)
  89.         controller.name = browser
  90.         controller.basename = os.path.basename(browser)
  91.         register(browser, None, controller)
  92.         return [
  93.             None,
  94.             controller]
  95.     
  96.     return [
  97.         None,
  98.         None]
  99.  
  100.  
  101. def _iscommand(cmd):
  102.     '''Return True if cmd can be found on the executable search path.'''
  103.     path = os.environ.get('PATH')
  104.     if not path:
  105.         return False
  106.     
  107.     for d in path.split(os.pathsep):
  108.         exe = os.path.join(d, cmd)
  109.         if os.path.isfile(exe):
  110.             return True
  111.             continue
  112.     
  113.     return False
  114.  
  115. PROCESS_CREATION_DELAY = 4
  116.  
  117. class GenericBrowser:
  118.     
  119.     def __init__(self, cmd):
  120.         (self.name, self.args) = cmd.split(None, 1)
  121.         self.basename = os.path.basename(self.name)
  122.  
  123.     
  124.     def open(self, url, new = 0, autoraise = 1):
  125.         if not "'" not in url:
  126.             raise AssertionError
  127.         command = '%s %s' % (self.name, self.args)
  128.         os.system(command % url)
  129.  
  130.     
  131.     def open_new(self, url):
  132.         self.open(url)
  133.  
  134.  
  135.  
  136. class Netscape:
  137.     '''Launcher class for Netscape browsers.'''
  138.     
  139.     def __init__(self, name):
  140.         self.name = name
  141.         self.basename = os.path.basename(name)
  142.  
  143.     
  144.     def _remote(self, action, autoraise):
  145.         raise_opt = ('-noraise', '-raise')[autoraise]
  146.         cmd = "%s %s -remote '%s' >/dev/null 2>&1" % (self.name, raise_opt, action)
  147.         rc = os.system(cmd)
  148.         if rc:
  149.             import time
  150.             os.system('%s &' % self.name)
  151.             time.sleep(PROCESS_CREATION_DELAY)
  152.             rc = os.system(cmd)
  153.         
  154.         return not rc
  155.  
  156.     
  157.     def open(self, url, new = 0, autoraise = 1):
  158.         if new:
  159.             self._remote('openURL(%s, new-window)' % url, autoraise)
  160.         else:
  161.             self._remote('openURL(%s)' % url, autoraise)
  162.  
  163.     
  164.     def open_new(self, url):
  165.         self.open(url, 1)
  166.  
  167.  
  168.  
  169. class Galeon:
  170.     '''Launcher class for Galeon browsers.'''
  171.     
  172.     def __init__(self, name):
  173.         self.name = name
  174.         self.basename = os.path.basename(name)
  175.  
  176.     
  177.     def _remote(self, action, autoraise):
  178.         raise_opt = ('--noraise', '')[autoraise]
  179.         cmd = '%s %s %s >/dev/null 2>&1' % (self.name, raise_opt, action)
  180.         rc = os.system(cmd)
  181.         if rc:
  182.             import time
  183.             os.system('%s >/dev/null 2>&1 &' % self.name)
  184.             time.sleep(PROCESS_CREATION_DELAY)
  185.             rc = os.system(cmd)
  186.         
  187.         return not rc
  188.  
  189.     
  190.     def open(self, url, new = 0, autoraise = 1):
  191.         if new:
  192.             self._remote("-w '%s'" % url, autoraise)
  193.         else:
  194.             self._remote("-n '%s'" % url, autoraise)
  195.  
  196.     
  197.     def open_new(self, url):
  198.         self.open(url, 1)
  199.  
  200.  
  201.  
  202. class Konqueror:
  203.     '''Controller for the KDE File Manager (kfm, or Konqueror).
  204.  
  205.     See http://developer.kde.org/documentation/other/kfmclient.html
  206.     for more information on the Konqueror remote-control interface.
  207.  
  208.     '''
  209.     
  210.     def __init__(self):
  211.         if _iscommand('konqueror'):
  212.             self.name = self.basename = 'konqueror'
  213.         else:
  214.             self.name = self.basename = 'kfm'
  215.  
  216.     
  217.     def _remote(self, action):
  218.         cmd = 'kfmclient %s >/dev/null 2>&1' % action
  219.         rc = os.system(cmd)
  220.         if rc:
  221.             import time
  222.             if self.basename == 'konqueror':
  223.                 os.system(self.name + ' --silent &')
  224.             else:
  225.                 os.system(self.name + ' -d &')
  226.             time.sleep(PROCESS_CREATION_DELAY)
  227.             rc = os.system(cmd)
  228.         
  229.         return not rc
  230.  
  231.     
  232.     def open(self, url, new = 1, autoraise = 1):
  233.         if not "'" not in url:
  234.             raise AssertionError
  235.         self._remote("openURL '%s'" % url)
  236.  
  237.     open_new = open
  238.  
  239.  
  240. class Grail:
  241.     
  242.     def _find_grail_rc(self):
  243.         import glob
  244.         import pwd
  245.         import socket
  246.         import tempfile
  247.         tempdir = os.path.join(tempfile.gettempdir(), '.grail-unix')
  248.         user = pwd.getpwuid(os.getuid())[0]
  249.         filename = os.path.join(tempdir, user + '-*')
  250.         maybes = glob.glob(filename)
  251.         if not maybes:
  252.             return None
  253.         
  254.         s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  255.         for fn in maybes:
  256.             
  257.             try:
  258.                 s.connect(fn)
  259.             except socket.error:
  260.                 
  261.                 try:
  262.                     os.unlink(fn)
  263.                 except IOError:
  264.                     pass
  265.                 except:
  266.                     None<EXCEPTION MATCH>IOError
  267.                 
  268.  
  269.                 None<EXCEPTION MATCH>IOError
  270.  
  271.             return s
  272.         
  273.  
  274.     
  275.     def _remote(self, action):
  276.         s = self._find_grail_rc()
  277.         if not s:
  278.             return 0
  279.         
  280.         s.send(action)
  281.         s.close()
  282.         return 1
  283.  
  284.     
  285.     def open(self, url, new = 0, autoraise = 1):
  286.         if new:
  287.             self._remote('LOADNEW ' + url)
  288.         else:
  289.             self._remote('LOAD ' + url)
  290.  
  291.     
  292.     def open_new(self, url):
  293.         self.open(url, 1)
  294.  
  295.  
  296.  
  297. class WindowsDefault:
  298.     
  299.     def open(self, url, new = 0, autoraise = 1):
  300.         os.startfile(url)
  301.  
  302.     
  303.     def open_new(self, url):
  304.         self.open(url)
  305.  
  306.  
  307. if os.environ.get('TERM') or os.environ.get('DISPLAY'):
  308.     _tryorder = [
  309.         'links',
  310.         'lynx',
  311.         'w3m']
  312.     if os.environ.get('TERM'):
  313.         if _iscommand('links'):
  314.             register('links', None, GenericBrowser("links '%s'"))
  315.         
  316.         if _iscommand('lynx'):
  317.             register('lynx', None, GenericBrowser("lynx '%s'"))
  318.         
  319.         if _iscommand('w3m'):
  320.             register('w3m', None, GenericBrowser("w3m '%s'"))
  321.         
  322.     
  323.     if os.environ.get('DISPLAY'):
  324.         _tryorder = [
  325.             'galeon',
  326.             'skipstone',
  327.             'mozilla-firefox',
  328.             'mozilla-firebird',
  329.             'mozilla',
  330.             'netscape',
  331.             'kfm',
  332.             'grail'] + _tryorder
  333.         for browser in ('mozilla-firefox', 'mozilla-firebird', 'mozilla', 'netscape'):
  334.             if _iscommand(browser):
  335.                 register(browser, None, Netscape(browser))
  336.                 continue
  337.         
  338.         if _iscommand('mosaic'):
  339.             register('mosaic', None, GenericBrowser("mosaic '%s' >/dev/null &"))
  340.         
  341.         if _iscommand('galeon'):
  342.             register('galeon', None, Galeon('galeon'))
  343.         
  344.         if _iscommand('skipstone'):
  345.             register('skipstone', None, GenericBrowser("skipstone '%s' >/dev/null &"))
  346.         
  347.         if _iscommand('kfm') or _iscommand('konqueror'):
  348.             register('kfm', Konqueror, Konqueror())
  349.         
  350.         if _iscommand('grail'):
  351.             register('grail', Grail, None)
  352.         
  353.     
  354.  
  355.  
  356. class InternetConfig:
  357.     
  358.     def open(self, url, new = 0, autoraise = 1):
  359.         ic.launchurl(url)
  360.  
  361.     
  362.     def open_new(self, url):
  363.         self.open(url)
  364.  
  365.  
  366. if sys.platform[:3] == 'win':
  367.     _tryorder = [
  368.         'netscape',
  369.         'windows-default']
  370.     register('windows-default', WindowsDefault)
  371.  
  372.  
  373. try:
  374.     import ic
  375. except ImportError:
  376.     pass
  377.  
  378. _tryorder = [
  379.     'internet-config']
  380. register('internet-config', InternetConfig)
  381. if sys.platform[:3] == 'os2' and _iscommand('netscape.exe'):
  382.     _tryorder = [
  383.         'os2netscape']
  384.     register('os2netscape', None, GenericBrowser('start netscape.exe %s'))
  385.  
  386. if 'BROWSER' in os.environ:
  387.     _tryorder = os.environ['BROWSER'].split(os.pathsep)
  388.  
  389. for cmd in _tryorder:
  390.     if cmd.lower() not in _browsers:
  391.         if _iscommand(cmd.lower()):
  392.             register(cmd.lower(), None, GenericBrowser("%s '%%s'" % cmd.lower()))
  393.         
  394.     _iscommand(cmd.lower())
  395.  
  396. cmd = None
  397. del cmd
  398. _tryorder = filter((lambda x: if not x.lower() in _browsers:
  399. passx.find('%s') > -1), _tryorder)
  400.