~ubuntu-branches/ubuntu/wily/spyder/wily-proposed

« back to all changes in this revision

Viewing changes to spyderlib/utils/programs.py

  • Committer: Package Import Robot
  • Author(s): Picca Frédéric-Emmanuel
  • Date: 2013-08-21 15:17:46 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20130821151746-crr5lto6aoi582qu
Tags: 2.2.3+dfsg-1
* Imported Upstream version 2.2.3+dfsg
* debian/copyright updated

Show diffs side-by-side

added added

removed removed

Lines of Context:
201
201
        return True
202
202
 
203
203
 
204
 
def _is_mod_installed(module_name, version=None):
 
204
def get_module_version(module_name):
 
205
    """Return module version or None if version can't be retrieved."""
 
206
    mod = __import__(module_name)
 
207
    return getattr(mod, '__version__', getattr(mod, 'VERSION', None))
 
208
 
 
209
 
 
210
def is_module_installed(module_name, version=None, installed_version=None,
 
211
                        interpreter=None):
205
212
    """Return True if module *module_name* is installed
206
213
    
207
214
    If version is not None, checking module version 
208
215
    (module must have an attribute named '__version__')
209
216
    
210
217
    version may starts with =, >=, > or < to specify the exact requirement ;
211
 
    multiple conditions may be separated by ';' (e.g. '>=0.13;<1.0')"""
212
 
    try:
213
 
        mod = __import__(module_name)
214
 
        if version is None:
215
 
            return True
216
 
        else:
217
 
            if ';' in version:
218
 
                output = True
219
 
                for ver in version.split(';'):
220
 
                    output = output and _is_mod_installed(module_name, ver)
221
 
                return output
222
 
            match = re.search('[0-9]', version)
223
 
            assert match is not None, "Invalid version number"
224
 
            symb = version[:match.start()]
225
 
            if not symb:
226
 
                symb = '='
227
 
            assert symb in ('>=', '>', '=', '<'),\
228
 
                   "Invalid version condition '%s'" % symb
229
 
            version = version[match.start():]
230
 
            actver = getattr(mod, '__version__', getattr(mod, 'VERSION', None))
231
 
            if actver is None:
232
 
                return False
233
 
            else:
234
 
                return check_version(actver, version, symb)
235
 
    except ImportError:
236
 
        return False
237
 
 
238
 
 
239
 
def is_module_installed(module_name, version=None, interpreter=''):
240
 
    """
241
 
    Check if a module is installed with a given version in a determined
242
 
    interpreter
243
 
    """
 
218
    multiple conditions may be separated by ';' (e.g. '>=0.13;<1.0')
 
219
    
 
220
    interpreter: check if a module is installed with a given version 
 
221
    in a determined interpreter"""
244
222
    if interpreter:
245
223
        if not osp.isdir(TEMPDIR):
246
224
            os.mkdir(TEMPDIR)
247
225
        
248
226
        if osp.isfile(interpreter) and ('python' in interpreter):
249
227
            checkver = inspect.getsource(check_version)
250
 
            ismod_inst = inspect.getsource(_is_mod_installed)
 
228
            get_modver = inspect.getsource(get_module_version)
 
229
            ismod_inst = inspect.getsource(is_module_installed)
251
230
            fd, script = tempfile.mkstemp(suffix='.py', dir=TEMPDIR)
252
231
            with os.fdopen(fd, 'w') as f:
253
232
                f.write("# -*- coding: utf-8 -*-" + "\n\n")
254
233
                f.write("from distutils.version import LooseVersion" + "\n")
255
234
                f.write("import re" + "\n\n")
256
235
                f.write(checkver + "\n")
 
236
                f.write(get_modver + "\n")
257
237
                f.write(ismod_inst + "\n")
258
238
                if version:
259
 
                    f.write("print _is_mod_installed('%s','%s')" % (module_name,
260
 
                                                                    version))
 
239
                    f.write("print is_module_installed('%s','%s')"\
 
240
                            % (module_name, version))
261
241
                else:
262
 
                    f.write("print _is_mod_installed('%s')" % module_name)
 
242
                    f.write("print is_module_installed('%s')" % module_name)
263
243
            try:
264
244
                output = subprocess.Popen([interpreter, script],
265
245
                                      stdout=subprocess.PIPE).communicate()[0]
275
255
            # config page)
276
256
            return True
277
257
    else:
278
 
        return _is_mod_installed(module_name, version)
 
258
        if installed_version is None:
 
259
            try:
 
260
                actver = get_module_version(module_name)
 
261
            except ImportError:
 
262
                # Module is not installed
 
263
                return False
 
264
        else:
 
265
            actver = installed_version
 
266
        if actver is None and version is not None:
 
267
            return False
 
268
        elif version is None:
 
269
            return True
 
270
        else:
 
271
            if ';' in version:
 
272
                output = True
 
273
                for ver in version.split(';'):
 
274
                    output = output and is_module_installed(module_name, ver)
 
275
                return output
 
276
            match = re.search('[0-9]', version)
 
277
            assert match is not None, "Invalid version number"
 
278
            symb = version[:match.start()]
 
279
            if not symb:
 
280
                symb = '='
 
281
            assert symb in ('>=', '>', '=', '<'),\
 
282
                    "Invalid version condition '%s'" % symb
 
283
            version = version[match.start():]
 
284
            return check_version(actver, version, symb)
279
285
 
280
286
 
281
287
if __name__ == '__main__':