appmap 3.0.0__tar.gz → 3.0.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 (193) hide show
  1. {appmap-3.0.0 → appmap-3.0.1}/PKG-INFO +1 -1
  2. {appmap-3.0.0 → appmap-3.0.1}/_appmap/configuration.py +9 -1
  3. {appmap-3.0.0 → appmap-3.0.1}/_appmap/env.py +4 -1
  4. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_runner.py +31 -0
  5. {appmap-3.0.0 → appmap-3.0.1}/appmap/command/runner.py +12 -2
  6. {appmap-3.0.0 → appmap-3.0.1}/pyproject.toml +1 -1
  7. {appmap-3.0.0 → appmap-3.0.1}/.gitignore +0 -0
  8. {appmap-3.0.0 → appmap-3.0.1}/LICENSE +0 -0
  9. {appmap-3.0.0 → appmap-3.0.1}/README.md +0 -0
  10. {appmap-3.0.0 → appmap-3.0.1}/_appmap/__init__.py +0 -0
  11. {appmap-3.0.0 → appmap-3.0.1}/_appmap/django.py +0 -0
  12. {appmap-3.0.0 → appmap-3.0.1}/_appmap/event.py +0 -0
  13. {appmap-3.0.0 → appmap-3.0.1}/_appmap/fastapi.py +0 -0
  14. {appmap-3.0.0 → appmap-3.0.1}/_appmap/flask.py +0 -0
  15. {appmap-3.0.0 → appmap-3.0.1}/_appmap/generation.py +0 -0
  16. {appmap-3.0.0 → appmap-3.0.1}/_appmap/importer.py +0 -0
  17. {appmap-3.0.0 → appmap-3.0.1}/_appmap/instrument.py +0 -0
  18. {appmap-3.0.0 → appmap-3.0.1}/_appmap/labels.py +0 -0
  19. {appmap-3.0.0 → appmap-3.0.1}/_appmap/metadata.py +0 -0
  20. {appmap-3.0.0 → appmap-3.0.1}/_appmap/noappmap.py +0 -0
  21. {appmap-3.0.0 → appmap-3.0.1}/_appmap/py_version_check.py +0 -0
  22. {appmap-3.0.0 → appmap-3.0.1}/_appmap/recorder.py +0 -0
  23. {appmap-3.0.0 → appmap-3.0.1}/_appmap/recording.py +0 -0
  24. {appmap-3.0.0 → appmap-3.0.1}/_appmap/remote_recording.py +0 -0
  25. {appmap-3.0.0 → appmap-3.0.1}/_appmap/singleton.py +0 -0
  26. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/__init__.py +0 -0
  27. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/appmap_test_base.py +0 -0
  28. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/bin/server_runner +0 -0
  29. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/conftest.py +0 -0
  30. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-all-paths-malformed.yml +0 -0
  31. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-broken.yml +0 -0
  32. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-class.yml +0 -0
  33. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-empty-path.yml +0 -0
  34. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-exclude-fn.yml +0 -0
  35. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-func.yml +0 -0
  36. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-malformed-path.yml +0 -0
  37. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap-no-pyyaml.yml +0 -0
  38. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap.yml +0 -0
  39. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap_testing/__init__.py +0 -0
  40. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/appmap_testing/django_simplelazyobject.py +0 -0
  41. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config/src/package/__init__.py +0 -0
  42. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config/test/__init__.py +0 -0
  43. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config/test/foo.py +0 -0
  44. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-exclude/.hide/hidden_mod/__init__.py +0 -0
  45. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-exclude/node_modules/node_mod/__init__.py +0 -0
  46. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-exclude/src/package/__init__.py +0 -0
  47. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-exclude/test/__init__.py +0 -0
  48. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-exclude/venv/venv_mod/__init__.py +0 -0
  49. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-up/appmap.yml +0 -0
  50. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-up/project/p1/__init__.py +0 -0
  51. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/config-up/project/p2/sub1/__init__.py +0 -0
  52. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/appmap.yml +0 -0
  53. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/__init__.py +0 -0
  54. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/djangoapp.py +0 -0
  55. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/hello_world.html +0 -0
  56. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/middleware.py +0 -0
  57. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/settings.py +0 -0
  58. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/settings_dev.py +0 -0
  59. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/djangoapp/urls.py +0 -0
  60. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/init/sitecustomize.py +0 -0
  61. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/manage.py +0 -0
  62. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/pytest.ini +0 -0
  63. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/test/__init__.py +0 -0
  64. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/test/test_app.py +0 -0
  65. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/test/test_request.py +0 -0
  66. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/django/test/test_unittest_setup.py +0 -0
  67. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/example_class.py +0 -0
  68. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/expected.appmap.json +0 -0
  69. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/fastapi/appmap.yml +0 -0
  70. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/fastapi/fastapiapp/__init__.py +0 -0
  71. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/fastapi/fastapiapp/main.py +0 -0
  72. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/fastapi/init/sitecustomize.py +0 -0
  73. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/fastapi/test_app.py +0 -0
  74. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask/appmap.yml +0 -0
  75. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask/flaskapp.py +0 -0
  76. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask/init/sitecustomize.py +0 -0
  77. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask/templates/test.html +0 -0
  78. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask/test_app.py +0 -0
  79. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask-instrumented/appmap.yml +0 -0
  80. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask-instrumented/flaskapp.py +0 -0
  81. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask-instrumented/init/sitecustomize.py +0 -0
  82. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/flask-instrumented/test_app.py +0 -0
  83. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/package1/__init__.py +0 -0
  84. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/package1/package2/__init__.py +0 -0
  85. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/package1/package2/__main__.py +0 -0
  86. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/package1/package2/mod1.py +0 -0
  87. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/params.py +0 -0
  88. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/properties_class.py +0 -0
  89. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/appmap-no-test-cases.yml +0 -0
  90. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/appmap.yml +0 -0
  91. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/pytest-numpy1-no-test-cases.appmap.json +0 -0
  92. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/pytest-numpy1.appmap.json +0 -0
  93. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/pytest-numpy2-no-test-cases.appmap.json +0 -0
  94. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/pytest-numpy2.appmap.json +0 -0
  95. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/status_errored.metadata.json +0 -0
  96. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/status_failed.metadata.json +0 -0
  97. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/status_xfailed.metadata.json +0 -0
  98. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/expected/status_xsucceeded.metadata.json +0 -0
  99. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/simple.py +0 -0
  100. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/tests/__init__.py +0 -0
  101. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/tests/test_noappmap.py +0 -0
  102. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest/tests/test_simple.py +0 -0
  103. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest-instrumented/appmap.yml +0 -0
  104. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest-instrumented/init/sitecustomize.py +0 -0
  105. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/pytest-instrumented/test_instrumented.py +0 -0
  106. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/remote.appmap.json +0 -0
  107. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/.gitignore +0 -0
  108. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/appmap-no-test-cases.yml +0 -0
  109. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/appmap.yml +0 -0
  110. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/expected/pytest-no-test-cases.appmap.json +0 -0
  111. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/expected/pytest.appmap.json +0 -0
  112. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/init/sitecustomize.py +0 -0
  113. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/test/__init__.py +0 -0
  114. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/trial/test/test_deferred.py +0 -0
  115. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/appmap-no-test-cases.yml +0 -0
  116. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/appmap.yml +0 -0
  117. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/pytest.appmap.json +0 -0
  118. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/status_errored.metadata.json +0 -0
  119. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/status_failed.metadata.json +0 -0
  120. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/status_xfailed.metadata.json +0 -0
  121. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/status_xsucceeded.metadata.json +0 -0
  122. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/unittest-no-test-cases.appmap.json +0 -0
  123. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/expected/unittest.appmap.json +0 -0
  124. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/init/sitecustomize.py +0 -0
  125. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/simple/__init__.py +0 -0
  126. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/simple/test_noappmap.py +0 -0
  127. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/data/unittest/simple/test_simple.py +0 -0
  128. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/helpers.py +0 -0
  129. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/normalize.py +0 -0
  130. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_command.py +0 -0
  131. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_configuration.py +0 -0
  132. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_describe_value.py +0 -0
  133. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_django.py +0 -0
  134. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_django_simplelazyobject.py +0 -0
  135. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_env.py +0 -0
  136. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_events.py +0 -0
  137. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_fastapi.py +0 -0
  138. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_flask.py +0 -0
  139. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_generation.py +0 -0
  140. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_http.py +0 -0
  141. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_importer.py +0 -0
  142. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_labels.py +0 -0
  143. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_metadata.py +0 -0
  144. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_params.py +0 -0
  145. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_properties.py +0 -0
  146. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_recording.py +0 -0
  147. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_sqlalchemy.py +0 -0
  148. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_test_frameworks.py +0 -0
  149. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/test_util.py +0 -0
  150. {appmap-3.0.0 → appmap-3.0.1}/_appmap/test/web_framework.py +0 -0
  151. {appmap-3.0.0 → appmap-3.0.1}/_appmap/testing_framework.py +0 -0
  152. {appmap-3.0.0 → appmap-3.0.1}/_appmap/trace_logger.py +0 -0
  153. {appmap-3.0.0 → appmap-3.0.1}/_appmap/unittest.py +0 -0
  154. {appmap-3.0.0 → appmap-3.0.1}/_appmap/utils.py +0 -0
  155. {appmap-3.0.0 → appmap-3.0.1}/_appmap/web_framework.py +0 -0
  156. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/LICENSE +0 -0
  157. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/__init__.py +0 -0
  158. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/arguments.py +0 -0
  159. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/decorators.py +0 -0
  160. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/importer.py +0 -0
  161. {appmap-3.0.0 → appmap-3.0.1}/_appmap/wrapt/wrappers.py +0 -0
  162. {appmap-3.0.0 → appmap-3.0.1}/appmap/__init__.py +0 -0
  163. {appmap-3.0.0 → appmap-3.0.1}/appmap/command/__init__.py +0 -0
  164. {appmap-3.0.0 → appmap-3.0.1}/appmap/command/appmap_agent_init.py +0 -0
  165. {appmap-3.0.0 → appmap-3.0.1}/appmap/command/appmap_agent_status.py +0 -0
  166. {appmap-3.0.0 → appmap-3.0.1}/appmap/command/appmap_agent_validate.py +0 -0
  167. {appmap-3.0.0 → appmap-3.0.1}/appmap/django.py +0 -0
  168. {appmap-3.0.0 → appmap-3.0.1}/appmap/fastapi.py +0 -0
  169. {appmap-3.0.0 → appmap-3.0.1}/appmap/flask.py +0 -0
  170. {appmap-3.0.0 → appmap-3.0.1}/appmap/http.py +0 -0
  171. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/__init__.py +0 -0
  172. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/crypto.yml +0 -0
  173. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/django.yml +0 -0
  174. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/flask.yml +0 -0
  175. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/formats.yml +0 -0
  176. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/http.yml +0 -0
  177. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/jobs.yml +0 -0
  178. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/jwt.yml +0 -0
  179. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/logger.yml +0 -0
  180. {appmap-3.0.0 → appmap-3.0.1}/appmap/labeling/random.yml +0 -0
  181. {appmap-3.0.0 → appmap-3.0.1}/appmap/pytest.py +0 -0
  182. {appmap-3.0.0 → appmap-3.0.1}/appmap/sqlalchemy.py +0 -0
  183. {appmap-3.0.0 → appmap-3.0.1}/appmap/unittest.py +0 -0
  184. {appmap-3.0.0 → appmap-3.0.1}/appmap/uvicorn.py +0 -0
  185. {appmap-3.0.0 → appmap-3.0.1}/appmap.pth +0 -0
  186. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/LICENSE +0 -0
  187. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/__init__.py +0 -0
  188. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/arguments.py +0 -0
  189. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/decorators.py +0 -0
  190. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/importer.py +0 -0
  191. {appmap-3.0.0 → appmap-3.0.1}/vendor/_appmap/wrapt/wrappers.py +0 -0
  192. {appmap-3.0.0 → appmap-3.0.1}/vendor/patches/wrapt.patch +0 -0
  193. {appmap-3.0.0 → appmap-3.0.1}/vendor/vendor.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: appmap
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Create AppMap files by recording a Python application.
5
5
  Project-URL: Homepage, https://github.com/applandinc/appmap-python
6
6
  Author-email: Alan Potter <alan@app.land>, Viraj Kanwade <viraj.kanwade@forgeahead.io>, Rafał Rzepecki <rafal@app.land>
@@ -508,5 +508,13 @@ if _startup_messages_shown is None:
508
508
  logger.info("file: %s", c._file if c.file_present else "[no appmap.yml]")
509
509
  logger.info("config: %r", c)
510
510
  logger.debug("package_functions: %s", c.package_functions)
511
- logger.info("env: %r", os.environ)
511
+ # Only log AppMap's own settings, never the full environment: arbitrary
512
+ # environment variables (API keys, credentials, tokens, etc.) must never
513
+ # end up in application logs.
514
+ appmap_env = {
515
+ k: v
516
+ for k, v in os.environ.items()
517
+ if k in ("APPMAP", "_APPMAP") or k.startswith(("APPMAP_", "_APPMAP_"))
518
+ }
519
+ logger.info("env: %r", appmap_env)
512
520
  os.environ["_APPMAP_MESSAGES_SHOWN"] = "true"
@@ -168,7 +168,10 @@ class Env(metaclass=SingletonMeta):
168
168
  trace_logger.install()
169
169
 
170
170
  log_level = self.get("APPMAP_LOG_LEVEL", "warn").upper()
171
- disable_log = os.environ.get("APPMAP_DISABLE_LOG_FILE", "false").upper() != "FALSE"
171
+ # No log file unless the user opts in: it can contain data (e.g.
172
+ # rendered parameter values) that shouldn't be written to disk or
173
+ # committed to source control by default.
174
+ disable_log = os.environ.get("APPMAP_DISABLE_LOG_FILE", "true").upper() != "FALSE"
172
175
  log_config = self.get("APPMAP_LOG_CONFIG")
173
176
  config_dict = {
174
177
  "version": 1,
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import re
2
3
 
3
4
  import pytest
@@ -37,6 +38,20 @@ def test_runner_multi_recording_type(script_runner, flag, expected):
37
38
  assert len(re.findall("(?m)^APPMAP_RECORD_PYTEST=true$", result.stdout)) == expected
38
39
 
39
40
 
41
+ @pytest.mark.parametrize(
42
+ "flags,expected",
43
+ [
44
+ ([], "true"),
45
+ (["--no-enable-log"], "true"),
46
+ (["--enable-log"], "false"),
47
+ ],
48
+ )
49
+ def test_runner_log_file_disabled_by_default(script_runner, flags, expected):
50
+ result = script_runner.run(["appmap-python", *flags, "--record", "process"])
51
+ assert result.returncode == 0
52
+ assert re.search(f"(?m)^APPMAP_DISABLE_LOG_FILE={expected}$", result.stdout) is not None
53
+
54
+
40
55
  @pytest.mark.script_launch_mode("subprocess")
41
56
  class TestEnv:
42
57
  def test_appmap_present(self, script_runner):
@@ -50,3 +65,19 @@ class TestEnv:
50
65
  )
51
66
  assert result.returncode == 0
52
67
  assert re.match(r"true", result.stdout) is not None
68
+
69
+ def test_internal_state_not_leaked_to_child(self, script_runner):
70
+ # appmap-python is itself instrumented at interpreter startup (via
71
+ # appmap.pth), which can set internal, process-scoped _APPMAP*
72
+ # markers using whatever it inherited, before this script has
73
+ # computed the environment the child command should actually run
74
+ # with. Simulate that by pre-setting one such marker (the
75
+ # once-per-process "startup messages already shown" guard) and
76
+ # confirm it doesn't leak into the child's environment, which would
77
+ # otherwise silently suppress the child's own startup logging.
78
+ env = {**os.environ, "_APPMAP_MESSAGES_SHOWN": "true"}
79
+ result = script_runner.run(
80
+ ["appmap-python", "printenv", "_APPMAP_MESSAGES_SHOWN"], env=env
81
+ )
82
+ assert result.returncode != 0
83
+ assert result.stdout == ""
@@ -122,7 +122,7 @@ def run():
122
122
  envvars[f"APPMAP_RECORD_{disabled.upper()}"] = "false"
123
123
 
124
124
  envvars["APPMAP_DISABLE_LOG_FILE"] = (
125
- "true" if parsed_args.get("no_enable_log", set()) else "false"
125
+ "false" if parsed_args.get("enable_log", False) else "true"
126
126
  )
127
127
 
128
128
  if len(cmd) == 0:
@@ -130,7 +130,17 @@ def run():
130
130
  print(f"{k}={v}")
131
131
  sys.exit(0)
132
132
 
133
- os.execvpe(cmd[0], cmd, {**os.environ, **envvars})
133
+ # appmap-python is itself instrumented on interpreter startup (via
134
+ # appmap.pth), before this point, using whatever environment it inherited
135
+ # rather than the envvars computed above. That incidental self-init can
136
+ # set internal, process-scoped state under _APPMAP*-prefixed names (e.g.
137
+ # the once-per-process "startup messages already shown" guard); left in
138
+ # place, it would carry over into the child's environment and suppress
139
+ # or corrupt the child's own startup behavior. Drop all of it and let
140
+ # envvars below re-set whatever the child actually needs.
141
+ child_env = {k: v for k, v in os.environ.items() if not k.startswith("_APPMAP")}
142
+ child_env.update(envvars)
143
+ os.execvpe(cmd[0], cmd, child_env)
134
144
 
135
145
 
136
146
  if __name__ == "__main__":
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "appmap"
3
- version = "3.0.0"
3
+ version = "3.0.1"
4
4
  description = "Create AppMap files by recording a Python application."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.8"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes