pyodide-mkdocs-theme 5.6.0__tar.gz → 5.6.1__tar.gz

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.
Files changed (160) hide show
  1. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/PKG-INFO +1 -1
  2. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__main__.py +1 -1
  3. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/__version__.py +1 -0
  4. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +8 -9
  5. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +9 -2
  6. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +20 -15
  7. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +2 -2
  8. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +6 -1
  9. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +14 -5
  10. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/README.md +36 -0
  11. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +6 -7
  12. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +26 -44
  13. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +2 -2
  14. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +143 -123
  15. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +1 -1
  16. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +7 -3
  17. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyproject.toml +1 -1
  18. pyodide_mkdocs_theme-5.6.0/pyodide_mkdocs_theme/__version__.py +0 -1
  19. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/LICENSE +0 -0
  20. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/README.md +0 -0
  21. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
  22. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
  23. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
  24. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
  25. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  26. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
  27. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  28. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
  29. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__init__.py +0 -0
  30. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
  31. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  32. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  33. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  34. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +0 -0
  35. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
  36. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
  37. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  38. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  39. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
  40. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
  41. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  42. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +0 -0
  43. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  44. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  45. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  46. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +0 -0
  47. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +0 -0
  48. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  49. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  50. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
  51. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  52. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +0 -0
  53. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
  54. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +0 -0
  55. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  56. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  57. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +0 -0
  58. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +0 -0
  59. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +0 -0
  60. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  61. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  62. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  63. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
  64. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  65. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +0 -0
  66. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
  67. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
  68. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  69. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +0 -0
  70. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
  71. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  72. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
  73. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  74. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
  75. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
  76. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
  77. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  78. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  79. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +0 -0
  80. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  81. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +0 -0
  82. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  83. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
  84. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
  85. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
  86. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
  87. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  88. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +0 -0
  89. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +0 -0
  90. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
  91. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
  92. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  93. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
  94. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  95. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  96. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  97. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  98. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  99. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  100. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  101. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  102. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  103. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  104. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  105. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  106. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  107. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  108. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  109. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  110. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  111. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  112. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  113. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
  114. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  115. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  116. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  117. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  118. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  119. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  120. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  121. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  122. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +0 -0
  123. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functools.js +0 -0
  124. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
  125. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
  126. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +0 -0
  127. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +0 -0
  128. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
  129. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  130. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +0 -0
  131. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  132. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +0 -0
  133. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +0 -0
  134. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +0 -0
  135. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +0 -0
  136. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +0 -0
  137. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +0 -0
  138. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +0 -0
  139. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +0 -0
  140. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -0
  141. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +0 -0
  142. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +0 -0
  143. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +0 -0
  144. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  145. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +0 -0
  146. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/main.html +0 -0
  147. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  148. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  149. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  150. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  151. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  152. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  153. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +0 -0
  154. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  155. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
  156. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  157. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
  158. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  159. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
  160. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyodide-mkdocs-theme
3
- Version: 5.6.0
3
+ Version: 5.6.1
4
4
  Summary: Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations
5
5
  License: GPL-3.0-or-later
6
6
  Keywords: mkdocs,mkdocs-plugin,pyodide,IDE,terminal
@@ -50,7 +50,7 @@ parser = ArgumentParser(
50
50
  "This program comes with ABSOLUTELY NO WARRANTY."
51
51
  )
52
52
  parser.add_argument(
53
- '-v', '--version', action='version', version=f'pyodide-mkdocs-theme {__version__}'
53
+ '-v', '--version', action='version', version=f'v{__version__}'
54
54
  )
55
55
  parser.add_argument(
56
56
  '-n', '--new', default="",
@@ -0,0 +1 @@
1
+ __version__ = "5.6.1"
@@ -130,11 +130,6 @@ class BaseFilesExtractor:
130
130
  also used to identify an inclusion location, when resolving them).
131
131
  """
132
132
 
133
- in_pages: Set[str] = field(default_factory=set)
134
- """
135
- Set of pages uri (relative to the docs_dir) that use the current extractor.
136
- """
137
-
138
133
  # ---------------------------------------------------------------------------------
139
134
 
140
135
  ARG_NAME: ClassVar[str] = None
@@ -145,13 +140,9 @@ class BaseFilesExtractor:
145
140
 
146
141
 
147
142
  def __post_init__(self):
148
-
149
143
  if self.runner_file:
150
144
  self.exo_file = Path(self.runner_file).resolve()
151
145
  self.docs_file = Path(self.exo_file).relative_to(CWD)
152
- md_uri = self.env.page.file.src_uri
153
- self.in_pages.add(md_uri)
154
-
155
146
 
156
147
  def __hash__(self):
157
148
  return hash(self.exo_file)
@@ -258,6 +249,12 @@ class BaseExtractorWithCache(BaseFilesExtractor):
258
249
  _mtime_infos: Dict[Path, Optional[int]] = None
259
250
 
260
251
 
252
+ in_pages: Set[str] = field(default_factory=set)
253
+ """
254
+ Set of pages uri (relative to the docs_dir) that use the current extractor (used for external
255
+ purposes only, aka, mkdocs-addresses)
256
+ """
257
+
261
258
 
262
259
  @classmethod
263
260
  def _get_file_extractor_for(
@@ -287,6 +284,8 @@ class BaseExtractorWithCache(BaseFilesExtractor):
287
284
  elif not extractor.is_up_to_date():
288
285
  extractor.extract_contents()
289
286
 
287
+ md_uri = env.page.file.src_uri
288
+ extractor.in_pages.add(md_uri)
290
289
  return runner_file, extractor
291
290
 
292
291
 
@@ -76,7 +76,7 @@ class DepKind:
76
76
  sorting from the given @kind, which is already present in @needs.
77
77
  Keep adding kinds as long as they are not present in @needs.
78
78
  """
79
- # NOTE: this is almost useless, for PMT 4^ because of automatic resolution of imported
79
+ # NOTE: this is almost useless for PMT 4+, because of automatic resolution of imported
80
80
  # modules, BUT there are still some needs for non modules, so keep everything as is...
81
81
 
82
82
  # Keep in mind DepKind _values_ are actually SIMPLE STRINGS!
@@ -159,10 +159,10 @@ class Dep:
159
159
  """ Static property: Store HtmlDependencies property names, to make sure they are unique. """
160
160
 
161
161
 
162
-
163
162
  def __init_subclass__(cls):
164
163
  Dep.EXTENSION_TO_CLASS[cls.EXTENSION] = cls
165
164
 
165
+ #-------------------------------------------------------------------------
166
166
 
167
167
  @staticmethod
168
168
  def auto_ordering():
@@ -218,11 +218,18 @@ class Dep:
218
218
 
219
219
 
220
220
  def get_html_tag(self):
221
+ """
222
+ Convert tu current dependency to the corresponding html tag to insert in the page.
223
+ """
221
224
  return self.DUMP_TEMPLATE.format(
222
225
  data=' '.join(f'{k}="{v}"' for k,v in self.data.items())
223
226
  )
224
227
 
225
228
  def gen_import_map(self):
229
+ """
230
+ Return an iterator of items to add the current dependency to the importmap tag.
231
+ Reminder: only js modules have to be referenced.
232
+ """
226
233
  return ()
227
234
 
228
235
 
@@ -21,6 +21,7 @@ If not, see <https://www.gnu.org/licenses/>.
21
21
 
22
22
 
23
23
  from abc import ABCMeta
24
+ import os
24
25
  import re
25
26
  import hashlib
26
27
  from typing import Any, ClassVar, Dict, List, Literal, Optional, Tuple, Union, TYPE_CHECKING
@@ -706,31 +707,35 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
706
707
  local machine.
707
708
  """
708
709
  is_ide = PmtPyMacrosName.is_ide(self.MACRO_NAME)
709
- is_relative = not self.env.is_legacy
710
+ not_legacy = not self.env.is_legacy
710
711
  runner_path = self.exo_py
711
712
  has_py_file = bool(runner_path)
712
- project_id = self.env.project_id or ""
713
713
 
714
- need_project_id = is_ide and self.env.project_disambiguate_local_storage and project_id and (
715
- not has_py_file or is_relative
716
- ) or self.FORCE_PROJECT_ID_IN_HASH
717
- # The project_id is needed to disambiguate the html ids in the localStorage only if:
718
- # 1. The element is an IDE
719
- # 2. The user actually gave a value for env.project_id
720
- # 3. The user _wants_ the project_id added to compute the html ids
721
- # 4. Either...:
722
- # - the ides_id_hash_mode is set to relative
723
- # - Or there is no python file for the IDE
724
-
725
- project_id = f':_{ project_id }' * bool(need_project_id)
714
+ need_project_id = bool(self.FORCE_PROJECT_ID_IN_HASH or (
715
+ is_ide
716
+ and self.env.project_disambiguate_local_storage
717
+ and self.env.project_id
718
+ and (not_legacy or not has_py_file )
719
+ ))
720
+ project_id = f':_{ self.env.project_id or "" }' * need_project_id
726
721
 
727
722
  if has_py_file and (is_ide or self.env.ACTIVATE_CACHE):
728
723
 
729
724
  less_ID_needs = "" if is_ide else ':'+self.MACRO_NAME
730
- if is_ide and is_relative:
725
+ if is_ide and not_legacy:
731
726
  runner_path = Path(self.exo_py).relative_to(self.env.docs_dir_path)
732
727
 
728
+ if os.getenv("IDE_ID_WITH_POSIX"):
729
+ runner_path = runner_path.as_posix()
730
+ # This is used in CodEx's tests, to make sure the ids do not depend on the OS.
731
+ # Without that, the IDE ids do not match the ones registered in Capytale.
732
+
733
733
  to_hash = f"{ runner_path }{ self.IDE_VERT }{ less_ID_needs }{ project_id }"
734
+ # WARNING: there is still a problem here depending on the OS: people working
735
+ # on win/something else will get different html ids because of `\` vs `/` in
736
+ # `runner_path`... This is not a problem, from the end users PoV. This is only
737
+ # a problem (so far) for CodEx tests on Capytale, because the server stores the
738
+ # html ids of the DIE, to know where to put what.
734
739
 
735
740
  else:
736
741
  count = self.env.macros_counters[ self.MACRO_NAME ].inc()
@@ -46,7 +46,7 @@ def _more_code_fence(
46
46
  title: str,
47
47
  attrs: str,
48
48
  no_block: bool,
49
- lang: str='python',
49
+ lang: str=None,
50
50
  ):
51
51
  """
52
52
  Extra function to centralize some of the formatting logic.
@@ -61,7 +61,7 @@ def _more_code_fence(
61
61
  indent,
62
62
  title=(title or ""),
63
63
  attrs=(attrs or ""),
64
- lang=lang,
64
+ lang=lang or 'python',
65
65
  )
66
66
  return out
67
67
 
@@ -207,7 +207,12 @@ class PageConfiguration(Dict[EditorName,MacroPyConfig]):
207
207
  def build_page_script_tag_with_ides_configs_mermaid_and_pool_data(
208
208
  self, overlord_classes:List[str]
209
209
  ):
210
-
210
+ """
211
+ Build a synch script tag, that his adding to the page the global data structures so that
212
+ the various elements needed in the page can be built:
213
+ - Update CONFIG mermaid and classes pool infos
214
+ - build the PAGE_IDES_CONFIGS compressed string
215
+ """
211
216
  json_ide_configs = '{' + ', '.join(
212
217
  f'"{ editor_name }": { ide_conf.dump_to_js_code() }'
213
218
  for editor_name, ide_conf in self.items()
@@ -20,7 +20,7 @@ If not, see <https://www.gnu.org/licenses/>.
20
20
 
21
21
 
22
22
 
23
- from typing import ClassVar, Dict, List, Literal, Optional, Set, Tuple, Union, TYPE_CHECKING
23
+ from typing import ClassVar, Dict, List, Literal, Optional, Sequence, Set, Tuple, Union, TYPE_CHECKING
24
24
  from dataclasses import dataclass, field, fields
25
25
 
26
26
  from pyodide_mkdocs_theme.pyodide_macros.tools_and_constants import IdeMode, NamedTestCase
@@ -126,6 +126,13 @@ class Case:
126
126
  """
127
127
  Don't clear the scope before doing this test (NOTE: this would become useless if the tests
128
128
  were not run in order).
129
+ When this feature is used, the `input` fonction will be overridden on the fly in the global
130
+ scope, before the code to test is run. The new function is returning the values in order, one
131
+ element per call. If all inputs are consumed, the call is transferred to the original builtin.
132
+ This custom function is removed from the environment after the test.
133
+
134
+ If the code of the tests also replace/define a custom `input` function, there is no guarantee
135
+ about what will happen.
129
136
  """
130
137
 
131
138
  term_cmd: Optional[str] = None
@@ -138,7 +145,6 @@ class Case:
138
145
  Quick description of the test (optional).
139
146
  """
140
147
 
141
-
142
148
  #-------------------------------------------------------------------------
143
149
  # Private interface:
144
150
 
@@ -508,9 +514,12 @@ Case.CORR = Case() # Default case before PMT 5.0
508
514
  Case.HUMAN = Case(human=True)
509
515
  Case.NO_CLEAR = Case(no_clear=True)
510
516
 
511
- Case.DEFAULT = Case(no_clear=False, description="", subcases=[
512
- Case(description="corr vs validation (succès)"),
513
- Case(description="code vs validation (échec)", code=True, fail=True),
517
+
518
+
519
+ # Enforce no_clear directly on subcases because these might be copied in auto_convert_and_fix_case:
520
+ Case.DEFAULT = Case(description="", subcases=[
521
+ Case(description="corr vs validation (succès)", no_clear=False),
522
+ Case(description="code vs validation (échec)", no_clear=False, code=True, fail=True),
514
523
  # Case(description="`code` vs `tests` (échec)", code=True, fail=True, run_play=True),
515
524
  ])
516
525
 
@@ -56,3 +56,39 @@ All js scripts are systematically present on the server/built site, but their in
56
56
 
57
57
 
58
58
  1. `templates/js-scripts` scripts are finally run. They are __always present__, and added in as a last step of the Jinja `scripts` block.
59
+
60
+
61
+
62
+
63
+
64
+
65
+ ## Files hierarchy and naming "conventions"...
66
+
67
+ This looks like a total mess, I know... The naming is actually constrained for various reasons, some due to legacy behaviors, others are just about easing the navigation in the code during development...
68
+
69
+ The three folders are required by the implementation. They are m
70
+
71
+ | Directory | Inserted in `main.html` in... |
72
+ |-|-|
73
+ | js-libs | the libs block |
74
+ | js-per-pages | the content block |
75
+ | js-scripts | the scripts block |
76
+
77
+ The order of the files in each directory matters for scripts that are loaded synch:
78
+
79
+ - js-libs/0-config.js
80
+ - js-libs/0-legacy-subscriber.js
81
+ - js-libs/mathjax-libs.js
82
+
83
+ /!\ WARNING /!\
84
+ ---------------
85
+
86
+ The name of the mathjax CANNOT BE CHANGED for backward compatibility reasons (users may have overridden it through the custom_dir)
87
+
88
+ In the `js-per-pages` directory, the numbers are here only to ease development: they more or less follow the dependency orders.
89
+ Why no subdirectories? ...because I didn't want more depth during development. These folders are used so often that I didn't want to have one more click to do to reach the file I needed...
90
+
91
+ The files in `js-per-pages` also are in the form `N-something-suffix.js`, where `suffix` is used so that the devops tool building the dependencies knows what file is used for what purpose, when building the dependencies in the python layer.
92
+ This is done this way to keep most of the JS logic/configuration in the JS layer, the python one implementing only the logic and having almost no configuration data (aside of the directories locations) to rebuild everything correctly even after some changes occurred on the JS side.
93
+
94
+ So, yeah. That's dirty, but that works pretty well, in the end, and avoids a lot of time lost for nothing.
@@ -24,17 +24,17 @@ const jsLogger =()=> null
24
24
  //*
25
25
  globalThis.LOGGER_CONFIG = {}
26
26
  /*/
27
- globalThis.LOGGER_CONFIG = {ACTIVATE:true, all:1}
27
+ globalThis.LOGGER_CONFIG = {ACTIVATE:1, all:1}
28
28
  //*/
29
29
 
30
30
 
31
31
 
32
- /**Defined for backward compatibility, incase the user is still using the function from the
33
- * original synch implementation of subscribeWhenReady.
32
+ /**Defined for backward compatibility, in case the user is still relying on the function from
33
+ * the original synch implementation of subscribeWhenReady.
34
34
  *
35
35
  * Facts:
36
- * 1. MathJax subscription is now done from the js-scripts/subscriptions.js module, so any
37
- * call for mathjax coming from a user override is totally useless and can just be skipped.
36
+ * 1. MathJax subscription is now done from the `js-scripts/subscriptions.js` module, so any
37
+ * call for mathjax coming from a user override is totally useless and can just be ignored.
38
38
  * 2. If ever another subscription is done, just directly transmit the call to the module
39
39
  * version, to unify the implementations/logics.
40
40
  * */
@@ -52,6 +52,5 @@ function subscribeWhenReady(subscriptionId, ...args){
52
52
  module.subscribeWhenReady(subscriptionId, ...args)
53
53
  })
54
54
  }
55
-
56
- return ()=>0 // SINK! (the default mathjax override _will_ call a fonction)
55
+ return ()=>null // SINK! (the default mathjax override _will_ call a fonction)
57
56
  }
@@ -243,6 +243,9 @@ def _hack_auto_run():
243
243
 
244
244
  # Keep uncleaned elements:
245
245
  runner = AutoRunner()
246
+
247
+ # Since this snippet will be run for each new section, always transfer existing traced
248
+ # calls to the new object:
246
249
  if hasattr(__builtins__, 'auto_run'):
247
250
  runner.run |= __builtins__.auto_run.run
248
251
  __builtins__.auto_run = runner
@@ -531,24 +534,10 @@ def _hack_scope_cleaner():
531
534
  clearScope: `clear_scope()`,
532
535
 
533
536
 
534
- wantedImports: `
535
- @auto_run
536
- def _hack_find_imports():
537
- from pyodide.code import find_imports
538
- __builtins__.imported_modules = find_imports({FORMAT_TOKEN})
539
-
540
- __builtins__.imported_modules
541
- `,
542
-
537
+ wantedImports: `__import__('pyodide').code.find_imports({FORMAT_TOKEN})`,
543
538
 
544
- alreadyImported: `
545
- @auto_run
546
- def _hack_imported():
547
- import sys
548
- __builtins__.loaded_modules = " ".join(sys.modules.keys())
549
539
 
550
- __builtins__.loaded_modules
551
- `,
540
+ alreadyImported: `" ".join(__import__('sys').modules.keys())`,
552
541
 
553
542
 
554
543
  upDownLoader: `
@@ -910,6 +899,16 @@ def _hack_mermaid():
910
899
  def _hack_stdout_up():
911
900
  import sys, io, js
912
901
 
902
+ # Keep a StringIO object there (this also allows to enforce a flush of the stdout content
903
+ # in between runs/sections, on user's side, and redactors wanting to test against the user
904
+ # stdout will also use this:
905
+ __builtins__.src_stdout = sys.stdout
906
+ sys.stdout = io.StringIO()
907
+
908
+ # Different object allowing to spot what to print exactly, for one single call to print:
909
+ __builtins__.per_call_std_out = io.StringIO()
910
+
911
+
913
912
  @wraps_builtin
914
913
  def print(*a,**kw): # Note: wraps doesn't seem to work... Dunno why...)
915
914
 
@@ -917,45 +916,29 @@ def _hack_stdout_up():
917
916
  __print_src__(*a,**kw)
918
917
 
919
918
  # Then print to the one used to get proper formatting (according to the generic
920
- # behavior of python print function), then extract the formatted content to
921
- # transfer to the terminal and empty per_call_stdout:
922
-
923
- kw['file'] = per_call_stdout
924
- __print_src__(*a,**kw)
925
- properly_formatted = per_call_stdout.getvalue()
926
- per_call_stdout.truncate(0)
927
- per_call_stdout.seek(0)
928
-
919
+ # behavior of python print function):
920
+ kw['file'] = per_call_std_out
921
+ __print_src__(*a, **kw)
922
+
923
+ # Then extract the formatted content to write to the terminal and empty per_call_std_out:
924
+ properly_formatted = per_call_std_out.getvalue()
925
+ per_call_std_out.truncate(0)
926
+ per_call_std_out.seek(0)
929
927
  js.config().termMessage(None, properly_formatted, 'none', True)
930
-
931
-
932
- # Different object allowing to spot what to print exactly, for one single call to print:
933
- __builtins__.per_call_std_out = per_call_stdout = io.StringIO()
934
-
935
- # Keep a StringIO object there (this also allows to enforce a flush of the stdout content
936
- # in between runs/sections, on user's side, and redactors wanting to test against the user
937
- # stdout will also use this:
938
- __builtins__.src_stdout = sys.stdout
939
- sys.stdout = io.StringIO()
940
928
  `,
941
929
 
942
930
 
943
- getFullStdIO:`
931
+ teardownStdIO:`
944
932
  @__builtins__.auto_run
945
933
  def _hack_stdout_down():
946
934
  import sys
947
935
 
948
- # Store to send the result to JS layer at the end:
949
- __builtins__._stdout_value = sys.stdout.getvalue()
950
-
951
936
  sys.stdout.close()
952
937
  sys.stdout = __builtins__.src_stdout
953
938
  del __builtins__.src_stdout
954
939
 
955
940
  __builtins__.per_call_std_out.close()
956
941
  __builtins__.print = __builtins__.__print_src__
957
-
958
- __builtins__._stdout_value
959
942
  `,
960
943
  }
961
944
 
@@ -1050,9 +1033,8 @@ export const setupStdIO =_=>{ // WARNING: some arguments may be passed in
1050
1033
  pyodideFeatureRunCode('setupStdIO')
1051
1034
  }
1052
1035
 
1053
- export const getFullStdIO =_=>{
1054
- const stdout = pyodideFeatureRunCode('getFullStdIO') || ''
1055
- return escapeSquareBrackets(stdout)
1036
+ export const teardownStdIO =_=>{
1037
+ pyodideFeatureRunCode('teardownStdIO')
1056
1038
  }
1057
1039
 
1058
1040
  export const clearPyodideScope=()=>{
@@ -25,7 +25,7 @@ import {
25
25
  youAreInTroubles,
26
26
  } from 'functoolsTxt'
27
27
  import {
28
- getFullStdIO,
28
+ teardownStdIO,
29
29
  pyodideFeatureRunCode,
30
30
  setupStdIO,
31
31
  } from '0-generic-python-snippets-pyodide'
@@ -363,7 +363,7 @@ export class RuntimeManager {
363
363
 
364
364
 
365
365
  async teardownManager(ctx){
366
- getFullStdIO()
366
+ teardownStdIO()
367
367
 
368
368
  if(!ctx.err) return; // nothing to do if no error during the current run.
369
369