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 |