Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
- Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +18 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +400 -0
- nuitka/MainControl.py +200 -112
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +368 -175
- nuitka/Options.py +632 -213
- nuitka/OutputDirectories.py +40 -21
- nuitka/PostProcessing.py +73 -50
- nuitka/Progress.py +58 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +106 -19
- nuitka/Serialization.py +68 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +108 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +21 -7
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +202 -140
- nuitka/build/CCompilerVersion.scons +39 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +50 -54
- nuitka/build/SconsCaching.py +93 -90
- nuitka/build/SconsCompilerSettings.py +157 -69
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +154 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +147 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +105 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +18 -18
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +18 -18
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +91 -53
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +29 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +593 -190
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -18
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +32 -20
- nuitka/build/include/nuitka/helper/iterators.h +17 -17
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +29 -17
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +38 -20
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +128 -46
- nuitka/build/include/nuitka/printing.h +22 -17
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +32 -33
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +27 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
- nuitka/build/static_src/CompiledCellType.c +63 -40
- nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
- nuitka/build/static_src/CompiledCoroutineType.c +196 -203
- nuitka/build/static_src/CompiledFrameType.c +287 -133
- nuitka/build/static_src/CompiledFunctionType.c +389 -95
- nuitka/build/static_src/CompiledGeneratorType.c +376 -252
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
- nuitka/build/static_src/CompiledMethodType.c +83 -71
- nuitka/build/static_src/HelpersAllocator.c +88 -19
- nuitka/build/static_src/HelpersAttributes.c +33 -54
- nuitka/build/static_src/HelpersBuiltin.c +43 -33
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +33 -30
- nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonEq.c +518 -492
- nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
- nuitka/build/static_src/HelpersComparisonGe.c +513 -497
- nuitka/build/static_src/HelpersComparisonGt.c +512 -496
- nuitka/build/static_src/HelpersComparisonLe.c +513 -497
- nuitka/build/static_src/HelpersComparisonLt.c +512 -496
- nuitka/build/static_src/HelpersComparisonNe.c +520 -492
- nuitka/build/static_src/HelpersConsole.c +96 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +51 -29
- nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +161 -50
- nuitka/build/static_src/HelpersFiles.c +37 -17
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +48 -20
- nuitka/build/static_src/HelpersImportHard.c +53 -17
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +140 -50
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
- nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
- nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
- nuitka/build/static_src/HelpersProfiling.c +24 -23
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +88 -20
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +234 -37
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +68 -23
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +359 -263
- nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
- nuitka/build/static_src/OnefileBootstrap.c +276 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +19 -17
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +20 -17
- nuitka/code_generation/CallCodes.py +19 -17
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +48 -27
- nuitka/code_generation/CodeHelperSelection.py +19 -17
- nuitka/code_generation/CodeHelpers.py +24 -20
- nuitka/code_generation/CodeObjectCodes.py +34 -24
- nuitka/code_generation/ComparisonCodes.py +38 -20
- nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +152 -26
- nuitka/code_generation/CoroutineCodes.py +19 -17
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +25 -23
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +27 -33
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +27 -18
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +24 -20
- nuitka/code_generation/FunctionCodes.py +24 -21
- nuitka/code_generation/GeneratorCodes.py +23 -20
- nuitka/code_generation/GlobalConstants.py +43 -23
- nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +19 -17
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +19 -17
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +43 -25
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +29 -31
- nuitka/code_generation/PackageResourceCodes.py +59 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +19 -17
- nuitka/code_generation/Reports.py +19 -17
- nuitka/code_generation/ReturnCodes.py +19 -17
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +19 -17
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +71 -0
- nuitka/code_generation/VariableCodes.py +26 -22
- nuitka/code_generation/VariableDeclarations.py +20 -17
- nuitka/code_generation/YieldCodes.py +22 -20
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +19 -17
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
- nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
- nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
- nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +19 -18
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +19 -18
- nuitka/distutils/DistutilCommands.py +34 -23
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +20 -17
- nuitka/finalizations/FinalizeMarkups.py +21 -41
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +48 -28
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +147 -57
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +29 -21
- nuitka/freezer/ImportDetection.py +20 -17
- nuitka/freezer/IncludedDataFiles.py +118 -47
- nuitka/freezer/IncludedEntryPoints.py +102 -38
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +105 -50
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +286 -92
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +131 -47
- nuitka/importing/StandardLibrary.py +46 -28
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +19 -17
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +24 -20
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +68 -19
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1250 -302
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +21 -23
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +19 -17
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +29 -17
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +54 -32
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +19 -17
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +81 -35
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +21 -19
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +545 -129
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +436 -446
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +45 -43
- nuitka/nodes/NodeMakingHelpers.py +21 -19
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +20 -17
- nuitka/nodes/OsSysNodes.py +66 -18
- nuitka/nodes/OutlineNodes.py +22 -20
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -77
- nuitka/nodes/StatementNodes.py +19 -17
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +26 -24
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +40 -17
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +40 -17
- nuitka/nodes/shapes/StandardShapes.py +27 -20
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +19 -17
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +610 -109
- nuitka/plugins/Plugins.py +241 -58
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +407 -46
- nuitka/plugins/standard/KivyPlugin.py +30 -17
- nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +103 -53
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +94 -30
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
- nuitka/reports/CompilationReportReader.py +67 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +352 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +30 -20
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +67 -22
- nuitka/specs/ParameterSpecs.py +56 -41
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +19 -21
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +93 -71
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +31 -27
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +106 -52
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
- nuitka/tools/watch/AutoStage.py +144 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +176 -147
- nuitka/tree/ComplexCallHelperFunctions.py +80 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +20 -17
- nuitka/tree/ReformulationAssignmentStatements.py +92 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +146 -98
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +40 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +58 -54
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +244 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +21 -19
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +84 -19
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +73 -34
- nuitka/utils/FileOperations.py +318 -74
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +118 -24
- nuitka/utils/InstalledPythons.py +80 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +19 -17
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +115 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/top_level.txt +0 -0
nuitka/nodes/ImportNodes.py
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
# Copyright
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# integrates with CPython, but also works on its own.
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
1
|
+
# Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
18
4
|
""" Nodes related to importing modules or names.
|
|
19
5
|
|
|
20
6
|
Normally imports are mostly relatively static, but Nuitka also attempts to
|
|
@@ -26,43 +12,56 @@ deeper that what it normally could. The import expression node can lead to
|
|
|
26
12
|
modules being added. After optimization it will be asked about used modules.
|
|
27
13
|
"""
|
|
28
14
|
|
|
29
|
-
import os
|
|
30
15
|
import sys
|
|
31
16
|
|
|
32
17
|
from nuitka.__past__ import long, unicode, xrange
|
|
33
18
|
from nuitka.code_generation.Reports import onMissingTrust
|
|
19
|
+
from nuitka.HardImportRegistry import (
|
|
20
|
+
addModuleSingleAttributeNodeFactory,
|
|
21
|
+
hard_modules_aliases,
|
|
22
|
+
hard_modules_limited,
|
|
23
|
+
hard_modules_non_stdlib,
|
|
24
|
+
hard_modules_stdlib,
|
|
25
|
+
hard_modules_trust,
|
|
26
|
+
isHardModule,
|
|
27
|
+
isHardModuleWithoutSideEffect,
|
|
28
|
+
trust_constant,
|
|
29
|
+
trust_importable,
|
|
30
|
+
trust_may_exist,
|
|
31
|
+
trust_node,
|
|
32
|
+
trust_node_factory,
|
|
33
|
+
trust_undefined,
|
|
34
|
+
)
|
|
34
35
|
from nuitka.importing.Importing import (
|
|
36
|
+
isNonRaisingBuiltinModule,
|
|
35
37
|
isPackageDir,
|
|
36
38
|
locateModule,
|
|
37
39
|
makeModuleUsageAttempt,
|
|
40
|
+
makeParentModuleUsagesAttempts,
|
|
38
41
|
)
|
|
39
42
|
from nuitka.importing.ImportResolving import resolveModuleName
|
|
40
43
|
from nuitka.importing.Recursion import decideRecursion
|
|
41
44
|
from nuitka.importing.StandardLibrary import isStandardLibraryPath
|
|
42
45
|
from nuitka.Options import (
|
|
46
|
+
isExperimental,
|
|
43
47
|
isStandaloneMode,
|
|
44
48
|
shallMakeModule,
|
|
45
49
|
shallWarnUnusualCode,
|
|
46
50
|
)
|
|
47
|
-
from nuitka.
|
|
48
|
-
|
|
49
|
-
getImportlibSubPackages,
|
|
50
|
-
python_version,
|
|
51
|
-
)
|
|
51
|
+
from nuitka.plugins.Plugins import Plugins
|
|
52
|
+
from nuitka.PythonVersions import python_version
|
|
52
53
|
from nuitka.specs.BuiltinParameterSpecs import (
|
|
53
54
|
BuiltinParameterSpec,
|
|
54
55
|
extractBuiltinArgs,
|
|
55
56
|
)
|
|
56
57
|
from nuitka.Tracing import unusual_logger
|
|
57
58
|
from nuitka.utils.ModuleNames import ModuleName
|
|
58
|
-
from nuitka.utils.Utils import isWin32Windows
|
|
59
59
|
|
|
60
60
|
from .ChildrenHavingMixins import (
|
|
61
61
|
ChildHavingModuleMixin,
|
|
62
62
|
ChildrenExpressionBuiltinImportMixin,
|
|
63
63
|
ChildrenExpressionImportlibImportModuleCallMixin,
|
|
64
64
|
)
|
|
65
|
-
from .ConstantRefNodes import ExpressionConstantSysVersionInfoRef
|
|
66
65
|
from .ExpressionBases import ExpressionBase
|
|
67
66
|
from .ImportHardNodes import (
|
|
68
67
|
ExpressionImportHardBase,
|
|
@@ -79,270 +78,6 @@ from .NodeMakingHelpers import (
|
|
|
79
78
|
from .shapes.BuiltinTypeShapes import tshape_module, tshape_module_builtin
|
|
80
79
|
from .StatementBasesGenerated import StatementImportStarBase
|
|
81
80
|
|
|
82
|
-
# These module are supported in code generation to be imported the hard way.
|
|
83
|
-
hard_modules = frozenset(
|
|
84
|
-
(
|
|
85
|
-
"os",
|
|
86
|
-
"ntpath",
|
|
87
|
-
"posixpath",
|
|
88
|
-
# TODO: Add mac path package too
|
|
89
|
-
"sys",
|
|
90
|
-
"types",
|
|
91
|
-
"typing",
|
|
92
|
-
"__future__",
|
|
93
|
-
"importlib",
|
|
94
|
-
"importlib.resources",
|
|
95
|
-
"importlib.metadata",
|
|
96
|
-
"_frozen_importlib",
|
|
97
|
-
"_frozen_importlib_external",
|
|
98
|
-
"pkgutil",
|
|
99
|
-
"functools",
|
|
100
|
-
"sysconfig",
|
|
101
|
-
"unittest",
|
|
102
|
-
"unittest.mock",
|
|
103
|
-
# "cStringIO",
|
|
104
|
-
"io",
|
|
105
|
-
"_io",
|
|
106
|
-
"ctypes",
|
|
107
|
-
"ctypes.wintypes",
|
|
108
|
-
"ctypes.macholib",
|
|
109
|
-
# TODO: Once generation of nodes for functions exists.
|
|
110
|
-
# "platform",
|
|
111
|
-
)
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
hard_modules_aliases = {
|
|
115
|
-
"os.path": os.path.__name__,
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
# Lets put here, hard modules that are kind of backports only.
|
|
119
|
-
hard_modules_stdlib = hard_modules
|
|
120
|
-
hard_modules_non_stdlib = frozenset(
|
|
121
|
-
(
|
|
122
|
-
"site",
|
|
123
|
-
"pkg_resources",
|
|
124
|
-
"importlib_metadata",
|
|
125
|
-
"importlib_resources",
|
|
126
|
-
)
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
hard_modules = hard_modules | hard_modules_non_stdlib
|
|
130
|
-
|
|
131
|
-
hard_modules_version = {
|
|
132
|
-
"cStringIO": (None, 0x300, None),
|
|
133
|
-
"typing": (0x350, None, None),
|
|
134
|
-
"_frozen_importlib": (0x300, None, None),
|
|
135
|
-
"_frozen_importlib_external": (0x350, None, None),
|
|
136
|
-
"importlib.resources": (0x370, None, None),
|
|
137
|
-
"importlib.metadata": (0x380, None, None),
|
|
138
|
-
"ctypes.wintypes": (None, None, "win32"),
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
hard_modules_limited = ("importlib.metadata", "ctypes.wintypes", "importlib_metadata")
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
def isHardModule(module_name):
|
|
145
|
-
if module_name not in hard_modules:
|
|
146
|
-
return False
|
|
147
|
-
|
|
148
|
-
min_version, max_version, os_limit = hard_modules_version.get(
|
|
149
|
-
module_name, (None, None, None)
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
if min_version is not None and python_version < min_version:
|
|
153
|
-
return False
|
|
154
|
-
|
|
155
|
-
if max_version is not None and python_version >= max_version:
|
|
156
|
-
return False
|
|
157
|
-
|
|
158
|
-
if os_limit is not None:
|
|
159
|
-
if os_limit == "win32":
|
|
160
|
-
return isWin32Windows()
|
|
161
|
-
|
|
162
|
-
return True
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
trust_undefined = 0
|
|
166
|
-
trust_constant = 1
|
|
167
|
-
trust_exist = 2
|
|
168
|
-
trust_future = trust_exist
|
|
169
|
-
trust_importable = 3
|
|
170
|
-
trust_node = 4
|
|
171
|
-
trust_may_exist = 5
|
|
172
|
-
trust_not_exist = 6
|
|
173
|
-
trust_node_factory = {}
|
|
174
|
-
|
|
175
|
-
module_importlib_trust = dict(
|
|
176
|
-
(key, trust_importable) for key in getImportlibSubPackages()
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
if "metadata" not in module_importlib_trust:
|
|
180
|
-
module_importlib_trust["metadata"] = trust_undefined
|
|
181
|
-
if "resources" not in module_importlib_trust:
|
|
182
|
-
module_importlib_trust["resources"] = trust_undefined
|
|
183
|
-
|
|
184
|
-
module_sys_trust = {
|
|
185
|
-
"version": trust_constant,
|
|
186
|
-
"hexversion": trust_constant,
|
|
187
|
-
"platform": trust_constant,
|
|
188
|
-
"maxsize": trust_constant,
|
|
189
|
-
"byteorder": trust_constant,
|
|
190
|
-
"builtin_module_names": trust_constant,
|
|
191
|
-
"stdout": trust_exist,
|
|
192
|
-
"stderr": trust_exist,
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
if python_version < 0x270:
|
|
196
|
-
module_sys_trust["version_info"] = trust_constant
|
|
197
|
-
else:
|
|
198
|
-
module_sys_trust["version_info"] = trust_node
|
|
199
|
-
trust_node_factory[("sys", "version_info")] = ExpressionConstantSysVersionInfoRef
|
|
200
|
-
|
|
201
|
-
if python_version < 0x300:
|
|
202
|
-
module_sys_trust["exc_type"] = trust_may_exist
|
|
203
|
-
module_sys_trust["exc_value"] = trust_may_exist
|
|
204
|
-
module_sys_trust["exc_traceback"] = trust_may_exist
|
|
205
|
-
|
|
206
|
-
module_sys_trust["maxint"] = trust_constant
|
|
207
|
-
module_sys_trust["subversion"] = trust_constant
|
|
208
|
-
else:
|
|
209
|
-
module_sys_trust["exc_type"] = trust_not_exist
|
|
210
|
-
module_sys_trust["exc_value"] = trust_not_exist
|
|
211
|
-
module_sys_trust["exc_traceback"] = trust_not_exist
|
|
212
|
-
|
|
213
|
-
module_typing_trust = {
|
|
214
|
-
"TYPE_CHECKING": trust_constant,
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
module_os_trust = {
|
|
218
|
-
"name": trust_constant,
|
|
219
|
-
"listdir": trust_node,
|
|
220
|
-
"curdir": trust_constant,
|
|
221
|
-
"pardir": trust_constant,
|
|
222
|
-
"sep": trust_constant,
|
|
223
|
-
"extsep": trust_constant,
|
|
224
|
-
"altsep": trust_constant,
|
|
225
|
-
"pathsep": trust_constant,
|
|
226
|
-
"linesep": trust_constant,
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
module_os_path_trust = {
|
|
230
|
-
"exists": trust_node,
|
|
231
|
-
"isfile": trust_node,
|
|
232
|
-
"isdir": trust_node,
|
|
233
|
-
"basename": trust_node,
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
module_ctypes_trust = {
|
|
238
|
-
"CDLL": trust_node,
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
# module_platform_trust = {"python_implementation": trust_function}
|
|
242
|
-
|
|
243
|
-
hard_modules_trust = {
|
|
244
|
-
"os": module_os_trust,
|
|
245
|
-
"ntpath": module_os_path_trust if os.path.__name__ == "ntpath" else {},
|
|
246
|
-
"posixpath": module_os_path_trust if os.path.__name__ == "posixpath" else {},
|
|
247
|
-
"sys": module_sys_trust,
|
|
248
|
-
# "platform": module_platform_trust,
|
|
249
|
-
"types": {},
|
|
250
|
-
"typing": module_typing_trust,
|
|
251
|
-
"__future__": dict((key, trust_future) for key in getFutureModuleKeys()),
|
|
252
|
-
"importlib": module_importlib_trust,
|
|
253
|
-
"importlib.metadata": {
|
|
254
|
-
"version": trust_node,
|
|
255
|
-
"distribution": trust_node,
|
|
256
|
-
"metadata": trust_node,
|
|
257
|
-
"entry_points": trust_node,
|
|
258
|
-
"PackageNotFoundError": trust_exist,
|
|
259
|
-
},
|
|
260
|
-
"importlib_metadata": {
|
|
261
|
-
"version": trust_node,
|
|
262
|
-
"distribution": trust_node,
|
|
263
|
-
"metadata": trust_node,
|
|
264
|
-
"entry_points": trust_node,
|
|
265
|
-
"PackageNotFoundError": trust_exist,
|
|
266
|
-
},
|
|
267
|
-
"_frozen_importlib": {},
|
|
268
|
-
"_frozen_importlib_external": {},
|
|
269
|
-
"pkgutil": {"get_data": trust_node},
|
|
270
|
-
"functools": {"partial": trust_exist},
|
|
271
|
-
"sysconfig": {},
|
|
272
|
-
# TODO: We should have trust_module too.
|
|
273
|
-
"unittest": {"mock": trust_exist},
|
|
274
|
-
"unittest.mock": {},
|
|
275
|
-
"io": {"BytesIO": trust_exist, "StringIO": trust_exist},
|
|
276
|
-
"_io": {"BytesIO": trust_exist, "StringIO": trust_exist},
|
|
277
|
-
# "cStringIO": {"StringIO": trust_exist},
|
|
278
|
-
"pkg_resources": {
|
|
279
|
-
"require": trust_node,
|
|
280
|
-
"get_distribution": trust_node,
|
|
281
|
-
"iter_entry_points": trust_node,
|
|
282
|
-
"resource_string": trust_node,
|
|
283
|
-
"resource_stream": trust_node,
|
|
284
|
-
},
|
|
285
|
-
"importlib.resources": {
|
|
286
|
-
"read_binary": trust_node,
|
|
287
|
-
"read_text": trust_node,
|
|
288
|
-
"files": trust_node,
|
|
289
|
-
},
|
|
290
|
-
"importlib_resources": {
|
|
291
|
-
"read_binary": trust_node,
|
|
292
|
-
"read_text": trust_node,
|
|
293
|
-
"files": trust_node,
|
|
294
|
-
},
|
|
295
|
-
"ctypes": module_ctypes_trust,
|
|
296
|
-
"site": {},
|
|
297
|
-
"ctypes.wintypes": {},
|
|
298
|
-
"ctypes.macholib": {},
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
def _addHardImportNodeClasses():
|
|
303
|
-
from .HardImportNodesGenerated import hard_import_node_classes
|
|
304
|
-
|
|
305
|
-
for hard_import_node_class, spec in hard_import_node_classes.items():
|
|
306
|
-
module_name, function_name = spec.name.rsplit(".", 1)
|
|
307
|
-
|
|
308
|
-
if module_name in hard_modules_aliases:
|
|
309
|
-
module_name = hard_modules_aliases.get(module_name)
|
|
310
|
-
|
|
311
|
-
trust_node_factory[(module_name, function_name)] = hard_import_node_class
|
|
312
|
-
|
|
313
|
-
# hard_modules_trust[module_name][function_name] = trust_node
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
_addHardImportNodeClasses()
|
|
317
|
-
|
|
318
|
-
# Remove this one again, not available on Windows, but the node generation does
|
|
319
|
-
# not know that.
|
|
320
|
-
if isWin32Windows():
|
|
321
|
-
module_os_trust["uname"] = trust_not_exist
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
def _checkHardModules():
|
|
325
|
-
for module_name in hard_modules:
|
|
326
|
-
assert module_name in hard_modules_trust, module_name
|
|
327
|
-
|
|
328
|
-
for module_name, trust in hard_modules_trust.items():
|
|
329
|
-
assert module_name in hard_modules, module_name
|
|
330
|
-
|
|
331
|
-
for attribute_name, trust_value in trust.items():
|
|
332
|
-
if trust_value is trust_node:
|
|
333
|
-
assert (
|
|
334
|
-
module_name,
|
|
335
|
-
attribute_name,
|
|
336
|
-
) in trust_node_factory or os.path.basename(sys.argv[0]).startswith(
|
|
337
|
-
"generate-"
|
|
338
|
-
), (
|
|
339
|
-
module_name,
|
|
340
|
-
attribute_name,
|
|
341
|
-
)
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
_checkHardModules()
|
|
345
|
-
|
|
346
81
|
|
|
347
82
|
def makeExpressionImportModuleNameHard(
|
|
348
83
|
module_name, import_name, module_guaranteed, source_ref
|
|
@@ -363,25 +98,13 @@ def makeExpressionImportModuleNameHard(
|
|
|
363
98
|
)
|
|
364
99
|
|
|
365
100
|
|
|
366
|
-
# These modules can cause issues if imported during compile time.
|
|
367
|
-
hard_modules_trust_with_side_effects = set(["site"])
|
|
368
|
-
if not isWin32Windows():
|
|
369
|
-
# Crashing on anything but Windows.
|
|
370
|
-
hard_modules_trust_with_side_effects.add("ctypes.wintypes")
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
def isHardModuleWithoutSideEffect(module_name):
|
|
374
|
-
return (
|
|
375
|
-
module_name in hard_modules
|
|
376
|
-
and module_name not in hard_modules_trust_with_side_effects
|
|
377
|
-
)
|
|
378
|
-
|
|
379
|
-
|
|
380
101
|
class ExpressionImportAllowanceMixin(object):
|
|
381
102
|
# Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
|
|
382
103
|
__slots__ = ()
|
|
383
104
|
|
|
384
|
-
def __init__(self):
|
|
105
|
+
def __init__(self, using_module_name):
|
|
106
|
+
self.using_module_name = using_module_name
|
|
107
|
+
|
|
385
108
|
if self.finding == "not-found":
|
|
386
109
|
self.allowed = False
|
|
387
110
|
elif self.finding == "built-in":
|
|
@@ -390,7 +113,7 @@ class ExpressionImportAllowanceMixin(object):
|
|
|
390
113
|
self.allowed = True
|
|
391
114
|
else:
|
|
392
115
|
self.allowed, _reason = decideRecursion(
|
|
393
|
-
using_module_name=
|
|
116
|
+
using_module_name=self.using_module_name,
|
|
394
117
|
module_filename=self.module_filename,
|
|
395
118
|
module_name=self.module_name,
|
|
396
119
|
module_kind=self.module_kind,
|
|
@@ -413,17 +136,19 @@ class ExpressionImportModuleFixed(ExpressionBase):
|
|
|
413
136
|
|
|
414
137
|
__slots__ = (
|
|
415
138
|
"module_name",
|
|
139
|
+
"value_name",
|
|
416
140
|
"found_module_name",
|
|
417
141
|
"found_module_filename",
|
|
418
142
|
"module_kind",
|
|
419
143
|
"finding",
|
|
420
|
-
"
|
|
144
|
+
"module_usages",
|
|
421
145
|
)
|
|
422
146
|
|
|
423
|
-
def __init__(self, module_name, source_ref):
|
|
147
|
+
def __init__(self, module_name, value_name, source_ref):
|
|
424
148
|
ExpressionBase.__init__(self, source_ref)
|
|
425
149
|
|
|
426
150
|
self.module_name = ModuleName(module_name)
|
|
151
|
+
self.value_name = ModuleName(value_name)
|
|
427
152
|
|
|
428
153
|
self.finding = None
|
|
429
154
|
|
|
@@ -435,6 +160,18 @@ class ExpressionImportModuleFixed(ExpressionBase):
|
|
|
435
160
|
self.finding,
|
|
436
161
|
) = self._attemptFollow()
|
|
437
162
|
|
|
163
|
+
self.module_usages = makeParentModuleUsagesAttempts(
|
|
164
|
+
makeModuleUsageAttempt(
|
|
165
|
+
module_name=self.found_module_name,
|
|
166
|
+
filename=self.found_module_filename,
|
|
167
|
+
finding=self.finding,
|
|
168
|
+
module_kind=self.module_kind,
|
|
169
|
+
level=0,
|
|
170
|
+
source_ref=self.source_ref,
|
|
171
|
+
reason="import",
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
|
|
438
175
|
# TODO: This is called in constructor only, is it, then inline it.
|
|
439
176
|
def _attemptFollow(self):
|
|
440
177
|
found_module_name, found_module_filename, module_kind, finding = locateModule(
|
|
@@ -470,11 +207,14 @@ class ExpressionImportModuleFixed(ExpressionBase):
|
|
|
470
207
|
del self.parent
|
|
471
208
|
|
|
472
209
|
def getDetails(self):
|
|
473
|
-
return {"module_name": self.module_name}
|
|
210
|
+
return {"module_name": self.module_name, "value_name": self.value_name}
|
|
474
211
|
|
|
475
212
|
def getModuleName(self):
|
|
476
213
|
return self.module_name
|
|
477
214
|
|
|
215
|
+
def getValueName(self):
|
|
216
|
+
return self.value_name
|
|
217
|
+
|
|
478
218
|
@staticmethod
|
|
479
219
|
def mayHaveSideEffects():
|
|
480
220
|
# TODO: For included modules, we might be able to tell, not not done now.
|
|
@@ -486,28 +226,119 @@ class ExpressionImportModuleFixed(ExpressionBase):
|
|
|
486
226
|
return True
|
|
487
227
|
|
|
488
228
|
def getTypeShape(self):
|
|
229
|
+
# TODO: This ought to be dead code, built-in modules have their own nodes now
|
|
230
|
+
# and may only be hard imports, but not this.
|
|
489
231
|
if self.module_name in sys.builtin_module_names:
|
|
490
232
|
return tshape_module_builtin
|
|
491
233
|
else:
|
|
492
234
|
return tshape_module
|
|
493
235
|
|
|
494
|
-
def
|
|
495
|
-
return
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
236
|
+
def getModuleUsageAttempts(self):
|
|
237
|
+
return self.module_usages
|
|
238
|
+
|
|
239
|
+
def computeExpressionRaw(self, trace_collection):
|
|
240
|
+
if self.mayRaiseException(BaseException):
|
|
241
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
242
|
+
|
|
243
|
+
# Trace the module usage attempt.
|
|
244
|
+
trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
|
|
245
|
+
|
|
246
|
+
# Nothing to do about it.
|
|
247
|
+
return self, None, None
|
|
248
|
+
|
|
249
|
+
def computeExpressionImportName(self, import_node, import_name, trace_collection):
|
|
250
|
+
# TODO: For include modules, something might be possible here, consider self.allowance
|
|
251
|
+
# when that is implemented.
|
|
252
|
+
return self.computeExpressionAttribute(
|
|
253
|
+
lookup_node=import_node,
|
|
254
|
+
attribute_name=import_name,
|
|
255
|
+
trace_collection=trace_collection,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class ExpressionImportModuleBuiltin(ExpressionBase):
|
|
260
|
+
"""Hard coded import names, that we know to exist."
|
|
261
|
+
|
|
262
|
+
These created as result of builtin imports and "importlib.import_module" calls
|
|
263
|
+
that were compile time resolved, and for known module names.
|
|
264
|
+
"""
|
|
265
|
+
|
|
266
|
+
kind = "EXPRESSION_IMPORT_MODULE_BUILTIN"
|
|
267
|
+
|
|
268
|
+
__slots__ = (
|
|
269
|
+
"module_name",
|
|
270
|
+
"value_name",
|
|
271
|
+
"module_kind",
|
|
272
|
+
"builtin_module",
|
|
273
|
+
"module_usages",
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
def __init__(self, module_name, value_name, source_ref):
|
|
277
|
+
ExpressionBase.__init__(self, source_ref)
|
|
278
|
+
|
|
279
|
+
self.module_name = ModuleName(module_name)
|
|
280
|
+
self.value_name = ModuleName(value_name)
|
|
281
|
+
|
|
282
|
+
self.builtin_module = __import__(module_name.asString())
|
|
283
|
+
|
|
284
|
+
# If not found, we import the package at least
|
|
285
|
+
_module_name, _module_filename, _module_kind, _finding = locateModule(
|
|
286
|
+
module_name=self.module_name,
|
|
287
|
+
parent_package=None,
|
|
500
288
|
level=0,
|
|
501
|
-
source_ref=self.source_ref,
|
|
502
|
-
reason="import",
|
|
503
289
|
)
|
|
504
290
|
|
|
291
|
+
assert _module_name == self.module_name, _module_name
|
|
292
|
+
assert _finding == "built-in", _finding
|
|
293
|
+
assert _module_kind is None, _module_kind
|
|
294
|
+
|
|
295
|
+
self.module_usages = makeParentModuleUsagesAttempts(
|
|
296
|
+
makeModuleUsageAttempt(
|
|
297
|
+
module_name=self.module_name,
|
|
298
|
+
filename=None,
|
|
299
|
+
finding="built-in",
|
|
300
|
+
module_kind=None,
|
|
301
|
+
level=0,
|
|
302
|
+
source_ref=self.source_ref,
|
|
303
|
+
reason="import",
|
|
304
|
+
)
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
@staticmethod
|
|
308
|
+
def getTypeShape():
|
|
309
|
+
return tshape_module_builtin
|
|
310
|
+
|
|
311
|
+
def mayRaiseExceptionImportName(self, exception_type, import_name):
|
|
312
|
+
return not hasattr(self.builtin_module, import_name)
|
|
313
|
+
|
|
314
|
+
def finalize(self):
|
|
315
|
+
del self.parent
|
|
316
|
+
|
|
317
|
+
def getDetails(self):
|
|
318
|
+
return {"module_name": self.module_name, "value_name": self.value_name}
|
|
319
|
+
|
|
320
|
+
def getModuleName(self):
|
|
321
|
+
return self.module_name
|
|
322
|
+
|
|
323
|
+
def getValueName(self):
|
|
324
|
+
return self.value_name
|
|
325
|
+
|
|
326
|
+
@staticmethod
|
|
327
|
+
def mayHaveSideEffects():
|
|
328
|
+
return True
|
|
329
|
+
|
|
330
|
+
def mayRaiseException(self, exception_type):
|
|
331
|
+
return isNonRaisingBuiltinModule(self.module_name) is not False
|
|
332
|
+
|
|
333
|
+
def getModuleUsageAttempts(self):
|
|
334
|
+
return self.module_usages
|
|
335
|
+
|
|
505
336
|
def computeExpressionRaw(self, trace_collection):
|
|
506
337
|
if self.mayRaiseException(BaseException):
|
|
507
338
|
trace_collection.onExceptionRaiseExit(BaseException)
|
|
508
339
|
|
|
509
340
|
# Trace the module usage attempt.
|
|
510
|
-
trace_collection.
|
|
341
|
+
trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
|
|
511
342
|
|
|
512
343
|
# Nothing to do about it.
|
|
513
344
|
return self, None, None
|
|
@@ -533,17 +364,26 @@ class ExpressionImportModuleHard(
|
|
|
533
364
|
|
|
534
365
|
kind = "EXPRESSION_IMPORT_MODULE_HARD"
|
|
535
366
|
|
|
536
|
-
__slots__ = (
|
|
367
|
+
__slots__ = (
|
|
368
|
+
"using_module_name",
|
|
369
|
+
"module",
|
|
370
|
+
"allowed",
|
|
371
|
+
"guaranteed",
|
|
372
|
+
"value_name",
|
|
373
|
+
"is_package",
|
|
374
|
+
)
|
|
537
375
|
|
|
538
|
-
def __init__(self, module_name, value_name, source_ref):
|
|
376
|
+
def __init__(self, using_module_name, module_name, value_name, source_ref):
|
|
539
377
|
ExpressionImportHardBase.__init__(
|
|
540
378
|
self, module_name=module_name, source_ref=source_ref
|
|
541
379
|
)
|
|
542
380
|
|
|
543
|
-
ExpressionImportAllowanceMixin.__init__(self)
|
|
544
|
-
|
|
545
381
|
self.value_name = value_name
|
|
546
382
|
|
|
383
|
+
ExpressionImportAllowanceMixin.__init__(
|
|
384
|
+
self, using_module_name=using_module_name
|
|
385
|
+
)
|
|
386
|
+
|
|
547
387
|
if self.finding != "not-found" and isHardModuleWithoutSideEffect(
|
|
548
388
|
self.module_name
|
|
549
389
|
):
|
|
@@ -571,7 +411,11 @@ class ExpressionImportModuleHard(
|
|
|
571
411
|
del self.parent
|
|
572
412
|
|
|
573
413
|
def getDetails(self):
|
|
574
|
-
return {
|
|
414
|
+
return {
|
|
415
|
+
"using_module_name": self.using_module_name,
|
|
416
|
+
"module_name": self.module_name,
|
|
417
|
+
"value_name": self.value_name,
|
|
418
|
+
}
|
|
575
419
|
|
|
576
420
|
def getModuleName(self):
|
|
577
421
|
return self.module_name
|
|
@@ -596,7 +440,7 @@ class ExpressionImportModuleHard(
|
|
|
596
440
|
trace_collection.onExceptionRaiseExit(BaseException)
|
|
597
441
|
|
|
598
442
|
# Trace the module usage attempt.
|
|
599
|
-
trace_collection.
|
|
443
|
+
trace_collection.onModuleUsageAttempts(self.getModuleUsageAttempts())
|
|
600
444
|
|
|
601
445
|
return self, None, None
|
|
602
446
|
|
|
@@ -647,15 +491,18 @@ class ExpressionImportModuleHard(
|
|
|
647
491
|
def _computeExpressionAttribute(
|
|
648
492
|
self, lookup_node, attribute_name, trace_collection, is_import
|
|
649
493
|
):
|
|
650
|
-
# Return driven handling of many cases
|
|
494
|
+
# Return driven handling of many cases
|
|
495
|
+
# pylint: disable=too-many-branches,too-many-return-statements
|
|
651
496
|
|
|
652
|
-
if self.
|
|
497
|
+
if self.allowed:
|
|
653
498
|
full_name = self.value_name.getChildNamed(attribute_name)
|
|
654
|
-
|
|
655
499
|
full_name = ModuleName(hard_modules_aliases.get(full_name, full_name))
|
|
656
500
|
|
|
657
501
|
if isHardModule(full_name):
|
|
502
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
503
|
+
|
|
658
504
|
new_node = ExpressionImportModuleHard(
|
|
505
|
+
using_module_name=self.using_module_name,
|
|
659
506
|
module_name=full_name,
|
|
660
507
|
value_name=full_name,
|
|
661
508
|
source_ref=lookup_node.source_ref,
|
|
@@ -668,9 +515,12 @@ class ExpressionImportModuleHard(
|
|
|
668
515
|
% (self.value_name, attribute_name),
|
|
669
516
|
)
|
|
670
517
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
518
|
+
if self.value_name in hard_modules_trust:
|
|
519
|
+
trust = hard_modules_trust[self.value_name].get(
|
|
520
|
+
attribute_name, trust_undefined
|
|
521
|
+
)
|
|
522
|
+
else:
|
|
523
|
+
trust = trust_undefined
|
|
674
524
|
|
|
675
525
|
if trust is trust_importable:
|
|
676
526
|
# TODO: Change this is a hard module import itself, currently these are not all trusted
|
|
@@ -679,8 +529,10 @@ class ExpressionImportModuleHard(
|
|
|
679
529
|
trace_collection.onExceptionRaiseExit(BaseException)
|
|
680
530
|
elif trust is trust_may_exist:
|
|
681
531
|
trace_collection.onExceptionRaiseExit(BaseException)
|
|
682
|
-
elif
|
|
683
|
-
|
|
532
|
+
elif (
|
|
533
|
+
trust is not trust_undefined
|
|
534
|
+
and self.module is not None
|
|
535
|
+
and not hasattr(self.module, attribute_name)
|
|
684
536
|
):
|
|
685
537
|
# TODO: Unify with below branches.
|
|
686
538
|
trace_collection.onExceptionRaiseExit(ImportError)
|
|
@@ -699,28 +551,36 @@ class ExpressionImportModuleHard(
|
|
|
699
551
|
)
|
|
700
552
|
else:
|
|
701
553
|
if trust is trust_undefined:
|
|
702
|
-
#
|
|
703
|
-
#
|
|
704
|
-
|
|
705
|
-
if self.is_package and False:
|
|
554
|
+
# Need to attempt module imports if this is for an import
|
|
555
|
+
# lookup of code like "from value_name import attribute_name".
|
|
556
|
+
if self.is_package:
|
|
706
557
|
full_name = self.value_name.getChildNamed(attribute_name)
|
|
707
558
|
|
|
708
|
-
|
|
559
|
+
(
|
|
560
|
+
_sub_module_name,
|
|
561
|
+
_sub_module_filename,
|
|
562
|
+
_sub_module_kind,
|
|
563
|
+
finding,
|
|
564
|
+
) = locateModule(
|
|
709
565
|
module_name=full_name,
|
|
710
566
|
parent_package=None,
|
|
711
567
|
level=0,
|
|
712
568
|
)
|
|
713
569
|
|
|
714
570
|
if finding != "not-found":
|
|
571
|
+
trace_collection.onExceptionRaiseExit(ImportError)
|
|
572
|
+
|
|
715
573
|
result = makeExpressionImportModuleFixed(
|
|
574
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
716
575
|
module_name=full_name,
|
|
576
|
+
value_name=full_name,
|
|
717
577
|
source_ref=lookup_node.getSourceReference(),
|
|
718
578
|
)
|
|
719
579
|
|
|
720
580
|
return (
|
|
721
581
|
result,
|
|
722
582
|
"new_expression",
|
|
723
|
-
"Attribute lookup '%s
|
|
583
|
+
"Attribute lookup '%s' of hard module '%s' becomes hard module name import."
|
|
724
584
|
% (self.value_name, attribute_name),
|
|
725
585
|
)
|
|
726
586
|
|
|
@@ -732,7 +592,7 @@ class ExpressionImportModuleHard(
|
|
|
732
592
|
self.value_name,
|
|
733
593
|
attribute_name,
|
|
734
594
|
)
|
|
735
|
-
elif trust is trust_constant:
|
|
595
|
+
elif trust is trust_constant and self.module is not None:
|
|
736
596
|
# Make sure it's actually there, and not becoming the getattr default by accident.
|
|
737
597
|
assert hasattr(self.module, attribute_name), self
|
|
738
598
|
|
|
@@ -747,6 +607,9 @@ class ExpressionImportModuleHard(
|
|
|
747
607
|
% (self.value_name, attribute_name),
|
|
748
608
|
)
|
|
749
609
|
elif trust is trust_node:
|
|
610
|
+
# TODO: Unify with other branches.
|
|
611
|
+
trace_collection.onExceptionRaiseExit(ImportError)
|
|
612
|
+
|
|
750
613
|
result = trust_node_factory[self.value_name, attribute_name](
|
|
751
614
|
source_ref=lookup_node.source_ref
|
|
752
615
|
)
|
|
@@ -919,7 +782,10 @@ class ExpressionImportlibImportModuleCall(
|
|
|
919
782
|
trace_collection.onExceptionRaiseExit(BaseException)
|
|
920
783
|
|
|
921
784
|
result = makeExpressionImportModuleFixed(
|
|
922
|
-
|
|
785
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
786
|
+
module_name=resolved_module_name,
|
|
787
|
+
value_name=resolved_module_name,
|
|
788
|
+
source_ref=self.source_ref,
|
|
923
789
|
)
|
|
924
790
|
|
|
925
791
|
return (
|
|
@@ -943,8 +809,33 @@ class ExpressionImportlibImportModuleCall(
|
|
|
943
809
|
return self, None, None
|
|
944
810
|
|
|
945
811
|
|
|
946
|
-
|
|
947
|
-
|
|
812
|
+
addModuleSingleAttributeNodeFactory(
|
|
813
|
+
"importlib", "import_module", ExpressionImportlibImportModuleRef
|
|
814
|
+
)
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
def _makeParentImportModuleUsages(module_name, source_ref):
|
|
818
|
+
for parent_package_name in module_name.getParentPackageNames():
|
|
819
|
+
(
|
|
820
|
+
_parent_package_name,
|
|
821
|
+
parent_module_filename,
|
|
822
|
+
parent_module_kind,
|
|
823
|
+
parent_module_finding,
|
|
824
|
+
) = locateModule(
|
|
825
|
+
module_name=parent_package_name,
|
|
826
|
+
parent_package=None,
|
|
827
|
+
level=0,
|
|
828
|
+
)
|
|
829
|
+
|
|
830
|
+
yield makeModuleUsageAttempt(
|
|
831
|
+
module_name=parent_package_name,
|
|
832
|
+
filename=parent_module_filename,
|
|
833
|
+
finding=parent_module_finding,
|
|
834
|
+
module_kind=parent_module_kind,
|
|
835
|
+
level=0,
|
|
836
|
+
source_ref=source_ref,
|
|
837
|
+
reason="import path parent",
|
|
838
|
+
)
|
|
948
839
|
|
|
949
840
|
|
|
950
841
|
class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBase):
|
|
@@ -952,8 +843,6 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
952
843
|
"follow_attempted",
|
|
953
844
|
"finding",
|
|
954
845
|
"used_modules",
|
|
955
|
-
"type_shape",
|
|
956
|
-
"builtin_module",
|
|
957
846
|
)
|
|
958
847
|
|
|
959
848
|
kind = "EXPRESSION_BUILTIN_IMPORT"
|
|
@@ -984,33 +873,41 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
984
873
|
# imports are considered too.
|
|
985
874
|
self.used_modules = []
|
|
986
875
|
|
|
987
|
-
self.type_shape = tshape_module
|
|
988
|
-
|
|
989
|
-
self.builtin_module = None
|
|
990
|
-
|
|
991
876
|
self.finding = None
|
|
992
877
|
|
|
993
|
-
def
|
|
994
|
-
# Complex stuff, pylint: disable=too-many-branches,too-many-locals
|
|
995
|
-
|
|
878
|
+
def _getLevelValue(self):
|
|
996
879
|
parent_module = self.getParentModule()
|
|
997
|
-
|
|
998
|
-
parent_package = parent_module.getFullName()
|
|
999
|
-
if not parent_module.isCompiledPythonPackage():
|
|
1000
|
-
parent_package = parent_package.getPackageName()
|
|
1001
|
-
|
|
1002
880
|
level = self.subnode_level
|
|
1003
881
|
|
|
1004
882
|
if level is None:
|
|
1005
|
-
|
|
883
|
+
return 0 if parent_module.getFutureSpec().isAbsoluteImport() else -1
|
|
1006
884
|
elif not level.isCompileTimeConstant():
|
|
1007
|
-
return
|
|
885
|
+
return None
|
|
1008
886
|
else:
|
|
1009
|
-
|
|
887
|
+
level_value = level.getCompileTimeConstant()
|
|
1010
888
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
889
|
+
# TODO: Catch this as a static error maybe.
|
|
890
|
+
if type(level_value) not in (int, long):
|
|
891
|
+
return None
|
|
892
|
+
|
|
893
|
+
return level_value
|
|
894
|
+
|
|
895
|
+
def _attemptFollow(self, module_name):
|
|
896
|
+
# Complex stuff, pylint: disable=too-many-branches
|
|
897
|
+
|
|
898
|
+
# Without the level value, we don't know what it is.
|
|
899
|
+
level_value = self._getLevelValue()
|
|
900
|
+
if level_value is None:
|
|
901
|
+
return
|
|
902
|
+
|
|
903
|
+
parent_module = self.getParentModule()
|
|
904
|
+
|
|
905
|
+
if level_value != 0:
|
|
906
|
+
parent_package = parent_module.getFullName()
|
|
907
|
+
if not parent_module.isCompiledPythonPackage():
|
|
908
|
+
parent_package = parent_package.getPackageName()
|
|
909
|
+
else:
|
|
910
|
+
parent_package = None
|
|
1014
911
|
|
|
1015
912
|
module_name_resolved = resolveModuleName(module_name)
|
|
1016
913
|
if module_name_resolved != module_name:
|
|
@@ -1024,25 +921,36 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1024
921
|
)
|
|
1025
922
|
)
|
|
1026
923
|
|
|
1027
|
-
module_name
|
|
1028
|
-
|
|
924
|
+
module_name = ModuleName(module_name)
|
|
925
|
+
module_name_found, module_filename, module_kind, self.finding = locateModule(
|
|
926
|
+
module_name=ModuleName(module_name),
|
|
1029
927
|
parent_package=parent_package,
|
|
1030
|
-
level=
|
|
928
|
+
level=level_value,
|
|
1031
929
|
)
|
|
1032
930
|
|
|
1033
|
-
|
|
931
|
+
# Allow for the import look ahead, to change what modules are
|
|
932
|
+
# considered hard imports.
|
|
933
|
+
Plugins.onModuleUsageLookAhead(
|
|
934
|
+
module_name=module_name_found,
|
|
935
|
+
module_filename=module_filename,
|
|
936
|
+
module_kind=module_kind,
|
|
937
|
+
)
|
|
938
|
+
|
|
939
|
+
self.used_modules = makeParentModuleUsagesAttempts(
|
|
1034
940
|
makeModuleUsageAttempt(
|
|
1035
|
-
module_name=
|
|
941
|
+
module_name=module_name_found,
|
|
1036
942
|
filename=module_filename,
|
|
1037
943
|
module_kind=module_kind,
|
|
1038
944
|
finding=self.finding,
|
|
1039
|
-
level=
|
|
945
|
+
level=level_value,
|
|
1040
946
|
source_ref=self.source_ref,
|
|
1041
947
|
reason="import",
|
|
1042
948
|
)
|
|
1043
|
-
|
|
949
|
+
)
|
|
1044
950
|
|
|
1045
951
|
if self.finding != "not-found":
|
|
952
|
+
module_name = module_name_found
|
|
953
|
+
|
|
1046
954
|
import_list = self.subnode_fromlist
|
|
1047
955
|
|
|
1048
956
|
if import_list is not None:
|
|
@@ -1072,6 +980,8 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1072
980
|
level=1, # Relative import
|
|
1073
981
|
)
|
|
1074
982
|
|
|
983
|
+
self.used_modules = list(self.used_modules)
|
|
984
|
+
|
|
1075
985
|
self.used_modules.append(
|
|
1076
986
|
makeModuleUsageAttempt(
|
|
1077
987
|
module_name=name_import_module_name,
|
|
@@ -1080,51 +990,29 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1080
990
|
finding=name_import_finding,
|
|
1081
991
|
level=1,
|
|
1082
992
|
source_ref=self.source_ref,
|
|
1083
|
-
reason="import",
|
|
993
|
+
reason="import fromlist",
|
|
1084
994
|
)
|
|
1085
995
|
)
|
|
1086
996
|
|
|
997
|
+
self.used_modules = tuple(self.used_modules)
|
|
998
|
+
|
|
1087
999
|
return module_filename
|
|
1088
1000
|
else:
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
while True:
|
|
1092
|
-
module_name = module_name.getPackageName()
|
|
1093
|
-
|
|
1094
|
-
if not module_name:
|
|
1095
|
-
break
|
|
1096
|
-
|
|
1097
|
-
(
|
|
1098
|
-
found_module_name,
|
|
1099
|
-
module_filename,
|
|
1100
|
-
module_kind,
|
|
1101
|
-
finding,
|
|
1102
|
-
) = locateModule(
|
|
1103
|
-
module_name=module_name,
|
|
1104
|
-
parent_package=parent_package,
|
|
1105
|
-
level=level,
|
|
1106
|
-
)
|
|
1107
|
-
|
|
1108
|
-
self.used_modules.append(
|
|
1109
|
-
makeModuleUsageAttempt(
|
|
1110
|
-
module_name=found_module_name,
|
|
1111
|
-
filename=module_filename,
|
|
1112
|
-
module_kind=module_kind,
|
|
1113
|
-
finding=finding,
|
|
1114
|
-
level=level,
|
|
1115
|
-
source_ref=self.source_ref,
|
|
1116
|
-
reason="import",
|
|
1117
|
-
)
|
|
1118
|
-
)
|
|
1001
|
+
return None
|
|
1119
1002
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1003
|
+
def _getImportedValueName(self, imported_module_name):
|
|
1004
|
+
from_list_truth = (
|
|
1005
|
+
self.subnode_fromlist is not None and self.subnode_fromlist.getTruthValue()
|
|
1006
|
+
)
|
|
1122
1007
|
|
|
1123
|
-
|
|
1008
|
+
if from_list_truth is True:
|
|
1009
|
+
return imported_module_name
|
|
1010
|
+
else:
|
|
1011
|
+
return imported_module_name.getTopLevelPackageName()
|
|
1124
1012
|
|
|
1125
1013
|
def computeExpression(self, trace_collection):
|
|
1126
|
-
# Attempt to recurse if not already done, many cases to consider
|
|
1127
|
-
# pylint: disable=too-many-branches
|
|
1014
|
+
# Attempt to recurse if not already done, many cases to consider and its
|
|
1015
|
+
# return driven, pylint: disable=too-many-branches,too-many-return-statements
|
|
1128
1016
|
if self.follow_attempted:
|
|
1129
1017
|
if self.finding == "not-found":
|
|
1130
1018
|
# Importing and not finding, may raise an exception obviously.
|
|
@@ -1134,8 +1022,7 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1134
1022
|
trace_collection.onExceptionRaiseExit(RuntimeError)
|
|
1135
1023
|
|
|
1136
1024
|
# Trace the module usage attempts.
|
|
1137
|
-
|
|
1138
|
-
trace_collection.onModuleUsageAttempt(module_usage_attempt)
|
|
1025
|
+
trace_collection.onModuleUsageAttempts(self.used_modules)
|
|
1139
1026
|
|
|
1140
1027
|
# We stay here.
|
|
1141
1028
|
return self, None, None
|
|
@@ -1158,34 +1045,82 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1158
1045
|
trace_collection.onModuleUsageAttempt(module_usage_attempt)
|
|
1159
1046
|
|
|
1160
1047
|
if type(imported_module_name) in (str, unicode):
|
|
1161
|
-
|
|
1048
|
+
if self.finding == "relative":
|
|
1049
|
+
parent_module = self.getParentModule()
|
|
1050
|
+
|
|
1051
|
+
parent_package = parent_module.getFullName()
|
|
1052
|
+
if not parent_module.isCompiledPythonPackage():
|
|
1053
|
+
parent_package = parent_package.getPackageName()
|
|
1054
|
+
|
|
1055
|
+
level_value = abs(self._getLevelValue())
|
|
1056
|
+
level_value -= 1
|
|
1057
|
+
|
|
1058
|
+
while level_value > 0:
|
|
1059
|
+
parent_package = parent_package.getPackageName()
|
|
1060
|
+
level_value -= 1
|
|
1061
|
+
|
|
1062
|
+
if imported_module_name != "":
|
|
1063
|
+
candidate_module_name = parent_package.getChildNamed(
|
|
1064
|
+
imported_module_name
|
|
1065
|
+
)
|
|
1066
|
+
else:
|
|
1067
|
+
candidate_module_name = parent_package
|
|
1162
1068
|
|
|
1163
|
-
if self.finding == "absolute" and isHardModule(imported_module_name):
|
|
1164
1069
|
if (
|
|
1165
|
-
|
|
1070
|
+
candidate_module_name in hard_modules_non_stdlib
|
|
1071
|
+
or module_filename is None
|
|
1166
1072
|
or isStandardLibraryPath(module_filename)
|
|
1167
1073
|
):
|
|
1168
|
-
|
|
1169
|
-
self.
|
|
1170
|
-
|
|
1074
|
+
result = ExpressionImportModuleHard(
|
|
1075
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
1076
|
+
module_name=candidate_module_name,
|
|
1077
|
+
value_name=self._getImportedValueName(
|
|
1078
|
+
candidate_module_name
|
|
1079
|
+
),
|
|
1080
|
+
source_ref=self.source_ref,
|
|
1081
|
+
)
|
|
1082
|
+
|
|
1083
|
+
return (
|
|
1084
|
+
result,
|
|
1085
|
+
"new_expression",
|
|
1086
|
+
"Lowered import %s module '%s' to hard import."
|
|
1087
|
+
% (
|
|
1088
|
+
(
|
|
1089
|
+
"hard import"
|
|
1090
|
+
if candidate_module_name in hard_modules_non_stdlib
|
|
1091
|
+
else "standard library"
|
|
1092
|
+
),
|
|
1093
|
+
candidate_module_name.asString(),
|
|
1094
|
+
),
|
|
1171
1095
|
)
|
|
1172
1096
|
|
|
1173
|
-
|
|
1174
|
-
value_name = imported_module_name
|
|
1175
|
-
else:
|
|
1176
|
-
value_name = imported_module_name.getTopLevelPackageName()
|
|
1097
|
+
imported_module_name = resolveModuleName(imported_module_name)
|
|
1177
1098
|
|
|
1099
|
+
if self.finding == "absolute" and isHardModule(imported_module_name):
|
|
1100
|
+
if (
|
|
1101
|
+
imported_module_name in hard_modules_non_stdlib
|
|
1102
|
+
or module_filename is None
|
|
1103
|
+
or isStandardLibraryPath(module_filename)
|
|
1104
|
+
):
|
|
1178
1105
|
result = ExpressionImportModuleHard(
|
|
1106
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
1179
1107
|
module_name=imported_module_name,
|
|
1180
|
-
value_name=
|
|
1108
|
+
value_name=self._getImportedValueName(imported_module_name),
|
|
1181
1109
|
source_ref=self.source_ref,
|
|
1182
1110
|
)
|
|
1183
1111
|
|
|
1184
1112
|
return (
|
|
1185
1113
|
result,
|
|
1186
1114
|
"new_expression",
|
|
1187
|
-
"Lowered import
|
|
1188
|
-
%
|
|
1115
|
+
"Lowered import %s module '%s' to hard import."
|
|
1116
|
+
% (
|
|
1117
|
+
(
|
|
1118
|
+
"hard import"
|
|
1119
|
+
if imported_module_name in hard_modules_non_stdlib
|
|
1120
|
+
else "standard library"
|
|
1121
|
+
),
|
|
1122
|
+
imported_module_name.asString(),
|
|
1123
|
+
),
|
|
1189
1124
|
)
|
|
1190
1125
|
elif shallWarnUnusualCode():
|
|
1191
1126
|
unusual_logger.warning(
|
|
@@ -1197,23 +1132,24 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1197
1132
|
)
|
|
1198
1133
|
)
|
|
1199
1134
|
|
|
1200
|
-
|
|
1201
|
-
if isHardModule(imported_module_name):
|
|
1202
|
-
result = ExpressionImportModuleHard(
|
|
1203
|
-
module_name=imported_module_name,
|
|
1204
|
-
value_name=imported_module_name.getTopLevelPackageName(),
|
|
1205
|
-
source_ref=self.source_ref,
|
|
1206
|
-
)
|
|
1135
|
+
# Built-in module imports can be specialized right away.
|
|
1207
1136
|
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1137
|
+
if self.finding == "built-in":
|
|
1138
|
+
result = makeExpressionImportModuleBuiltin(
|
|
1139
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
1140
|
+
module_name=imported_module_name,
|
|
1141
|
+
value_name=self._getImportedValueName(imported_module_name),
|
|
1142
|
+
source_ref=self.source_ref,
|
|
1143
|
+
)
|
|
1214
1144
|
|
|
1215
|
-
|
|
1216
|
-
|
|
1145
|
+
# TODO: This ought to preserve side effects from arguments
|
|
1146
|
+
# for full compatibility with strange uses of __import__
|
|
1147
|
+
return (
|
|
1148
|
+
result,
|
|
1149
|
+
"new_expression",
|
|
1150
|
+
"Lowered import of built-in module '%s' to hard import."
|
|
1151
|
+
% imported_module_name.asString(),
|
|
1152
|
+
)
|
|
1217
1153
|
|
|
1218
1154
|
if self.finding == "not-found":
|
|
1219
1155
|
if imported_module_name in hard_modules_limited:
|
|
@@ -1228,6 +1164,26 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1228
1164
|
% imported_module_name.asString(),
|
|
1229
1165
|
)
|
|
1230
1166
|
|
|
1167
|
+
elif (
|
|
1168
|
+
isStandaloneMode()
|
|
1169
|
+
and self.used_modules
|
|
1170
|
+
and isExperimental("standalone-imports")
|
|
1171
|
+
):
|
|
1172
|
+
result = makeExpressionImportModuleFixed(
|
|
1173
|
+
using_module_name=self.getParentModule().getFullName(),
|
|
1174
|
+
module_name=self.used_modules[0].module_name,
|
|
1175
|
+
value_name=self._getImportedValueName(
|
|
1176
|
+
self.used_modules[0].module_name
|
|
1177
|
+
),
|
|
1178
|
+
source_ref=self.source_ref,
|
|
1179
|
+
)
|
|
1180
|
+
|
|
1181
|
+
return (
|
|
1182
|
+
result,
|
|
1183
|
+
"new_expression",
|
|
1184
|
+
"Lowered import of module '%s' to fixed import."
|
|
1185
|
+
% imported_module_name.asString(),
|
|
1186
|
+
)
|
|
1231
1187
|
else:
|
|
1232
1188
|
# TODO: This doesn't preserve side effects.
|
|
1233
1189
|
|
|
@@ -1263,15 +1219,6 @@ class ExpressionBuiltinImport(ChildrenExpressionBuiltinImportMixin, ExpressionBa
|
|
|
1263
1219
|
def mayRaiseException(self, exception_type):
|
|
1264
1220
|
return self.finding != "built-in"
|
|
1265
1221
|
|
|
1266
|
-
def mayRaiseExceptionImportName(self, exception_type, import_name):
|
|
1267
|
-
if self.finding == "built-in":
|
|
1268
|
-
return not hasattr(self.builtin_module, import_name)
|
|
1269
|
-
else:
|
|
1270
|
-
return True
|
|
1271
|
-
|
|
1272
|
-
def getTypeShape(self):
|
|
1273
|
-
return self.type_shape
|
|
1274
|
-
|
|
1275
1222
|
|
|
1276
1223
|
class StatementImportStar(StatementImportStarBase):
|
|
1277
1224
|
kind = "STATEMENT_IMPORT_STAR"
|
|
@@ -1354,16 +1301,59 @@ class ExpressionImportName(ChildHavingModuleMixin, ExpressionBase):
|
|
|
1354
1301
|
)
|
|
1355
1302
|
|
|
1356
1303
|
|
|
1357
|
-
def makeExpressionImportModuleFixed(
|
|
1304
|
+
def makeExpressionImportModuleFixed(
|
|
1305
|
+
using_module_name, module_name, value_name, source_ref
|
|
1306
|
+
):
|
|
1358
1307
|
module_name = resolveModuleName(module_name)
|
|
1308
|
+
value_name = resolveModuleName(value_name)
|
|
1359
1309
|
|
|
1360
1310
|
if isHardModule(module_name):
|
|
1361
1311
|
return ExpressionImportModuleHard(
|
|
1312
|
+
using_module_name=using_module_name,
|
|
1362
1313
|
module_name=module_name,
|
|
1363
|
-
value_name=
|
|
1314
|
+
value_name=value_name,
|
|
1364
1315
|
source_ref=source_ref,
|
|
1365
1316
|
)
|
|
1366
1317
|
else:
|
|
1367
1318
|
return ExpressionImportModuleFixed(
|
|
1368
|
-
module_name=module_name,
|
|
1319
|
+
module_name=module_name,
|
|
1320
|
+
value_name=value_name,
|
|
1321
|
+
source_ref=source_ref,
|
|
1322
|
+
)
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
def makeExpressionImportModuleBuiltin(
|
|
1326
|
+
using_module_name, module_name, value_name, source_ref
|
|
1327
|
+
):
|
|
1328
|
+
module_name = resolveModuleName(module_name)
|
|
1329
|
+
value_name = resolveModuleName(value_name)
|
|
1330
|
+
|
|
1331
|
+
if isHardModule(module_name):
|
|
1332
|
+
return ExpressionImportModuleHard(
|
|
1333
|
+
using_module_name=using_module_name,
|
|
1334
|
+
module_name=module_name,
|
|
1335
|
+
value_name=value_name,
|
|
1336
|
+
source_ref=source_ref,
|
|
1337
|
+
)
|
|
1338
|
+
else:
|
|
1339
|
+
return ExpressionImportModuleBuiltin(
|
|
1340
|
+
module_name=module_name,
|
|
1341
|
+
value_name=value_name,
|
|
1342
|
+
source_ref=source_ref,
|
|
1369
1343
|
)
|
|
1344
|
+
|
|
1345
|
+
|
|
1346
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1347
|
+
# integrates with CPython, but also works on its own.
|
|
1348
|
+
#
|
|
1349
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1350
|
+
# you may not use this file except in compliance with the License.
|
|
1351
|
+
# You may obtain a copy of the License at
|
|
1352
|
+
#
|
|
1353
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1354
|
+
#
|
|
1355
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1356
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1357
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1358
|
+
# See the License for the specific language governing permissions and
|
|
1359
|
+
# limitations under the License.
|