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/utils/FileOperations.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
|
""" Utils for file and directory operations.
|
|
19
5
|
|
|
20
6
|
This provides enhanced and more error resilient forms of standard
|
|
@@ -28,17 +14,21 @@ import errno
|
|
|
28
14
|
import fnmatch
|
|
29
15
|
import glob
|
|
30
16
|
import os
|
|
17
|
+
import pickle
|
|
31
18
|
import shutil
|
|
32
19
|
import stat
|
|
20
|
+
import sys
|
|
33
21
|
import tempfile
|
|
34
22
|
import time
|
|
23
|
+
import unicodedata
|
|
35
24
|
from contextlib import contextmanager
|
|
36
25
|
|
|
37
26
|
from nuitka.__past__ import ( # pylint: disable=redefined-builtin
|
|
27
|
+
FileNotFoundError,
|
|
38
28
|
PermissionError,
|
|
39
|
-
WindowsError,
|
|
40
29
|
basestring,
|
|
41
30
|
raw_input,
|
|
31
|
+
unicode,
|
|
42
32
|
)
|
|
43
33
|
from nuitka.PythonVersions import python_version
|
|
44
34
|
from nuitka.Tracing import (
|
|
@@ -51,7 +41,14 @@ from nuitka.Tracing import (
|
|
|
51
41
|
|
|
52
42
|
from .Importing import importFromInlineCopy
|
|
53
43
|
from .ThreadedExecutor import RLock, getThreadIdent
|
|
54
|
-
from .Utils import
|
|
44
|
+
from .Utils import (
|
|
45
|
+
decoratorRetries,
|
|
46
|
+
isLinux,
|
|
47
|
+
isMacOS,
|
|
48
|
+
isWin32OrPosixWindows,
|
|
49
|
+
isWin32Windows,
|
|
50
|
+
raiseWindowsError,
|
|
51
|
+
)
|
|
55
52
|
|
|
56
53
|
# Locking seems to be only required for Windows mostly, but we can keep
|
|
57
54
|
# it for all.
|
|
@@ -101,6 +98,9 @@ def areSamePaths(path1, path2):
|
|
|
101
98
|
even short paths, it then becomes a mere string compare after that.
|
|
102
99
|
"""
|
|
103
100
|
|
|
101
|
+
if path1 == path2:
|
|
102
|
+
return True
|
|
103
|
+
|
|
104
104
|
path1 = os.path.abspath(os.path.normpath(path1))
|
|
105
105
|
path2 = os.path.abspath(os.path.normpath(path2))
|
|
106
106
|
|
|
@@ -190,7 +190,11 @@ def makePath(path):
|
|
|
190
190
|
|
|
191
191
|
with withFileLock("creating directory %s" % path):
|
|
192
192
|
if not os.path.isdir(path):
|
|
193
|
-
|
|
193
|
+
try:
|
|
194
|
+
os.makedirs(path)
|
|
195
|
+
except OSError:
|
|
196
|
+
if not os.path.exists(path):
|
|
197
|
+
raise
|
|
194
198
|
|
|
195
199
|
|
|
196
200
|
def makeContainingPath(filename):
|
|
@@ -240,9 +244,14 @@ def _getRealPathWindows(path):
|
|
|
240
244
|
if str is not bytes:
|
|
241
245
|
result = result.decode("utf8")
|
|
242
246
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
247
|
+
if result.startswith("UNC\\"):
|
|
248
|
+
# Avoid network mounts being converted to UNC shared paths by newer
|
|
249
|
+
# Python versions, many tools won't work with those.
|
|
250
|
+
_real_path_windows_cache[path] = path
|
|
251
|
+
else:
|
|
252
|
+
_real_path_windows_cache[path] = os.path.join(
|
|
253
|
+
os.path.dirname(path), result.rstrip("\r\n")
|
|
254
|
+
)
|
|
246
255
|
else:
|
|
247
256
|
_real_path_windows_cache[path] = path
|
|
248
257
|
|
|
@@ -259,7 +268,9 @@ def getDirectoryRealPath(path):
|
|
|
259
268
|
path with symlinks resolved
|
|
260
269
|
|
|
261
270
|
Notes:
|
|
262
|
-
Workaround for Windows symlink is applied.
|
|
271
|
+
Workaround for Windows symlink is applied. This function is not recursive
|
|
272
|
+
at all with older Python, i.e. only the last part, the directory itself
|
|
273
|
+
is being resolved there.
|
|
263
274
|
|
|
264
275
|
"""
|
|
265
276
|
path = os.path.realpath(path)
|
|
@@ -272,6 +283,62 @@ def getDirectoryRealPath(path):
|
|
|
272
283
|
return path
|
|
273
284
|
|
|
274
285
|
|
|
286
|
+
def _restoreWindowsPath(orig_path, path):
|
|
287
|
+
if path.startswith("\\\\"):
|
|
288
|
+
drive, _remaining_path = os.path.splitdrive(orig_path)
|
|
289
|
+
|
|
290
|
+
if drive and not drive.startswith("\\\\"):
|
|
291
|
+
drive_real_path = os.path.realpath(drive + "\\")
|
|
292
|
+
assert path.startswith(drive_real_path)
|
|
293
|
+
|
|
294
|
+
path = drive + "\\" + path[len(drive_real_path) :]
|
|
295
|
+
else:
|
|
296
|
+
path = path.strip(os.path.sep)
|
|
297
|
+
|
|
298
|
+
if os.path.sep in path:
|
|
299
|
+
dirname = os.path.dirname(path)
|
|
300
|
+
filename = os.path.basename(path)
|
|
301
|
+
|
|
302
|
+
if dirname:
|
|
303
|
+
dirname = getDirectoryRealPath(dirname)
|
|
304
|
+
|
|
305
|
+
# Drive letters do not get slashes from "os.path.join", so
|
|
306
|
+
# we inject this here and normalize the path afterwards to
|
|
307
|
+
# remove any duplication added.
|
|
308
|
+
if os.path.sep not in dirname:
|
|
309
|
+
dirname = dirname + os.path.sep
|
|
310
|
+
|
|
311
|
+
path = os.path.normpath(os.path.join(dirname, filename))
|
|
312
|
+
|
|
313
|
+
return path
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def getFilenameRealPath(path):
|
|
317
|
+
"""Get os.path.realpath with Python2 and Windows symlink workaround applied.
|
|
318
|
+
|
|
319
|
+
Args:
|
|
320
|
+
path: path to get realpath of
|
|
321
|
+
|
|
322
|
+
Returns:
|
|
323
|
+
path with symlinks resolved
|
|
324
|
+
|
|
325
|
+
Notes:
|
|
326
|
+
Workaround for Windows symlinks are applied, this works recursive and
|
|
327
|
+
assumes that the path given itself is a file and not a directory, and
|
|
328
|
+
doesn't handle file symlinks at the end on older Python currently, but
|
|
329
|
+
we shouldn't deal with those.
|
|
330
|
+
"""
|
|
331
|
+
orig_path = path
|
|
332
|
+
path = os.path.realpath(path)
|
|
333
|
+
|
|
334
|
+
# Avoid network mounts being converted to UNC shared paths by newer
|
|
335
|
+
# Python versions, many tools won't work with those.
|
|
336
|
+
if os.name == "nt":
|
|
337
|
+
path = _restoreWindowsPath(orig_path=orig_path, path=path)
|
|
338
|
+
|
|
339
|
+
return path
|
|
340
|
+
|
|
341
|
+
|
|
275
342
|
def listDir(path):
|
|
276
343
|
"""Give a sorted listing of a path.
|
|
277
344
|
|
|
@@ -293,8 +360,28 @@ def listDir(path):
|
|
|
293
360
|
"""
|
|
294
361
|
real_path = getDirectoryRealPath(path)
|
|
295
362
|
|
|
363
|
+
# The "os.listdir" output needs to be unicode paths, or else it can be unusable
|
|
364
|
+
# for Python2 on Windows at least. We try to go back on the result.
|
|
365
|
+
if str is bytes and type(real_path) is str:
|
|
366
|
+
real_path = unicode(real_path)
|
|
367
|
+
|
|
368
|
+
def _tryDecodeToStr(value):
|
|
369
|
+
if str is bytes:
|
|
370
|
+
if type(value) is unicode:
|
|
371
|
+
# File system paths, that should be usable for names of modules,
|
|
372
|
+
# as Python2 code objects will e.g. hate unicode values.
|
|
373
|
+
|
|
374
|
+
# spell-checker: ignore getfilesystemencoding
|
|
375
|
+
try:
|
|
376
|
+
return value.decode(sys.getfilesystemencoding())
|
|
377
|
+
except UnicodeDecodeError:
|
|
378
|
+
return value
|
|
379
|
+
else:
|
|
380
|
+
return value
|
|
381
|
+
|
|
296
382
|
return sorted(
|
|
297
|
-
|
|
383
|
+
(_tryDecodeToStr(os.path.join(path, filename)), _tryDecodeToStr(filename))
|
|
384
|
+
for filename in os.listdir(real_path)
|
|
298
385
|
)
|
|
299
386
|
|
|
300
387
|
|
|
@@ -409,9 +496,9 @@ def getDllBasename(path):
|
|
|
409
496
|
if compare_path.endswith(suffix):
|
|
410
497
|
return path[: -len(suffix)]
|
|
411
498
|
|
|
412
|
-
# Linux
|
|
413
|
-
#
|
|
414
|
-
#
|
|
499
|
+
# Linux is not case sensitive, but lets still do it properly, sometimes, it
|
|
500
|
+
# is done macOS too. So we split on the normcase, but only to find out what
|
|
501
|
+
# is going on there.
|
|
415
502
|
if ".so." in compare_path:
|
|
416
503
|
return path[: len(compare_path.split(".so.")[0])]
|
|
417
504
|
|
|
@@ -473,7 +560,7 @@ def listExeFilesFromDirectory(path, prefix=None, suffixes=None):
|
|
|
473
560
|
|
|
474
561
|
# On Windows, we check exe suffixes, on other platforms we shell all filenames,
|
|
475
562
|
# matching the prefix, but they have to the executable bit set.
|
|
476
|
-
if suffixes
|
|
563
|
+
if not suffixes and isWin32OrPosixWindows():
|
|
477
564
|
suffixes = "exe", "bin"
|
|
478
565
|
|
|
479
566
|
if suffixes:
|
|
@@ -577,11 +664,19 @@ def deleteFile(path, must_exist):
|
|
|
577
664
|
raise OSError("Does not exist", path)
|
|
578
665
|
|
|
579
666
|
|
|
580
|
-
def
|
|
581
|
-
"""
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
667
|
+
def searchPrefixPath(path, element):
|
|
668
|
+
"""Search element and return prefix in path, if any."""
|
|
669
|
+
|
|
670
|
+
while path:
|
|
671
|
+
if os.path.normcase(os.path.basename(path)) == os.path.normcase(element):
|
|
672
|
+
return path
|
|
673
|
+
|
|
674
|
+
new_path = os.path.dirname(path)
|
|
675
|
+
if new_path == path:
|
|
676
|
+
break
|
|
677
|
+
path = new_path
|
|
678
|
+
|
|
679
|
+
return None
|
|
585
680
|
|
|
586
681
|
|
|
587
682
|
def getFilenameExtension(path):
|
|
@@ -605,7 +700,8 @@ def hasFilenameExtension(path, extensions):
|
|
|
605
700
|
"""Has a filename one of the given extensions.
|
|
606
701
|
|
|
607
702
|
Note: The extensions should be normalized, i.e. lower case and will match other
|
|
608
|
-
cases where the file system does that on a platform.
|
|
703
|
+
cases where the file system does that on a platform. Also they include a dot,
|
|
704
|
+
e.g. ".qml" is a good value.
|
|
609
705
|
"""
|
|
610
706
|
|
|
611
707
|
extension = getFilenameExtension(path)
|
|
@@ -616,7 +712,14 @@ def hasFilenameExtension(path, extensions):
|
|
|
616
712
|
return extension in extensions
|
|
617
713
|
|
|
618
714
|
|
|
619
|
-
def
|
|
715
|
+
def addFilenameExtension(path, extension):
|
|
716
|
+
if not hasFilenameExtension(path, extension):
|
|
717
|
+
path += extension
|
|
718
|
+
|
|
719
|
+
return path
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
def removeDirectory(path, logger, ignore_errors, extra_recommendation):
|
|
620
723
|
"""Remove a directory recursively.
|
|
621
724
|
|
|
622
725
|
On Windows, it happens that operations fail, and succeed when retried,
|
|
@@ -627,28 +730,52 @@ def removeDirectory(path, ignore_errors):
|
|
|
627
730
|
it hopefully only briefly.
|
|
628
731
|
"""
|
|
629
732
|
|
|
630
|
-
def onError(func, path, exc_info):
|
|
631
|
-
# Try again immediately, ignore what happened, pylint: disable=unused-argument
|
|
632
|
-
try:
|
|
633
|
-
func(path)
|
|
634
|
-
except OSError:
|
|
635
|
-
time.sleep(0.1)
|
|
636
|
-
|
|
637
|
-
func(path)
|
|
638
|
-
|
|
639
733
|
with withFileLock("removing directory %s" % path):
|
|
640
734
|
if os.path.exists(path):
|
|
641
|
-
try:
|
|
642
|
-
shutil.rmtree(path, ignore_errors=False, onerror=onError)
|
|
643
|
-
except OSError:
|
|
644
|
-
if ignore_errors:
|
|
645
|
-
shutil.rmtree(path, ignore_errors=ignore_errors)
|
|
646
|
-
else:
|
|
647
|
-
raise
|
|
648
|
-
|
|
649
735
|
|
|
650
|
-
|
|
651
|
-
|
|
736
|
+
@decoratorRetries(
|
|
737
|
+
logger=logger,
|
|
738
|
+
purpose="delete '%s'" % path,
|
|
739
|
+
consequence="the path is not fully removed",
|
|
740
|
+
extra_recommendation=extra_recommendation,
|
|
741
|
+
)
|
|
742
|
+
def _removeDirectory():
|
|
743
|
+
def onError(func, path, exc_info):
|
|
744
|
+
# Record what happened what happened, pylint: disable=unused-argument
|
|
745
|
+
last_error.append((func, path))
|
|
746
|
+
|
|
747
|
+
previous_error = []
|
|
748
|
+
|
|
749
|
+
# Try deleting while ignoring errors first.
|
|
750
|
+
while True:
|
|
751
|
+
last_error = []
|
|
752
|
+
shutil.rmtree(path, ignore_errors=False, onerror=onError)
|
|
753
|
+
|
|
754
|
+
# onError as a side effect, modifies last_error
|
|
755
|
+
if previous_error == last_error:
|
|
756
|
+
break
|
|
757
|
+
|
|
758
|
+
previous_error = list(last_error)
|
|
759
|
+
time.sleep(0.2)
|
|
760
|
+
|
|
761
|
+
# If it still exists, try one more time, this time not ignoring errors.
|
|
762
|
+
if os.path.exists(path):
|
|
763
|
+
try:
|
|
764
|
+
shutil.rmtree(path, ignore_errors=ignore_errors)
|
|
765
|
+
except OSError:
|
|
766
|
+
if not ignore_errors:
|
|
767
|
+
raise
|
|
768
|
+
|
|
769
|
+
_removeDirectory()
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
def resetDirectory(path, logger, ignore_errors, extra_recommendation):
|
|
773
|
+
removeDirectory(
|
|
774
|
+
path=path,
|
|
775
|
+
logger=logger,
|
|
776
|
+
ignore_errors=ignore_errors,
|
|
777
|
+
extra_recommendation=extra_recommendation,
|
|
778
|
+
)
|
|
652
779
|
makePath(path)
|
|
653
780
|
|
|
654
781
|
|
|
@@ -740,6 +867,22 @@ def putTextFileContents(filename, contents, encoding=None):
|
|
|
740
867
|
_writeContents(output_file)
|
|
741
868
|
|
|
742
869
|
|
|
870
|
+
def putBinaryFileContents(filename, contents):
|
|
871
|
+
"""Write a binary file from given contents.
|
|
872
|
+
|
|
873
|
+
Args:
|
|
874
|
+
filename: str with the file to be created
|
|
875
|
+
contents: bytes that should be written into the file
|
|
876
|
+
|
|
877
|
+
Returns:
|
|
878
|
+
None
|
|
879
|
+
"""
|
|
880
|
+
|
|
881
|
+
with withFileLock("writing file %s" % filename):
|
|
882
|
+
with openTextFile(filename, "wb") as output_file:
|
|
883
|
+
output_file.write(contents)
|
|
884
|
+
|
|
885
|
+
|
|
743
886
|
def changeTextFileContents(filename, contents, encoding=None, compare_only=False):
|
|
744
887
|
"""Write a text file from given contents.
|
|
745
888
|
|
|
@@ -766,7 +909,7 @@ def changeTextFileContents(filename, contents, encoding=None, compare_only=False
|
|
|
766
909
|
|
|
767
910
|
@contextmanager
|
|
768
911
|
def withPreserveFileMode(filenames):
|
|
769
|
-
if
|
|
912
|
+
if isinstance(filenames, basestring):
|
|
770
913
|
filenames = [filenames]
|
|
771
914
|
|
|
772
915
|
old_modes = {}
|
|
@@ -781,7 +924,7 @@ def withPreserveFileMode(filenames):
|
|
|
781
924
|
|
|
782
925
|
@contextmanager
|
|
783
926
|
def withMadeWritableFileMode(filenames):
|
|
784
|
-
if
|
|
927
|
+
if isinstance(filenames, basestring):
|
|
785
928
|
filenames = [filenames]
|
|
786
929
|
|
|
787
930
|
with withPreserveFileMode(filenames):
|
|
@@ -839,10 +982,13 @@ def copyTree(source_path, dest_path):
|
|
|
839
982
|
if python_version >= 0x380:
|
|
840
983
|
# Python 3.8+ has dirs_exist_ok
|
|
841
984
|
return shutil.copytree(source_path, dest_path, dirs_exist_ok=True)
|
|
985
|
+
else:
|
|
842
986
|
|
|
843
|
-
|
|
987
|
+
from distutils.dir_util import ( # Older Python only, pylint: disable=I0021,import-error
|
|
988
|
+
copy_tree,
|
|
989
|
+
)
|
|
844
990
|
|
|
845
|
-
|
|
991
|
+
return copy_tree(source_path, dest_path)
|
|
846
992
|
|
|
847
993
|
|
|
848
994
|
def copyFileWithPermissions(source_path, dest_path, dist_dir):
|
|
@@ -977,6 +1123,10 @@ def isFilenameBelowPath(path, filename, consider_short=True):
|
|
|
977
1123
|
filename = getExternalUsePath(filename)
|
|
978
1124
|
path = getExternalUsePath(path)
|
|
979
1125
|
|
|
1126
|
+
if isWin32Windows():
|
|
1127
|
+
if getWindowsDrive(path) != getWindowsDrive(filename):
|
|
1128
|
+
return False
|
|
1129
|
+
|
|
980
1130
|
result = os.path.relpath(filename, path).split(os.path.sep)[0] != ".."
|
|
981
1131
|
|
|
982
1132
|
return result
|
|
@@ -1021,10 +1171,7 @@ def getWindowsShortPathName(filename):
|
|
|
1021
1171
|
if ctypes.GetLastError() == 5:
|
|
1022
1172
|
return filename
|
|
1023
1173
|
|
|
1024
|
-
|
|
1025
|
-
ctypes.GetLastError(), ctypes.FormatError(ctypes.GetLastError())
|
|
1026
|
-
)
|
|
1027
|
-
|
|
1174
|
+
raiseWindowsError("getWindowsShortPathName for %s" % filename)
|
|
1028
1175
|
if output_buf_size >= needed:
|
|
1029
1176
|
# Short paths should be ASCII. Don't return unicode without a need,
|
|
1030
1177
|
# as e.g. Scons hates that in environment variables.
|
|
@@ -1068,10 +1215,7 @@ def getWindowsLongPathName(filename):
|
|
|
1068
1215
|
if ctypes.GetLastError() == 5:
|
|
1069
1216
|
return filename
|
|
1070
1217
|
|
|
1071
|
-
|
|
1072
|
-
ctypes.GetLastError(), ctypes.FormatError(ctypes.GetLastError())
|
|
1073
|
-
)
|
|
1074
|
-
|
|
1218
|
+
raiseWindowsError("getWindowsLongPathName for %s" % filename)
|
|
1075
1219
|
if output_buf_size >= needed:
|
|
1076
1220
|
return output_buf.value
|
|
1077
1221
|
else:
|
|
@@ -1096,8 +1240,10 @@ def getExternalUsePath(filename, only_dirname=False):
|
|
|
1096
1240
|
filename = os.path.abspath(filename)
|
|
1097
1241
|
|
|
1098
1242
|
if os.name == "nt":
|
|
1243
|
+
key = filename, only_dirname
|
|
1244
|
+
|
|
1099
1245
|
if filename not in _external_use_path_cache:
|
|
1100
|
-
|
|
1246
|
+
filename = getFilenameRealPath(filename)
|
|
1101
1247
|
|
|
1102
1248
|
if only_dirname:
|
|
1103
1249
|
dirname = getWindowsShortPathName(os.path.dirname(filename))
|
|
@@ -1106,10 +1252,13 @@ def getExternalUsePath(filename, only_dirname=False):
|
|
|
1106
1252
|
else:
|
|
1107
1253
|
filename = getWindowsShortPathName(filename)
|
|
1108
1254
|
|
|
1109
|
-
_external_use_path_cache[
|
|
1110
|
-
|
|
1255
|
+
_external_use_path_cache[key] = filename
|
|
1256
|
+
|
|
1257
|
+
# Looking up again should give same result immediately.
|
|
1258
|
+
key = filename, only_dirname
|
|
1259
|
+
_external_use_path_cache[key] = filename
|
|
1111
1260
|
|
|
1112
|
-
return _external_use_path_cache[
|
|
1261
|
+
return _external_use_path_cache[key]
|
|
1113
1262
|
else:
|
|
1114
1263
|
return filename
|
|
1115
1264
|
|
|
@@ -1202,6 +1351,10 @@ def getLinkTarget(filename):
|
|
|
1202
1351
|
return is_link, filename
|
|
1203
1352
|
|
|
1204
1353
|
|
|
1354
|
+
# Late import and optional to be there.
|
|
1355
|
+
atomicwrites = None
|
|
1356
|
+
|
|
1357
|
+
|
|
1205
1358
|
def replaceFileAtomic(source_path, dest_path):
|
|
1206
1359
|
"""
|
|
1207
1360
|
Move ``src`` to ``dst``. If ``dst`` exists, it will be silently
|
|
@@ -1216,9 +1369,12 @@ def replaceFileAtomic(source_path, dest_path):
|
|
|
1216
1369
|
if python_version >= 0x300:
|
|
1217
1370
|
os.replace(source_path, dest_path)
|
|
1218
1371
|
else:
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1372
|
+
global atomicwrites # singleton, pylint: disable=global-statement
|
|
1373
|
+
|
|
1374
|
+
if atomicwrites is None:
|
|
1375
|
+
atomicwrites = importFromInlineCopy("atomicwrites", must_exist=True)
|
|
1376
|
+
|
|
1377
|
+
atomicwrites.replace_atomic(source_path, dest_path)
|
|
1222
1378
|
|
|
1223
1379
|
|
|
1224
1380
|
def resolveShellPatternToFilenames(pattern):
|
|
@@ -1303,3 +1459,91 @@ def syncFileOutput(file_handle):
|
|
|
1303
1459
|
except AttributeError:
|
|
1304
1460
|
# Too old to have "syncfs" available.
|
|
1305
1461
|
return
|
|
1462
|
+
|
|
1463
|
+
|
|
1464
|
+
def isFilesystemEncodable(filename):
|
|
1465
|
+
"""Decide if a filename is safe for use as a file system path with tools."""
|
|
1466
|
+
if os.name == "nt" and type(filename) is unicode:
|
|
1467
|
+
value = (
|
|
1468
|
+
unicodedata.normalize("NFKD", filename)
|
|
1469
|
+
.encode("ascii", "ignore")
|
|
1470
|
+
.decode("ascii")
|
|
1471
|
+
)
|
|
1472
|
+
|
|
1473
|
+
return value == filename
|
|
1474
|
+
else:
|
|
1475
|
+
return True
|
|
1476
|
+
|
|
1477
|
+
|
|
1478
|
+
def openPickleFile(filename, mode, protocol=-1):
|
|
1479
|
+
file_handle = openTextFile(filename, mode)
|
|
1480
|
+
|
|
1481
|
+
if python_version < 0x300:
|
|
1482
|
+
return file_handle, pickle.Pickler(file_handle, protocol)
|
|
1483
|
+
else:
|
|
1484
|
+
return file_handle, pickle._Pickler( # pylint: disable=protected-access
|
|
1485
|
+
file_handle, protocol
|
|
1486
|
+
)
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
def isLegalPath(path):
|
|
1490
|
+
illegal_suffixes = "/\\"
|
|
1491
|
+
illegal_chars = "\0"
|
|
1492
|
+
|
|
1493
|
+
if isWin32Windows():
|
|
1494
|
+
illegal_chars += r'*"/<>:|?'
|
|
1495
|
+
|
|
1496
|
+
illegal_chars += "".join(chr(x) for x in range(1, 32))
|
|
1497
|
+
illegal_suffixes += " ."
|
|
1498
|
+
|
|
1499
|
+
if isMacOS():
|
|
1500
|
+
illegal_chars += ":"
|
|
1501
|
+
|
|
1502
|
+
for c in path:
|
|
1503
|
+
if c in illegal_chars:
|
|
1504
|
+
return False, "contains illegal character %r" % c
|
|
1505
|
+
|
|
1506
|
+
for illegal_suffix in illegal_suffixes:
|
|
1507
|
+
if path.endswith(illegal_suffix):
|
|
1508
|
+
return False, "contains illegal suffix %r" % illegal_suffix
|
|
1509
|
+
|
|
1510
|
+
for part in path.split(os.path.sep):
|
|
1511
|
+
if part == ".":
|
|
1512
|
+
continue
|
|
1513
|
+
|
|
1514
|
+
if part.endswith(illegal_suffix):
|
|
1515
|
+
return False, "contains illegal suffix %r in path part %r" % (
|
|
1516
|
+
part,
|
|
1517
|
+
illegal_suffix,
|
|
1518
|
+
)
|
|
1519
|
+
|
|
1520
|
+
return True, None
|
|
1521
|
+
|
|
1522
|
+
|
|
1523
|
+
def getParentDirectories(path):
|
|
1524
|
+
"""Get all parent directories of a path in descending order."""
|
|
1525
|
+
|
|
1526
|
+
while 1:
|
|
1527
|
+
old_path = path
|
|
1528
|
+
path = os.path.dirname(path)
|
|
1529
|
+
|
|
1530
|
+
if not path or path == old_path:
|
|
1531
|
+
return
|
|
1532
|
+
|
|
1533
|
+
yield path
|
|
1534
|
+
|
|
1535
|
+
|
|
1536
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1537
|
+
# integrates with CPython, but also works on its own.
|
|
1538
|
+
#
|
|
1539
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1540
|
+
# you may not use this file except in compliance with the License.
|
|
1541
|
+
# You may obtain a copy of the License at
|
|
1542
|
+
#
|
|
1543
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1544
|
+
#
|
|
1545
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1546
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1547
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1548
|
+
# See the License for the specific language governing permissions and
|
|
1549
|
+
# limitations under the License.
|