wexample-wex-addon-dev-python 15.7.0__tar.gz → 15.7.2__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 (120) hide show
  1. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/PKG-INFO +4 -4
  2. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/README.md +1 -1
  3. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/pyproject.toml +3 -3
  4. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/check/pylint.py +10 -8
  5. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/rename.py +1 -3
  6. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/abstract_python_path_rename_handler.py +1 -3
  7. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/abstract_python_rename_handler.py +1 -0
  8. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/abstract_python_symbol_rename_handler.py +7 -17
  9. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/applier.py +6 -6
  10. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_common.py +22 -28
  11. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_package_rename_handler.py +1 -3
  12. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/selection/abstract_python_code_selection.py +9 -10
  13. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/python_workdir.py +4 -4
  14. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/test_python_class_rename_handler.py +1 -3
  15. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/test_python_function_rename_handler.py +2 -6
  16. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/test_python_package_rename_handler.py +1 -3
  17. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/__init__.py +0 -0
  18. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/__init__.py +0 -0
  19. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/__init__.py +0 -0
  20. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/check/__init__.py +0 -0
  21. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/check/mypy.py +0 -0
  22. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/check/pyright.py +0 -0
  23. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/check.py +0 -0
  24. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/format/__init__.py +0 -0
  25. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/format/black.py +0 -0
  26. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/format/isort.py +0 -0
  27. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/code/format.py +0 -0
  28. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/examples/__init__.py +0 -0
  29. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/examples/utils/__init__.py +0 -0
  30. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/examples/utils/some_example_type.py +0 -0
  31. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/examples/validate.py +0 -0
  32. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/commands/release/__init__.py +0 -0
  33. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/common/__init__.py +0 -0
  34. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/common/pypi_registry_gateway.py +0 -0
  35. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/config_value/__init__.py +0 -0
  36. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/config_value/python_package_readme_config_value.py +0 -0
  37. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/const/__init__.py +0 -0
  38. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/const/package.py +0 -0
  39. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/const/python.py +0 -0
  40. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/const/tags.py +0 -0
  41. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/file/__init__.py +0 -0
  42. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/file/python_app_iml_file.py +0 -0
  43. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/file/python_pyproject_toml_file.py +0 -0
  44. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/formatter/__init__.py +0 -0
  45. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/formatter/python_code_formatter.py +0 -0
  46. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/helper/__init__.py +0 -0
  47. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/helper/pdm.py +0 -0
  48. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/middleware/__init__.py +0 -0
  49. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/middleware/each_python_file_middleware.py +0 -0
  50. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/py.typed +0 -0
  51. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/python_addon_manager.py +0 -0
  52. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/__init__.py +0 -0
  53. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_class_rename_handler.py +0 -0
  54. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_constant_rename_handler.py +0 -0
  55. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_function_rename_handler.py +0 -0
  56. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/python_module_rename_handler.py +0 -0
  57. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/rename_plan.py +0 -0
  58. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/refactor/symbol_kind.py +0 -0
  59. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/.wex.yml +0 -0
  60. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/ai/agents/describer/agent.yml +0 -0
  61. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/ai/agents/describer/context.j2 +0 -0
  62. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/design_rules/python_code.md +0 -0
  63. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/docker/Dockerfile.python-profiling +0 -0
  64. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/package_gitlab_ci.yml +0 -0
  65. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/package_publish_gitlab.yml +0 -0
  66. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/readme_templates/install.md.j2 +0 -0
  67. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/readme_templates/tests.md.j2 +0 -0
  68. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/resources/writing_rules/python_code.md +0 -0
  69. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/selection/__init__.py +0 -0
  70. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/selection/package_description_missing_selection.py +0 -0
  71. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/selection/python_code_performance_selection.py +0 -0
  72. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/__init__.py +0 -0
  73. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/__init__.py +0 -0
  74. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/app_service.py +0 -0
  75. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/commands/__init__.py +0 -0
  76. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/commands/service/__init__.py +0 -0
  77. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/commands/service/install.py +0 -0
  78. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/commands/service/setup.py +0 -0
  79. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/docker/.wex.yml +0 -0
  80. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/docker/docker-compose.yml +0 -0
  81. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/__init__.py +0 -0
  82. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/__init__.py +0 -0
  83. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/docker-compose.yml +0 -0
  84. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/entrypoint.sh +0 -0
  85. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/images/Dockerfile.base +0 -0
  86. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/images/Dockerfile.develop +0 -0
  87. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/samples/docker/images/__init__.py +0 -0
  88. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/services/python/service.yml +0 -0
  89. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/__init__.py +0 -0
  90. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/mixin/__init__.py +0 -0
  91. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/mixin/with_profiling_python_workdir_mixin.py +0 -0
  92. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/python_package_workdir.py +0 -0
  93. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/src/wexample_wex_addon_dev_python/workdir/python_packages_suite_workdir.py +0 -0
  94. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/.gitkeep +0 -0
  95. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/helper/__init__.py +0 -0
  96. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/helper/test_pdm.py +0 -0
  97. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/__init__.py +0 -0
  98. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/__init__.py +0 -0
  99. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/test_python_constant_rename_handler.py +0 -0
  100. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/integration/refactor/test_python_module_rename_handler.py +0 -0
  101. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/__init__.py +0 -0
  102. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/helper/__init__.py +0 -0
  103. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/helper/test_pdm.py +0 -0
  104. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/__init__.py +0 -0
  105. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_abstract_python_path_rename_handler.py +0 -0
  106. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_abstract_python_rename_handler.py +0 -0
  107. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_abstract_python_symbol_rename_handler.py +0 -0
  108. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_applier.py +0 -0
  109. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_class_rename_handler.py +0 -0
  110. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_common.py +0 -0
  111. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_constant_rename_handler.py +0 -0
  112. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_function_rename_handler.py +0 -0
  113. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_module_rename_handler.py +0 -0
  114. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_python_package_rename_handler.py +0 -0
  115. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_rename_plan.py +0 -0
  116. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/refactor/test_symbol_kind.py +0 -0
  117. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/resources/__init__.py +0 -0
  118. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/resources/test_shipped_agents.py +0 -0
  119. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/workdir/__init__.py +0 -0
  120. {wexample_wex_addon_dev_python-15.7.0 → wexample_wex_addon_dev_python-15.7.2}/tests/unit/workdir/test_python_package_workdir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wexample-wex-addon-dev-python
3
- Version: 15.7.0
3
+ Version: 15.7.2
4
4
  Summary: Extends wex with commands to format, lint, and rename Python symbols, plus workdir types for Python packages and suites
5
5
  Author-Email: weeger <contact@wexample.com>
6
6
  License: MIT
@@ -18,9 +18,9 @@ Requires-Dist: networkx
18
18
  Requires-Dist: pylint
19
19
  Requires-Dist: pyright
20
20
  Requires-Dist: wexample-api>=6.8.0
21
- Requires-Dist: wexample-filestate-python>=9.2.0
21
+ Requires-Dist: wexample-filestate-python>=9.3.0
22
22
  Requires-Dist: wexample-wex-addon-ai>=19.1.0
23
- Requires-Dist: wexample-wex-addon-app>=34.16.0
23
+ Requires-Dist: wexample-wex-addon-app>=35.0.0
24
24
  Provides-Extra: dev
25
25
  Requires-Dist: pytest; extra == "dev"
26
26
  Requires-Dist: pytest-cov; extra == "dev"
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  # wex_addon_dev_python
30
30
 
31
- Version: 15.7.0
31
+ Version: 15.7.2
32
32
 
33
33
  Extends wex with commands to format, lint, and rename Python symbols, plus workdir types for Python packages and suites
34
34
 
@@ -1,6 +1,6 @@
1
1
  # wex_addon_dev_python
2
2
 
3
- Version: 15.7.0
3
+ Version: 15.7.2
4
4
 
5
5
  Extends wex with commands to format, lint, and rename Python symbols, plus workdir types for Python packages and suites
6
6
 
@@ -6,7 +6,7 @@ build-backend = "pdm.backend"
6
6
 
7
7
  [project]
8
8
  name = "wexample-wex-addon-dev-python"
9
- version = "15.7.0"
9
+ version = "15.7.2"
10
10
  description = "Extends wex with commands to format, lint, and rename Python symbols, plus workdir types for Python packages and suites"
11
11
  authors = [
12
12
  { name = "weeger", email = "contact@wexample.com" },
@@ -27,9 +27,9 @@ dependencies = [
27
27
  "pylint",
28
28
  "pyright",
29
29
  "wexample-api>=6.8.0",
30
- "wexample-filestate-python>=9.2.0",
30
+ "wexample-filestate-python>=9.3.0",
31
31
  "wexample-wex-addon-ai>=19.1.0",
32
- "wexample-wex-addon-app>=34.16.0",
32
+ "wexample-wex-addon-app>=35.0.0",
33
33
  ]
34
34
 
35
35
  [project.readme]
@@ -6,14 +6,16 @@ if TYPE_CHECKING:
6
6
  from wexample_cli.context.execution_context import ExecutionContext
7
7
 
8
8
  # Pre-computed once at import time; avoids list allocation + join on every call.
9
- _PYLINT_DISABLE_FLAG = "--disable=" + ",".join([
10
- "missing-module-docstring",
11
- "import-outside-toplevel",
12
- "no-name-in-module",
13
- "broad-exception-caught",
14
- "c-extension-no-member",
15
- "line-too-long",
16
- ])
9
+ _PYLINT_DISABLE_FLAG = "--disable=" + ",".join(
10
+ [
11
+ "missing-module-docstring",
12
+ "import-outside-toplevel",
13
+ "no-name-in-module",
14
+ "broad-exception-caught",
15
+ "c-extension-no-member",
16
+ "line-too-long",
17
+ ]
18
+ )
17
19
 
18
20
 
19
21
  def _code_check_pylint(context: ExecutionContext, file_path: str) -> bool:
@@ -137,9 +137,7 @@ def python__code__rename(
137
137
  spinner.stop()
138
138
 
139
139
  mode = "APPLIED" if not dry_run else "DRY-RUN"
140
- context.io.log(
141
- f"[{mode}] {report.source_path} → {report.target_path}"
142
- )
140
+ context.io.log(f"[{mode}] {report.source_path} → {report.target_path}")
143
141
  context.io.log(
144
142
  f"[{mode}] scope={len(scope_roots)} root(s) "
145
143
  f"scanned={report.files_scanned} changed={len(report.files_changed)}"
@@ -81,9 +81,7 @@ class AbstractPythonPathRenameHandler(AbstractPythonRenameHandler):
81
81
  merge into an existing target (`PythonPackageRenameHandler`)."""
82
82
  plan.path_renames.append((source_path, target_path))
83
83
 
84
- def _plan_target_parent_creation(
85
- self, plan: RenamePlan, target_path: Path
86
- ) -> None:
84
+ def _plan_target_parent_creation(self, plan: RenamePlan, target_path: Path) -> None:
87
85
  """Walk up from `target_path.parent` and queue every missing ancestor
88
86
  directory plus an empty `__init__.py` so the move can land inside a
89
87
  valid Python package even when the user renames across parents."""
@@ -27,6 +27,7 @@ class AbstractPythonRenameHandler(BaseClass):
27
27
  layout, init validation, three-phase orchestration — lives here so every
28
28
  flavour of rename stays strictly consistent.
29
29
  """
30
+
30
31
  dry_run: bool = public_field(
31
32
  default=True,
32
33
  description="When True, return the plan/report without touching the "
@@ -73,9 +73,7 @@ class AbstractPythonSymbolRenameHandler(AbstractPythonRenameHandler):
73
73
 
74
74
  return plan
75
75
 
76
- def _add_unique(
77
- self, results: list[Path], seen: set[str], path: Path
78
- ) -> None:
76
+ def _add_unique(self, results: list[Path], seen: set[str], path: Path) -> None:
79
77
  key = str(path.resolve())
80
78
  if key in seen:
81
79
  return
@@ -114,18 +112,15 @@ class AbstractPythonSymbolRenameHandler(AbstractPythonRenameHandler):
114
112
  # Case A: this package directory IS the parent module.
115
113
  if (
116
114
  len(pkg_dir.parts) >= len(parent_parts)
117
- and pkg_dir.parts[-len(parent_parts):] == parent_parts
115
+ and pkg_dir.parts[-len(parent_parts) :] == parent_parts
118
116
  ):
119
117
  self._add_unique(results, seen, init_file)
120
118
 
121
119
  # Case B: the parent module is `<pkg_dir>/<leaf>.py` and the
122
120
  # package's dotted tail equals `outer_parts`.
123
- if (
124
- n_outer == 0
125
- or (
126
- len(pkg_dir.parts) >= n_outer
127
- and pkg_dir.parts[-n_outer:] == outer_parts
128
- )
121
+ if n_outer == 0 or (
122
+ len(pkg_dir.parts) >= n_outer
123
+ and pkg_dir.parts[-n_outer:] == outer_parts
129
124
  ):
130
125
  candidate = pkg_dir / f"{leaf}.py"
131
126
  if candidate.is_file():
@@ -151,10 +146,7 @@ class AbstractPythonSymbolRenameHandler(AbstractPythonRenameHandler):
151
146
  module = cst.parse_module(candidate.read_text(encoding="utf-8"))
152
147
  except (cst.ParserSyntaxError, OSError):
153
148
  continue
154
- if any(
155
- self._is_definition_node(stmt, old_name)
156
- for stmt in module.body
157
- ):
149
+ if any(self._is_definition_node(stmt, old_name) for stmt in module.body):
158
150
  matches.append(candidate)
159
151
 
160
152
  unique = list({str(m): m for m in matches}.values())
@@ -172,9 +164,7 @@ class AbstractPythonSymbolRenameHandler(AbstractPythonRenameHandler):
172
164
  return unique[0]
173
165
 
174
166
  @abstract_method
175
- def _is_definition_node(
176
- self, node: cst.CSTNode, name: str
177
- ) -> bool:
167
+ def _is_definition_node(self, node: cst.CSTNode, name: str) -> bool:
178
168
  """Return True if `node` is a top-level definition of `name` of this
179
169
  handler's kind (class / function / constant)."""
180
170
 
@@ -17,12 +17,12 @@ class RenameApplier(ABC):
17
17
 
18
18
  def apply(self, plan: RenamePlan) -> None:
19
19
  """Default sequencing:
20
- 1. create new directories (so subsequent steps land on existing parents)
21
- 2. write file contents (rewrites, fresh `__init__.py`)
22
- 3. rename paths (files or directories moved on disk)
23
- 4. delete leftover files (drop merge-duplicates)
24
- 5. purge build artefact directories (recursive rmtree)
25
- 6. remove empty directories (clean up after merges)
20
+ 1. create new directories (so subsequent steps land on existing parents)
21
+ 2. write file contents (rewrites, fresh `__init__.py`)
22
+ 3. rename paths (files or directories moved on disk)
23
+ 4. delete leftover files (drop merge-duplicates)
24
+ 5. purge build artefact directories (recursive rmtree)
25
+ 6. remove empty directories (clean up after merges)
26
26
  """
27
27
  for directory in plan.directories_to_create:
28
28
  self.create_directory(directory)
@@ -7,20 +7,22 @@ from pathlib import Path
7
7
  import libcst as cst
8
8
 
9
9
  # Directories never scanned for source files (build/venv artefacts, VCS).
10
- SKIP_DIR_NAMES: frozenset[str] = frozenset({
11
- "__pycache__",
12
- ".venv",
13
- "venv",
14
- "env",
15
- ".git",
16
- "node_modules",
17
- ".pytest_cache",
18
- ".mypy_cache",
19
- ".ruff_cache",
20
- ".pdm-build",
21
- "dist",
22
- "build",
23
- })
10
+ SKIP_DIR_NAMES: frozenset[str] = frozenset(
11
+ {
12
+ "__pycache__",
13
+ ".venv",
14
+ "venv",
15
+ "env",
16
+ ".git",
17
+ "node_modules",
18
+ ".pytest_cache",
19
+ ".mypy_cache",
20
+ ".ruff_cache",
21
+ ".pdm-build",
22
+ "dist",
23
+ "build",
24
+ }
25
+ )
24
26
 
25
27
 
26
28
  def dotted_to_parts(node) -> tuple[str, ...] | None:
@@ -210,7 +212,7 @@ class _ImportRenameTransformer(cst.CSTTransformer):
210
212
  if parts is None or not self._starts_with(parts):
211
213
  new_names.append(alias)
212
214
  continue
213
- new_parts = self.new_parts + parts[self._n:]
215
+ new_parts = self.new_parts + parts[self._n :]
214
216
  new_names.append(alias.with_changes(name=parts_to_dotted(new_parts)))
215
217
  touched = True
216
218
  if not touched:
@@ -242,8 +244,8 @@ class _ImportRenameTransformer(cst.CSTTransformer):
242
244
 
243
245
  # Case A/C — the module side IS the renamed entity (or below it).
244
246
  if self._starts_with(absolute_module):
245
- new_absolute = self.new_parts + absolute_module[self._n:]
246
- new_module_parts = new_absolute[len(resolved_pkg or ()):]
247
+ new_absolute = self.new_parts + absolute_module[self._n :]
248
+ new_module_parts = new_absolute[len(resolved_pkg or ()) :]
247
249
  self.changed = True
248
250
  new_module_node = (
249
251
  parts_to_dotted(new_module_parts) if new_module_parts else None
@@ -262,10 +264,7 @@ class _ImportRenameTransformer(cst.CSTTransformer):
262
264
  new_names = []
263
265
  touched = False
264
266
  for alias in updated_node.names:
265
- if (
266
- isinstance(alias.name, cst.Name)
267
- and alias.name.value == old_last
268
- ):
267
+ if isinstance(alias.name, cst.Name) and alias.name.value == old_last:
269
268
  new_names.append(alias.with_changes(name=cst.Name(new_last)))
270
269
  touched = True
271
270
  else:
@@ -276,9 +275,7 @@ class _ImportRenameTransformer(cst.CSTTransformer):
276
275
 
277
276
  return updated_node
278
277
 
279
- def _resolve_relative_prefix(
280
- self, rel_count: int
281
- ) -> tuple[str, ...] | None:
278
+ def _resolve_relative_prefix(self, rel_count: int) -> tuple[str, ...] | None:
282
279
  """Convert a relative-import dot count into the absolute package
283
280
  prefix it resolves to. Returns `()` for an absolute (non-relative)
284
281
  import, the resolved prefix for a relative one, or None when
@@ -385,10 +382,7 @@ class _SymbolRenameTransformer(cst.CSTTransformer):
385
382
  new_names: list[cst.ImportAlias] = []
386
383
  touched = False
387
384
  for alias in updated_node.names:
388
- if (
389
- isinstance(alias.name, cst.Name)
390
- and alias.name.value == self.old_name
391
- ):
385
+ if isinstance(alias.name, cst.Name) and alias.name.value == self.old_name:
392
386
  new_names.append(alias.with_changes(name=cst.Name(self.new_name)))
393
387
  touched = True
394
388
  else:
@@ -95,9 +95,7 @@ class PythonPackageRenameHandler(AbstractPythonPathRenameHandler):
95
95
  src_content = entry.read_text(encoding="utf-8")
96
96
  tgt_content = target_entry.read_text(encoding="utf-8")
97
97
  except OSError as e:
98
- raise RuntimeError(
99
- f"Cannot read content while planning merge: {e}"
100
- )
98
+ raise RuntimeError(f"Cannot read content while planning merge: {e}")
101
99
 
102
100
  if src_content == tgt_content or src_content == "":
103
101
  plan.files_to_delete.append(entry)
@@ -42,15 +42,14 @@ class AbstractPythonCodeSelection(AbstractCodeFromDirectorySelection):
42
42
  try:
43
43
  return self._excl_path_frags # type: ignore[attr-defined]
44
44
  except AttributeError:
45
- self._excl_path_frags: tuple[str, ...] = (
46
- super().get_excluded_path_fragments()
47
- + (
48
- "__pycache__",
49
- "/tests/",
50
- "/build/",
51
- "/dist/",
52
- "/.venv/",
53
- "/.pdm-build/",
54
- )
45
+ self._excl_path_frags: tuple[
46
+ str, ...
47
+ ] = super().get_excluded_path_fragments() + (
48
+ "__pycache__",
49
+ "/tests/",
50
+ "/build/",
51
+ "/dist/",
52
+ "/.venv/",
53
+ "/.pdm-build/",
55
54
  )
56
55
  return self._excl_path_frags
@@ -138,7 +138,9 @@ class PythonWorkdir(
138
138
 
139
139
  # global.name may be written in any case: an import name has to be a
140
140
  # valid Python identifier, matching the generated src/ directory.
141
- return f"{self.get_vendor_name()}_{string_to_snake_case(self.get_project_name())}"
141
+ return (
142
+ f"{self.get_vendor_name()}_{string_to_snake_case(self.get_project_name())}"
143
+ )
142
144
 
143
145
  def get_package_name(self) -> str:
144
146
  from wexample_helpers.helper.string import string_to_kebab_case
@@ -652,9 +654,7 @@ class PythonWorkdir(
652
654
  # relationship — the static dict identity is what `SidecarOfOption`
653
655
  # resolves on).
654
656
  def _entry_filter(entry):
655
- return not any(
656
- segment in exclude_dirs for segment in entry.parent.parts
657
- )
657
+ return not any(segment in exclude_dirs for segment in entry.parent.parts)
658
658
 
659
659
  return ChildrenFilterOption(
660
660
  pattern={
@@ -42,9 +42,7 @@ def test_apply_renames_definition_and_module_local_references(tmp_path: Path) ->
42
42
  dry_run=False,
43
43
  ).run()
44
44
 
45
- assert def_file.read_text() == (
46
- "class Crimson:\n pass\n\nprimary = Crimson()\n"
47
- )
45
+ assert def_file.read_text() == ("class Crimson:\n pass\n\nprimary = Crimson()\n")
48
46
 
49
47
 
50
48
  def test_apply_rewrites_attribute_access(tmp_path: Path) -> None:
@@ -19,9 +19,7 @@ def test_apply_renames_function_definition_and_calls(tmp_path: Path) -> None:
19
19
  dry_run=False,
20
20
  ).run()
21
21
 
22
- assert def_file.read_text() == (
23
- "def salute():\n return 1\n\nprint(salute())\n"
24
- )
22
+ assert def_file.read_text() == ("def salute():\n return 1\n\nprint(salute())\n")
25
23
 
26
24
 
27
25
  def test_apply_rewrites_consumer_imports(tmp_path: Path) -> None:
@@ -68,9 +66,7 @@ def test_apply_skips_class_methods_sharing_the_name(tmp_path: Path) -> None:
68
66
  ).run()
69
67
 
70
68
  assert def_file.read_text() == "def salute():\n return 1\n"
71
- assert other.read_text() == (
72
- "class X:\n def greet(self):\n return 2\n"
73
- )
69
+ assert other.read_text() == ("class X:\n def greet(self):\n return 2\n")
74
70
 
75
71
 
76
72
  def _make_pkg(parent: Path, name: str) -> Path:
@@ -18,9 +18,7 @@ def test_apply_merges_into_existing_target_when_no_conflict(tmp_path: Path) -> N
18
18
  _make_module(helpers, "left_behind", "x = 1\n")
19
19
  helper = _make_pkg(mylib, "helper")
20
20
  _make_module(helper, "already_moved", "y = 2\n")
21
- consumer = _make_module(
22
- mylib, "use", "from mylib.helpers.left_behind import x\n"
23
- )
21
+ consumer = _make_module(mylib, "use", "from mylib.helpers.left_behind import x\n")
24
22
 
25
23
  PythonPackageRenameHandler(
26
24
  scope_roots=[tmp_path],