openrewrite-migrate-python 0.16.0.dev20260925124012__tar.gz → 0.16.0.dev20260926165430__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 (158) hide show
  1. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/PKG-INFO +1 -1
  2. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/pyproject.toml +1 -1
  3. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/string_formatting.py +27 -26
  4. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/PKG-INFO +1 -1
  5. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_string_formatting.py +48 -13
  6. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/setup.cfg +0 -0
  7. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/__init__.py +0 -0
  8. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/__init__.py +0 -0
  9. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/_reindent.py +0 -0
  10. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/_semantically_equal.py +0 -0
  11. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/_trivia.py +0 -0
  12. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/all_branches_identical.py +0 -0
  13. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py +0 -0
  14. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py +0 -0
  15. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py +0 -0
  16. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/merge_identical_branches.py +0 -0
  17. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/remove_duplicate_conditions.py +0 -0
  18. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/remove_self_assignment.py +0 -0
  19. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite.py +0 -0
  20. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/simplify_boolean_literal.py +0 -0
  21. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py +0 -0
  22. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/__init__.py +0 -0
  23. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/__init__.py +0 -0
  24. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_from_imports.py +0 -0
  25. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_import_hygiene.py +0 -0
  26. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_langchain_tables.py +0 -0
  27. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_markers.py +0 -0
  28. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_slots.py +0 -0
  29. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/_typing_imports.py +0 -0
  30. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/aifc_migrations.py +0 -0
  31. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/array_deprecations.py +0 -0
  32. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/ast_deprecations.py +0 -0
  33. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/asyncio_coroutine_to_async.py +0 -0
  34. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/asyncio_deprecations.py +0 -0
  35. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/avro_migrations.py +0 -0
  36. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/calendar_deprecations.py +0 -0
  37. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/cgi_migrations.py +0 -0
  38. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/cgi_parse_deprecations.py +0 -0
  39. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/collections_abc_migrations.py +0 -0
  40. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/configparser_deprecations.py +0 -0
  41. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/datetime_utc.py +0 -0
  42. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/distutils_deprecations.py +0 -0
  43. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/distutils_migrations.py +0 -0
  44. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/functools_deprecations.py +0 -0
  45. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/future_imports.py +0 -0
  46. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/gettext_deprecations.py +0 -0
  47. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/html_parser_deprecations.py +0 -0
  48. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/imp_migrations.py +0 -0
  49. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/langchain_classic_imports.py +0 -0
  50. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/langchain_community_imports.py +0 -0
  51. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/langchain_provider_imports.py +0 -0
  52. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/locale_deprecations.py +0 -0
  53. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py +0 -0
  54. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/macpath_deprecations.py +0 -0
  55. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/mailcap_migrations.py +0 -0
  56. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/nntplib_migrations.py +0 -0
  57. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/os_deprecations.py +0 -0
  58. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pathlib_deprecations.py +0 -0
  59. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pep594_system_migrations.py +0 -0
  60. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pipes_migrations.py +0 -0
  61. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pkgutil_deprecations.py +0 -0
  62. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/platform_deprecations.py +0 -0
  63. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pydantic_deprecations.py +0 -0
  64. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pydantic_fields.py +0 -0
  65. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/pydantic_model_fields.py +0 -0
  66. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/re_deprecations.py +0 -0
  67. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/removed_modules_312.py +0 -0
  68. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/shutil_deprecations.py +0 -0
  69. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/socket_deprecations.py +0 -0
  70. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/ssl_deprecations.py +0 -0
  71. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/sys_deprecations.py +0 -0
  72. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/sys_last_deprecations.py +0 -0
  73. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/tarfile_deprecations.py +0 -0
  74. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/telnetlib_migrations.py +0 -0
  75. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/tempfile_deprecations.py +0 -0
  76. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/threading_deprecations.py +0 -0
  77. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/threading_is_alive_deprecation.py +0 -0
  78. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/typing_callable.py +0 -0
  79. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/typing_deprecations.py +0 -0
  80. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/typing_union_to_pipe.py +0 -0
  81. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/unittest_deprecations.py +0 -0
  82. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain02.py +0 -0
  83. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain1.py +0 -0
  84. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_pydantic.py +0 -0
  85. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python310.py +0 -0
  86. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python311.py +0 -0
  87. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python312.py +0 -0
  88. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python313.py +0 -0
  89. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python314.py +0 -0
  90. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python38.py +0 -0
  91. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/upgrade_to_python39.py +0 -0
  92. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/urllib_deprecations.py +0 -0
  93. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/uu_migrations.py +0 -0
  94. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/xdrlib_migrations.py +0 -0
  95. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python/migrate/xml_deprecations.py +0 -0
  96. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/SOURCES.txt +0 -0
  97. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/dependency_links.txt +0 -0
  98. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/entry_points.txt +0 -0
  99. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/requires.txt +0 -0
  100. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/src/openrewrite_migrate_python.egg-info/top_level.txt +0 -0
  101. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_aifc_migrations.py +0 -0
  102. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_array_deprecations.py +0 -0
  103. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_ast_deprecations.py +0 -0
  104. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_asyncio_coroutine_to_async.py +0 -0
  105. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_asyncio_deprecations.py +0 -0
  106. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_avro_migrations.py +0 -0
  107. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_calendar_deprecations.py +0 -0
  108. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_cgi_parse_deprecations.py +0 -0
  109. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_change_import_recipes.py +0 -0
  110. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_collections_abc_migrations.py +0 -0
  111. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_configparser_deprecations.py +0 -0
  112. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_datetime_utc.py +0 -0
  113. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_distutils_deprecations.py +0 -0
  114. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_distutils_migrations.py +0 -0
  115. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_functools_deprecations.py +0 -0
  116. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_future_imports.py +0 -0
  117. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_gettext_deprecations.py +0 -0
  118. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_html_parser_deprecations.py +0 -0
  119. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_imp_migrations.py +0 -0
  120. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_langchain_classic_imports.py +0 -0
  121. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_langchain_community_imports.py +0 -0
  122. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_langchain_provider_imports.py +0 -0
  123. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_locale_deprecations.py +0 -0
  124. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_locale_getdefaultlocale_deprecation.py +0 -0
  125. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_macpath_deprecations.py +0 -0
  126. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_mailcap_migrations.py +0 -0
  127. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_markers.py +0 -0
  128. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_os_deprecations.py +0 -0
  129. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pathlib_deprecations.py +0 -0
  130. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pep594_migrations.py +0 -0
  131. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pep594_system_migrations.py +0 -0
  132. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pkgutil_deprecations.py +0 -0
  133. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_platform_deprecations.py +0 -0
  134. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pydantic_deprecations.py +0 -0
  135. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pydantic_fields.py +0 -0
  136. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_pydantic_model_fields.py +0 -0
  137. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_re_deprecations.py +0 -0
  138. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_removed_modules_312.py +0 -0
  139. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_shutil_deprecations.py +0 -0
  140. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_socket_deprecations.py +0 -0
  141. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_ssl_deprecations.py +0 -0
  142. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_sys_deprecations.py +0 -0
  143. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_sys_last_deprecations.py +0 -0
  144. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_tarfile_deprecations.py +0 -0
  145. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_tempfile_deprecations.py +0 -0
  146. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_threading_deprecations.py +0 -0
  147. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_threading_extended.py +0 -0
  148. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_threading_is_alive_deprecation.py +0 -0
  149. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_typing_alias_moves.py +0 -0
  150. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_typing_callable.py +0 -0
  151. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_typing_deprecations.py +0 -0
  152. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_typing_union_to_pipe.py +0 -0
  153. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_unittest_deprecations.py +0 -0
  154. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_upgrade_recipes.py +0 -0
  155. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_upgrade_to_pydantic.py +0 -0
  156. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_urllib_deprecations.py +0 -0
  157. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/tests/test_xdrlib_migrations.py +0 -0
  158. {openrewrite_migrate_python-0.16.0.dev20260925124012 → openrewrite_migrate_python-0.16.0.dev20260926165430}/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.dev20260925124012
3
+ Version: 0.16.0.dev20260926165430
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.dev20260925124012" # Updated dynamically during release
8
+ version = "0.16.0.dev20260926165430" # 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"
@@ -21,10 +21,9 @@ from rewrite.markers import Markers
21
21
  from rewrite.python.visitor import PythonVisitor
22
22
  from rewrite.java.support_types import JRightPadded, Space
23
23
  from rewrite.java.tree import Binary, Expression, FieldAccess, Identifier, J, Literal, MethodInvocation, Parentheses
24
+ from rewrite.python.printer import PrintOutputCapture, PythonPrinter
24
25
  from rewrite.python.tree import (
25
26
  CollectionLiteral,
26
- ComprehensionExpression,
27
- DictLiteral,
28
27
  FormattedString,
29
28
  NamedArgument,
30
29
  Star,
@@ -74,17 +73,6 @@ def _get_fstring_delimiter(value_source: str) -> Optional[str]:
74
73
  return 'f' + quote if quote else None
75
74
 
76
75
 
77
- def _opens_with_brace(expr: Any) -> bool:
78
- """Whether ``expr`` prints with a leading ``{`` that the field's own brace makes into ``{{``."""
79
- if isinstance(expr, DictLiteral):
80
- return True
81
- if isinstance(expr, CollectionLiteral):
82
- return expr.kind == CollectionLiteral.Kind.SET
83
- if isinstance(expr, ComprehensionExpression):
84
- return expr.kind in (ComprehensionExpression.Kind.SET, ComprehensionExpression.Kind.DICT)
85
- return False
86
-
87
-
88
76
  def _breaks_replacement_field(expr: Any, quote: str) -> bool:
89
77
  """Whether ``expr`` holds anything a replacement field cannot carry.
90
78
 
@@ -124,11 +112,11 @@ def _unsafe_to_interpolate(expr: Any, delimiter: str) -> bool:
124
112
  """Whether substituting ``expr`` into a replacement field spoils the f-string.
125
113
 
126
114
  A literal argument nests a string in a string, a rewrite worth declining however it
127
- is quoted. Deeper literals are declined only where 3.8 -- the earliest target these
128
- recipes run for -- cannot parse the result.
115
+ is quoted. Other expressions are declined only where 3.8 -- the earliest target
116
+ these recipes run for -- cannot parse the result.
129
117
  """
130
118
  value = expr.value if isinstance(expr, NamedArgument) else expr
131
- if _opens_with_brace(value) or _is_string_literal(value):
119
+ if _is_string_literal(value):
132
120
  return True
133
121
  return _breaks_replacement_field(value, delimiter[1:])
134
122
 
@@ -151,6 +139,23 @@ def _has_backslash(value_source: str) -> bool:
151
139
  return '\\' in content
152
140
 
153
141
 
142
+ def _field_expression(arg_expr: Expression, delimiter: str) -> Optional[JRightPadded]:
143
+ """The argument as a replacement field, or None when it cannot sit inside this f-string."""
144
+ expr = arg_expr.replace(_prefix=Space.EMPTY)
145
+ source = PythonPrinter().print(expr, PrintOutputCapture(None))
146
+ # Only legal in a replacement field from 3.12 (PEP 701)
147
+ if any(c in source for c in (delimiter[1], '\\', '#', '\n')):
148
+ return None
149
+ # A leading or trailing brace would fuse with the field's own and read as an escaped brace
150
+ if source.startswith('{'):
151
+ expr = expr.replace(_prefix=Space.SINGLE_SPACE)
152
+ return JRightPadded(
153
+ _element=expr,
154
+ _after=Space.SINGLE_SPACE if source.endswith('}') else Space.EMPTY,
155
+ _markers=Markers.EMPTY,
156
+ )
157
+
158
+
154
159
  def _convert_format_to_fstring(method: MethodInvocation) -> Optional[FormattedString]:
155
160
  """Convert a ``"...".format(...)`` MethodInvocation to a FormattedString.
156
161
 
@@ -267,11 +272,9 @@ def _convert_format_to_fstring(method: MethodInvocation) -> Optional[FormattedSt
267
272
  return None
268
273
  arg_expr = named_args[field_name]
269
274
 
270
- padded_expr = JRightPadded(
271
- _element=arg_expr.replace(_prefix=Space.EMPTY),
272
- _after=Space.EMPTY,
273
- _markers=Markers.EMPTY,
274
- )
275
+ padded_expr = _field_expression(arg_expr, delimiter)
276
+ if padded_expr is None:
277
+ return None
275
278
 
276
279
  # Map conversion flag
277
280
  conversion_enum = None
@@ -498,11 +501,9 @@ def _convert_percent_to_fstring(binary: Binary) -> Optional[FormattedString]:
498
501
  arg_expr = args[arg_index]
499
502
  arg_index += 1
500
503
 
501
- padded_expr = JRightPadded(
502
- _element=arg_expr.replace(_prefix=Space.EMPTY),
503
- _after=Space.EMPTY,
504
- _markers=Markers.EMPTY,
505
- )
504
+ padded_expr = _field_expression(arg_expr, delimiter)
505
+ if padded_expr is None:
506
+ return None
506
507
 
507
508
  conversion_enum = None
508
509
  if part_value == 'r':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrewrite-migrate-python
3
- Version: 0.16.0.dev20260925124012
3
+ Version: 0.16.0.dev20260926165430
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
@@ -249,6 +249,31 @@ class TestReplaceStrFormatWithFString:
249
249
  )
250
250
  )
251
251
 
252
+ def test_set_literal_argument_is_spaced_from_the_field_braces(self):
253
+ """A brace of the argument's own must not fuse with the field's into an escaped brace."""
254
+ spec = RecipeSpec(recipe=ReplaceStrFormatWithFString())
255
+ spec.rewrite_run(
256
+ python(
257
+ """
258
+ message = "{} outside {} block".format(op, {'for', 'while'})
259
+ """,
260
+ """
261
+ message = f"{op} outside { {'for', 'while'} } block"
262
+ """,
263
+ )
264
+ )
265
+
266
+ def test_no_change_argument_contains_the_delimiter_quote(self):
267
+ """The quote is only legal inside a replacement field from 3.12."""
268
+ spec = RecipeSpec(recipe=ReplaceStrFormatWithFString())
269
+ spec.rewrite_run(
270
+ python(
271
+ """
272
+ message = "{} outside {} block".format(op, {"for", "while"})
273
+ """,
274
+ )
275
+ )
276
+
252
277
  def test_no_change_backslash_in_string(self):
253
278
  """'hello\\n{}'.format(name) — backslash escape, no change."""
254
279
  spec = RecipeSpec(recipe=ReplaceStrFormatWithFString())
@@ -326,19 +351,6 @@ class TestReplaceStrFormatWithFString:
326
351
  )
327
352
  )
328
353
 
329
- def test_no_change_brace_opening_argument(self):
330
- """A brace-opening argument's own brace would read as an escaped `{{`."""
331
- spec = RecipeSpec(recipe=ReplaceStrFormatWithFString())
332
- spec.rewrite_run(
333
- python(
334
- """
335
- keywords = "{}".format({1, 2})
336
- mapping = "{}".format({1: 2})
337
- squares = "{}".format({n: n * n for n in sizes})
338
- """
339
- )
340
- )
341
-
342
354
  def test_idempotent(self):
343
355
  """Running the recipe twice produces the same result."""
344
356
  recipe = ReplaceStrFormatWithFString()
@@ -485,6 +497,29 @@ class TestReplacePercentFormatWithFString:
485
497
  )
486
498
  )
487
499
 
500
+ def test_dict_literal_argument_is_spaced_from_the_field_braces(self):
501
+ spec = RecipeSpec(recipe=ReplacePercentFormatWithFString())
502
+ spec.rewrite_run(
503
+ python(
504
+ """
505
+ message = "config: %s" % ({'a': 1},)
506
+ """,
507
+ """
508
+ message = f"config: { {'a': 1} }"
509
+ """,
510
+ )
511
+ )
512
+
513
+ def test_no_change_argument_contains_the_delimiter_quote(self):
514
+ spec = RecipeSpec(recipe=ReplacePercentFormatWithFString())
515
+ spec.rewrite_run(
516
+ python(
517
+ """
518
+ message = "name: %s" % d["name"]
519
+ """,
520
+ )
521
+ )
522
+
488
523
  def test_no_change_backslash(self):
489
524
  r"""'%s\n' % x — backslash in string, no change."""
490
525
  spec = RecipeSpec(recipe=ReplacePercentFormatWithFString())