OpendTect  6.6
pythonaccess.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A. Huck
8  Date: May 2019
9 ________________________________________________________________________
10 
11 */
12 
13 #include "basicmod.h"
14 
15 #include "bufstring.h"
16 #include "callback.h"
17 #include "enums.h"
18 
19 class FilePath;
20 class Timer;
21 class ServiceMgrBase;
22 class uiPythonSettings;
23 class uiString;
24 namespace OS {
25  class CommandExecPars;
26  class CommandLauncher;
27  class MachineCommand;
28 }
29 
30 
31 namespace OD
32 {
34  {
36  };
38 
41  public:
44 
46  { return "Use_External_Python_Path"; }
47 
48  uiRetVal isUsable(bool force=false,
49  const char* scriptstr=nullptr,
50  const char* scriptexpectedout=nullptr) const;
51 
53  bool wait4finish=true) const;
55  BufferString& stdoutstr,
56  BufferString* stderrstr,
57  uiString* errmsg=nullptr) const;
59  const OS::CommandExecPars&,
60  int* pid=nullptr,
61  uiString* errmsg=nullptr) const;
62  bool executeScript(const char*,bool wait4finish=true) const;
64  bool wait4finish=true) const;
65 
66  BufferString lastOutput(bool stderrout,uiString* launchermsg) const;
69 
70  bool isModuleUsable(const char* nm) const;
71 
73  static OD::DataRepType getDataType(const char*);
74 
75  static bool hasInternalEnvironment(bool allowuserdef=true);
76  static bool validInternalEnvironment(const FilePath&);
77 
78  static const char* sPythonExecNm(bool v3=false,bool v2=false);
79  static const char* sKeyPythonSrc();
80  static const char* sKeyEnviron();
81  static const char* sKeyPythonPath();
82 
84 
85  mStruct(Basic) ModuleInfo : NamedObject
86  {
87  public:
88  ModuleInfo(const char*);
89 
90  BufferString displayStr(bool withver=true) const;
91 
92  BufferString versionstr_;
93  };
94 
95  uiRetVal verifyEnvironment(const char* piname);
97  uiRetVal updateModuleInfo(const char* defprog="pip",
98  const char* defarg="list");
99  /*<! Pass nullptr to auto-detect */
100 
101  void updatePythonPath() const;
103  /*<! Merge of user environment with OpendTect
104  python modules */
105 
106  uiRetVal hasModule(const char* modname,
107  const char* minversion=0) const;
109  mDeprecated("Provide cmd and args")
110  bool openTerminal() const;
111  bool openTerminal(const char* cmd,
112  const BufferStringSet* args=nullptr,
113  const char* workdir=nullptr) const;
114  static void getPathToInternalEnv(FilePath&,bool userdef);
115  static void GetPythonEnvPath(FilePath&);
116  static void GetPythonEnvBinPath(FilePath&);
117 
118 
119  private:
120 
121  bool istested_ = false;
122  bool isusable_ = false;
123  FilePath* activatefp_ = nullptr;
124  BufferString virtenvnm_;
125  mutable PtrMan<OS::CommandLauncher> cl_;
126  mutable BufferString laststdout_;
127  mutable BufferString laststderr_;
128  mutable uiString msg_;
129  BufferString pythversion_;
130  static BufferStringSet pystartpath_;
131  ManagedObjectSet<ModuleInfo> moduleinfos_;
132 
133  bool isUsable_(bool force=false,
134  const char* scriptstr=nullptr,
135  const char* scriptexpectedout=nullptr);
136  static bool getInternalEnvironmentLocation(FilePath&,
137  bool userdef);
138  static FilePath getInternalEnvPath(bool userdef);
139  static bool getSortedVirtualEnvironmentLoc(
141  BufferStringSet& envnms,
142  const BufferString* envnm=nullptr,
143  const FilePath* extroot=nullptr);
144  static bool getCondaEnvsFromTxt( BufferStringSet& );
145  static bool getCondaEnvFromTxtPath( ObjectSet<FilePath>& );
146  bool isEnvUsable(const FilePath* pythonenvfp,
147  const char* envnm,
148  const char* scriptstr,
149  const char* scriptexpectedout);
150  static FilePath* getCommand(OS::MachineCommand&,
151  bool background,
152  const FilePath* activatefp,
153  const char* envnm);
154  static OS::CommandLauncher* getLauncher(const OS::MachineCommand&,
155  bool background,
156  const FilePath* activatefp,
157  const char* envnm,
158  FilePath& scriptfp);
159  static void getPIDFromFile(const char* pidfnm,int* pid);
160  bool doExecute(const OS::MachineCommand&,
161  const OS::CommandExecPars*,int* pid,
162  const FilePath* activatefp,
163  const char* envnm) const;
164  static FilePath* getActivateScript(const FilePath& root);
165  bool retrievePythonVersionStr();
166  void envChangeCB(CallBacker*);
167 
168  void createFireWallExeList(ManagedObjectSet<FilePath>&);
169 
170  friend class ::uiPythonSettings;
171  friend class ::ServiceMgrBase;
172 
173  public:
174 
175  static void initClass();
176  static void setPythonActivator(const char*);
177  static bool needCheckRunScript();
178 
179  void addBasePath(const FilePath&);
180  /*<! For plugins to update PYTHONPATH
181  during initialization */
182 
183  };
184 
186 
187  mGlobal(Basic) bool canDoCUDA(BufferString& maxverstr);
188 
189  mGlobal(Basic) uiRetVal pythonRemoveDir(const char* path,
190  bool waitforfin=false);
191 
192 } //namespace OD
193 
194 
OD::PythonAccess::execute
bool execute(const OS::MachineCommand &, const OS::CommandExecPars &, int *pid=nullptr, uiString *errmsg=nullptr) const
OD::PythonAccess::validInternalEnvironment
static bool validInternalEnvironment(const FilePath &)
NamedObject
object with a name.
Definition: namedobj.h:42
OD::PythA
PythonAccess & PythA()
OD::PythonAccess::execute
bool execute(const OS::MachineCommand &, bool wait4finish=true) const
OD::PythonSource
PythonSource
Definition: pythonaccess.h:34
OD::PythonAccess::getPacmanExecNm
BufferString getPacmanExecNm() const
OD::PythonAccess::lastOutput
BufferString lastOutput(bool stderrout, uiString *launchermsg) const
mGlobal
#define mGlobal(module)
Definition: commondefs.h:180
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
BufferStringSet
Set of BufferString objects.
Definition: bufstringset.h:26
OD
OpendTect.
Definition: commontypes.h:28
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
OD::PythonAccess::getModules
uiRetVal getModules(ManagedObjectSet< ModuleInfo > &)
FilePath
File pathname tools.
Definition: filepath.h:34
OD::PythonAccess::sKeyEnviron
static const char * sKeyEnviron()
mDeclareNameSpaceEnumUtils
#define mDeclareNameSpaceEnumUtils(mod, enm)
Definition: enums.h:273
uiRetVal
Definition: uistringset.h:105
OD::PythonAccess::execute
bool execute(const OS::MachineCommand &, BufferString &stdoutstr, BufferString *stderrstr, uiString *errmsg=nullptr) const
callback.h
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
OD::PythonAccess::updatePythonPath
void updatePythonPath() const
mODTextTranslationClass
#define mODTextTranslationClass(clss)
Definition: uistring.h:40
bufstring.h
OD::PythonAccess
Definition: pythonaccess.h:40
Timer
Timer class.
Definition: timer.h:25
ManagedObjectSet< ModuleInfo >
OS::CommandExecPars
Specifies how to execute a command.
Definition: oscommand.h:36
OD::PythonAccess::executeScript
bool executeScript(const BufferStringSet &, bool wait4finish=true) const
OD::PythonAccess::getDataType
static OD::DataRepType getDataType(const char *)
OD::PythonAccess::~PythonAccess
~PythonAccess()
OD::PythonAccess::sKeyUseExtPyPath
static BufferString sKeyUseExtPyPath()
Definition: pythonaccess.h:45
OD::System
@ System
Definition: pythonaccess.h:35
OD::PythonAccess::hasInternalEnvironment
static bool hasInternalEnvironment(bool allowuserdef=true)
OD::PythonAccess::sKeyPythonSrc
static const char * sKeyPythonSrc()
OD::Custom
@ Custom
Definition: pythonaccess.h:35
OD::PythonAccess::getBasePythonPath
const BufferStringSet & getBasePythonPath() const
OD::PythonAccess::envChange
Notifier< PythonAccess > envChange
Definition: pythonaccess.h:83
mDeprecated
#define mDeprecated(msg)
Definition: plfdefs.h:215
mStruct
#define mStruct(module)
Definition: commondefs.h:182
OD::PythonAccess::executeScript
bool executeScript(const char *, bool wait4finish=true) const
OD::PythonAccess::PythonAccess
PythonAccess()
PtrMan
Definition: ptrman.h:121
Notifier
Class to help setup a callback handling.
Definition: notify.h:126
OS
Definition: od_stream.h:23
OD::pythonRemoveDir
uiRetVal pythonRemoveDir(const char *path, bool waitforfin=false)
OD::PythonAccess::isUsable
uiRetVal isUsable(bool force=false, const char *scriptstr=nullptr, const char *scriptexpectedout=nullptr) const
OD::PythonAccess::getDataTypeStr
static BufferString getDataTypeStr(OD::DataRepType)
ServiceMgrBase
Base class for OpendTect Service Manager and external services/apps.
Definition: servicemgrbase.h:29
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
OD::canDoCUDA
bool canDoCUDA(BufferString &maxverstr)
OD::PythonAccess::pySummary
uiString pySummary() const
OD::PythonAccess::hasModule
uiRetVal hasModule(const char *modname, const char *minversion=0) const
OD::PythonAccess::verifyEnvironment
struct(Basic) ModuleInfo uiRetVal verifyEnvironment(const char *piname)
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
OD::DataRepType
DataRepType
Definition: commontypes.h:49
OD::Internal
@ Internal
Definition: pythonaccess.h:35
enums.h
OS::MachineCommand
Encapsulates an actual command to execute + the machine to run it on.
Definition: oscommand.h:94
OD::PythonAccess::pyVersion
BufferString pyVersion() const
initClass
static void initClass()
OD::PythonAccess::updateModuleInfo
uiRetVal updateModuleInfo(const char *defprog="pip", const char *defarg="list")
OD::PythonAccess::sPythonExecNm
static const char * sPythonExecNm(bool v3=false, bool v2=false)
private
#define private
Definition: winstreambuf.h:13
OD::PythonAccess::sKeyPythonPath
static const char * sKeyPythonPath()
OD::PythonAccess::isModuleUsable
bool isModuleUsable(const char *nm) const

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021