--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/CondaInterface/__init__.py Sun Apr 14 15:09:21 2019 +0200 @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package implementing the various conda related modules. +""" + +from __future__ import unicode_literals +try: + str = unicode +except NameError: + pass + +import json + +from PyQt5.QtCore import QCoreApplication, QProcess + +import Preferences + +__CondaVersion = tuple() +__CondaVersionStr = "" +__CondaRootPrefix = "" +__CondaUserConfig = "" + +__initialized = False + + +def __initializeCondaInterface(): + """ + Private module function to (re-)initialize the conda interface. + """ + global __CondaVersionStr, __CondaVersion, __CondaRootPrefix, \ + __CondaUserConfig, __initialized + + if not __initialized: + exe = Preferences.getConda("CondaExecutable") + if not exe: + exe = "conda" + + proc = QProcess() + proc.start(exe, ["info", "--json"]) + if not proc.waitForStarted(15000): + __CondaVersionStr = QCoreApplication.translate( + "CondaInterface", + '<conda not found or not configured.>') + else: + proc.waitForFinished(15000) + output = str(proc.readAllStandardOutput(), + Preferences.getSystem("IOEncoding"), + 'replace').strip() + try: + jsonDict = json.loads(output) + except Exception: + __CondaVersionStr = QCoreApplication.translate( + "CondaInterface", + '<conda returned invalid data.>') + return + + __CondaVersionStr = jsonDict["conda_version"] + __CondaVersion = tuple( + int(i) for i in __CondaVersionStr.split(".") + ) + __CondaRootPrefix = jsonDict["root_prefix"] + if "user_rc_path" in jsonDict: + __CondaUserConfig = jsonDict["user_rc_path"] + elif "rc_path" in jsonDict: + __CondaUserConfig = jsonDict["rc_path"] + + __initialized = True + + +def condaVersion(): + """ + Module function to get the conda version. + + @return tuple containing the conda version + @rtype tuple of (int, int, int) + """ + __initializeCondaInterface() + return __CondaVersion + + +def condaVersionStr(): + """ + Module function to get the conda version as a string. + + @return conda version as a string + @rtype str + """ + __initializeCondaInterface() + return __CondaVersionStr + + +def rootPrefix(): + """ + Module function to get the root prefix. + + @return root prefix + @rtype str + """ + __initializeCondaInterface() + return __CondaRootPrefix + + +def userConfiguration(): + """ + Module function to get the path of the user configuration file. + + @return path of the user configuration file + @rtype str + """ + __initializeCondaInterface() + return __CondaUserConfig + + +def isCondaAvailable(): + """ + Module function to check the availability of conda. + + @return flag indicating conda availability + @rtype bool + """ + __initializeCondaInterface() + return bool(__CondaVersion) + + +def resetInterface(): + """ + Module function to reset the conda interface. + """ + global __initialized + + __initialized = False