openrewrite-migrate-python 0.14.0.dev20260909100643__tar.gz → 0.14.0.dev20260909112655__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.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/PKG-INFO +1 -1
  2. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/pyproject.toml +1 -1
  3. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/typing_deprecations.py +28 -14
  4. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/PKG-INFO +1 -1
  5. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_typing_deprecations.py +115 -0
  6. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/setup.cfg +0 -0
  7. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/__init__.py +0 -0
  8. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/__init__.py +0 -0
  9. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/_reindent.py +0 -0
  10. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/_semantically_equal.py +0 -0
  11. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/_trivia.py +0 -0
  12. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/all_branches_identical.py +0 -0
  13. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py +0 -0
  14. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py +0 -0
  15. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py +0 -0
  16. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/merge_identical_branches.py +0 -0
  17. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/remove_duplicate_conditions.py +0 -0
  18. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/remove_self_assignment.py +0 -0
  19. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite.py +0 -0
  20. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/simplify_boolean_literal.py +0 -0
  21. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py +0 -0
  22. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/__init__.py +0 -0
  23. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/__init__.py +0 -0
  24. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_from_imports.py +0 -0
  25. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_import_hygiene.py +0 -0
  26. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_langchain_tables.py +0 -0
  27. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_markers.py +0 -0
  28. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_slots.py +0 -0
  29. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/_typing_imports.py +0 -0
  30. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/aifc_migrations.py +0 -0
  31. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/array_deprecations.py +0 -0
  32. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/ast_deprecations.py +0 -0
  33. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/asyncio_coroutine_to_async.py +0 -0
  34. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/asyncio_deprecations.py +0 -0
  35. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/avro_migrations.py +0 -0
  36. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/calendar_deprecations.py +0 -0
  37. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/cgi_migrations.py +0 -0
  38. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/cgi_parse_deprecations.py +0 -0
  39. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/collections_abc_migrations.py +0 -0
  40. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/configparser_deprecations.py +0 -0
  41. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/datetime_utc.py +0 -0
  42. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/distutils_deprecations.py +0 -0
  43. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/distutils_migrations.py +0 -0
  44. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/functools_deprecations.py +0 -0
  45. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/future_imports.py +0 -0
  46. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/gettext_deprecations.py +0 -0
  47. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/html_parser_deprecations.py +0 -0
  48. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/imp_migrations.py +0 -0
  49. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/langchain_classic_imports.py +0 -0
  50. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/langchain_community_imports.py +0 -0
  51. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/langchain_provider_imports.py +0 -0
  52. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/locale_deprecations.py +0 -0
  53. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py +0 -0
  54. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/macpath_deprecations.py +0 -0
  55. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/mailcap_migrations.py +0 -0
  56. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/nntplib_migrations.py +0 -0
  57. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/os_deprecations.py +0 -0
  58. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pathlib_deprecations.py +0 -0
  59. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pep594_system_migrations.py +0 -0
  60. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pipes_migrations.py +0 -0
  61. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pkgutil_deprecations.py +0 -0
  62. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/platform_deprecations.py +0 -0
  63. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pydantic_deprecations.py +0 -0
  64. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pydantic_fields.py +0 -0
  65. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/pydantic_model_fields.py +0 -0
  66. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/re_deprecations.py +0 -0
  67. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/removed_modules_312.py +0 -0
  68. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/shutil_deprecations.py +0 -0
  69. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/socket_deprecations.py +0 -0
  70. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/ssl_deprecations.py +0 -0
  71. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/string_formatting.py +0 -0
  72. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/sys_deprecations.py +0 -0
  73. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/sys_last_deprecations.py +0 -0
  74. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/tarfile_deprecations.py +0 -0
  75. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/telnetlib_migrations.py +0 -0
  76. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/tempfile_deprecations.py +0 -0
  77. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/threading_deprecations.py +0 -0
  78. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/threading_is_alive_deprecation.py +0 -0
  79. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/typing_callable.py +0 -0
  80. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/typing_union_to_pipe.py +0 -0
  81. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/unittest_deprecations.py +0 -0
  82. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain02.py +0 -0
  83. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain1.py +0 -0
  84. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_pydantic.py +0 -0
  85. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python310.py +0 -0
  86. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python311.py +0 -0
  87. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python312.py +0 -0
  88. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python313.py +0 -0
  89. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python314.py +0 -0
  90. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python38.py +0 -0
  91. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/upgrade_to_python39.py +0 -0
  92. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/urllib_deprecations.py +0 -0
  93. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/uu_migrations.py +0 -0
  94. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/xdrlib_migrations.py +0 -0
  95. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python/migrate/xml_deprecations.py +0 -0
  96. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/SOURCES.txt +0 -0
  97. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/dependency_links.txt +0 -0
  98. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/entry_points.txt +0 -0
  99. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/requires.txt +0 -0
  100. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/src/openrewrite_migrate_python.egg-info/top_level.txt +0 -0
  101. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_aifc_migrations.py +0 -0
  102. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_array_deprecations.py +0 -0
  103. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_ast_deprecations.py +0 -0
  104. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_asyncio_coroutine_to_async.py +0 -0
  105. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_asyncio_deprecations.py +0 -0
  106. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_avro_migrations.py +0 -0
  107. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_calendar_deprecations.py +0 -0
  108. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_cgi_parse_deprecations.py +0 -0
  109. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_change_import_recipes.py +0 -0
  110. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_collections_abc_migrations.py +0 -0
  111. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_configparser_deprecations.py +0 -0
  112. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_datetime_utc.py +0 -0
  113. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_distutils_deprecations.py +0 -0
  114. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_distutils_migrations.py +0 -0
  115. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_functools_deprecations.py +0 -0
  116. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_future_imports.py +0 -0
  117. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_gettext_deprecations.py +0 -0
  118. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_html_parser_deprecations.py +0 -0
  119. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_imp_migrations.py +0 -0
  120. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_langchain_classic_imports.py +0 -0
  121. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_langchain_community_imports.py +0 -0
  122. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_langchain_provider_imports.py +0 -0
  123. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_locale_deprecations.py +0 -0
  124. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_locale_getdefaultlocale_deprecation.py +0 -0
  125. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_macpath_deprecations.py +0 -0
  126. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_mailcap_migrations.py +0 -0
  127. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_markers.py +0 -0
  128. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_os_deprecations.py +0 -0
  129. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pathlib_deprecations.py +0 -0
  130. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pep594_migrations.py +0 -0
  131. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pep594_system_migrations.py +0 -0
  132. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pkgutil_deprecations.py +0 -0
  133. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_platform_deprecations.py +0 -0
  134. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pydantic_deprecations.py +0 -0
  135. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pydantic_fields.py +0 -0
  136. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_pydantic_model_fields.py +0 -0
  137. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_re_deprecations.py +0 -0
  138. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_removed_modules_312.py +0 -0
  139. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_shutil_deprecations.py +0 -0
  140. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_socket_deprecations.py +0 -0
  141. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_ssl_deprecations.py +0 -0
  142. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_string_formatting.py +0 -0
  143. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_sys_deprecations.py +0 -0
  144. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_sys_last_deprecations.py +0 -0
  145. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_tarfile_deprecations.py +0 -0
  146. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_tempfile_deprecations.py +0 -0
  147. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_threading_deprecations.py +0 -0
  148. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_threading_extended.py +0 -0
  149. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_threading_is_alive_deprecation.py +0 -0
  150. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_typing_alias_moves.py +0 -0
  151. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_typing_callable.py +0 -0
  152. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_typing_union_to_pipe.py +0 -0
  153. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_unittest_deprecations.py +0 -0
  154. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_upgrade_recipes.py +0 -0
  155. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_upgrade_to_pydantic.py +0 -0
  156. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_urllib_deprecations.py +0 -0
  157. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/tests/test_xdrlib_migrations.py +0 -0
  158. {openrewrite_migrate_python-0.14.0.dev20260909100643 → openrewrite_migrate_python-0.14.0.dev20260909112655}/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.dev20260909100643
3
+ Version: 0.14.0.dev20260909112655
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.dev20260909100643" # Updated dynamically during release
8
+ version = "0.14.0.dev20260909112655" # 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"
@@ -40,6 +40,7 @@ from ._typing_imports import (
40
40
  from rewrite.python.tree import (
41
41
  CollectionLiteral,
42
42
  CompilationUnit,
43
+ ExpressionTypeTree,
43
44
  MultiImport,
44
45
  NamedArgument,
45
46
  TypeAlias,
@@ -50,11 +51,13 @@ from rewrite.python.visitor import PythonVisitor
50
51
  from rewrite.java.tree import (
51
52
  ArrayAccess,
52
53
  Assignment,
54
+ ClassDeclaration,
53
55
  FieldAccess,
54
56
  Identifier,
55
57
  Import,
56
58
  J,
57
59
  ParameterizedType,
60
+ TypeParameter,
58
61
  VariableDeclarations,
59
62
  )
60
63
 
@@ -105,12 +108,12 @@ def _annotated_type_argument(subscript: Tree) -> Optional[J]:
105
108
  return arguments[0]
106
109
 
107
110
 
108
- def _in_annotation(cursor: Cursor) -> bool:
111
+ def _in_type_position(cursor: Cursor) -> bool:
109
112
  """True when the cursor's node stands where a type expression is expected.
110
113
 
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
+ A type position is the only one where a `typing` alias and its built-in are
115
+ interchangeable; elsewhere they are distinct objects, so a dict key or a
116
+ call argument spelling the alias must keep naming it.
114
117
  """
115
118
  walked = [cursor.value]
116
119
  parent_cursor = cursor.parent_tree_cursor()
@@ -125,6 +128,16 @@ def _in_annotation(cursor: Cursor) -> bool:
125
128
  return parent.value is child
126
129
  if isinstance(parent, Assignment):
127
130
  return parent.assignment is child and _names_type_alias(parent.variable)
131
+ # A type parameter's bound, constraint tuple and PEP 696 default are
132
+ # types; its name is the type parameter being declared.
133
+ if isinstance(parent, TypeParameter):
134
+ return parent.name is not child
135
+ # `implements` holds the base list, where an `ExpressionTypeTree` wraps
136
+ # a keyword argument or a computed base rather than a type.
137
+ if isinstance(parent, ClassDeclaration):
138
+ return not isinstance(child, ExpressionTypeTree) and any(
139
+ base is child for base in (parent.implements or [])
140
+ )
128
141
  # `Annotated` carries a type in its first argument and runtime metadata
129
142
  # in the rest, which a tuple wraps a level below the subscript.
130
143
  annotated_type = _annotated_type_argument(parent)
@@ -174,7 +187,7 @@ def _rename_in_quoted_body(body: str, old_name: str, new_name: str) -> Optional[
174
187
 
175
188
 
176
189
  def _make_builtin_alias_editor(
177
- old_name: str, new_name: str, annotations_only: bool
190
+ old_name: str, new_name: str, type_positions_only: bool
178
191
  ) -> "TreeVisitor[Any, ExecutionContext]":
179
192
  """Create a visitor that renames a typing alias to its built-in equivalent.
180
193
 
@@ -185,8 +198,8 @@ def _make_builtin_alias_editor(
185
198
  - ``import typing [as alias]`` plus qualified ``typing.<old_name>``
186
199
  attribute references
187
200
 
188
- ``annotations_only`` confines the rename to annotation context
189
- (see `_in_annotation`).
201
+ ``type_positions_only`` confines the rename to type positions
202
+ (see `_in_type_position`).
190
203
 
191
204
  Import removal is delegated to the SDK's `RemoveImport`, which only
192
205
  removes imports that are no longer referenced and preserves comments.
@@ -231,7 +244,7 @@ def _make_builtin_alias_editor(
231
244
  isinstance(field_access.target, Identifier)
232
245
  and field_access.target.simple_name in self._module_refs
233
246
  and field_access.name.simple_name == old_name
234
- and (not annotations_only or _in_annotation(self.cursor))
247
+ and (not type_positions_only or _in_type_position(self.cursor))
235
248
  ):
236
249
  self._rewrote_qualified = True
237
250
  return field_access.name.replace(_simple_name=new_name).replace(
@@ -262,7 +275,7 @@ def _make_builtin_alias_editor(
262
275
  # A name bound by an enclosing scope is that local, not the import.
263
276
  if self._local_bindings.is_bound(self.cursor, self._bare_ref):
264
277
  return ident
265
- if annotations_only and not _in_annotation(self.cursor):
278
+ if type_positions_only and not _in_type_position(self.cursor):
266
279
  return ident
267
280
 
268
281
  if ident.markers.find_first(Quoted) is not None:
@@ -279,7 +292,7 @@ class _ReplaceTypingAliasRecipe(Recipe):
279
292
  old_name: ClassVar[str]
280
293
  new_name: ClassVar[str]
281
294
  # False only where the alias *is* the built-in, so any position is safe.
282
- annotations_only: ClassVar[bool] = True
295
+ type_positions_only: ClassVar[bool] = True
283
296
 
284
297
  @property
285
298
  def name(self) -> str:
@@ -296,17 +309,18 @@ class _ReplaceTypingAliasRecipe(Recipe):
296
309
  def description(self) -> str:
297
310
  return (
298
311
  f"PEP 585 deprecated `typing.{self.old_name}` in Python 3.9. "
299
- f"Replace with the built-in `{self.new_name}` type in annotations. "
312
+ f"Replace it with the built-in `{self.new_name}` wherever a type is expected, "
313
+ f"including class base lists, where either spelling subclasses `{self.new_name}`. "
300
314
  "Applies inside `if TYPE_CHECKING:` blocks as well; the built-in generic is "
301
315
  "valid at runtime from Python 3.9 on, so no `from __future__ import "
302
316
  "annotations` is needed. "
303
- f"References outside an annotation are left alone: `typing.{self.old_name}` "
317
+ f"References in a value position are left alone: `typing.{self.old_name}` "
304
318
  f"and `{self.new_name}` are distinct objects, so substituting one for the "
305
319
  "other where the name is used as a value would change behaviour."
306
320
  )
307
321
 
308
322
  def editor(self) -> TreeVisitor[Any, ExecutionContext]:
309
- return _make_builtin_alias_editor(self.old_name, self.new_name, self.annotations_only)
323
+ return _make_builtin_alias_editor(self.old_name, self.new_name, self.type_positions_only)
310
324
 
311
325
 
312
326
  @categorize(_Python39)
@@ -436,7 +450,7 @@ class ReplaceTypingText(_ReplaceTypingAliasRecipe):
436
450
 
437
451
  old_name = "Text"
438
452
  new_name = "str"
439
- annotations_only = False
453
+ type_positions_only = False
440
454
 
441
455
  @property
442
456
  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.dev20260909100643
3
+ Version: 0.14.0.dev20260909112655
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
@@ -1,5 +1,8 @@
1
1
  """Tests for typing deprecation migration recipes."""
2
2
 
3
+ import sys
4
+
5
+ import pytest
3
6
  from rewrite.test import RecipeSpec, python
4
7
  from openrewrite_migrate_python.migrate.typing_deprecations import (
5
8
  ReplaceTypingDictWithDict,
@@ -587,6 +590,118 @@ class TestPep585CornerCases:
587
590
  )
588
591
  )
589
592
 
593
+ def test_rewrites_pep695_type_parameter_bounds(self):
594
+ """A PEP 695 bound stands where a type does, on a function and on a class."""
595
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
596
+ spec.rewrite_run(
597
+ python(
598
+ """
599
+ from typing import List
600
+
601
+
602
+ def f[U: List](x: U) -> U: ...
603
+
604
+
605
+ class C[U: List]: pass
606
+ """,
607
+ """
608
+ def f[U: list](x: U) -> U: ...
609
+
610
+
611
+ class C[U: list]: pass
612
+ """,
613
+ )
614
+ )
615
+
616
+ @pytest.mark.skipif(
617
+ sys.version_info < (3, 13), reason="PEP 696 type parameter defaults are 3.13+ syntax"
618
+ )
619
+ def test_rewrites_a_pep696_type_parameter_default(self):
620
+ """A default is a second `bounds` entry, behind an `Empty` placeholder bound."""
621
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
622
+ spec.rewrite_run(
623
+ python(
624
+ """
625
+ from typing import List
626
+
627
+
628
+ def h[W = List](x: W) -> W: ...
629
+ """,
630
+ """
631
+ def h[W = list](x: W) -> W: ...
632
+ """,
633
+ )
634
+ )
635
+
636
+ def test_leaves_a_type_parameter_name_alone(self):
637
+ """`def f[List: int]` declares a type parameter; the name is not the import."""
638
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
639
+ spec.rewrite_run(
640
+ python(
641
+ """
642
+ from typing import List
643
+
644
+ x: List[int] = []
645
+
646
+
647
+ def f[List: int](y: int) -> int: ...
648
+ """,
649
+ """
650
+ x: list[int] = []
651
+
652
+
653
+ def f[List: int](y: int) -> int: ...
654
+ """,
655
+ )
656
+ )
657
+
658
+ def test_rewrites_class_bases(self):
659
+ """A base list is a type position: either spelling subclasses `list`."""
660
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
661
+ spec.rewrite_run(
662
+ python(
663
+ """
664
+ from typing import List
665
+
666
+
667
+ class C(List[int]): pass
668
+
669
+
670
+ class D(List): pass
671
+ """,
672
+ """
673
+ class C(list[int]): pass
674
+
675
+
676
+ class D(list): pass
677
+ """,
678
+ )
679
+ )
680
+
681
+ def test_leaves_a_class_keyword_argument_alone(self):
682
+ """`metaclass=List` passes the alias as a value, not as a base."""
683
+ spec = RecipeSpec(recipe=ReplaceTypingListWithList())
684
+ spec.rewrite_run(
685
+ python(
686
+ """
687
+ from typing import List
688
+
689
+ x: List[int] = []
690
+
691
+
692
+ class C(object, metaclass=List): pass
693
+ """,
694
+ """
695
+ from typing import List
696
+
697
+ x: list[int] = []
698
+
699
+
700
+ class C(object, metaclass=List): pass
701
+ """,
702
+ )
703
+ )
704
+
590
705
  def test_preserves_comment_on_removed_import(self):
591
706
  spec = RecipeSpec(recipe=ReplaceTypingListWithList())
592
707
  spec.rewrite_run(