FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
codeql/python/extractor/imp.py at codeql-cli/v2.25.1 · github/codeql · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
github
/
codeql
Public
Notifications
You must be signed in to change notification settings
Fork
2.1k
Star
10k
Code
Issues
997
Pull requests
459
Discussions
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
codeql
/
python
/
extractor
/
imp.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
351 lines (267 loc) · 10.4 KB
Breadcrumbs
codeql
/
python
/
extractor
/
imp.py
Copy path
File metadata and controls
351 lines (267 loc) · 10.4 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
"""This module provides the components needed to build your own __import__
function. Undocumented functions are obsolete.
In most cases it is preferred you consider using the importlib module's
functionality over this module.
This file was copied from `Lib/imp.py`, copyright PSF, with minor modifications made afterward.
"""
# (Probably) need to stay in _imp
from
_imp
import
(
lock_held
,
acquire_lock
,
release_lock
,
get_frozen_object
,
is_frozen_package
,
init_frozen
,
is_builtin
,
is_frozen
,
_fix_co_filename
)
try
:
from
_imp
import
create_dynamic
except
ImportError
:
# Platform doesn't support dynamic loading.
create_dynamic
=
None
from
importlib
.
_bootstrap
import
_exec
,
_load
,
_builtin_from_name
from
importlib
.
_bootstrap_external
import
SourcelessFileLoader
# In Python 3.14, `_ERR_MSG` was removed in favor of `_ERR_MSG_PREFIX`.
try
:
from
importlib
.
_bootstrap
import
_ERR_MSG
except
ImportError
:
from
importlib
.
_bootstrap
import
_ERR_MSG_PREFIX
_ERR_MSG
=
_ERR_MSG_PREFIX
+
'{!r}'
from
importlib
import
machinery
from
importlib
import
util
import
importlib
import
os
import
sys
import
tokenize
import
types
import
warnings
# DEPRECATED
SEARCH_ERROR
=
0
PY_SOURCE
=
1
PY_COMPILED
=
2
C_EXTENSION
=
3
PY_RESOURCE
=
4
PKG_DIRECTORY
=
5
C_BUILTIN
=
6
PY_FROZEN
=
7
PY_CODERESOURCE
=
8
IMP_HOOK
=
9
def
new_module
(
name
):
"""**DEPRECATED**
Create a new module.
The module is not entered into sys.modules.
"""
return
types
.
ModuleType
(
name
)
def
get_magic
():
"""**DEPRECATED**
Return the magic number for .pyc files.
"""
return
util
.
MAGIC_NUMBER
def
get_tag
():
"""Return the magic tag for .pyc files."""
return
sys
.
implementation
.
cache_tag
def
cache_from_source
(
path
,
debug_override
=
None
):
"""**DEPRECATED**
Given the path to a .py file, return the path to its .pyc file.
The .py file does not need to exist; this simply returns the path to the
.pyc file calculated as if the .py file were imported.
If debug_override is not None, then it must be a boolean and is used in
place of sys.flags.optimize.
If sys.implementation.cache_tag is None then NotImplementedError is raised.
"""
with
warnings
.
catch_warnings
():
warnings
.
simplefilter
(
'ignore'
)
return
util
.
cache_from_source
(
path
,
debug_override
)
def
source_from_cache
(
path
):
"""**DEPRECATED**
Given the path to a .pyc. file, return the path to its .py file.
The .pyc file does not need to exist; this simply returns the path to
the .py file calculated to correspond to the .pyc file. If path does
not conform to PEP 3147 format, ValueError will be raised. If
sys.implementation.cache_tag is None then NotImplementedError is raised.
"""
return
util
.
source_from_cache
(
path
)
def
get_suffixes
():
"""**DEPRECATED**"""
extensions
=
[(
s
,
'rb'
,
C_EXTENSION
)
for
s
in
machinery
.
EXTENSION_SUFFIXES
]
source
=
[(
s
,
'r'
,
PY_SOURCE
)
for
s
in
machinery
.
SOURCE_SUFFIXES
]
bytecode
=
[(
s
,
'rb'
,
PY_COMPILED
)
for
s
in
machinery
.
BYTECODE_SUFFIXES
]
return
extensions
+
source
+
bytecode
class
NullImporter
:
"""**DEPRECATED**
Null import object.
"""
def
__init__
(
self
,
path
):
if
path
==
''
:
raise
ImportError
(
'empty pathname'
,
path
=
''
)
elif
os
.
path
.
isdir
(
path
):
raise
ImportError
(
'existing directory'
,
path
=
path
)
def
find_module
(
self
,
fullname
):
"""Always returns None."""
return
None
class
_HackedGetData
:
"""Compatibility support for 'file' arguments of various load_*()
functions."""
def
__init__
(
self
,
fullname
,
path
,
file
=
None
):
super
().
__init__
(
fullname
,
path
)
self
.
file
=
file
def
get_data
(
self
,
path
):
"""Gross hack to contort loader to deal w/ load_*()'s bad API."""
if
self
.
file
and
path
==
self
.
path
:
# The contract of get_data() requires us to return bytes. Reopen the
# file in binary mode if needed.
if
not
self
.
file
.
closed
:
file
=
self
.
file
if
'b'
not
in
file
.
mode
:
file
.
close
()
if
self
.
file
.
closed
:
self
.
file
=
file
=
open
(
self
.
path
,
'rb'
)
with
file
:
return
file
.
read
()
else
:
return
super
().
get_data
(
path
)
class
_LoadSourceCompatibility
(
_HackedGetData
,
machinery
.
SourceFileLoader
):
"""Compatibility support for implementing load_source()."""
def
load_source
(
name
,
pathname
,
file
=
None
):
loader
=
_LoadSourceCompatibility
(
name
,
pathname
,
file
)
spec
=
util
.
spec_from_file_location
(
name
,
pathname
,
loader
=
loader
)
if
name
in
sys
.
modules
:
module
=
_exec
(
spec
,
sys
.
modules
[
name
])
else
:
module
=
_load
(
spec
)
# To allow reloading to potentially work, use a non-hacked loader which
# won't rely on a now-closed file object.
module
.
__loader__
=
machinery
.
SourceFileLoader
(
name
,
pathname
)
module
.
__spec__
.
loader
=
module
.
__loader__
return
module
class
_LoadCompiledCompatibility
(
_HackedGetData
,
SourcelessFileLoader
):
"""Compatibility support for implementing load_compiled()."""
def
load_compiled
(
name
,
pathname
,
file
=
None
):
"""**DEPRECATED**"""
loader
=
_LoadCompiledCompatibility
(
name
,
pathname
,
file
)
spec
=
util
.
spec_from_file_location
(
name
,
pathname
,
loader
=
loader
)
if
name
in
sys
.
modules
:
module
=
_exec
(
spec
,
sys
.
modules
[
name
])
else
:
module
=
_load
(
spec
)
# To allow reloading to potentially work, use a non-hacked loader which
# won't rely on a now-closed file object.
module
.
__loader__
=
SourcelessFileLoader
(
name
,
pathname
)
module
.
__spec__
.
loader
=
module
.
__loader__
return
module
def
load_package
(
name
,
path
):
"""**DEPRECATED**"""
if
os
.
path
.
isdir
(
path
):
extensions
=
(
machinery
.
SOURCE_SUFFIXES
[:]
+
machinery
.
BYTECODE_SUFFIXES
[:])
for
extension
in
extensions
:
init_path
=
os
.
path
.
join
(
path
,
'__init__'
+
extension
)
if
os
.
path
.
exists
(
init_path
):
path
=
init_path
break
else
:
raise
ValueError
(
'{!r} is not a package'
.
format
(
path
))
spec
=
util
.
spec_from_file_location
(
name
,
path
,
submodule_search_locations
=
[])
if
name
in
sys
.
modules
:
return
_exec
(
spec
,
sys
.
modules
[
name
])
else
:
return
_load
(
spec
)
def
load_module
(
name
,
file
,
filename
,
details
):
"""**DEPRECATED**
Load a module, given information returned by find_module().
The module name must include the full package name, if any.
"""
suffix
,
mode
,
type_
=
details
if
mode
and
(
not
mode
.
startswith
((
'r'
,
'U'
))
or
'+'
in
mode
):
raise
ValueError
(
'invalid file open mode {!r}'
.
format
(
mode
))
elif
file
is
None
and
type_
in
{
PY_SOURCE
,
PY_COMPILED
}:
msg
=
'file object required for import (type code {})'
.
format
(
type_
)
raise
ValueError
(
msg
)
elif
type_
==
PY_SOURCE
:
return
load_source
(
name
,
filename
,
file
)
elif
type_
==
PY_COMPILED
:
return
load_compiled
(
name
,
filename
,
file
)
elif
type_
==
C_EXTENSION
and
load_dynamic
is
not
None
:
if
file
is
None
:
with
open
(
filename
,
'rb'
)
as
opened_file
:
return
load_dynamic
(
name
,
filename
,
opened_file
)
else
:
return
load_dynamic
(
name
,
filename
,
file
)
elif
type_
==
PKG_DIRECTORY
:
return
load_package
(
name
,
filename
)
elif
type_
==
C_BUILTIN
:
return
init_builtin
(
name
)
elif
type_
==
PY_FROZEN
:
return
init_frozen
(
name
)
else
:
msg
=
"Don't know how to import {} (type code {})"
.
format
(
name
,
type_
)
raise
ImportError
(
msg
,
name
=
name
)
def
find_module
(
name
,
path
=
None
):
"""**DEPRECATED**
Search for a module.
If path is omitted or None, search for a built-in, frozen or special
module and continue search in sys.path. The module name cannot
contain '.'; to search for a submodule of a package, pass the
submodule name and the package's __path__.
"""
if
not
isinstance
(
name
,
str
):
raise
TypeError
(
"'name' must be a str, not {}"
.
format
(
type
(
name
)))
elif
not
isinstance
(
path
, (
type
(
None
),
list
)):
# Backwards-compatibility
raise
RuntimeError
(
"'path' must be None or a list, "
"not {}"
.
format
(
type
(
path
)))
if
path
is
None
:
if
is_builtin
(
name
):
return
None
,
None
, (
''
,
''
,
C_BUILTIN
)
elif
is_frozen
(
name
):
return
None
,
None
, (
''
,
''
,
PY_FROZEN
)
else
:
path
=
sys
.
path
for
entry
in
path
:
package_directory
=
os
.
path
.
join
(
entry
,
name
)
for
suffix
in
[
'.py'
,
machinery
.
BYTECODE_SUFFIXES
[
0
]]:
package_file_name
=
'__init__'
+
suffix
file_path
=
os
.
path
.
join
(
package_directory
,
package_file_name
)
if
os
.
path
.
isfile
(
file_path
):
return
None
,
package_directory
, (
''
,
''
,
PKG_DIRECTORY
)
for
suffix
,
mode
,
type_
in
get_suffixes
():
file_name
=
name
+
suffix
file_path
=
os
.
path
.
join
(
entry
,
file_name
)
if
os
.
path
.
isfile
(
file_path
):
break
else
:
continue
break
# Break out of outer loop when breaking out of inner loop.
else
:
raise
ImportError
(
_ERR_MSG
.
format
(
name
),
name
=
name
)
encoding
=
None
if
'b'
not
in
mode
:
with
open
(
file_path
,
'rb'
)
as
file
:
encoding
=
tokenize
.
detect_encoding
(
file
.
readline
)[
0
]
file
=
open
(
file_path
,
mode
,
encoding
=
encoding
)
return
file
,
file_path
, (
suffix
,
mode
,
type_
)
def
reload
(
module
):
"""**DEPRECATED**
Reload the module and return it.
The module must have been successfully imported before.
"""
return
importlib
.
reload
(
module
)
def
init_builtin
(
name
):
"""**DEPRECATED**
Load and return a built-in module by name, or None is such module doesn't
exist
"""
try
:
return
_builtin_from_name
(
name
)
except
ImportError
:
return
None
if
create_dynamic
:
def
load_dynamic
(
name
,
path
,
file
=
None
):
"""**DEPRECATED**
Load an extension module.
"""
import
importlib
.
machinery
loader
=
importlib
.
machinery
.
ExtensionFileLoader
(
name
,
path
)
# Issue #24748: Skip the sys.modules check in _load_module_shim;
# always load new extension
spec
=
importlib
.
machinery
.
ModuleSpec
(
name
=
name
,
loader
=
loader
,
origin
=
path
)
return
_load
(
spec
)
else
:
load_dynamic
=
None
Back
|
FazBrowse Home
|
New Git URL