openrewrite-migrate-python 0.16.0.dev20261005072603__tar.gz → 0.16.0.dev20261005095013__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 (159) hide show
  1. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/PKG-INFO +1 -1
  2. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/pyproject.toml +1 -1
  3. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/__init__.py +2 -0
  4. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/_reindent.py +16 -0
  5. openrewrite_migrate_python-0.16.0.dev20261005095013/src/openrewrite_code_quality_python/codequality/code_quality.py +73 -0
  6. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py +56 -4
  7. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/PKG-INFO +1 -1
  8. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/SOURCES.txt +1 -0
  9. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/setup.cfg +0 -0
  10. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/__init__.py +0 -0
  11. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/_semantically_equal.py +0 -0
  12. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/_trivia.py +0 -0
  13. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/all_branches_identical.py +0 -0
  14. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py +0 -0
  15. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py +0 -0
  16. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/merge_identical_branches.py +0 -0
  17. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/remove_duplicate_conditions.py +0 -0
  18. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/remove_self_assignment.py +0 -0
  19. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite.py +0 -0
  20. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/simplify_boolean_literal.py +0 -0
  21. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py +0 -0
  22. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/__init__.py +0 -0
  23. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/__init__.py +0 -0
  24. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_from_imports.py +0 -0
  25. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_import_hygiene.py +0 -0
  26. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_langchain_tables.py +0 -0
  27. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_markers.py +0 -0
  28. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_slots.py +0 -0
  29. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/_typing_imports.py +0 -0
  30. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/aifc_migrations.py +0 -0
  31. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/array_deprecations.py +0 -0
  32. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/ast_deprecations.py +0 -0
  33. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/asyncio_coroutine_to_async.py +0 -0
  34. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/asyncio_deprecations.py +0 -0
  35. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/avro_migrations.py +0 -0
  36. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/calendar_deprecations.py +0 -0
  37. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/cgi_migrations.py +0 -0
  38. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/cgi_parse_deprecations.py +0 -0
  39. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/collections_abc_migrations.py +0 -0
  40. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/configparser_deprecations.py +0 -0
  41. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/datetime_utc.py +0 -0
  42. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/distutils_deprecations.py +0 -0
  43. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/distutils_migrations.py +0 -0
  44. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/functools_deprecations.py +0 -0
  45. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/future_imports.py +0 -0
  46. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/gettext_deprecations.py +0 -0
  47. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/html_parser_deprecations.py +0 -0
  48. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/imp_migrations.py +0 -0
  49. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/langchain_classic_imports.py +0 -0
  50. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/langchain_community_imports.py +0 -0
  51. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/langchain_provider_imports.py +0 -0
  52. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/locale_deprecations.py +0 -0
  53. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py +0 -0
  54. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/macpath_deprecations.py +0 -0
  55. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/mailcap_migrations.py +0 -0
  56. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/nntplib_migrations.py +0 -0
  57. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/os_deprecations.py +0 -0
  58. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pathlib_deprecations.py +0 -0
  59. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pep594_system_migrations.py +0 -0
  60. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pipes_migrations.py +0 -0
  61. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pkgutil_deprecations.py +0 -0
  62. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/platform_deprecations.py +0 -0
  63. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pydantic_deprecations.py +0 -0
  64. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pydantic_fields.py +0 -0
  65. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/pydantic_model_fields.py +0 -0
  66. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/re_deprecations.py +0 -0
  67. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/removed_modules_312.py +0 -0
  68. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/shutil_deprecations.py +0 -0
  69. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/socket_deprecations.py +0 -0
  70. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/ssl_deprecations.py +0 -0
  71. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/string_formatting.py +0 -0
  72. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/sys_deprecations.py +0 -0
  73. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/sys_last_deprecations.py +0 -0
  74. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/tarfile_deprecations.py +0 -0
  75. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/telnetlib_migrations.py +0 -0
  76. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/tempfile_deprecations.py +0 -0
  77. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/threading_deprecations.py +0 -0
  78. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/threading_is_alive_deprecation.py +0 -0
  79. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/typing_callable.py +0 -0
  80. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/typing_deprecations.py +0 -0
  81. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/typing_union_to_pipe.py +0 -0
  82. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/unittest_deprecations.py +0 -0
  83. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain02.py +0 -0
  84. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain1.py +0 -0
  85. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_pydantic.py +0 -0
  86. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python310.py +0 -0
  87. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python311.py +0 -0
  88. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python312.py +0 -0
  89. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python313.py +0 -0
  90. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python314.py +0 -0
  91. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python38.py +0 -0
  92. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/upgrade_to_python39.py +0 -0
  93. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/urllib_deprecations.py +0 -0
  94. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/uu_migrations.py +0 -0
  95. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/xdrlib_migrations.py +0 -0
  96. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python/migrate/xml_deprecations.py +0 -0
  97. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/dependency_links.txt +0 -0
  98. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/entry_points.txt +0 -0
  99. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/requires.txt +0 -0
  100. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/src/openrewrite_migrate_python.egg-info/top_level.txt +0 -0
  101. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_aifc_migrations.py +0 -0
  102. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_array_deprecations.py +0 -0
  103. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_ast_deprecations.py +0 -0
  104. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_asyncio_coroutine_to_async.py +0 -0
  105. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_asyncio_deprecations.py +0 -0
  106. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_avro_migrations.py +0 -0
  107. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_calendar_deprecations.py +0 -0
  108. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_cgi_parse_deprecations.py +0 -0
  109. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_change_import_recipes.py +0 -0
  110. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_collections_abc_migrations.py +0 -0
  111. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_configparser_deprecations.py +0 -0
  112. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_datetime_utc.py +0 -0
  113. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_distutils_deprecations.py +0 -0
  114. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_distutils_migrations.py +0 -0
  115. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_functools_deprecations.py +0 -0
  116. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_future_imports.py +0 -0
  117. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_gettext_deprecations.py +0 -0
  118. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_html_parser_deprecations.py +0 -0
  119. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_imp_migrations.py +0 -0
  120. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_langchain_classic_imports.py +0 -0
  121. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_langchain_community_imports.py +0 -0
  122. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_langchain_provider_imports.py +0 -0
  123. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_locale_deprecations.py +0 -0
  124. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_locale_getdefaultlocale_deprecation.py +0 -0
  125. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_macpath_deprecations.py +0 -0
  126. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_mailcap_migrations.py +0 -0
  127. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_markers.py +0 -0
  128. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_os_deprecations.py +0 -0
  129. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pathlib_deprecations.py +0 -0
  130. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pep594_migrations.py +0 -0
  131. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pep594_system_migrations.py +0 -0
  132. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pkgutil_deprecations.py +0 -0
  133. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_platform_deprecations.py +0 -0
  134. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pydantic_deprecations.py +0 -0
  135. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pydantic_fields.py +0 -0
  136. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_pydantic_model_fields.py +0 -0
  137. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_re_deprecations.py +0 -0
  138. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_removed_modules_312.py +0 -0
  139. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_shutil_deprecations.py +0 -0
  140. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_socket_deprecations.py +0 -0
  141. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_ssl_deprecations.py +0 -0
  142. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_string_formatting.py +0 -0
  143. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_sys_deprecations.py +0 -0
  144. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_sys_last_deprecations.py +0 -0
  145. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_tarfile_deprecations.py +0 -0
  146. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_tempfile_deprecations.py +0 -0
  147. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_threading_deprecations.py +0 -0
  148. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_threading_extended.py +0 -0
  149. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_threading_is_alive_deprecation.py +0 -0
  150. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_typing_alias_moves.py +0 -0
  151. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_typing_callable.py +0 -0
  152. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_typing_deprecations.py +0 -0
  153. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_typing_union_to_pipe.py +0 -0
  154. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_unittest_deprecations.py +0 -0
  155. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_upgrade_recipes.py +0 -0
  156. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_upgrade_to_pydantic.py +0 -0
  157. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_urllib_deprecations.py +0 -0
  158. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_xdrlib_migrations.py +0 -0
  159. {openrewrite_migrate_python-0.16.0.dev20261005072603 → openrewrite_migrate_python-0.16.0.dev20261005095013}/tests/test_xml_deprecations.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrewrite-migrate-python
3
- Version: 0.16.0.dev20261005072603
3
+ Version: 0.16.0.dev20261005095013
4
4
  Summary: OpenRewrite recipes for migrating Python codebases to newer Python versions.
5
5
  Author-email: "Moderne Inc." <support@moderne.io>
6
6
  License: Moderne Proprietary
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "openrewrite-migrate-python"
7
7
  description = "OpenRewrite recipes for migrating Python codebases to newer Python versions."
8
- version = "0.16.0.dev20261005072603" # Updated dynamically during release
8
+ version = "0.16.0.dev20261005095013" # Updated dynamically during release
9
9
  authors = [{ name = "Moderne Inc.", email = "support@moderne.io" }]
10
10
  license = { text = "Moderne Proprietary" }
11
11
  readme = "README.md"
@@ -2,6 +2,7 @@
2
2
 
3
3
  from .all_branches_identical import AllBranchesIdentical
4
4
  from .boolean_checks_not_inverted import BooleanChecksNotInverted
5
+ from .code_quality import CodeQuality
5
6
  from .collapsible_if_statements import CollapsibleIfStatements
6
7
  from .merge_identical_branches import MergeIdenticalBranches
7
8
  from .remove_duplicate_conditions import RemoveDuplicateConditions
@@ -13,6 +14,7 @@ from .simplify_redundant_logical_expression import SimplifyRedundantLogicalExpre
13
14
  __all__ = [
14
15
  "AllBranchesIdentical",
15
16
  "BooleanChecksNotInverted",
17
+ "CodeQuality",
16
18
  "CollapsibleIfStatements",
17
19
  "MergeIdenticalBranches",
18
20
  "RemoveDuplicateConditions",
@@ -6,7 +6,9 @@ to a shallower nesting level means rewriting every line it spans.
6
6
 
7
7
  from typing import Optional, TypeVar
8
8
 
9
+ from rewrite.java.markers import TrailingComma
9
10
  from rewrite.java.support_types import Space
11
+ from rewrite.markers import Marker
10
12
  from rewrite.python.visitor import PythonVisitor
11
13
 
12
14
  T = TypeVar("T")
@@ -65,6 +67,20 @@ class _Reindent(PythonVisitor[None]):
65
67
  return space
66
68
  return Space(_comments=comments, _whitespace=whitespace)
67
69
 
70
+ def visit_marker(self, marker: Marker, p: None) -> Marker:
71
+ # The line break before the bracket closing a trailing-comma list
72
+ # lives on the comma.
73
+ if isinstance(marker, TrailingComma):
74
+ suffix = self.visit_space(marker.suffix, p)
75
+ if suffix is not marker.suffix:
76
+ return marker.replace(_suffix=suffix)
77
+ return marker
78
+
79
+
80
+ def reindent_space(space: Space, old_base: str, new_base: str) -> Space:
81
+ """:func:`reindent` for trivia that has no tree to travel with."""
82
+ return _Reindent(old_base, new_base).visit_space(space, None)
83
+
68
84
 
69
85
  def reindent(tree: T, old_base: str, new_base: str) -> T:
70
86
  """Re-base every line in *tree* that is indented at least to *old_base*.
@@ -0,0 +1,73 @@
1
+ """Composite recipe bundling the Python code quality fixes."""
2
+
3
+ from typing import List
4
+
5
+ from rewrite import Recipe
6
+ from rewrite.category import CategoryDescriptor
7
+ from rewrite.decorators import categorize
8
+ from rewrite.marketplace import Python
9
+
10
+ from .all_branches_identical import AllBranchesIdentical
11
+ from .boolean_checks_not_inverted import BooleanChecksNotInverted
12
+ from .collapsible_if_statements import CollapsibleIfStatements
13
+ from .merge_identical_branches import MergeIdenticalBranches
14
+ from .remove_duplicate_conditions import RemoveDuplicateConditions
15
+ from .remove_self_assignment import RemoveSelfAssignment
16
+ from .remove_unconditional_value_overwrite import RemoveUnconditionalValueOverwrite
17
+ from .simplify_boolean_literal import SimplifyBooleanLiteral
18
+ from .simplify_redundant_logical_expression import SimplifyRedundantLogicalExpression
19
+
20
+ _CodeQuality = [
21
+ *Python,
22
+ CategoryDescriptor(display_name="Code quality"),
23
+ ]
24
+
25
+
26
+ @categorize(_CodeQuality)
27
+ class CodeQuality(Recipe):
28
+ """
29
+ Apply every Python code quality fix.
30
+
31
+ Example:
32
+ Before:
33
+ if done == True:
34
+ if ready:
35
+ run()
36
+
37
+ After:
38
+ if done and ready:
39
+ run()
40
+ """
41
+
42
+ @property
43
+ def name(self) -> str:
44
+ return "org.openrewrite.python.codequality.CodeQuality"
45
+
46
+ @property
47
+ def display_name(self) -> str:
48
+ return "Code quality"
49
+
50
+ @property
51
+ def description(self) -> str:
52
+ return (
53
+ "Apply all Python code quality recipes that change code: simplify boolean "
54
+ "expressions, merge and collapse `if` chains, and remove dead conditions and "
55
+ "writes. Search-only recipes, which mark code for review, are not included."
56
+ )
57
+
58
+ @property
59
+ def tags(self) -> List[str]:
60
+ return ["python", "code-quality"]
61
+
62
+ def recipe_list(self) -> List[Recipe]:
63
+ return [
64
+ SimplifyBooleanLiteral(),
65
+ BooleanChecksNotInverted(),
66
+ SimplifyRedundantLogicalExpression(),
67
+ RemoveDuplicateConditions(),
68
+ AllBranchesIdentical(),
69
+ MergeIdenticalBranches(),
70
+ CollapsibleIfStatements(),
71
+ RemoveSelfAssignment(),
72
+ RemoveUnconditionalValueOverwrite(),
73
+ ]
@@ -18,7 +18,7 @@ from rewrite.marketplace import Python
18
18
  from rewrite.markers import Markers
19
19
  from rewrite.python.tree import StatementExpression
20
20
  from rewrite.python.visitor import PythonVisitor
21
- from rewrite.java.support_types import JLeftPadded, JRightPadded, Space
21
+ from rewrite.java.support_types import Comment, JLeftPadded, JRightPadded, Space
22
22
  from rewrite.java.tree import (
23
23
  Assignment,
24
24
  Binary as JBinary,
@@ -26,6 +26,7 @@ from rewrite.java.tree import (
26
26
  ControlParentheses,
27
27
  Expression,
28
28
  If,
29
+ J,
29
30
  Lambda,
30
31
  Parentheses,
31
32
  Ternary,
@@ -33,10 +34,13 @@ from rewrite.java.tree import (
33
34
  from rewrite.utils import random_id
34
35
 
35
36
  from openrewrite_code_quality_python.codequality._reindent import (
36
- inherited_prefix,
37
37
  line_indent,
38
38
  reindent,
39
+ reindent_space,
39
40
  )
41
+ from openrewrite_code_quality_python.codequality._trivia import concat, split_line
42
+
43
+ _HOISTED_COMMENTS = "collapsible_if_statements.hoisted_comments"
40
44
 
41
45
  _CodeQuality = [
42
46
  *Python,
@@ -56,6 +60,14 @@ def _binds_looser_than_and(expr: Expression) -> bool:
56
60
  return isinstance(expr, (Ternary, Lambda, Assignment, StatementExpression))
57
61
 
58
62
 
63
+ def _with_comments_above(prefix: Space, comments: List[Comment]) -> Space:
64
+ """*prefix* with *comments* on their own lines just before the token it
65
+ leads into. Each comment's suffix must already end at that token's indent."""
66
+ if not comments:
67
+ return prefix
68
+ return Space(_comments=[*prefix.comments, *comments], _whitespace=prefix.whitespace)
69
+
70
+
59
71
  def _operand(expr: Expression, prefix: Space) -> Expression:
60
72
  """Prepare *expr* as an operand of the merged ``and``, parenthesizing it
61
73
  when its own operator would otherwise be captured."""
@@ -119,6 +131,13 @@ class CollapsibleIfStatements(Recipe):
119
131
 
120
132
  def editor(self) -> TreeVisitor[Any, ExecutionContext]:
121
133
  class Visitor(PythonVisitor[ExecutionContext]):
134
+ def visit_else(self, else_: If.Else, p: ExecutionContext) -> J:
135
+ visited = super().visit_else(else_, p)
136
+ hoisted = self.cursor.get_message(_HOISTED_COMMENTS, [])
137
+ if not isinstance(visited, If.Else) or not hoisted:
138
+ return visited
139
+ return visited.replace(_prefix=_with_comments_above(visited.prefix, hoisted))
140
+
122
141
  def visit_if(
123
142
  self, if_: If, p: ExecutionContext
124
143
  ) -> Optional[If]:
@@ -164,6 +183,31 @@ class CollapsibleIfStatements(Recipe):
164
183
  ):
165
184
  return if_
166
185
 
186
+ # An `elif` starts its line at the `elif` keyword, which the
187
+ # enclosing `Else` holds.
188
+ parent = self.cursor.parent_tree_cursor()
189
+ under_elif = isinstance(parent.value, If.Else)
190
+ outer_indent = line_indent(
191
+ parent.value.prefix if isinstance(parent.value, If.Else) else if_.prefix
192
+ )
193
+ split = split_line(inner.prefix)
194
+ if (
195
+ outer_indent is None
196
+ or not header_indent.startswith(outer_indent)
197
+ or split is None
198
+ ):
199
+ return if_
200
+ # The outer header's trailing comment stays on the merged
201
+ # header. Comments on their own line before the inner `if`
202
+ # describe its condition, so they go above the merged header
203
+ # without the blank lines around them.
204
+ header_trailer, inner_leader = split
205
+ hoisted = reindent_space(
206
+ Space(_comments=inner_leader.comments, _whitespace=""),
207
+ header_indent,
208
+ outer_indent,
209
+ ).comments
210
+
167
211
  combined = JBinary(
168
212
  _id=random_id(),
169
213
  _prefix=if_.if_condition.tree.prefix,
@@ -174,7 +218,10 @@ class CollapsibleIfStatements(Recipe):
174
218
  _element=JBinary.Type.And,
175
219
  _markers=Markers.EMPTY,
176
220
  ),
177
- _right=_operand(inner.if_condition.tree, Space.SINGLE_SPACE),
221
+ _right=_operand(
222
+ reindent(inner.if_condition.tree, header_indent, outer_indent),
223
+ Space.SINGLE_SPACE,
224
+ ),
178
225
  _type=None,
179
226
  )
180
227
 
@@ -198,13 +245,18 @@ class CollapsibleIfStatements(Recipe):
198
245
  _statements=[
199
246
  first.replace(
200
247
  _element=first.element.replace(
201
- _prefix=inherited_prefix(inner.prefix, first.element.prefix)
248
+ _prefix=concat(header_trailer, first.element.prefix)
202
249
  )
203
250
  ),
204
251
  *inner_body._statements[1:],
205
252
  ]
206
253
  )
207
254
 
255
+ if under_elif:
256
+ parent.put_message(_HOISTED_COMMENTS, hoisted)
257
+ else:
258
+ if_ = if_.replace(_prefix=_with_comments_above(if_.prefix, hoisted))
259
+
208
260
  return if_.replace(
209
261
  _if_condition=new_condition,
210
262
  ).padding.replace(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrewrite-migrate-python
3
- Version: 0.16.0.dev20261005072603
3
+ Version: 0.16.0.dev20261005095013
4
4
  Summary: OpenRewrite recipes for migrating Python codebases to newer Python versions.
5
5
  Author-email: "Moderne Inc." <support@moderne.io>
6
6
  License: Moderne Proprietary
@@ -6,6 +6,7 @@ src/openrewrite_code_quality_python/codequality/_semantically_equal.py
6
6
  src/openrewrite_code_quality_python/codequality/_trivia.py
7
7
  src/openrewrite_code_quality_python/codequality/all_branches_identical.py
8
8
  src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py
9
+ src/openrewrite_code_quality_python/codequality/code_quality.py
9
10
  src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py
10
11
  src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py
11
12
  src/openrewrite_code_quality_python/codequality/merge_identical_branches.py