eric6/DebugClients/Python/ModuleLoader.py

changeset 7894
4370a8b30648
parent 7887
c1588f5a83e9
child 7911
4621c9082a43
equal deleted inserted replaced
7893:29d2c2e5b948 7894:4370a8b30648
108 patchQProcess(module, self.__dbgClient) 108 patchQProcess(module, self.__dbgClient)
109 109
110 self.__enableImportHooks = True 110 self.__enableImportHooks = True
111 return module 111 return module
112 112
113 if sys.version_info >= (3, 4): 113 def find_spec(self, fullname, path, target=None):
114 def find_spec(self, fullname, path, target=None): 114 """
115 """ 115 Public method returning the module spec.
116 Public method returning the module spec. 116
117 117 @param fullname name of the module to be loaded
118 @param fullname name of the module to be loaded 118 @type str
119 @type str 119 @param path path to resolve the module name
120 @param path path to resolve the module name 120 @type str
121 @type str 121 @param target module object to use for a more educated guess
122 @param target module object to use for a more educated guess 122 about what spec to return
123 about what spec to return 123 @type module
124 @type module 124 @return module spec object pointing to the module loader
125 @return module spec object pointing to the module loader 125 @rtype ModuleSpec
126 @rtype ModuleSpec 126 """
127 """ 127 if fullname in sys.modules or not self.__dbgClient.debugging:
128 if fullname in sys.modules or not self.__dbgClient.debugging:
129 return None
130
131 if (
132 fullname in self.__modulesToPatch and
133 self.__enableImportHooks
134 ):
135 # Disable hook to be able to import original module
136 self.__enableImportHooks = False
137 return importlib.machinery.ModuleSpec(fullname, self)
138
139 return None 128 return None
140 129
141 def create_module(self, spec): 130 if (
142 """ 131 fullname in self.__modulesToPatch and
143 Public method to create a module based on the passed in spec. 132 self.__enableImportHooks
144 133 ):
145 @param spec module spec object for loading the module 134 # Disable hook to be able to import original module
146 @type ModuleSpec 135 self.__enableImportHooks = False
147 @return created and patched module 136 return importlib.machinery.ModuleSpec(fullname, self)
148 @rtype module
149 """
150 return self.__loadModule(spec.name)
151 137
152 def exec_module(self, module): 138 return None
153 """
154 Public method to execute the created module.
155
156 @param module module to be executed
157 @type module
158 """
159 pass
160 139
161 else: 140 def create_module(self, spec):
162 def find_module(self, fullname, path=None): 141 """
163 """ 142 Public method to create a module based on the passed in spec.
164 Public method returning the module loader.
165
166 @param fullname name of the module to be loaded
167 @type str
168 @param path path to resolve the module name
169 @type str
170 @return module loader object
171 @rtype object
172 """
173 if fullname in sys.modules or not self.__dbgClient.debugging:
174 return None
175
176 if (
177 fullname in self.__modulesToPatch and
178 self.__enableImportHooks
179 ):
180 # Disable hook to be able to import original module
181 self.__enableImportHooks = False
182 return self
183
184 return None
185 143
186 def load_module(self, fullname): 144 @param spec module spec object for loading the module
187 """ 145 @type ModuleSpec
188 Public method to load a module. 146 @return created and patched module
189 147 @rtype module
190 @param fullname name of the module to be loaded 148 """
191 @type str 149 return self.__loadModule(spec.name)
192 @return reference to the loaded module 150
193 @rtype module 151 def exec_module(self, module):
194 """ 152 """
195 return self.__loadModule(fullname) 153 Public method to execute the created module.
154
155 @param module module to be executed
156 @type module
157 """
158 pass

eric ide

mercurial