Nuitka-winsvc 2.7.7__cp313-cp313-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.

Files changed (995) hide show
  1. nuitka/Builtins.py +259 -0
  2. nuitka/BytecodeCaching.py +184 -0
  3. nuitka/Bytecodes.py +109 -0
  4. nuitka/CacheCleanup.py +54 -0
  5. nuitka/Constants.py +425 -0
  6. nuitka/Errors.py +93 -0
  7. nuitka/HardImportRegistry.py +408 -0
  8. nuitka/MainControl.py +1201 -0
  9. nuitka/ModuleRegistry.py +364 -0
  10. nuitka/OptionParsing.py +2473 -0
  11. nuitka/Options.py +2948 -0
  12. nuitka/OutputDirectories.py +201 -0
  13. nuitka/PostProcessing.py +551 -0
  14. nuitka/Progress.py +252 -0
  15. nuitka/PythonFlavors.py +426 -0
  16. nuitka/PythonOperators.py +146 -0
  17. nuitka/PythonVersions.py +513 -0
  18. nuitka/Serialization.py +291 -0
  19. nuitka/SourceCodeReferences.py +176 -0
  20. nuitka/Tracing.py +579 -0
  21. nuitka/TreeXML.py +141 -0
  22. nuitka/Variables.py +515 -0
  23. nuitka/Version.py +88 -0
  24. nuitka/__init__.py +19 -0
  25. nuitka/__main__.py +224 -0
  26. nuitka/__past__.py +217 -0
  27. nuitka/build/Backend.scons +1111 -0
  28. nuitka/build/CCompilerVersion.scons +281 -0
  29. nuitka/build/DataComposerInterface.py +116 -0
  30. nuitka/build/Offsets.scons +626 -0
  31. nuitka/build/Onefile.scons +564 -0
  32. nuitka/build/SconsCaching.py +451 -0
  33. nuitka/build/SconsCompilerSettings.py +1133 -0
  34. nuitka/build/SconsHacks.py +215 -0
  35. nuitka/build/SconsInterface.py +664 -0
  36. nuitka/build/SconsProgress.py +100 -0
  37. nuitka/build/SconsSpawn.py +436 -0
  38. nuitka/build/SconsUtils.py +939 -0
  39. nuitka/build/__init__.py +19 -0
  40. nuitka/build/include/nuitka/allocator.h +450 -0
  41. nuitka/build/include/nuitka/builtins.h +97 -0
  42. nuitka/build/include/nuitka/calling.h +123 -0
  43. nuitka/build/include/nuitka/checkers.h +39 -0
  44. nuitka/build/include/nuitka/checksum_tools.h +28 -0
  45. nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
  46. nuitka/build/include/nuitka/compiled_cell.h +64 -0
  47. nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
  48. nuitka/build/include/nuitka/compiled_frame.h +502 -0
  49. nuitka/build/include/nuitka/compiled_function.h +170 -0
  50. nuitka/build/include/nuitka/compiled_generator.h +287 -0
  51. nuitka/build/include/nuitka/compiled_method.h +54 -0
  52. nuitka/build/include/nuitka/constants.h +251 -0
  53. nuitka/build/include/nuitka/constants_blob.h +34 -0
  54. nuitka/build/include/nuitka/debug_settings.h +60 -0
  55. nuitka/build/include/nuitka/environment_variables.h +30 -0
  56. nuitka/build/include/nuitka/environment_variables_system.h +51 -0
  57. nuitka/build/include/nuitka/exception_groups.h +167 -0
  58. nuitka/build/include/nuitka/exceptions.h +1458 -0
  59. nuitka/build/include/nuitka/filesystem_paths.h +117 -0
  60. nuitka/build/include/nuitka/freelists.h +92 -0
  61. nuitka/build/include/nuitka/hedley.h +1774 -0
  62. nuitka/build/include/nuitka/helper/attributes.h +90 -0
  63. nuitka/build/include/nuitka/helper/boolean.h +86 -0
  64. nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
  65. nuitka/build/include/nuitka/helper/bytes.h +28 -0
  66. nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
  67. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  68. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  69. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  70. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_eq.h +247 -0
  74. nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
  75. nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
  76. nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
  77. nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
  78. nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
  79. nuitka/build/include/nuitka/helper/complex.h +46 -0
  80. nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
  81. nuitka/build/include/nuitka/helper/floats.h +32 -0
  82. nuitka/build/include/nuitka/helper/import_hard.h +121 -0
  83. nuitka/build/include/nuitka/helper/indexes.h +47 -0
  84. nuitka/build/include/nuitka/helper/ints.h +165 -0
  85. nuitka/build/include/nuitka/helper/iterators.h +376 -0
  86. nuitka/build/include/nuitka/helper/lists.h +94 -0
  87. nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
  88. nuitka/build/include/nuitka/helper/mappings.h +39 -0
  89. nuitka/build/include/nuitka/helper/operations.h +114 -0
  90. nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
  91. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
  92. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
  93. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
  94. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
  95. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  96. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
  97. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
  98. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
  100. nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
  101. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
  102. nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
  103. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
  104. nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
  105. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
  106. nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
  107. nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
  108. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
  109. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
  110. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
  111. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
  112. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
  113. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
  114. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
  115. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
  116. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
  117. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
  118. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
  119. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
  120. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
  121. nuitka/build/include/nuitka/helper/raising.h +114 -0
  122. nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
  123. nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
  124. nuitka/build/include/nuitka/helper/sequences.h +33 -0
  125. nuitka/build/include/nuitka/helper/sets.h +25 -0
  126. nuitka/build/include/nuitka/helper/slices.h +314 -0
  127. nuitka/build/include/nuitka/helper/strings.h +30 -0
  128. nuitka/build/include/nuitka/helper/subscripts.h +390 -0
  129. nuitka/build/include/nuitka/helper/tuples.h +187 -0
  130. nuitka/build/include/nuitka/helpers.h +417 -0
  131. nuitka/build/include/nuitka/importing.h +149 -0
  132. nuitka/build/include/nuitka/incbin.h +402 -0
  133. nuitka/build/include/nuitka/jit_sources.h +25 -0
  134. nuitka/build/include/nuitka/prelude.h +626 -0
  135. nuitka/build/include/nuitka/printing.h +84 -0
  136. nuitka/build/include/nuitka/python_pgo.h +57 -0
  137. nuitka/build/include/nuitka/safe_string_ops.h +57 -0
  138. nuitka/build/include/nuitka/threading.h +142 -0
  139. nuitka/build/include/nuitka/tracing.h +82 -0
  140. nuitka/build/include/nuitka/type_aliases.h +30 -0
  141. nuitka/build/include/nuitka/unfreezing.h +91 -0
  142. nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
  143. nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
  144. nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
  145. nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
  146. nuitka/build/inline_copy/bin/scons.py +58 -0
  147. nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
  148. nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
  149. nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
  150. nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
  151. nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
  152. nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
  153. nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
  154. nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
  155. nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
  156. nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
  157. nuitka/build/inline_copy/glob2/LICENSE +27 -0
  158. nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
  159. nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
  160. nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
  161. nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
  162. nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
  163. nuitka/build/inline_copy/jinja2/README.rst +2 -0
  164. nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
  165. nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
  166. nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
  167. nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
  168. nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
  169. nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
  170. nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
  171. nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
  172. nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
  173. nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
  174. nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
  175. nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
  176. nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
  177. nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
  178. nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
  179. nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
  180. nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
  181. nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
  182. nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
  183. nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
  184. nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
  185. nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
  186. nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
  187. nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
  188. nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
  189. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
  190. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
  191. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
  192. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
  193. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
  194. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
  195. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
  196. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
  197. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
  198. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
  199. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
  200. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
  201. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
  202. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
  203. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
  204. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
  205. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
  206. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
  207. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
  208. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
  209. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
  210. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
  211. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
  212. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
  213. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
  214. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
  215. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
  216. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
  217. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
  218. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
  219. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
  220. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
  221. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
  222. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
  223. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
  224. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
  225. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
  226. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
  227. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
  228. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
  229. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
  230. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
  231. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
  232. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
  233. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
  234. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
  235. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
  236. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
  237. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
  238. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
  239. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
  240. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
  241. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
  242. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
  243. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
  244. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
  245. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
  246. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
  247. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
  248. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
  249. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
  250. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
  251. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
  252. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
  253. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
  254. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
  255. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
  256. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
  257. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
  258. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
  259. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
  260. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
  261. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
  262. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
  263. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
  264. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
  265. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
  266. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
  267. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
  268. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
  269. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
  270. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
  271. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
  272. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
  273. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
  274. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
  275. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
  276. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
  277. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
  278. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
  279. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
  280. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
  281. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
  282. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
  283. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
  284. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
  285. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
  286. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
  287. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
  288. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
  289. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
  290. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
  291. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
  292. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
  293. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
  294. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
  295. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
  296. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
  297. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
  298. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
  299. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
  300. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
  301. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
  302. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
  303. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
  304. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
  305. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
  306. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
  307. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
  308. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
  309. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
  310. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
  311. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
  312. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
  313. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
  314. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
  315. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
  316. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
  317. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
  318. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
  319. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
  320. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
  321. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
  322. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
  323. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
  324. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
  325. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
  326. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
  327. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
  328. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
  329. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
  330. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
  331. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
  332. nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
  333. nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
  334. nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
  335. nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
  336. nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
  337. nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
  338. nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
  339. nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
  340. nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
  341. nuitka/build/inline_copy/pefile/pefile.py +8034 -0
  342. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
  343. nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
  344. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  345. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  346. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  347. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  348. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  349. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  350. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  351. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  352. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  353. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  354. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  355. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  356. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  357. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  358. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  359. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  360. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  361. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  362. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  363. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  364. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  365. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  366. nuitka/build/inline_copy/stubgen/six.py +998 -0
  367. nuitka/build/inline_copy/stubgen/stubgen.py +484 -0
  368. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
  369. nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
  370. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
  371. nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
  372. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
  373. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
  374. nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
  375. nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
  376. nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
  377. nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
  378. nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
  379. nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
  380. nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
  381. nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
  382. nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
  383. nuitka/build/inline_copy/yaml/LICENSE +20 -0
  384. nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
  385. nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
  386. nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
  387. nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
  388. nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
  389. nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
  390. nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
  391. nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
  392. nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
  393. nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
  394. nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
  395. nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
  396. nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
  397. nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
  398. nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
  399. nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
  400. nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
  401. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  402. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  403. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  404. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  405. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  406. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  407. nuitka/build/inline_copy/zstd/LICENSE.txt +30 -0
  408. nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
  409. nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
  410. nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
  411. nuitka/build/inline_copy/zstd/common/debug.h +107 -0
  412. nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
  413. nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
  414. nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
  415. nuitka/build/inline_copy/zstd/common/fse.h +715 -0
  416. nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
  417. nuitka/build/inline_copy/zstd/common/huf.h +361 -0
  418. nuitka/build/inline_copy/zstd/common/mem.h +426 -0
  419. nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
  420. nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
  421. nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
  422. nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
  423. nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
  424. nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
  425. nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
  426. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
  427. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
  428. nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
  429. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
  430. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
  431. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
  432. nuitka/build/inline_copy/zstd/zstd.h +2391 -0
  433. nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
  434. nuitka/build/static_src/CompiledCellType.c +300 -0
  435. nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
  436. nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
  437. nuitka/build/static_src/CompiledFrameType.c +1337 -0
  438. nuitka/build/static_src/CompiledFunctionType.c +3320 -0
  439. nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
  440. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
  441. nuitka/build/static_src/CompiledMethodType.c +614 -0
  442. nuitka/build/static_src/GenerateHeadersMain.c +30 -0
  443. nuitka/build/static_src/HelpersAllocator.c +939 -0
  444. nuitka/build/static_src/HelpersAttributes.c +1241 -0
  445. nuitka/build/static_src/HelpersBuiltin.c +901 -0
  446. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
  447. nuitka/build/static_src/HelpersBytes.c +107 -0
  448. nuitka/build/static_src/HelpersCalling.c +397 -0
  449. nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
  450. nuitka/build/static_src/HelpersChecksumTools.c +59 -0
  451. nuitka/build/static_src/HelpersClasses.c +91 -0
  452. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  453. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  454. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  455. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  456. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  457. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  458. nuitka/build/static_src/HelpersComparisonEq.c +12070 -0
  459. nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
  460. nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
  461. nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
  462. nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
  463. nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
  464. nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
  465. nuitka/build/static_src/HelpersConsole.c +124 -0
  466. nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
  467. nuitka/build/static_src/HelpersDeepcopy.c +636 -0
  468. nuitka/build/static_src/HelpersDictionaries.c +1739 -0
  469. nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
  470. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  471. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  472. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
  473. nuitka/build/static_src/HelpersExceptions.c +298 -0
  474. nuitka/build/static_src/HelpersFiles.c +353 -0
  475. nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
  476. nuitka/build/static_src/HelpersFloats.c +92 -0
  477. nuitka/build/static_src/HelpersHeapStorage.c +68 -0
  478. nuitka/build/static_src/HelpersImport.c +506 -0
  479. nuitka/build/static_src/HelpersImportHard.c +526 -0
  480. nuitka/build/static_src/HelpersJitSources.c +48 -0
  481. nuitka/build/static_src/HelpersLists.c +899 -0
  482. nuitka/build/static_src/HelpersListsGenerated.c +564 -0
  483. nuitka/build/static_src/HelpersMappings.c +46 -0
  484. nuitka/build/static_src/HelpersMatching.c +192 -0
  485. nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
  486. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
  487. nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
  488. nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
  489. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
  490. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
  491. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
  492. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  493. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
  494. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
  495. nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
  496. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
  497. nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
  498. nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
  499. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
  500. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
  501. nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
  502. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
  503. nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
  504. nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
  505. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
  506. nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
  507. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
  508. nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
  509. nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
  510. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
  511. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
  512. nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
  513. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
  514. nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
  515. nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
  516. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
  517. nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
  518. nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
  519. nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
  520. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
  521. nuitka/build/static_src/HelpersProfiling.c +104 -0
  522. nuitka/build/static_src/HelpersPythonPgo.c +113 -0
  523. nuitka/build/static_src/HelpersRaising.c +447 -0
  524. nuitka/build/static_src/HelpersSafeStrings.c +185 -0
  525. nuitka/build/static_src/HelpersSequences.c +134 -0
  526. nuitka/build/static_src/HelpersSlices.c +73 -0
  527. nuitka/build/static_src/HelpersStrings.c +998 -0
  528. nuitka/build/static_src/HelpersTuples.c +148 -0
  529. nuitka/build/static_src/HelpersTypes.c +329 -0
  530. nuitka/build/static_src/InspectPatcher.c +439 -0
  531. nuitka/build/static_src/MainProgram.c +2060 -0
  532. nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
  533. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
  534. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
  535. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
  536. nuitka/build/static_src/OnefileBootstrap.c +1580 -0
  537. nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
  538. nuitka/code_generation/AsyncgenCodes.py +186 -0
  539. nuitka/code_generation/AttributeCodes.py +357 -0
  540. nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
  541. nuitka/code_generation/BranchCodes.py +67 -0
  542. nuitka/code_generation/BuiltinCodes.py +529 -0
  543. nuitka/code_generation/CallCodes.py +1186 -0
  544. nuitka/code_generation/ClassCodes.py +156 -0
  545. nuitka/code_generation/CodeGeneration.py +1078 -0
  546. nuitka/code_generation/CodeHelperSelection.py +81 -0
  547. nuitka/code_generation/CodeHelpers.py +455 -0
  548. nuitka/code_generation/CodeObjectCodes.py +165 -0
  549. nuitka/code_generation/ComparisonCodes.py +569 -0
  550. nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
  551. nuitka/code_generation/ConditionalCodes.py +236 -0
  552. nuitka/code_generation/ConstantCodes.py +243 -0
  553. nuitka/code_generation/Contexts.py +1248 -0
  554. nuitka/code_generation/CoroutineCodes.py +253 -0
  555. nuitka/code_generation/CtypesCodes.py +46 -0
  556. nuitka/code_generation/DictCodes.py +918 -0
  557. nuitka/code_generation/Emission.py +75 -0
  558. nuitka/code_generation/ErrorCodes.py +281 -0
  559. nuitka/code_generation/EvalCodes.py +444 -0
  560. nuitka/code_generation/ExceptionCodes.py +337 -0
  561. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
  562. nuitka/code_generation/ExpressionCodes.py +61 -0
  563. nuitka/code_generation/FrameCodes.py +518 -0
  564. nuitka/code_generation/FunctionCodes.py +858 -0
  565. nuitka/code_generation/GeneratorCodes.py +218 -0
  566. nuitka/code_generation/GlobalConstants.py +249 -0
  567. nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
  568. nuitka/code_generation/IdCodes.py +53 -0
  569. nuitka/code_generation/ImportCodes.py +468 -0
  570. nuitka/code_generation/Indentation.py +45 -0
  571. nuitka/code_generation/IndexCodes.py +50 -0
  572. nuitka/code_generation/InjectCCodes.py +28 -0
  573. nuitka/code_generation/IntegerCodes.py +110 -0
  574. nuitka/code_generation/IteratorCodes.py +378 -0
  575. nuitka/code_generation/JitCodes.py +44 -0
  576. nuitka/code_generation/LabelCodes.py +68 -0
  577. nuitka/code_generation/LineNumberCodes.py +91 -0
  578. nuitka/code_generation/ListCodes.py +502 -0
  579. nuitka/code_generation/LoaderCodes.py +193 -0
  580. nuitka/code_generation/LocalsDictCodes.py +359 -0
  581. nuitka/code_generation/LoopCodes.py +88 -0
  582. nuitka/code_generation/MatchCodes.py +67 -0
  583. nuitka/code_generation/ModuleCodes.py +247 -0
  584. nuitka/code_generation/Namify.py +260 -0
  585. nuitka/code_generation/NetworkxCodes.py +51 -0
  586. nuitka/code_generation/OperationCodes.py +398 -0
  587. nuitka/code_generation/PackageResourceCodes.py +986 -0
  588. nuitka/code_generation/PrintCodes.py +93 -0
  589. nuitka/code_generation/PythonAPICodes.py +215 -0
  590. nuitka/code_generation/RaisingCodes.py +481 -0
  591. nuitka/code_generation/Reports.py +115 -0
  592. nuitka/code_generation/ReturnCodes.py +143 -0
  593. nuitka/code_generation/SetCodes.py +196 -0
  594. nuitka/code_generation/SliceCodes.py +465 -0
  595. nuitka/code_generation/StringCodes.py +303 -0
  596. nuitka/code_generation/SubscriptCodes.py +263 -0
  597. nuitka/code_generation/TensorflowCodes.py +54 -0
  598. nuitka/code_generation/TryCodes.py +326 -0
  599. nuitka/code_generation/TupleCodes.py +115 -0
  600. nuitka/code_generation/TypeAliasCodes.py +120 -0
  601. nuitka/code_generation/VariableCodes.py +519 -0
  602. nuitka/code_generation/VariableDeclarations.py +279 -0
  603. nuitka/code_generation/YieldCodes.py +253 -0
  604. nuitka/code_generation/__init__.py +19 -0
  605. nuitka/code_generation/c_types/CTypeBases.py +177 -0
  606. nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
  607. nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
  608. nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
  609. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
  610. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
  611. nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
  612. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
  613. nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
  614. nuitka/code_generation/c_types/CTypeVoids.py +92 -0
  615. nuitka/code_generation/c_types/__init__.py +19 -0
  616. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
  617. nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
  618. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
  619. nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
  620. nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
  621. nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
  622. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
  623. nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
  624. nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
  625. nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
  626. nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
  627. nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
  628. nuitka/code_generation/templates/__init__.py +19 -0
  629. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
  630. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
  631. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
  632. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
  633. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
  634. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
  635. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
  636. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
  637. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
  638. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
  639. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
  640. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
  641. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  642. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
  643. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
  644. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  645. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
  646. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
  647. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
  648. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
  649. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
  650. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
  651. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
  652. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
  653. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
  654. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
  655. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
  656. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
  657. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
  658. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
  659. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
  660. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
  661. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
  662. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
  663. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
  664. nuitka/containers/Namedtuples.py +51 -0
  665. nuitka/containers/OrderedDicts.py +191 -0
  666. nuitka/containers/OrderedSets.py +123 -0
  667. nuitka/containers/OrderedSetsFallback.py +139 -0
  668. nuitka/containers/__init__.py +19 -0
  669. nuitka/distutils/Build.py +76 -0
  670. nuitka/distutils/DistutilCommands.py +438 -0
  671. nuitka/distutils/__init__.py +19 -0
  672. nuitka/finalizations/Finalization.py +35 -0
  673. nuitka/finalizations/FinalizeMarkups.py +136 -0
  674. nuitka/finalizations/__init__.py +19 -0
  675. nuitka/freezer/DependsExe.py +257 -0
  676. nuitka/freezer/DllDependenciesCommon.py +97 -0
  677. nuitka/freezer/DllDependenciesMacOS.py +444 -0
  678. nuitka/freezer/DllDependenciesPosix.py +242 -0
  679. nuitka/freezer/DllDependenciesWin32.py +315 -0
  680. nuitka/freezer/ImportDetection.py +359 -0
  681. nuitka/freezer/IncludedDataFiles.py +689 -0
  682. nuitka/freezer/IncludedEntryPoints.py +376 -0
  683. nuitka/freezer/Onefile.py +296 -0
  684. nuitka/freezer/Standalone.py +520 -0
  685. nuitka/freezer/__init__.py +19 -0
  686. nuitka/importing/IgnoreListing.py +449 -0
  687. nuitka/importing/ImportCache.py +95 -0
  688. nuitka/importing/ImportResolving.py +186 -0
  689. nuitka/importing/Importing.py +1200 -0
  690. nuitka/importing/PreloadedPackages.py +164 -0
  691. nuitka/importing/Recursion.py +611 -0
  692. nuitka/importing/StandardLibrary.py +429 -0
  693. nuitka/importing/__init__.py +19 -0
  694. nuitka/nodes/AsyncgenNodes.py +107 -0
  695. nuitka/nodes/AttributeLookupNodes.py +124 -0
  696. nuitka/nodes/AttributeNodes.py +386 -0
  697. nuitka/nodes/AttributeNodesGenerated.py +10734 -0
  698. nuitka/nodes/BuiltinAllNodes.py +115 -0
  699. nuitka/nodes/BuiltinAnyNodes.py +124 -0
  700. nuitka/nodes/BuiltinComplexNodes.py +83 -0
  701. nuitka/nodes/BuiltinDecodingNodes.py +52 -0
  702. nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
  703. nuitka/nodes/BuiltinDictNodes.py +140 -0
  704. nuitka/nodes/BuiltinFormatNodes.py +159 -0
  705. nuitka/nodes/BuiltinHashNodes.py +63 -0
  706. nuitka/nodes/BuiltinInputNodes.py +39 -0
  707. nuitka/nodes/BuiltinIntegerNodes.py +170 -0
  708. nuitka/nodes/BuiltinIteratorNodes.py +391 -0
  709. nuitka/nodes/BuiltinLenNodes.py +61 -0
  710. nuitka/nodes/BuiltinNextNodes.py +111 -0
  711. nuitka/nodes/BuiltinOpenNodes.py +148 -0
  712. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
  713. nuitka/nodes/BuiltinRangeNodes.py +690 -0
  714. nuitka/nodes/BuiltinRefNodes.py +314 -0
  715. nuitka/nodes/BuiltinSumNodes.py +104 -0
  716. nuitka/nodes/BuiltinTypeNodes.py +454 -0
  717. nuitka/nodes/BuiltinVarsNodes.py +44 -0
  718. nuitka/nodes/BytesNodes.py +829 -0
  719. nuitka/nodes/CallNodes.py +217 -0
  720. nuitka/nodes/Checkers.py +55 -0
  721. nuitka/nodes/ChildrenHavingMixins.py +21576 -0
  722. nuitka/nodes/ClassNodes.py +286 -0
  723. nuitka/nodes/CodeObjectSpecs.py +230 -0
  724. nuitka/nodes/ComparisonNodes.py +687 -0
  725. nuitka/nodes/ConditionalNodes.py +884 -0
  726. nuitka/nodes/ConstantRefNodes.py +1717 -0
  727. nuitka/nodes/ContainerMakingNodes.py +408 -0
  728. nuitka/nodes/ContainerOperationNodes.py +87 -0
  729. nuitka/nodes/CoroutineNodes.py +144 -0
  730. nuitka/nodes/CtypesNodes.py +51 -0
  731. nuitka/nodes/DictionaryNodes.py +1513 -0
  732. nuitka/nodes/ExceptionNodes.py +393 -0
  733. nuitka/nodes/ExecEvalNodes.py +229 -0
  734. nuitka/nodes/ExpressionBases.py +1301 -0
  735. nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
  736. nuitka/nodes/ExpressionShapeMixins.py +886 -0
  737. nuitka/nodes/FrameNodes.py +413 -0
  738. nuitka/nodes/FunctionAttributeNodes.py +102 -0
  739. nuitka/nodes/FunctionNodes.py +1303 -0
  740. nuitka/nodes/FutureSpecs.py +224 -0
  741. nuitka/nodes/GeneratorNodes.py +201 -0
  742. nuitka/nodes/GlobalsLocalsNodes.py +209 -0
  743. nuitka/nodes/HardImportNodesGenerated.py +3599 -0
  744. nuitka/nodes/ImportHardNodes.py +185 -0
  745. nuitka/nodes/ImportNodes.py +1366 -0
  746. nuitka/nodes/IndicatorMixins.py +79 -0
  747. nuitka/nodes/InjectCNodes.py +51 -0
  748. nuitka/nodes/IterationHandles.py +407 -0
  749. nuitka/nodes/KeyValuePairNodes.py +378 -0
  750. nuitka/nodes/ListOperationNodes.py +525 -0
  751. nuitka/nodes/LocalsDictNodes.py +717 -0
  752. nuitka/nodes/LocalsScopes.py +505 -0
  753. nuitka/nodes/LoopNodes.py +445 -0
  754. nuitka/nodes/MatchNodes.py +60 -0
  755. nuitka/nodes/ModuleAttributeNodes.py +180 -0
  756. nuitka/nodes/ModuleNodes.py +1137 -0
  757. nuitka/nodes/NetworkxNodes.py +45 -0
  758. nuitka/nodes/NodeBases.py +890 -0
  759. nuitka/nodes/NodeMakingHelpers.py +481 -0
  760. nuitka/nodes/NodeMetaClasses.py +172 -0
  761. nuitka/nodes/OperatorNodes.py +944 -0
  762. nuitka/nodes/OperatorNodesUnary.py +403 -0
  763. nuitka/nodes/OsSysNodes.py +215 -0
  764. nuitka/nodes/OutlineNodes.py +372 -0
  765. nuitka/nodes/PackageMetadataNodes.py +982 -0
  766. nuitka/nodes/PackageResourceNodes.py +424 -0
  767. nuitka/nodes/PrintNodes.py +105 -0
  768. nuitka/nodes/ReturnNodes.py +255 -0
  769. nuitka/nodes/SideEffectNodes.py +139 -0
  770. nuitka/nodes/SliceNodes.py +386 -0
  771. nuitka/nodes/StatementBasesGenerated.py +3419 -0
  772. nuitka/nodes/StatementNodes.py +316 -0
  773. nuitka/nodes/StrNodes.py +919 -0
  774. nuitka/nodes/StringConcatenationNodes.py +103 -0
  775. nuitka/nodes/SubscriptNodes.py +245 -0
  776. nuitka/nodes/TensorflowNodes.py +38 -0
  777. nuitka/nodes/TryNodes.py +519 -0
  778. nuitka/nodes/TypeMatchNodes.py +65 -0
  779. nuitka/nodes/TypeNodes.py +390 -0
  780. nuitka/nodes/VariableAssignNodes.py +1177 -0
  781. nuitka/nodes/VariableDelNodes.py +320 -0
  782. nuitka/nodes/VariableNameNodes.py +153 -0
  783. nuitka/nodes/VariableRefNodes.py +895 -0
  784. nuitka/nodes/VariableReleaseNodes.py +153 -0
  785. nuitka/nodes/YieldNodes.py +121 -0
  786. nuitka/nodes/__init__.py +19 -0
  787. nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
  788. nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
  789. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  790. nuitka/nodes/shapes/ShapeMixins.py +255 -0
  791. nuitka/nodes/shapes/StandardShapes.py +1384 -0
  792. nuitka/nodes/shapes/__init__.py +19 -0
  793. nuitka/optimizations/BytecodeDemotion.py +105 -0
  794. nuitka/optimizations/FunctionInlining.py +110 -0
  795. nuitka/optimizations/Graphs.py +70 -0
  796. nuitka/optimizations/Optimization.py +363 -0
  797. nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
  798. nuitka/optimizations/Tags.py +76 -0
  799. nuitka/optimizations/TraceCollections.py +1257 -0
  800. nuitka/optimizations/ValueTraces.py +980 -0
  801. nuitka/optimizations/__init__.py +19 -0
  802. nuitka/pgo/PGO.py +160 -0
  803. nuitka/pgo/__init__.py +19 -0
  804. nuitka/plugins/PluginBase.py +1924 -0
  805. nuitka/plugins/Plugins.py +2007 -0
  806. nuitka/plugins/YamlPluginBase.py +121 -0
  807. nuitka/plugins/__init__.py +19 -0
  808. nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
  809. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
  810. nuitka/plugins/standard/DataFilesPlugin.py +311 -0
  811. nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
  812. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  813. nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
  814. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
  815. nuitka/plugins/standard/DillPlugin.py +137 -0
  816. nuitka/plugins/standard/DllFilesPlugin.py +527 -0
  817. nuitka/plugins/standard/EnumPlugin.py +64 -0
  818. nuitka/plugins/standard/EventletPlugin.py +57 -0
  819. nuitka/plugins/standard/GeventPlugin.py +64 -0
  820. nuitka/plugins/standard/GiPlugin.py +118 -0
  821. nuitka/plugins/standard/GlfwPlugin.py +138 -0
  822. nuitka/plugins/standard/ImplicitImports.py +845 -0
  823. nuitka/plugins/standard/KivyPlugin.py +141 -0
  824. nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
  825. nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
  826. nuitka/plugins/standard/NumpyPlugin.py +35 -0
  827. nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
  828. nuitka/plugins/standard/PbrPlugin.py +62 -0
  829. nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
  830. nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
  831. nuitka/plugins/standard/PmwPlugin.py +248 -0
  832. nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
  833. nuitka/plugins/standard/PywebViewPlugin.py +81 -0
  834. nuitka/plugins/standard/SpacyPlugin.py +137 -0
  835. nuitka/plugins/standard/TensorflowPlugin.py +35 -0
  836. nuitka/plugins/standard/TkinterPlugin.py +416 -0
  837. nuitka/plugins/standard/TorchPlugin.py +35 -0
  838. nuitka/plugins/standard/TransformersPlugin.py +121 -0
  839. nuitka/plugins/standard/TrioPlugin.py +33 -0
  840. nuitka/plugins/standard/UpxPlugin.py +174 -0
  841. nuitka/plugins/standard/__init__.py +19 -0
  842. nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
  843. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
  844. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
  845. nuitka/reports/CompilationReportReader.py +83 -0
  846. nuitka/reports/LicenseReport.rst.j2 +41 -0
  847. nuitka/reports/Reports.py +961 -0
  848. nuitka/reports/__init__.py +19 -0
  849. nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
  850. nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
  851. nuitka/specs/BuiltinListOperationSpecs.py +80 -0
  852. nuitka/specs/BuiltinParameterSpecs.py +831 -0
  853. nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
  854. nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
  855. nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
  856. nuitka/specs/HardImportSpecs.py +236 -0
  857. nuitka/specs/ParameterSpecs.py +630 -0
  858. nuitka/specs/__init__.py +19 -0
  859. nuitka/tools/Basics.py +55 -0
  860. nuitka/tools/__init__.py +19 -0
  861. nuitka/tools/commercial/__init__.py +21 -0
  862. nuitka/tools/data_composer/DataComposer.py +593 -0
  863. nuitka/tools/data_composer/__init__.py +19 -0
  864. nuitka/tools/data_composer/__main__.py +41 -0
  865. nuitka/tools/environments/CreateEnvironment.py +69 -0
  866. nuitka/tools/environments/Virtualenv.py +158 -0
  867. nuitka/tools/environments/__init__.py +19 -0
  868. nuitka/tools/general/__init__.py +19 -0
  869. nuitka/tools/general/dll_report/__init__.py +19 -0
  870. nuitka/tools/general/dll_report/__main__.py +83 -0
  871. nuitka/tools/general/find_module/FindModuleCode.py +127 -0
  872. nuitka/tools/general/find_module/__init__.py +19 -0
  873. nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
  874. nuitka/tools/general/generate_header/__init__.py +19 -0
  875. nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
  876. nuitka/tools/onefile_compressor/__init__.py +19 -0
  877. nuitka/tools/onefile_compressor/__main__.py +41 -0
  878. nuitka/tools/podman/Podman.py +55 -0
  879. nuitka/tools/podman/__init__.py +19 -0
  880. nuitka/tools/podman/__main__.py +425 -0
  881. nuitka/tools/profiler/__init__.py +19 -0
  882. nuitka/tools/profiler/__main__.py +93 -0
  883. nuitka/tools/scanning/DisplayDistributions.py +39 -0
  884. nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
  885. nuitka/tools/scanning/DisplayPackageData.py +73 -0
  886. nuitka/tools/scanning/__init__.py +19 -0
  887. nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
  888. nuitka/tools/specialize/Common.py +380 -0
  889. nuitka/tools/specialize/SpecializeC.py +1483 -0
  890. nuitka/tools/specialize/SpecializePython.py +1151 -0
  891. nuitka/tools/specialize/__init__.py +19 -0
  892. nuitka/tools/testing/Common.py +2007 -0
  893. nuitka/tools/testing/Constructs.py +53 -0
  894. nuitka/tools/testing/DocTests.py +156 -0
  895. nuitka/tools/testing/OutputComparison.py +313 -0
  896. nuitka/tools/testing/Pythons.py +34 -0
  897. nuitka/tools/testing/RuntimeTracing.py +260 -0
  898. nuitka/tools/testing/SearchModes.py +208 -0
  899. nuitka/tools/testing/Valgrind.py +103 -0
  900. nuitka/tools/testing/__init__.py +19 -0
  901. nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
  902. nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
  903. nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
  904. nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
  905. nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
  906. nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
  907. nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
  908. nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
  909. nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
  910. nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
  911. nuitka/tools/watch/AutoStage.py +145 -0
  912. nuitka/tools/watch/Common.py +55 -0
  913. nuitka/tools/watch/Conda.py +125 -0
  914. nuitka/tools/watch/GitHub.py +113 -0
  915. nuitka/tools/watch/Pacman.py +73 -0
  916. nuitka/tools/watch/Pipenv.py +145 -0
  917. nuitka/tools/watch/__init__.py +19 -0
  918. nuitka/tools/watch/__main__.py +615 -0
  919. nuitka/tree/Building.py +1459 -0
  920. nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
  921. nuitka/tree/Extractions.py +48 -0
  922. nuitka/tree/FutureSpecState.py +71 -0
  923. nuitka/tree/InternalModule.py +96 -0
  924. nuitka/tree/Operations.py +45 -0
  925. nuitka/tree/ReformulationAssertStatements.py +97 -0
  926. nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
  927. nuitka/tree/ReformulationBooleanExpressions.py +97 -0
  928. nuitka/tree/ReformulationCallExpressions.py +314 -0
  929. nuitka/tree/ReformulationClasses.py +407 -0
  930. nuitka/tree/ReformulationClasses3.py +1149 -0
  931. nuitka/tree/ReformulationComparisonExpressions.py +174 -0
  932. nuitka/tree/ReformulationContractionExpressions.py +676 -0
  933. nuitka/tree/ReformulationDictionaryCreation.py +304 -0
  934. nuitka/tree/ReformulationExecStatements.py +386 -0
  935. nuitka/tree/ReformulationForLoopStatements.py +215 -0
  936. nuitka/tree/ReformulationFunctionStatements.py +931 -0
  937. nuitka/tree/ReformulationImportStatements.py +333 -0
  938. nuitka/tree/ReformulationLambdaExpressions.py +185 -0
  939. nuitka/tree/ReformulationMatchStatements.py +797 -0
  940. nuitka/tree/ReformulationMultidist.py +80 -0
  941. nuitka/tree/ReformulationNamespacePackages.py +239 -0
  942. nuitka/tree/ReformulationPrintStatements.py +127 -0
  943. nuitka/tree/ReformulationSequenceCreation.py +438 -0
  944. nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
  945. nuitka/tree/ReformulationTryExceptStatements.py +418 -0
  946. nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
  947. nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
  948. nuitka/tree/ReformulationWithStatements.py +382 -0
  949. nuitka/tree/ReformulationYieldExpressions.py +133 -0
  950. nuitka/tree/SourceHandling.py +476 -0
  951. nuitka/tree/SyntaxErrors.py +143 -0
  952. nuitka/tree/TreeHelpers.py +720 -0
  953. nuitka/tree/VariableClosure.py +483 -0
  954. nuitka/tree/__init__.py +19 -0
  955. nuitka/utils/AppDirs.py +104 -0
  956. nuitka/utils/CStrings.py +208 -0
  957. nuitka/utils/CommandLineOptions.py +207 -0
  958. nuitka/utils/Distributions.py +728 -0
  959. nuitka/utils/Download.py +217 -0
  960. nuitka/utils/Execution.py +517 -0
  961. nuitka/utils/FileOperations.py +1587 -0
  962. nuitka/utils/Hashing.py +137 -0
  963. nuitka/utils/Images.py +79 -0
  964. nuitka/utils/Importing.py +335 -0
  965. nuitka/utils/InlineCopies.py +52 -0
  966. nuitka/utils/InstalledPythons.py +254 -0
  967. nuitka/utils/InstanceCounters.py +86 -0
  968. nuitka/utils/Jinja2.py +158 -0
  969. nuitka/utils/Json.py +40 -0
  970. nuitka/utils/MacOSApp.py +134 -0
  971. nuitka/utils/MemoryUsage.py +165 -0
  972. nuitka/utils/ModuleNames.py +317 -0
  973. nuitka/utils/PackageResources.py +44 -0
  974. nuitka/utils/ReExecute.py +152 -0
  975. nuitka/utils/Rest.py +60 -0
  976. nuitka/utils/SharedLibraries.py +1014 -0
  977. nuitka/utils/Shebang.py +113 -0
  978. nuitka/utils/Signing.py +144 -0
  979. nuitka/utils/SlotMetaClasses.py +57 -0
  980. nuitka/utils/StaticLibraries.py +260 -0
  981. nuitka/utils/ThreadedExecutor.py +87 -0
  982. nuitka/utils/Timing.py +102 -0
  983. nuitka/utils/Utils.py +483 -0
  984. nuitka/utils/WindowsFileUsage.py +337 -0
  985. nuitka/utils/WindowsResources.py +652 -0
  986. nuitka/utils/Yaml.py +247 -0
  987. nuitka/utils/__init__.py +19 -0
  988. nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
  989. nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
  990. nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
  991. nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
  992. nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
  993. nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
  994. nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
  995. nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1276 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ jinja2.environment
4
+ ~~~~~~~~~~~~~~~~~~
5
+
6
+ Provides a class that holds runtime and parsing time options.
7
+
8
+ :copyright: (c) 2017 by the Jinja Team.
9
+ :license: BSD, see LICENSE for more details.
10
+ """
11
+ import os
12
+ import sys
13
+ import weakref
14
+ from functools import reduce, partial
15
+ from jinja2 import nodes
16
+ from jinja2.defaults import BLOCK_START_STRING, \
17
+ BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \
18
+ COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \
19
+ LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \
20
+ DEFAULT_FILTERS, DEFAULT_TESTS, DEFAULT_NAMESPACE, \
21
+ DEFAULT_POLICIES, KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS
22
+ from jinja2.lexer import get_lexer, TokenStream
23
+ from jinja2.parser import Parser
24
+ from jinja2.nodes import EvalContext
25
+ from jinja2.compiler import generate, CodeGenerator
26
+ from jinja2.runtime import Undefined, new_context, Context
27
+ from jinja2.exceptions import TemplateSyntaxError, TemplateNotFound, \
28
+ TemplatesNotFound, TemplateRuntimeError
29
+ from jinja2.utils import import_string, LRUCache, Markup, missing, \
30
+ concat, consume, internalcode, have_async_gen
31
+ from jinja2._compat import imap, ifilter, string_types, iteritems, \
32
+ text_type, reraise, implements_iterator, implements_to_string, \
33
+ encode_filename, PY2, PYPY
34
+
35
+
36
+ # for direct template usage we have up to ten living environments
37
+ _spontaneous_environments = LRUCache(10)
38
+
39
+ # the function to create jinja traceback objects. This is dynamically
40
+ # imported on the first exception in the exception handler.
41
+ _make_traceback = None
42
+
43
+
44
+ def get_spontaneous_environment(*args):
45
+ """Return a new spontaneous environment. A spontaneous environment is an
46
+ unnamed and unaccessible (in theory) environment that is used for
47
+ templates generated from a string and not from the file system.
48
+ """
49
+ try:
50
+ env = _spontaneous_environments.get(args)
51
+ except TypeError:
52
+ return Environment(*args)
53
+ if env is not None:
54
+ return env
55
+ _spontaneous_environments[args] = env = Environment(*args)
56
+ env.shared = True
57
+ return env
58
+
59
+
60
+ def create_cache(size):
61
+ """Return the cache class for the given size."""
62
+ if size == 0:
63
+ return None
64
+ if size < 0:
65
+ return {}
66
+ return LRUCache(size)
67
+
68
+
69
+ def copy_cache(cache):
70
+ """Create an empty copy of the given cache."""
71
+ if cache is None:
72
+ return None
73
+ elif type(cache) is dict:
74
+ return {}
75
+ return LRUCache(cache.capacity)
76
+
77
+
78
+ def load_extensions(environment, extensions):
79
+ """Load the extensions from the list and bind it to the environment.
80
+ Returns a dict of instantiated environments.
81
+ """
82
+ result = {}
83
+ for extension in extensions:
84
+ if isinstance(extension, string_types):
85
+ extension = import_string(extension)
86
+ result[extension.identifier] = extension(environment)
87
+ return result
88
+
89
+
90
+ def fail_for_missing_callable(string, name):
91
+ msg = string % name
92
+ if isinstance(name, Undefined):
93
+ try:
94
+ name._fail_with_undefined_error()
95
+ except Exception as e:
96
+ msg = '%s (%s; did you forget to quote the callable name?)' % (msg, e)
97
+ raise TemplateRuntimeError(msg)
98
+
99
+
100
+ def _environment_sanity_check(environment):
101
+ """Perform a sanity check on the environment."""
102
+ assert issubclass(environment.undefined, Undefined), 'undefined must ' \
103
+ 'be a subclass of undefined because filters depend on it.'
104
+ assert environment.block_start_string != \
105
+ environment.variable_start_string != \
106
+ environment.comment_start_string, 'block, variable and comment ' \
107
+ 'start strings must be different'
108
+ assert environment.newline_sequence in ('\r', '\r\n', '\n'), \
109
+ 'newline_sequence set to unknown line ending string.'
110
+ return environment
111
+
112
+
113
+ class Environment(object):
114
+ r"""The core component of Jinja is the `Environment`. It contains
115
+ important shared variables like configuration, filters, tests,
116
+ globals and others. Instances of this class may be modified if
117
+ they are not shared and if no template was loaded so far.
118
+ Modifications on environments after the first template was loaded
119
+ will lead to surprising effects and undefined behavior.
120
+
121
+ Here are the possible initialization parameters:
122
+
123
+ `block_start_string`
124
+ The string marking the beginning of a block. Defaults to ``'{%'``.
125
+
126
+ `block_end_string`
127
+ The string marking the end of a block. Defaults to ``'%}'``.
128
+
129
+ `variable_start_string`
130
+ The string marking the beginning of a print statement.
131
+ Defaults to ``'{{'``.
132
+
133
+ `variable_end_string`
134
+ The string marking the end of a print statement. Defaults to
135
+ ``'}}'``.
136
+
137
+ `comment_start_string`
138
+ The string marking the beginning of a comment. Defaults to ``'{#'``.
139
+
140
+ `comment_end_string`
141
+ The string marking the end of a comment. Defaults to ``'#}'``.
142
+
143
+ `line_statement_prefix`
144
+ If given and a string, this will be used as prefix for line based
145
+ statements. See also :ref:`line-statements`.
146
+
147
+ `line_comment_prefix`
148
+ If given and a string, this will be used as prefix for line based
149
+ comments. See also :ref:`line-statements`.
150
+
151
+ .. versionadded:: 2.2
152
+
153
+ `trim_blocks`
154
+ If this is set to ``True`` the first newline after a block is
155
+ removed (block, not variable tag!). Defaults to `False`.
156
+
157
+ `lstrip_blocks`
158
+ If this is set to ``True`` leading spaces and tabs are stripped
159
+ from the start of a line to a block. Defaults to `False`.
160
+
161
+ `newline_sequence`
162
+ The sequence that starts a newline. Must be one of ``'\r'``,
163
+ ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a
164
+ useful default for Linux and OS X systems as well as web
165
+ applications.
166
+
167
+ `keep_trailing_newline`
168
+ Preserve the trailing newline when rendering templates.
169
+ The default is ``False``, which causes a single newline,
170
+ if present, to be stripped from the end of the template.
171
+
172
+ .. versionadded:: 2.7
173
+
174
+ `extensions`
175
+ List of Jinja extensions to use. This can either be import paths
176
+ as strings or extension classes. For more information have a
177
+ look at :ref:`the extensions documentation <jinja-extensions>`.
178
+
179
+ `optimized`
180
+ should the optimizer be enabled? Default is ``True``.
181
+
182
+ `undefined`
183
+ :class:`Undefined` or a subclass of it that is used to represent
184
+ undefined values in the template.
185
+
186
+ `finalize`
187
+ A callable that can be used to process the result of a variable
188
+ expression before it is output. For example one can convert
189
+ ``None`` implicitly into an empty string here.
190
+
191
+ `autoescape`
192
+ If set to ``True`` the XML/HTML autoescaping feature is enabled by
193
+ default. For more details about autoescaping see
194
+ :class:`~jinja2.utils.Markup`. As of Jinja 2.4 this can also
195
+ be a callable that is passed the template name and has to
196
+ return ``True`` or ``False`` depending on autoescape should be
197
+ enabled by default.
198
+
199
+ .. versionchanged:: 2.4
200
+ `autoescape` can now be a function
201
+
202
+ `loader`
203
+ The template loader for this environment.
204
+
205
+ `cache_size`
206
+ The size of the cache. Per default this is ``400`` which means
207
+ that if more than 400 templates are loaded the loader will clean
208
+ out the least recently used template. If the cache size is set to
209
+ ``0`` templates are recompiled all the time, if the cache size is
210
+ ``-1`` the cache will not be cleaned.
211
+
212
+ .. versionchanged:: 2.8
213
+ The cache size was increased to 400 from a low 50.
214
+
215
+ `auto_reload`
216
+ Some loaders load templates from locations where the template
217
+ sources may change (ie: file system or database). If
218
+ ``auto_reload`` is set to ``True`` (default) every time a template is
219
+ requested the loader checks if the source changed and if yes, it
220
+ will reload the template. For higher performance it's possible to
221
+ disable that.
222
+
223
+ `bytecode_cache`
224
+ If set to a bytecode cache object, this object will provide a
225
+ cache for the internal Jinja bytecode so that templates don't
226
+ have to be parsed if they were not changed.
227
+
228
+ See :ref:`bytecode-cache` for more information.
229
+
230
+ `enable_async`
231
+ If set to true this enables async template execution which allows
232
+ you to take advantage of newer Python features. This requires
233
+ Python 3.6 or later.
234
+ """
235
+
236
+ #: if this environment is sandboxed. Modifying this variable won't make
237
+ #: the environment sandboxed though. For a real sandboxed environment
238
+ #: have a look at jinja2.sandbox. This flag alone controls the code
239
+ #: generation by the compiler.
240
+ sandboxed = False
241
+
242
+ #: True if the environment is just an overlay
243
+ overlayed = False
244
+
245
+ #: the environment this environment is linked to if it is an overlay
246
+ linked_to = None
247
+
248
+ #: shared environments have this set to `True`. A shared environment
249
+ #: must not be modified
250
+ shared = False
251
+
252
+ #: these are currently EXPERIMENTAL undocumented features.
253
+ exception_handler = None
254
+ exception_formatter = None
255
+
256
+ #: the class that is used for code generation. See
257
+ #: :class:`~jinja2.compiler.CodeGenerator` for more information.
258
+ code_generator_class = CodeGenerator
259
+
260
+ #: the context class thatis used for templates. See
261
+ #: :class:`~jinja2.runtime.Context` for more information.
262
+ context_class = Context
263
+
264
+ def __init__(self,
265
+ block_start_string=BLOCK_START_STRING,
266
+ block_end_string=BLOCK_END_STRING,
267
+ variable_start_string=VARIABLE_START_STRING,
268
+ variable_end_string=VARIABLE_END_STRING,
269
+ comment_start_string=COMMENT_START_STRING,
270
+ comment_end_string=COMMENT_END_STRING,
271
+ line_statement_prefix=LINE_STATEMENT_PREFIX,
272
+ line_comment_prefix=LINE_COMMENT_PREFIX,
273
+ trim_blocks=TRIM_BLOCKS,
274
+ lstrip_blocks=LSTRIP_BLOCKS,
275
+ newline_sequence=NEWLINE_SEQUENCE,
276
+ keep_trailing_newline=KEEP_TRAILING_NEWLINE,
277
+ extensions=(),
278
+ optimized=True,
279
+ undefined=Undefined,
280
+ finalize=None,
281
+ autoescape=False,
282
+ loader=None,
283
+ cache_size=400,
284
+ auto_reload=True,
285
+ bytecode_cache=None,
286
+ enable_async=False):
287
+ # !!Important notice!!
288
+ # The constructor accepts quite a few arguments that should be
289
+ # passed by keyword rather than position. However it's important to
290
+ # not change the order of arguments because it's used at least
291
+ # internally in those cases:
292
+ # - spontaneous environments (i18n extension and Template)
293
+ # - unittests
294
+ # If parameter changes are required only add parameters at the end
295
+ # and don't change the arguments (or the defaults!) of the arguments
296
+ # existing already.
297
+
298
+ # lexer / parser information
299
+ self.block_start_string = block_start_string
300
+ self.block_end_string = block_end_string
301
+ self.variable_start_string = variable_start_string
302
+ self.variable_end_string = variable_end_string
303
+ self.comment_start_string = comment_start_string
304
+ self.comment_end_string = comment_end_string
305
+ self.line_statement_prefix = line_statement_prefix
306
+ self.line_comment_prefix = line_comment_prefix
307
+ self.trim_blocks = trim_blocks
308
+ self.lstrip_blocks = lstrip_blocks
309
+ self.newline_sequence = newline_sequence
310
+ self.keep_trailing_newline = keep_trailing_newline
311
+
312
+ # runtime information
313
+ self.undefined = undefined
314
+ self.optimized = optimized
315
+ self.finalize = finalize
316
+ self.autoescape = autoescape
317
+
318
+ # defaults
319
+ self.filters = DEFAULT_FILTERS.copy()
320
+ self.tests = DEFAULT_TESTS.copy()
321
+ self.globals = DEFAULT_NAMESPACE.copy()
322
+
323
+ # set the loader provided
324
+ self.loader = loader
325
+ self.cache = create_cache(cache_size)
326
+ self.bytecode_cache = bytecode_cache
327
+ self.auto_reload = auto_reload
328
+
329
+ # configurable policies
330
+ self.policies = DEFAULT_POLICIES.copy()
331
+
332
+ # load extensions
333
+ self.extensions = load_extensions(self, extensions)
334
+
335
+ self.enable_async = enable_async
336
+ self.is_async = self.enable_async and have_async_gen
337
+
338
+ _environment_sanity_check(self)
339
+
340
+ def add_extension(self, extension):
341
+ """Adds an extension after the environment was created.
342
+
343
+ .. versionadded:: 2.5
344
+ """
345
+ self.extensions.update(load_extensions(self, [extension]))
346
+
347
+ def extend(self, **attributes):
348
+ """Add the items to the instance of the environment if they do not exist
349
+ yet. This is used by :ref:`extensions <writing-extensions>` to register
350
+ callbacks and configuration values without breaking inheritance.
351
+ """
352
+ for key, value in iteritems(attributes):
353
+ if not hasattr(self, key):
354
+ setattr(self, key, value)
355
+
356
+ def overlay(self, block_start_string=missing, block_end_string=missing,
357
+ variable_start_string=missing, variable_end_string=missing,
358
+ comment_start_string=missing, comment_end_string=missing,
359
+ line_statement_prefix=missing, line_comment_prefix=missing,
360
+ trim_blocks=missing, lstrip_blocks=missing,
361
+ extensions=missing, optimized=missing,
362
+ undefined=missing, finalize=missing, autoescape=missing,
363
+ loader=missing, cache_size=missing, auto_reload=missing,
364
+ bytecode_cache=missing):
365
+ """Create a new overlay environment that shares all the data with the
366
+ current environment except for cache and the overridden attributes.
367
+ Extensions cannot be removed for an overlayed environment. An overlayed
368
+ environment automatically gets all the extensions of the environment it
369
+ is linked to plus optional extra extensions.
370
+
371
+ Creating overlays should happen after the initial environment was set
372
+ up completely. Not all attributes are truly linked, some are just
373
+ copied over so modifications on the original environment may not shine
374
+ through.
375
+ """
376
+ args = dict(locals())
377
+ del args['self'], args['cache_size'], args['extensions']
378
+
379
+ rv = object.__new__(self.__class__)
380
+ rv.__dict__.update(self.__dict__)
381
+ rv.overlayed = True
382
+ rv.linked_to = self
383
+
384
+ for key, value in iteritems(args):
385
+ if value is not missing:
386
+ setattr(rv, key, value)
387
+
388
+ if cache_size is not missing:
389
+ rv.cache = create_cache(cache_size)
390
+ else:
391
+ rv.cache = copy_cache(self.cache)
392
+
393
+ rv.extensions = {}
394
+ for key, value in iteritems(self.extensions):
395
+ rv.extensions[key] = value.bind(rv)
396
+ if extensions is not missing:
397
+ rv.extensions.update(load_extensions(rv, extensions))
398
+
399
+ return _environment_sanity_check(rv)
400
+
401
+ lexer = property(get_lexer, doc="The lexer for this environment.")
402
+
403
+ def iter_extensions(self):
404
+ """Iterates over the extensions by priority."""
405
+ return iter(sorted(self.extensions.values(),
406
+ key=lambda x: x.priority))
407
+
408
+ def getitem(self, obj, argument):
409
+ """Get an item or attribute of an object but prefer the item."""
410
+ try:
411
+ return obj[argument]
412
+ except (AttributeError, TypeError, LookupError):
413
+ if isinstance(argument, string_types):
414
+ try:
415
+ attr = str(argument)
416
+ except Exception:
417
+ pass
418
+ else:
419
+ try:
420
+ return getattr(obj, attr)
421
+ except AttributeError:
422
+ pass
423
+ return self.undefined(obj=obj, name=argument)
424
+
425
+ def getattr(self, obj, attribute):
426
+ """Get an item or attribute of an object but prefer the attribute.
427
+ Unlike :meth:`getitem` the attribute *must* be a bytestring.
428
+ """
429
+ try:
430
+ return getattr(obj, attribute)
431
+ except AttributeError:
432
+ pass
433
+ try:
434
+ return obj[attribute]
435
+ except (TypeError, LookupError, AttributeError):
436
+ return self.undefined(obj=obj, name=attribute)
437
+
438
+ def call_filter(self, name, value, args=None, kwargs=None,
439
+ context=None, eval_ctx=None):
440
+ """Invokes a filter on a value the same way the compiler does it.
441
+
442
+ Note that on Python 3 this might return a coroutine in case the
443
+ filter is running from an environment in async mode and the filter
444
+ supports async execution. It's your responsibility to await this
445
+ if needed.
446
+
447
+ .. versionadded:: 2.7
448
+ """
449
+ func = self.filters.get(name)
450
+ if func is None:
451
+ fail_for_missing_callable('no filter named %r', name)
452
+ args = [value] + list(args or ())
453
+ if getattr(func, 'contextfilter', False):
454
+ if context is None:
455
+ raise TemplateRuntimeError('Attempted to invoke context '
456
+ 'filter without context')
457
+ args.insert(0, context)
458
+ elif getattr(func, 'evalcontextfilter', False):
459
+ if eval_ctx is None:
460
+ if context is not None:
461
+ eval_ctx = context.eval_ctx
462
+ else:
463
+ eval_ctx = EvalContext(self)
464
+ args.insert(0, eval_ctx)
465
+ elif getattr(func, 'environmentfilter', False):
466
+ args.insert(0, self)
467
+ return func(*args, **(kwargs or {}))
468
+
469
+ def call_test(self, name, value, args=None, kwargs=None):
470
+ """Invokes a test on a value the same way the compiler does it.
471
+
472
+ .. versionadded:: 2.7
473
+ """
474
+ func = self.tests.get(name)
475
+ if func is None:
476
+ fail_for_missing_callable('no test named %r', name)
477
+ return func(value, *(args or ()), **(kwargs or {}))
478
+
479
+ @internalcode
480
+ def parse(self, source, name=None, filename=None):
481
+ """Parse the sourcecode and return the abstract syntax tree. This
482
+ tree of nodes is used by the compiler to convert the template into
483
+ executable source- or bytecode. This is useful for debugging or to
484
+ extract information from templates.
485
+
486
+ If you are :ref:`developing Jinja2 extensions <writing-extensions>`
487
+ this gives you a good overview of the node tree generated.
488
+ """
489
+ try:
490
+ return self._parse(source, name, filename)
491
+ except TemplateSyntaxError:
492
+ exc_info = sys.exc_info()
493
+ self.handle_exception(exc_info, source_hint=source)
494
+
495
+ def _parse(self, source, name, filename):
496
+ """Internal parsing function used by `parse` and `compile`."""
497
+ return Parser(self, source, name, encode_filename(filename)).parse()
498
+
499
+ def lex(self, source, name=None, filename=None):
500
+ """Lex the given sourcecode and return a generator that yields
501
+ tokens as tuples in the form ``(lineno, token_type, value)``.
502
+ This can be useful for :ref:`extension development <writing-extensions>`
503
+ and debugging templates.
504
+
505
+ This does not perform preprocessing. If you want the preprocessing
506
+ of the extensions to be applied you have to filter source through
507
+ the :meth:`preprocess` method.
508
+ """
509
+ source = text_type(source)
510
+ try:
511
+ return self.lexer.tokeniter(source, name, filename)
512
+ except TemplateSyntaxError:
513
+ exc_info = sys.exc_info()
514
+ self.handle_exception(exc_info, source_hint=source)
515
+
516
+ def preprocess(self, source, name=None, filename=None):
517
+ """Preprocesses the source with all extensions. This is automatically
518
+ called for all parsing and compiling methods but *not* for :meth:`lex`
519
+ because there you usually only want the actual source tokenized.
520
+ """
521
+ return reduce(lambda s, e: e.preprocess(s, name, filename),
522
+ self.iter_extensions(), text_type(source))
523
+
524
+ def _tokenize(self, source, name, filename=None, state=None):
525
+ """Called by the parser to do the preprocessing and filtering
526
+ for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`.
527
+ """
528
+ source = self.preprocess(source, name, filename)
529
+ stream = self.lexer.tokenize(source, name, filename, state)
530
+ for ext in self.iter_extensions():
531
+ stream = ext.filter_stream(stream)
532
+ if not isinstance(stream, TokenStream):
533
+ stream = TokenStream(stream, name, filename)
534
+ return stream
535
+
536
+ def _generate(self, source, name, filename, defer_init=False):
537
+ """Internal hook that can be overridden to hook a different generate
538
+ method in.
539
+
540
+ .. versionadded:: 2.5
541
+ """
542
+ return generate(source, self, name, filename, defer_init=defer_init,
543
+ optimized=self.optimized)
544
+
545
+ def _compile(self, source, filename):
546
+ """Internal hook that can be overridden to hook a different compile
547
+ method in.
548
+
549
+ .. versionadded:: 2.5
550
+ """
551
+ return compile(source, filename, 'exec')
552
+
553
+ @internalcode
554
+ def compile(self, source, name=None, filename=None, raw=False,
555
+ defer_init=False):
556
+ """Compile a node or template source code. The `name` parameter is
557
+ the load name of the template after it was joined using
558
+ :meth:`join_path` if necessary, not the filename on the file system.
559
+ the `filename` parameter is the estimated filename of the template on
560
+ the file system. If the template came from a database or memory this
561
+ can be omitted.
562
+
563
+ The return value of this method is a python code object. If the `raw`
564
+ parameter is `True` the return value will be a string with python
565
+ code equivalent to the bytecode returned otherwise. This method is
566
+ mainly used internally.
567
+
568
+ `defer_init` is use internally to aid the module code generator. This
569
+ causes the generated code to be able to import without the global
570
+ environment variable to be set.
571
+
572
+ .. versionadded:: 2.4
573
+ `defer_init` parameter added.
574
+ """
575
+ source_hint = None
576
+ try:
577
+ if isinstance(source, string_types):
578
+ source_hint = source
579
+ source = self._parse(source, name, filename)
580
+ source = self._generate(source, name, filename,
581
+ defer_init=defer_init)
582
+ if raw:
583
+ return source
584
+ if filename is None:
585
+ filename = '<template>'
586
+ else:
587
+ filename = encode_filename(filename)
588
+ return self._compile(source, filename)
589
+ except TemplateSyntaxError:
590
+ exc_info = sys.exc_info()
591
+ self.handle_exception(exc_info, source_hint=source_hint)
592
+
593
+ def compile_expression(self, source, undefined_to_none=True):
594
+ """A handy helper method that returns a callable that accepts keyword
595
+ arguments that appear as variables in the expression. If called it
596
+ returns the result of the expression.
597
+
598
+ This is useful if applications want to use the same rules as Jinja
599
+ in template "configuration files" or similar situations.
600
+
601
+ Example usage:
602
+
603
+ >>> env = Environment()
604
+ >>> expr = env.compile_expression('foo == 42')
605
+ >>> expr(foo=23)
606
+ False
607
+ >>> expr(foo=42)
608
+ True
609
+
610
+ Per default the return value is converted to `None` if the
611
+ expression returns an undefined value. This can be changed
612
+ by setting `undefined_to_none` to `False`.
613
+
614
+ >>> env.compile_expression('var')() is None
615
+ True
616
+ >>> env.compile_expression('var', undefined_to_none=False)()
617
+ Undefined
618
+
619
+ .. versionadded:: 2.1
620
+ """
621
+ parser = Parser(self, source, state='variable')
622
+ exc_info = None
623
+ try:
624
+ expr = parser.parse_expression()
625
+ if not parser.stream.eos:
626
+ raise TemplateSyntaxError('chunk after expression',
627
+ parser.stream.current.lineno,
628
+ None, None)
629
+ expr.set_environment(self)
630
+ except TemplateSyntaxError:
631
+ exc_info = sys.exc_info()
632
+ if exc_info is not None:
633
+ self.handle_exception(exc_info, source_hint=source)
634
+ body = [nodes.Assign(nodes.Name('result', 'store'), expr, lineno=1)]
635
+ template = self.from_string(nodes.Template(body, lineno=1))
636
+ return TemplateExpression(template, undefined_to_none)
637
+
638
+ def compile_templates(self, target, extensions=None, filter_func=None,
639
+ zip='deflated', log_function=None,
640
+ ignore_errors=True, py_compile=False):
641
+ """Finds all the templates the loader can find, compiles them
642
+ and stores them in `target`. If `zip` is `None`, instead of in a
643
+ zipfile, the templates will be stored in a directory.
644
+ By default a deflate zip algorithm is used. To switch to
645
+ the stored algorithm, `zip` can be set to ``'stored'``.
646
+
647
+ `extensions` and `filter_func` are passed to :meth:`list_templates`.
648
+ Each template returned will be compiled to the target folder or
649
+ zipfile.
650
+
651
+ By default template compilation errors are ignored. In case a
652
+ log function is provided, errors are logged. If you want template
653
+ syntax errors to abort the compilation you can set `ignore_errors`
654
+ to `False` and you will get an exception on syntax errors.
655
+
656
+ If `py_compile` is set to `True` .pyc files will be written to the
657
+ target instead of standard .py files. This flag does not do anything
658
+ on pypy and Python 3 where pyc files are not picked up by itself and
659
+ don't give much benefit.
660
+
661
+ .. versionadded:: 2.4
662
+ """
663
+ from jinja2.loaders import ModuleLoader
664
+
665
+ if log_function is None:
666
+ log_function = lambda x: None
667
+
668
+ if py_compile:
669
+ if not PY2 or PYPY:
670
+ from warnings import warn
671
+ warn(Warning('py_compile has no effect on pypy or Python 3'))
672
+ py_compile = False
673
+ else:
674
+ import imp
675
+ import marshal
676
+ py_header = imp.get_magic() + \
677
+ u'\xff\xff\xff\xff'.encode('iso-8859-15')
678
+
679
+ # Python 3.3 added a source filesize to the header
680
+ if sys.version_info >= (3, 3):
681
+ py_header += u'\x00\x00\x00\x00'.encode('iso-8859-15')
682
+
683
+ def write_file(filename, data, mode):
684
+ if zip:
685
+ info = ZipInfo(filename)
686
+ info.external_attr = 0o755 << 16
687
+ zip_file.writestr(info, data)
688
+ else:
689
+ f = open(os.path.join(target, filename), mode)
690
+ try:
691
+ f.write(data)
692
+ finally:
693
+ f.close()
694
+
695
+ if zip is not None:
696
+ from zipfile import ZipFile, ZipInfo, ZIP_DEFLATED, ZIP_STORED
697
+ zip_file = ZipFile(target, 'w', dict(deflated=ZIP_DEFLATED,
698
+ stored=ZIP_STORED)[zip])
699
+ log_function('Compiling into Zip archive "%s"' % target)
700
+ else:
701
+ if not os.path.isdir(target):
702
+ os.makedirs(target)
703
+ log_function('Compiling into folder "%s"' % target)
704
+
705
+ try:
706
+ for name in self.list_templates(extensions, filter_func):
707
+ source, filename, _ = self.loader.get_source(self, name)
708
+ try:
709
+ code = self.compile(source, name, filename, True, True)
710
+ except TemplateSyntaxError as e:
711
+ if not ignore_errors:
712
+ raise
713
+ log_function('Could not compile "%s": %s' % (name, e))
714
+ continue
715
+
716
+ filename = ModuleLoader.get_module_filename(name)
717
+
718
+ if py_compile:
719
+ c = self._compile(code, encode_filename(filename))
720
+ write_file(filename + 'c', py_header +
721
+ marshal.dumps(c), 'wb')
722
+ log_function('Byte-compiled "%s" as %s' %
723
+ (name, filename + 'c'))
724
+ else:
725
+ write_file(filename, code, 'w')
726
+ log_function('Compiled "%s" as %s' % (name, filename))
727
+ finally:
728
+ if zip:
729
+ zip_file.close()
730
+
731
+ log_function('Finished compiling templates')
732
+
733
+ def list_templates(self, extensions=None, filter_func=None):
734
+ """Returns a list of templates for this environment. This requires
735
+ that the loader supports the loader's
736
+ :meth:`~BaseLoader.list_templates` method.
737
+
738
+ If there are other files in the template folder besides the
739
+ actual templates, the returned list can be filtered. There are two
740
+ ways: either `extensions` is set to a list of file extensions for
741
+ templates, or a `filter_func` can be provided which is a callable that
742
+ is passed a template name and should return `True` if it should end up
743
+ in the result list.
744
+
745
+ If the loader does not support that, a :exc:`TypeError` is raised.
746
+
747
+ .. versionadded:: 2.4
748
+ """
749
+ x = self.loader.list_templates()
750
+ if extensions is not None:
751
+ if filter_func is not None:
752
+ raise TypeError('either extensions or filter_func '
753
+ 'can be passed, but not both')
754
+ filter_func = lambda x: '.' in x and \
755
+ x.rsplit('.', 1)[1] in extensions
756
+ if filter_func is not None:
757
+ x = list(ifilter(filter_func, x))
758
+ return x
759
+
760
+ def handle_exception(self, exc_info=None, rendered=False, source_hint=None):
761
+ """Exception handling helper. This is used internally to either raise
762
+ rewritten exceptions or return a rendered traceback for the template.
763
+ """
764
+ global _make_traceback
765
+ if exc_info is None:
766
+ exc_info = sys.exc_info()
767
+
768
+ # the debugging module is imported when it's used for the first time.
769
+ # we're doing a lot of stuff there and for applications that do not
770
+ # get any exceptions in template rendering there is no need to load
771
+ # all of that.
772
+ if _make_traceback is None:
773
+ from jinja2.debug import make_traceback as _make_traceback
774
+ traceback = _make_traceback(exc_info, source_hint)
775
+ if rendered and self.exception_formatter is not None:
776
+ return self.exception_formatter(traceback)
777
+ if self.exception_handler is not None:
778
+ self.exception_handler(traceback)
779
+ exc_type, exc_value, tb = traceback.standard_exc_info
780
+ reraise(exc_type, exc_value, tb)
781
+
782
+ def join_path(self, template, parent):
783
+ """Join a template with the parent. By default all the lookups are
784
+ relative to the loader root so this method returns the `template`
785
+ parameter unchanged, but if the paths should be relative to the
786
+ parent template, this function can be used to calculate the real
787
+ template name.
788
+
789
+ Subclasses may override this method and implement template path
790
+ joining here.
791
+ """
792
+ return template
793
+
794
+ @internalcode
795
+ def _load_template(self, name, globals):
796
+ if self.loader is None:
797
+ raise TypeError('no loader for this environment specified')
798
+ cache_key = (weakref.ref(self.loader), name)
799
+ if self.cache is not None:
800
+ template = self.cache.get(cache_key)
801
+ if template is not None and (not self.auto_reload or
802
+ template.is_up_to_date):
803
+ return template
804
+ template = self.loader.load(self, name, globals)
805
+ if self.cache is not None:
806
+ self.cache[cache_key] = template
807
+ return template
808
+
809
+ @internalcode
810
+ def get_template(self, name, parent=None, globals=None):
811
+ """Load a template from the loader. If a loader is configured this
812
+ method asks the loader for the template and returns a :class:`Template`.
813
+ If the `parent` parameter is not `None`, :meth:`join_path` is called
814
+ to get the real template name before loading.
815
+
816
+ The `globals` parameter can be used to provide template wide globals.
817
+ These variables are available in the context at render time.
818
+
819
+ If the template does not exist a :exc:`TemplateNotFound` exception is
820
+ raised.
821
+
822
+ .. versionchanged:: 2.4
823
+ If `name` is a :class:`Template` object it is returned from the
824
+ function unchanged.
825
+ """
826
+ if isinstance(name, Template):
827
+ return name
828
+ if parent is not None:
829
+ name = self.join_path(name, parent)
830
+ return self._load_template(name, self.make_globals(globals))
831
+
832
+ @internalcode
833
+ def select_template(self, names, parent=None, globals=None):
834
+ """Works like :meth:`get_template` but tries a number of templates
835
+ before it fails. If it cannot find any of the templates, it will
836
+ raise a :exc:`TemplatesNotFound` exception.
837
+
838
+ .. versionadded:: 2.3
839
+
840
+ .. versionchanged:: 2.4
841
+ If `names` contains a :class:`Template` object it is returned
842
+ from the function unchanged.
843
+ """
844
+ if not names:
845
+ raise TemplatesNotFound(message=u'Tried to select from an empty list '
846
+ u'of templates.')
847
+ globals = self.make_globals(globals)
848
+ for name in names:
849
+ if isinstance(name, Template):
850
+ return name
851
+ if parent is not None:
852
+ name = self.join_path(name, parent)
853
+ try:
854
+ return self._load_template(name, globals)
855
+ except TemplateNotFound:
856
+ pass
857
+ raise TemplatesNotFound(names)
858
+
859
+ @internalcode
860
+ def get_or_select_template(self, template_name_or_list,
861
+ parent=None, globals=None):
862
+ """Does a typecheck and dispatches to :meth:`select_template`
863
+ if an iterable of template names is given, otherwise to
864
+ :meth:`get_template`.
865
+
866
+ .. versionadded:: 2.3
867
+ """
868
+ if isinstance(template_name_or_list, string_types):
869
+ return self.get_template(template_name_or_list, parent, globals)
870
+ elif isinstance(template_name_or_list, Template):
871
+ return template_name_or_list
872
+ return self.select_template(template_name_or_list, parent, globals)
873
+
874
+ def from_string(self, source, globals=None, template_class=None):
875
+ """Load a template from a string. This parses the source given and
876
+ returns a :class:`Template` object.
877
+ """
878
+ globals = self.make_globals(globals)
879
+ cls = template_class or self.template_class
880
+ return cls.from_code(self, self.compile(source), globals, None)
881
+
882
+ def make_globals(self, d):
883
+ """Return a dict for the globals."""
884
+ if not d:
885
+ return self.globals
886
+ return dict(self.globals, **d)
887
+
888
+
889
+ class Template(object):
890
+ """The central template object. This class represents a compiled template
891
+ and is used to evaluate it.
892
+
893
+ Normally the template object is generated from an :class:`Environment` but
894
+ it also has a constructor that makes it possible to create a template
895
+ instance directly using the constructor. It takes the same arguments as
896
+ the environment constructor but it's not possible to specify a loader.
897
+
898
+ Every template object has a few methods and members that are guaranteed
899
+ to exist. However it's important that a template object should be
900
+ considered immutable. Modifications on the object are not supported.
901
+
902
+ Template objects created from the constructor rather than an environment
903
+ do have an `environment` attribute that points to a temporary environment
904
+ that is probably shared with other templates created with the constructor
905
+ and compatible settings.
906
+
907
+ >>> template = Template('Hello {{ name }}!')
908
+ >>> template.render(name='John Doe') == u'Hello John Doe!'
909
+ True
910
+ >>> stream = template.stream(name='John Doe')
911
+ >>> next(stream) == u'Hello John Doe!'
912
+ True
913
+ >>> next(stream)
914
+ Traceback (most recent call last):
915
+ ...
916
+ StopIteration
917
+ """
918
+
919
+ def __new__(cls, source,
920
+ block_start_string=BLOCK_START_STRING,
921
+ block_end_string=BLOCK_END_STRING,
922
+ variable_start_string=VARIABLE_START_STRING,
923
+ variable_end_string=VARIABLE_END_STRING,
924
+ comment_start_string=COMMENT_START_STRING,
925
+ comment_end_string=COMMENT_END_STRING,
926
+ line_statement_prefix=LINE_STATEMENT_PREFIX,
927
+ line_comment_prefix=LINE_COMMENT_PREFIX,
928
+ trim_blocks=TRIM_BLOCKS,
929
+ lstrip_blocks=LSTRIP_BLOCKS,
930
+ newline_sequence=NEWLINE_SEQUENCE,
931
+ keep_trailing_newline=KEEP_TRAILING_NEWLINE,
932
+ extensions=(),
933
+ optimized=True,
934
+ undefined=Undefined,
935
+ finalize=None,
936
+ autoescape=False,
937
+ enable_async=False):
938
+ env = get_spontaneous_environment(
939
+ block_start_string, block_end_string, variable_start_string,
940
+ variable_end_string, comment_start_string, comment_end_string,
941
+ line_statement_prefix, line_comment_prefix, trim_blocks,
942
+ lstrip_blocks, newline_sequence, keep_trailing_newline,
943
+ frozenset(extensions), optimized, undefined, finalize, autoescape,
944
+ None, 0, False, None, enable_async)
945
+ return env.from_string(source, template_class=cls)
946
+
947
+ @classmethod
948
+ def from_code(cls, environment, code, globals, uptodate=None):
949
+ """Creates a template object from compiled code and the globals. This
950
+ is used by the loaders and environment to create a template object.
951
+ """
952
+ namespace = {
953
+ 'environment': environment,
954
+ '__file__': code.co_filename
955
+ }
956
+ exec(code, namespace)
957
+ rv = cls._from_namespace(environment, namespace, globals)
958
+ rv._uptodate = uptodate
959
+ return rv
960
+
961
+ @classmethod
962
+ def from_module_dict(cls, environment, module_dict, globals):
963
+ """Creates a template object from a module. This is used by the
964
+ module loader to create a template object.
965
+
966
+ .. versionadded:: 2.4
967
+ """
968
+ return cls._from_namespace(environment, module_dict, globals)
969
+
970
+ @classmethod
971
+ def _from_namespace(cls, environment, namespace, globals):
972
+ t = object.__new__(cls)
973
+ t.environment = environment
974
+ t.globals = globals
975
+ t.name = namespace['name']
976
+ t.filename = namespace['__file__']
977
+ t.blocks = namespace['blocks']
978
+
979
+ # render function and module
980
+ t.root_render_func = namespace['root']
981
+ t._module = None
982
+
983
+ # debug and loader helpers
984
+ t._debug_info = namespace['debug_info']
985
+ t._uptodate = None
986
+
987
+ # store the reference
988
+ namespace['environment'] = environment
989
+ namespace['__jinja_template__'] = t
990
+
991
+ return t
992
+
993
+ def render(self, *args, **kwargs):
994
+ """This method accepts the same arguments as the `dict` constructor:
995
+ A dict, a dict subclass or some keyword arguments. If no arguments
996
+ are given the context will be empty. These two calls do the same::
997
+
998
+ template.render(knights='that say nih')
999
+ template.render({'knights': 'that say nih'})
1000
+
1001
+ This will return the rendered template as unicode string.
1002
+ """
1003
+ vars = dict(*args, **kwargs)
1004
+ try:
1005
+ return concat(self.root_render_func(self.new_context(vars)))
1006
+ except Exception:
1007
+ exc_info = sys.exc_info()
1008
+ return self.environment.handle_exception(exc_info, True)
1009
+
1010
+ def render_async(self, *args, **kwargs):
1011
+ """This works similar to :meth:`render` but returns a coroutine
1012
+ that when awaited returns the entire rendered template string. This
1013
+ requires the async feature to be enabled.
1014
+
1015
+ Example usage::
1016
+
1017
+ await template.render_async(knights='that say nih; asynchronously')
1018
+ """
1019
+ # see asyncsupport for the actual implementation
1020
+ raise NotImplementedError('This feature is not available for this '
1021
+ 'version of Python')
1022
+
1023
+ def stream(self, *args, **kwargs):
1024
+ """Works exactly like :meth:`generate` but returns a
1025
+ :class:`TemplateStream`.
1026
+ """
1027
+ return TemplateStream(self.generate(*args, **kwargs))
1028
+
1029
+ def generate(self, *args, **kwargs):
1030
+ """For very large templates it can be useful to not render the whole
1031
+ template at once but evaluate each statement after another and yield
1032
+ piece for piece. This method basically does exactly that and returns
1033
+ a generator that yields one item after another as unicode strings.
1034
+
1035
+ It accepts the same arguments as :meth:`render`.
1036
+ """
1037
+ vars = dict(*args, **kwargs)
1038
+ try:
1039
+ for event in self.root_render_func(self.new_context(vars)):
1040
+ yield event
1041
+ except Exception:
1042
+ exc_info = sys.exc_info()
1043
+ else:
1044
+ return
1045
+ yield self.environment.handle_exception(exc_info, True)
1046
+
1047
+ def generate_async(self, *args, **kwargs):
1048
+ """An async version of :meth:`generate`. Works very similarly but
1049
+ returns an async iterator instead.
1050
+ """
1051
+ # see asyncsupport for the actual implementation
1052
+ raise NotImplementedError('This feature is not available for this '
1053
+ 'version of Python')
1054
+
1055
+ def new_context(self, vars=None, shared=False, locals=None):
1056
+ """Create a new :class:`Context` for this template. The vars
1057
+ provided will be passed to the template. Per default the globals
1058
+ are added to the context. If shared is set to `True` the data
1059
+ is passed as it to the context without adding the globals.
1060
+
1061
+ `locals` can be a dict of local variables for internal usage.
1062
+ """
1063
+ return new_context(self.environment, self.name, self.blocks,
1064
+ vars, shared, self.globals, locals)
1065
+
1066
+ def make_module(self, vars=None, shared=False, locals=None):
1067
+ """This method works like the :attr:`module` attribute when called
1068
+ without arguments but it will evaluate the template on every call
1069
+ rather than caching it. It's also possible to provide
1070
+ a dict which is then used as context. The arguments are the same
1071
+ as for the :meth:`new_context` method.
1072
+ """
1073
+ return TemplateModule(self, self.new_context(vars, shared, locals))
1074
+
1075
+ def make_module_async(self, vars=None, shared=False, locals=None):
1076
+ """As template module creation can invoke template code for
1077
+ asynchronous exections this method must be used instead of the
1078
+ normal :meth:`make_module` one. Likewise the module attribute
1079
+ becomes unavailable in async mode.
1080
+ """
1081
+ # see asyncsupport for the actual implementation
1082
+ raise NotImplementedError('This feature is not available for this '
1083
+ 'version of Python')
1084
+
1085
+ @internalcode
1086
+ def _get_default_module(self):
1087
+ if self._module is not None:
1088
+ return self._module
1089
+ self._module = rv = self.make_module()
1090
+ return rv
1091
+
1092
+ @property
1093
+ def module(self):
1094
+ """The template as module. This is used for imports in the
1095
+ template runtime but is also useful if one wants to access
1096
+ exported template variables from the Python layer:
1097
+
1098
+ >>> t = Template('{% macro foo() %}42{% endmacro %}23')
1099
+ >>> str(t.module)
1100
+ '23'
1101
+ >>> t.module.foo() == u'42'
1102
+ True
1103
+
1104
+ This attribute is not available if async mode is enabled.
1105
+ """
1106
+ return self._get_default_module()
1107
+
1108
+ def get_corresponding_lineno(self, lineno):
1109
+ """Return the source line number of a line number in the
1110
+ generated bytecode as they are not in sync.
1111
+ """
1112
+ for template_line, code_line in reversed(self.debug_info):
1113
+ if code_line <= lineno:
1114
+ return template_line
1115
+ return 1
1116
+
1117
+ @property
1118
+ def is_up_to_date(self):
1119
+ """If this variable is `False` there is a newer version available."""
1120
+ if self._uptodate is None:
1121
+ return True
1122
+ return self._uptodate()
1123
+
1124
+ @property
1125
+ def debug_info(self):
1126
+ """The debug info mapping."""
1127
+ return [tuple(imap(int, x.split('='))) for x in
1128
+ self._debug_info.split('&')]
1129
+
1130
+ def __repr__(self):
1131
+ if self.name is None:
1132
+ name = 'memory:%x' % id(self)
1133
+ else:
1134
+ name = repr(self.name)
1135
+ return '<%s %s>' % (self.__class__.__name__, name)
1136
+
1137
+
1138
+ @implements_to_string
1139
+ class TemplateModule(object):
1140
+ """Represents an imported template. All the exported names of the
1141
+ template are available as attributes on this object. Additionally
1142
+ converting it into an unicode- or bytestrings renders the contents.
1143
+ """
1144
+
1145
+ def __init__(self, template, context, body_stream=None):
1146
+ if body_stream is None:
1147
+ if context.environment.is_async:
1148
+ raise RuntimeError('Async mode requires a body stream '
1149
+ 'to be passed to a template module. Use '
1150
+ 'the async methods of the API you are '
1151
+ 'using.')
1152
+ body_stream = list(template.root_render_func(context))
1153
+ self._body_stream = body_stream
1154
+ self.__dict__.update(context.get_exported())
1155
+ self.__name__ = template.name
1156
+
1157
+ def __html__(self):
1158
+ return Markup(concat(self._body_stream))
1159
+
1160
+ def __str__(self):
1161
+ return concat(self._body_stream)
1162
+
1163
+ def __repr__(self):
1164
+ if self.__name__ is None:
1165
+ name = 'memory:%x' % id(self)
1166
+ else:
1167
+ name = repr(self.__name__)
1168
+ return '<%s %s>' % (self.__class__.__name__, name)
1169
+
1170
+
1171
+ class TemplateExpression(object):
1172
+ """The :meth:`jinja2.Environment.compile_expression` method returns an
1173
+ instance of this object. It encapsulates the expression-like access
1174
+ to the template with an expression it wraps.
1175
+ """
1176
+
1177
+ def __init__(self, template, undefined_to_none):
1178
+ self._template = template
1179
+ self._undefined_to_none = undefined_to_none
1180
+
1181
+ def __call__(self, *args, **kwargs):
1182
+ context = self._template.new_context(dict(*args, **kwargs))
1183
+ consume(self._template.root_render_func(context))
1184
+ rv = context.vars['result']
1185
+ if self._undefined_to_none and isinstance(rv, Undefined):
1186
+ rv = None
1187
+ return rv
1188
+
1189
+
1190
+ @implements_iterator
1191
+ class TemplateStream(object):
1192
+ """A template stream works pretty much like an ordinary python generator
1193
+ but it can buffer multiple items to reduce the number of total iterations.
1194
+ Per default the output is unbuffered which means that for every unbuffered
1195
+ instruction in the template one unicode string is yielded.
1196
+
1197
+ If buffering is enabled with a buffer size of 5, five items are combined
1198
+ into a new unicode string. This is mainly useful if you are streaming
1199
+ big templates to a client via WSGI which flushes after each iteration.
1200
+ """
1201
+
1202
+ def __init__(self, gen):
1203
+ self._gen = gen
1204
+ self.disable_buffering()
1205
+
1206
+ def dump(self, fp, encoding=None, errors='strict'):
1207
+ """Dump the complete stream into a file or file-like object.
1208
+ Per default unicode strings are written, if you want to encode
1209
+ before writing specify an `encoding`.
1210
+
1211
+ Example usage::
1212
+
1213
+ Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
1214
+ """
1215
+ close = False
1216
+ if isinstance(fp, string_types):
1217
+ if encoding is None:
1218
+ encoding = 'utf-8'
1219
+ fp = open(fp, 'wb')
1220
+ close = True
1221
+ try:
1222
+ if encoding is not None:
1223
+ iterable = (x.encode(encoding, errors) for x in self)
1224
+ else:
1225
+ iterable = self
1226
+ if hasattr(fp, 'writelines'):
1227
+ fp.writelines(iterable)
1228
+ else:
1229
+ for item in iterable:
1230
+ fp.write(item)
1231
+ finally:
1232
+ if close:
1233
+ fp.close()
1234
+
1235
+ def disable_buffering(self):
1236
+ """Disable the output buffering."""
1237
+ self._next = partial(next, self._gen)
1238
+ self.buffered = False
1239
+
1240
+ def _buffered_generator(self, size):
1241
+ buf = []
1242
+ c_size = 0
1243
+ push = buf.append
1244
+
1245
+ while 1:
1246
+ try:
1247
+ while c_size < size:
1248
+ c = next(self._gen)
1249
+ push(c)
1250
+ if c:
1251
+ c_size += 1
1252
+ except StopIteration:
1253
+ if not c_size:
1254
+ return
1255
+ yield concat(buf)
1256
+ del buf[:]
1257
+ c_size = 0
1258
+
1259
+ def enable_buffering(self, size=5):
1260
+ """Enable buffering. Buffer `size` items before yielding them."""
1261
+ if size <= 1:
1262
+ raise ValueError('buffer size too small')
1263
+
1264
+ self.buffered = True
1265
+ self._next = partial(next, self._buffered_generator(size))
1266
+
1267
+ def __iter__(self):
1268
+ return self
1269
+
1270
+ def __next__(self):
1271
+ return self._next()
1272
+
1273
+
1274
+ # hook in default template class. if anyone reads this comment: ignore that
1275
+ # it's possible to use custom templates ;-)
1276
+ Environment.template_class = Template