home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / GestionFichiers / metamorphose / metamorphose2_0.8.2_setup.exe / metamorphose2.exe / wxversion.pyo (.txt) < prev   
Python Compiled Bytecode  |  2011-01-12  |  9KB  |  349 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import re
  5. import sys
  6. import os
  7. import glob
  8. import fnmatch
  9. _selected = None
  10.  
  11. class VersionError(Exception):
  12.     pass
  13.  
  14.  
  15. class AlreadyImportedError(VersionError):
  16.     pass
  17.  
  18.  
  19. def select(versions, optionsRequired = False):
  20.     global _selected
  21.     if type(versions) == str:
  22.         versions = [
  23.             versions]
  24.     
  25.     if _selected is not None:
  26.         for ver in versions:
  27.             if _selected.Score(_wxPackageInfo(ver), optionsRequired) > 0:
  28.                 return None
  29.         
  30.         raise VersionError('A previously selected wx version does not match the new request.')
  31.     _selected is not None
  32.     if sys.modules.has_key('wx') or sys.modules.has_key('wxPython'):
  33.         raise AlreadyImportedError('wxversion.select() must be called before wxPython is imported')
  34.     sys.modules.has_key('wxPython')
  35.     installed = _find_installed(True)
  36.     bestMatch = _get_best_match(installed, versions, optionsRequired)
  37.     if bestMatch is None:
  38.         raise VersionError('Requested version of wxPython not found')
  39.     bestMatch is None
  40.     sys.path.insert(0, bestMatch.pathname)
  41.     path64 = re.sub('/lib/', '/lib64/', bestMatch.pathname)
  42.     if os.path.isdir(path64):
  43.         sys.path.insert(0, path64)
  44.     
  45.     _selected = bestMatch
  46.  
  47. UPDATE_URL = 'http://wxPython.org/'
  48. _EM_DEBUG = 0
  49.  
  50. def ensureMinimal(minVersion, optionsRequired = False):
  51.     global _selected
  52.     if sys.modules.has_key('wx') or sys.modules.has_key('wxPython'):
  53.         raise AlreadyImportedError('wxversion.ensureMinimal() must be called before wxPython is imported')
  54.     sys.modules.has_key('wxPython')
  55.     bestMatch = None
  56.     minv = _wxPackageInfo(minVersion)
  57.     defaultPath = _find_default()
  58.     if defaultPath:
  59.         defv = _wxPackageInfo(defaultPath, True)
  60.         if defv >= minv and minv.CheckOptions(defv, optionsRequired):
  61.             bestMatch = defv
  62.         
  63.     
  64.     if bestMatch is None:
  65.         installed = _find_installed()
  66.         for inst in installed:
  67.             if inst >= minv and minv.CheckOptions(inst, optionsRequired):
  68.                 bestMatch = inst
  69.                 break
  70.                 continue
  71.         
  72.     
  73.     if bestMatch is None:
  74.         if _EM_DEBUG:
  75.             raise VersionError('Requested version of wxPython not found')
  76.         _EM_DEBUG
  77.         import wx
  78.         import webbrowser as webbrowser
  79.         versions = []([ '      ' + ver for ver in getInstalled() ])
  80.         app = wx.PySimpleApp()
  81.         result = wx.MessageBox('This application requires a version of wxPython greater than or equal to %s, but a matching version was not found.\n\nYou currently have these version(s) installed:\n%s\n\nWould you like to download a new version of wxPython?\n' % (minVersion, versions), 'wxPython Upgrade Needed', style = wx.YES_NO)
  82.         app.MainLoop()
  83.         sys.exit()
  84.     
  85.     sys.path.insert(0, bestMatch.pathname)
  86.     path64 = re.sub('/lib/', '/lib64/', bestMatch.pathname)
  87.     if os.path.isdir(path64):
  88.         sys.path.insert(0, path64)
  89.     
  90.     _selected = bestMatch
  91.  
  92.  
  93. def checkInstalled(versions, optionsRequired = False):
  94.     if type(versions) == str:
  95.         versions = [
  96.             versions]
  97.     
  98.     installed = _find_installed()
  99.     bestMatch = _get_best_match(installed, versions, optionsRequired)
  100.     return bestMatch is not None
  101.  
  102.  
  103. def getInstalled():
  104.     installed = _find_installed()
  105.     return [ os.path.basename(p.pathname)[3:] for p in installed ]
  106.  
  107.  
  108. def _get_best_match(installed, versions, optionsRequired):
  109.     bestMatch = None
  110.     bestScore = 0
  111.     for pkg in installed:
  112.         for ver in versions:
  113.             score = pkg.Score(_wxPackageInfo(ver), optionsRequired)
  114.             if score > bestScore:
  115.                 bestMatch = pkg
  116.                 bestScore = score
  117.                 continue
  118.         
  119.     
  120.     return bestMatch
  121.  
  122. _pattern = 'wx-[0-9].*'
  123.  
  124. def _find_installed(removeExisting = False):
  125.     installed = []
  126.     toRemove = []
  127.     for pth in sys.path:
  128.         if not pth:
  129.             pth = '.'
  130.         
  131.         if not os.path.isdir(pth):
  132.             continue
  133.         
  134.         base = os.path.basename(pth)
  135.         if fnmatch.fnmatchcase(base, _pattern):
  136.             toRemove.append(pth)
  137.             continue
  138.         
  139.         for name in glob.glob(os.path.join(pth, _pattern)):
  140.             if not os.path.isdir(name):
  141.                 continue
  142.             
  143.             if not os.path.exists(os.path.join(name, 'wx')):
  144.                 continue
  145.             
  146.             installed.append(_wxPackageInfo(name, True))
  147.         
  148.     
  149.     if removeExisting:
  150.         for rem in toRemove:
  151.             del sys.path[sys.path.index(rem)]
  152.         
  153.     
  154.     installed.sort()
  155.     installed.reverse()
  156.     return installed
  157.  
  158.  
  159. def _find_default():
  160.     for pth in sys.path:
  161.         if not pth:
  162.             pth = '.'
  163.         
  164.         if not os.path.isdir(pth):
  165.             continue
  166.         
  167.         base = os.path.basename(pth)
  168.         if fnmatch.fnmatchcase(base, _pattern):
  169.             return pth
  170.     
  171.     for pth in sys.path:
  172.         if not pth:
  173.             pth = '.'
  174.         
  175.         if not os.path.isdir(pth):
  176.             continue
  177.         
  178.         if os.path.exists(os.path.join(pth, 'wx.pth')):
  179.             base = open(os.path.join(pth, 'wx.pth')).read()
  180.             return os.path.join(pth, base)
  181.     
  182.  
  183.  
  184. class _wxPackageInfo(object):
  185.     
  186.     def __init__(self, pathname, stripFirst = False):
  187.         self.pathname = pathname
  188.         base = os.path.basename(pathname)
  189.         segments = base.split('-')
  190.         if stripFirst:
  191.             segments = segments[1:]
  192.         
  193.         self.version = []([ int(x) for x in segments[0].split('.') ])
  194.         self.options = segments[1:]
  195.  
  196.     
  197.     def Score(self, other, optionsRequired):
  198.         score = 0
  199.         minlen = min(len(self.version), len(other.version))
  200.         if self.version[:minlen] != other.version[:minlen]:
  201.             return 0
  202.         score += 1
  203.         for opt in other.options:
  204.             if opt in self.options:
  205.                 score += 1
  206.                 continue
  207.             self.version[:minlen] != other.version[:minlen]
  208.             if optionsRequired:
  209.                 return 0
  210.         
  211.         return score
  212.  
  213.     
  214.     def CheckOptions(self, other, optionsRequired):
  215.         if not optionsRequired:
  216.             return True
  217.         for opt in self.options:
  218.             if opt not in other.options:
  219.                 return False
  220.         
  221.         return True
  222.  
  223.     
  224.     def __lt__(self, other):
  225.         if self.version < other.version and self.version == other.version:
  226.             pass
  227.         return self.options < other.options
  228.  
  229.     
  230.     def __le__(self, other):
  231.         if self.version <= other.version and self.version == other.version:
  232.             pass
  233.         return self.options <= other.options
  234.  
  235.     
  236.     def __gt__(self, other):
  237.         if self.version > other.version and self.version == other.version:
  238.             pass
  239.         return self.options > other.options
  240.  
  241.     
  242.     def __ge__(self, other):
  243.         if self.version >= other.version and self.version == other.version:
  244.             pass
  245.         return self.options >= other.options
  246.  
  247.     
  248.     def __eq__(self, other):
  249.         if self.version == other.version:
  250.             pass
  251.         return self.options == other.options
  252.  
  253.  
  254. if __name__ == '__main__':
  255.     import pprint
  256.     
  257.     def test(version, optionsRequired = False):
  258.         global _selected
  259.         savepath = sys.path[:]
  260.         select(version, optionsRequired)
  261.         print 'Asked for %s, (%s):\t got: %s' % (version, optionsRequired, sys.path[0])
  262.         sys.path = savepath[:]
  263.         _selected = None
  264.  
  265.     
  266.     def testEM(version, optionsRequired = False):
  267.         global _selected
  268.         savepath = sys.path[:]
  269.         ensureMinimal(version, optionsRequired)
  270.         print 'EM: Asked for %s, (%s):\t got: %s' % (version, optionsRequired, sys.path[0])
  271.         sys.path = savepath[:]
  272.         _selected = None
  273.  
  274.     names = [
  275.         'wx-2.4-gtk-ansi',
  276.         'wx-2.5.2-gtk2-unicode',
  277.         'wx-2.5.3-gtk-ansi',
  278.         'wx-2.6-gtk2-unicode',
  279.         'wx-2.6-gtk2-ansi',
  280.         'wx-2.6-gtk-ansi',
  281.         'wx-2.7.1-gtk2-ansi']
  282.     for name in names:
  283.         d = os.path.join('/tmp', name)
  284.         os.mkdir(d)
  285.         os.mkdir(os.path.join(d, 'wx'))
  286.     
  287.     sys.path.append('/tmp')
  288.     pprint.pprint(getInstalled())
  289.     print checkInstalled('2.4')
  290.     print checkInstalled('2.5-unicode')
  291.     print checkInstalled('2.99-bogus')
  292.     print 'Current sys.path:'
  293.     pprint.pprint(sys.path)
  294.     print 
  295.     test('2.4')
  296.     test('2.5')
  297.     test('2.5-gtk2')
  298.     test('2.5.2')
  299.     test('2.5-ansi')
  300.     test('2.5-unicode')
  301.     test('2.6')
  302.     test('2.6-ansi')
  303.     test([
  304.         '2.6-unicode',
  305.         '2.7-unicode'])
  306.     test([
  307.         '2.6',
  308.         '2.7'])
  309.     test([
  310.         '2.6-unicode',
  311.         '2.7-unicode'], optionsRequired = True)
  312.     test('2.4-unicode')
  313.     test([
  314.         '2.5.2',
  315.         '2.5.3',
  316.         '2.6'])
  317.     
  318.     try:
  319.         test('2.9')
  320.     except VersionError:
  321.         e = None
  322.         print 'Asked for 2.9:\t got Exception:', e
  323.  
  324.     
  325.     try:
  326.         select('2.4')
  327.         select('2.5')
  328.     except VersionError:
  329.         e = None
  330.         print 'Asked for incompatible versions, got Exception:', e
  331.  
  332.     _EM_DEBUG = 1
  333.     testEM('2.6')
  334.     testEM('2.6-unicode')
  335.     testEM('2.6-unicode', True)
  336.     
  337.     try:
  338.         testEM('2.9')
  339.     except VersionError:
  340.         e = None
  341.         print 'EM: Asked for 2.9:\t got Exception:', e
  342.  
  343.     for name in names:
  344.         d = os.path.join('/tmp', name)
  345.         os.rmdir(os.path.join(d, 'wx'))
  346.         os.rmdir(d)
  347.     
  348.  
  349.