openrewrite-migrate-python 0.14.0.dev20260902123950__tar.gz → 0.14.0.dev20260902131752__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 (146) hide show
  1. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/PKG-INFO +1 -1
  2. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/pyproject.toml +1 -1
  3. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/typing_deprecations.py +96 -6
  4. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/PKG-INFO +1 -1
  5. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_typing_deprecations.py +92 -0
  6. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/setup.cfg +0 -0
  7. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/__init__.py +0 -0
  8. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/__init__.py +0 -0
  9. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/_reindent.py +0 -0
  10. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/_semantically_equal.py +0 -0
  11. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/all_branches_identical.py +0 -0
  12. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py +0 -0
  13. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py +0 -0
  14. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py +0 -0
  15. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/merge_identical_branches.py +0 -0
  16. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/remove_duplicate_conditions.py +0 -0
  17. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/remove_self_assignment.py +0 -0
  18. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite.py +0 -0
  19. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/simplify_boolean_literal.py +0 -0
  20. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py +0 -0
  21. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/__init__.py +0 -0
  22. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/__init__.py +0 -0
  23. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/_import_hygiene.py +0 -0
  24. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/_langchain_tables.py +0 -0
  25. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/_markers.py +0 -0
  26. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/_typing_imports.py +0 -0
  27. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/aifc_migrations.py +0 -0
  28. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/array_deprecations.py +0 -0
  29. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/ast_deprecations.py +0 -0
  30. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/asyncio_coroutine_to_async.py +0 -0
  31. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/asyncio_deprecations.py +0 -0
  32. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/avro_migrations.py +0 -0
  33. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/calendar_deprecations.py +0 -0
  34. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/cgi_migrations.py +0 -0
  35. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/cgi_parse_deprecations.py +0 -0
  36. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/collections_abc_migrations.py +0 -0
  37. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/configparser_deprecations.py +0 -0
  38. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/datetime_utc.py +0 -0
  39. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/distutils_deprecations.py +0 -0
  40. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/distutils_migrations.py +0 -0
  41. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/functools_deprecations.py +0 -0
  42. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/future_imports.py +0 -0
  43. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/gettext_deprecations.py +0 -0
  44. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/html_parser_deprecations.py +0 -0
  45. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/imp_migrations.py +0 -0
  46. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/langchain_classic_imports.py +0 -0
  47. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/langchain_community_imports.py +0 -0
  48. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/langchain_provider_imports.py +0 -0
  49. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/locale_deprecations.py +0 -0
  50. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py +0 -0
  51. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/macpath_deprecations.py +0 -0
  52. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/mailcap_migrations.py +0 -0
  53. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/nntplib_migrations.py +0 -0
  54. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/os_deprecations.py +0 -0
  55. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pathlib_deprecations.py +0 -0
  56. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pep594_system_migrations.py +0 -0
  57. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pipes_migrations.py +0 -0
  58. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pkgutil_deprecations.py +0 -0
  59. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/platform_deprecations.py +0 -0
  60. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pydantic_deprecations.py +0 -0
  61. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pydantic_fields.py +0 -0
  62. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/pydantic_model_fields.py +0 -0
  63. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/re_deprecations.py +0 -0
  64. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/removed_modules_312.py +0 -0
  65. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/shutil_deprecations.py +0 -0
  66. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/socket_deprecations.py +0 -0
  67. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/ssl_deprecations.py +0 -0
  68. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/string_formatting.py +0 -0
  69. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/sys_deprecations.py +0 -0
  70. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/sys_last_deprecations.py +0 -0
  71. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/tarfile_deprecations.py +0 -0
  72. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/telnetlib_migrations.py +0 -0
  73. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/tempfile_deprecations.py +0 -0
  74. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/threading_deprecations.py +0 -0
  75. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/threading_is_alive_deprecation.py +0 -0
  76. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/typing_callable.py +0 -0
  77. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/typing_union_to_pipe.py +0 -0
  78. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/unittest_deprecations.py +0 -0
  79. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain02.py +0 -0
  80. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain1.py +0 -0
  81. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_pydantic.py +0 -0
  82. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python310.py +0 -0
  83. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python311.py +0 -0
  84. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python312.py +0 -0
  85. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python313.py +0 -0
  86. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python314.py +0 -0
  87. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python38.py +0 -0
  88. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/upgrade_to_python39.py +0 -0
  89. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/urllib_deprecations.py +0 -0
  90. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/uu_migrations.py +0 -0
  91. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/xdrlib_migrations.py +0 -0
  92. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python/migrate/xml_deprecations.py +0 -0
  93. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/SOURCES.txt +0 -0
  94. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/dependency_links.txt +0 -0
  95. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/entry_points.txt +0 -0
  96. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/requires.txt +0 -0
  97. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/src/openrewrite_migrate_python.egg-info/top_level.txt +0 -0
  98. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_aifc_migrations.py +0 -0
  99. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_array_deprecations.py +0 -0
  100. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_ast_deprecations.py +0 -0
  101. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_asyncio_coroutine_to_async.py +0 -0
  102. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_asyncio_deprecations.py +0 -0
  103. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_avro_migrations.py +0 -0
  104. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_calendar_deprecations.py +0 -0
  105. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_cgi_parse_deprecations.py +0 -0
  106. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_change_import_recipes.py +0 -0
  107. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_collections_abc_migrations.py +0 -0
  108. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_configparser_deprecations.py +0 -0
  109. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_datetime_utc.py +0 -0
  110. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_distutils_deprecations.py +0 -0
  111. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_future_imports.py +0 -0
  112. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_gettext_deprecations.py +0 -0
  113. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_html_parser_deprecations.py +0 -0
  114. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_imp_migrations.py +0 -0
  115. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_langchain_classic_imports.py +0 -0
  116. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_langchain_community_imports.py +0 -0
  117. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_langchain_provider_imports.py +0 -0
  118. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_locale_deprecations.py +0 -0
  119. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_locale_getdefaultlocale_deprecation.py +0 -0
  120. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_macpath_deprecations.py +0 -0
  121. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_os_deprecations.py +0 -0
  122. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pep594_migrations.py +0 -0
  123. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pep594_system_migrations.py +0 -0
  124. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pkgutil_deprecations.py +0 -0
  125. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_platform_deprecations.py +0 -0
  126. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pydantic_deprecations.py +0 -0
  127. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pydantic_fields.py +0 -0
  128. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_pydantic_model_fields.py +0 -0
  129. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_re_deprecations.py +0 -0
  130. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_removed_modules_312.py +0 -0
  131. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_shutil_deprecations.py +0 -0
  132. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_ssl_deprecations.py +0 -0
  133. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_string_formatting.py +0 -0
  134. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_sys_deprecations.py +0 -0
  135. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_sys_last_deprecations.py +0 -0
  136. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_tarfile_deprecations.py +0 -0
  137. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_threading_deprecations.py +0 -0
  138. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_threading_extended.py +0 -0
  139. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_threading_is_alive_deprecation.py +0 -0
  140. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_typing_alias_moves.py +0 -0
  141. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_typing_callable.py +0 -0
  142. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_typing_union_to_pipe.py +0 -0
  143. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_unittest_deprecations.py +0 -0
  144. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_upgrade_recipes.py +0 -0
  145. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/tests/test_upgrade_to_pydantic.py +0 -0
  146. {openrewrite_migrate_python-0.14.0.dev20260902123950 → openrewrite_migrate_python-0.14.0.dev20260902131752}/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.14.0.dev20260902123950
3
+ Version: 0.14.0.dev20260902131752
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.14.0.dev20260902123950" # Updated dynamically during release
8
+ version = "0.14.0.dev20260902131752" # 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"
@@ -23,26 +23,39 @@ See: https://peps.python.org/pep-0585/
23
23
  import ast
24
24
  from typing import Any, ClassVar, Optional, Set, cast
25
25
 
26
- from rewrite import ExecutionContext, Recipe, TreeVisitor
26
+ from rewrite import ExecutionContext, Recipe, Tree, TreeVisitor
27
27
  from rewrite.category import CategoryDescriptor
28
28
  from rewrite.decorators import categorize
29
29
  from rewrite.marketplace import Python
30
30
  from rewrite.python.markers import Quoted
31
31
  from rewrite.python.scope_utils import LocalBindings
32
+ from rewrite.visitor import Cursor
32
33
 
33
34
  from ._typing_imports import (
34
35
  maybe_remove_typing_import,
35
36
  maybe_remove_typing_module_import,
36
37
  scan_typing_imports,
37
38
  )
38
- from rewrite.python.tree import CompilationUnit, MultiImport, NamedArgument
39
+ from rewrite.python.tree import (
40
+ CollectionLiteral,
41
+ CompilationUnit,
42
+ MultiImport,
43
+ NamedArgument,
44
+ TypeAlias,
45
+ TypeHint,
46
+ TypeHintedExpression,
47
+ )
39
48
  from rewrite.python.visitor import PythonVisitor
40
49
  from rewrite.java.tree import (
50
+ ArrayAccess,
51
+ Assignment,
41
52
  FieldAccess,
42
53
  Identifier,
43
54
  Import,
44
55
  J,
45
56
  Literal,
57
+ ParameterizedType,
58
+ VariableDeclarations,
46
59
  )
47
60
 
48
61
  # Define category paths
@@ -59,7 +72,72 @@ _Python311 = [
59
72
  ]
60
73
 
61
74
 
62
- def _make_builtin_alias_editor(old_name: str, new_name: str) -> "TreeVisitor[Any, ExecutionContext]":
75
+ def _bound_name(expr: Optional[Tree]) -> Optional[str]:
76
+ """The name ``expr`` refers to, for a bare or module-qualified reference."""
77
+ if isinstance(expr, FieldAccess):
78
+ expr = expr.name
79
+ return expr.simple_name if isinstance(expr, Identifier) else None
80
+
81
+
82
+ def _names_type_alias(target: J) -> bool:
83
+ """True for the `X: TypeAlias` target of an explicit type-alias assignment."""
84
+ if not isinstance(target, TypeHintedExpression):
85
+ return False
86
+ return _bound_name(target.type_hint.type_tree) == "TypeAlias"
87
+
88
+
89
+ def _annotated_type_argument(subscript: Tree) -> Optional[J]:
90
+ """The lone type argument of an `Annotated[...]`, or None for another subscript.
91
+
92
+ The parser spells a subscript as `ParameterizedType` where it expects a type
93
+ and as `ArrayAccess` elsewhere; both reach here.
94
+ """
95
+ if isinstance(subscript, ParameterizedType):
96
+ target, arguments = subscript.clazz, subscript.type_parameters
97
+ elif isinstance(subscript, ArrayAccess):
98
+ index = subscript.dimension.index
99
+ target = subscript.indexed
100
+ arguments = index.elements if isinstance(index, CollectionLiteral) else [index]
101
+ else:
102
+ return None
103
+ if _bound_name(target) != "Annotated" or not arguments:
104
+ return None
105
+ return arguments[0]
106
+
107
+
108
+ def _in_annotation(cursor: Cursor) -> bool:
109
+ """True when the cursor's node stands where a type expression is expected.
110
+
111
+ Annotations are the only position where a `typing` alias and its built-in
112
+ are interchangeable; elsewhere they are distinct objects, so a dict key or
113
+ a call argument spelling the alias must keep naming it.
114
+ """
115
+ walked = [cursor.value]
116
+ parent_cursor = cursor.parent_tree_cursor()
117
+ while isinstance(parent_cursor.value, Tree):
118
+ parent = parent_cursor.value
119
+ child = walked[-1]
120
+ if isinstance(parent, TypeHint):
121
+ return True
122
+ if isinstance(parent, VariableDeclarations):
123
+ return parent.type_expression is child
124
+ if isinstance(parent, TypeAlias):
125
+ return parent.value is child
126
+ if isinstance(parent, Assignment):
127
+ return parent.assignment is child and _names_type_alias(parent.variable)
128
+ # `Annotated` carries a type in its first argument and runtime metadata
129
+ # in the rest, which a tuple wraps a level below the subscript.
130
+ annotated_type = _annotated_type_argument(parent)
131
+ if annotated_type is not None and not any(node is annotated_type for node in walked):
132
+ return False
133
+ walked.append(parent)
134
+ parent_cursor = parent_cursor.parent_tree_cursor()
135
+ return False
136
+
137
+
138
+ def _make_builtin_alias_editor(
139
+ old_name: str, new_name: str, annotations_only: bool
140
+ ) -> "TreeVisitor[Any, ExecutionContext]":
63
141
  """Create a visitor that renames a typing alias to its built-in equivalent.
64
142
 
65
143
  Handles both reference forms and cleans up imports afterwards:
@@ -69,6 +147,9 @@ def _make_builtin_alias_editor(old_name: str, new_name: str) -> "TreeVisitor[Any
69
147
  - ``import typing [as alias]`` plus qualified ``typing.<old_name>``
70
148
  attribute references
71
149
 
150
+ ``annotations_only`` confines the rename to annotation context
151
+ (see `_in_annotation`).
152
+
72
153
  Import removal is delegated to the SDK's `RemoveImport`, which only
73
154
  removes imports that are no longer referenced and preserves comments.
74
155
  """
@@ -160,6 +241,7 @@ def _make_builtin_alias_editor(old_name: str, new_name: str) -> "TreeVisitor[Any
160
241
  isinstance(field_access.target, Identifier)
161
242
  and field_access.target.simple_name in self._module_refs
162
243
  and field_access.name.simple_name == old_name
244
+ and (not annotations_only or _in_annotation(self.cursor))
163
245
  ):
164
246
  self._rewrote_qualified = True
165
247
  return field_access.name.replace(_simple_name=new_name).replace(
@@ -190,6 +272,8 @@ def _make_builtin_alias_editor(old_name: str, new_name: str) -> "TreeVisitor[Any
190
272
  # A name bound by an enclosing scope is that local, not the import.
191
273
  if self._local_bindings.is_bound(self.cursor, self._bare_ref):
192
274
  return ident
275
+ if annotations_only and not _in_annotation(self.cursor):
276
+ return ident
193
277
 
194
278
  return ident.replace(_simple_name=new_name)
195
279
 
@@ -201,6 +285,8 @@ class _ReplaceTypingAliasRecipe(Recipe):
201
285
 
202
286
  old_name: ClassVar[str]
203
287
  new_name: ClassVar[str]
288
+ # False only where the alias *is* the built-in, so any position is safe.
289
+ annotations_only: ClassVar[bool] = True
204
290
 
205
291
  @property
206
292
  def name(self) -> str:
@@ -217,14 +303,17 @@ class _ReplaceTypingAliasRecipe(Recipe):
217
303
  def description(self) -> str:
218
304
  return (
219
305
  f"PEP 585 deprecated `typing.{self.old_name}` in Python 3.9. "
220
- f"Replace with the built-in `{self.new_name}` type for generic annotations. "
306
+ f"Replace with the built-in `{self.new_name}` type in annotations. "
221
307
  "Applies inside `if TYPE_CHECKING:` blocks as well; the built-in generic is "
222
308
  "valid at runtime from Python 3.9 on, so no `from __future__ import "
223
- "annotations` is needed."
309
+ "annotations` is needed. "
310
+ f"References outside an annotation are left alone: `typing.{self.old_name}` "
311
+ f"and `{self.new_name}` are distinct objects, so substituting one for the "
312
+ "other where the name is used as a value would change behaviour."
224
313
  )
225
314
 
226
315
  def editor(self) -> TreeVisitor[Any, ExecutionContext]:
227
- return _make_builtin_alias_editor(self.old_name, self.new_name)
316
+ return _make_builtin_alias_editor(self.old_name, self.new_name, self.annotations_only)
228
317
 
229
318
 
230
319
  @categorize(_Python39)
@@ -354,6 +443,7 @@ class ReplaceTypingText(_ReplaceTypingAliasRecipe):
354
443
 
355
444
  old_name = "Text"
356
445
  new_name = "str"
446
+ annotations_only = False
357
447
 
358
448
  @property
359
449
  def name(self) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrewrite-migrate-python
3
- Version: 0.14.0.dev20260902123950
3
+ Version: 0.14.0.dev20260902131752
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
@@ -508,6 +508,82 @@ class TestPep585CornerCases:
508
508
  )
509
509
  )
510
510
 
511
+ def test_leaves_value_positions_alone(self):
512
+ """`typing.List` is a distinct object from `list`, so only annotations may change."""
513
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
514
+ spec.rewrite_run(
515
+ python(
516
+ """
517
+ import typing
518
+ from typing import List
519
+
520
+ SEQUENCE_ORIGIN_MAP = {list: list, typing.List: list, List: list}
521
+ alias = List
522
+
523
+
524
+ def build(items: List[int], factory=List):
525
+ return factory()
526
+ """,
527
+ """
528
+ import typing
529
+ from typing import List
530
+
531
+ SEQUENCE_ORIGIN_MAP = {list: list, typing.List: list, List: list}
532
+ alias = List
533
+
534
+
535
+ def build(items: list[int], factory=List):
536
+ return factory()
537
+ """,
538
+ )
539
+ )
540
+
541
+ def test_leaves_annotated_metadata_alone(self):
542
+ """Only `Annotated`'s first argument is a type; the rest are runtime values."""
543
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
544
+ spec.rewrite_run(
545
+ python(
546
+ """
547
+ from typing import Annotated, List
548
+
549
+ x: Annotated[List[int], List] = []
550
+
551
+
552
+ def f() -> Annotated[List[int], List]:
553
+ return x
554
+ """,
555
+ """
556
+ from typing import Annotated, List
557
+
558
+ x: Annotated[list[int], List] = []
559
+
560
+
561
+ def f() -> Annotated[list[int], List]:
562
+ return x
563
+ """,
564
+ )
565
+ )
566
+
567
+ def test_rewrites_a_type_alias_right_hand_side(self):
568
+ """A `TypeAlias` right-hand side is an annotation, not a value."""
569
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
570
+ spec.rewrite_run(
571
+ python(
572
+ """
573
+ from typing import List, TypeAlias
574
+
575
+ Names: TypeAlias = List[str]
576
+ type Counts = List[int]
577
+ """,
578
+ """
579
+ from typing import TypeAlias
580
+
581
+ Names: TypeAlias = list[str]
582
+ type Counts = list[int]
583
+ """,
584
+ )
585
+ )
586
+
511
587
  def test_preserves_comment_on_removed_import(self):
512
588
  spec = RecipeSpec(recipe=ReplaceTypingListWithList())
513
589
  spec.rewrite_run(
@@ -570,6 +646,22 @@ class TestReplaceTypingText:
570
646
  )
571
647
  )
572
648
 
649
+ def test_rewrites_text_in_a_value_position(self):
650
+ """`typing.Text` is `str`, so the substitution holds outside annotations too."""
651
+ spec = RecipeSpec(recipe=ReplaceTypingText())
652
+ spec.rewrite_run(
653
+ python(
654
+ """
655
+ from typing import Text
656
+
657
+ COLUMN_TYPES = {Text: "text"}
658
+ """,
659
+ """
660
+ COLUMN_TYPES = {str: "text"}
661
+ """,
662
+ )
663
+ )
664
+
573
665
  def test_no_change_when_text_from_other_module(self):
574
666
  """A `Text` imported from another module must not be touched."""
575
667
  spec = RecipeSpec(recipe=ReplaceTypingText())