openrewrite-migrate-python 0.17.0.dev20261022150922__tar.gz → 0.17.0.dev20261022193254__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.
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/PKG-INFO +1 -1
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/pyproject.toml +1 -1
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/__init__.py +23 -3
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/_finders.py +109 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/ctypes_deprecations.py +68 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/glob_deprecations.py +52 -3
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/http_server_deprecations.py +61 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/importlib_deprecations.py +136 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pathlib_deprecations.py +59 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/platform_deprecations.py +51 -1
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/sre_migrations.py +66 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/text_encoding.py +170 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/types_deprecations.py +78 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/typing_deprecations.py +53 -1
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python315.py +23 -1
- openrewrite_migrate_python-0.17.0.dev20261022193254/src/openrewrite_migrate_python/migrate/wave_deprecations.py +72 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/PKG-INFO +1 -1
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/SOURCES.txt +15 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_ctypes_deprecations.py +19 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_glob_deprecations.py +15 -1
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_http_server_deprecations.py +79 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_importlib_deprecations.py +70 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pathlib_deprecations.py +36 -1
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_platform_deprecations.py +15 -1
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_sre_migrations.py +26 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_text_encoding.py +143 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_types_deprecations.py +62 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_typing_deprecations.py +38 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_upgrade_recipes.py +2 -0
- openrewrite_migrate_python-0.17.0.dev20261022193254/tests/test_wave_deprecations.py +35 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/setup.cfg +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/__init__.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/__init__.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/_literals.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/_negation.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/assign_return.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/attr_access.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/boolean_simplification.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/collection_literals.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/comparison_simplification.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/complex_transforms.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/comprehension_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/conditionals.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/datetime_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/dict_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/exception_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/expression_simplification.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/logger_warn.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/loop_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/merge_nested_with.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/merge_startswith_endswith.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/naming_conventions.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/negated_operators.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/none_and_identity.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/object_inheritance.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/pandas_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/python_best_practices.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/range_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/redundant_code.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/remove_trailing_return_none.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/string_cleanup.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/unreachable_code.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/use_items.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/use_list_clear.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/cleanup/yoda_conditions.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/__init__.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/_reindent.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/_semantically_equal.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/_side_effects.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/_trivia.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/_truth_value.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/all_branches_identical.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/boolean_checks_not_inverted.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/code_quality.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/collapsible_if_statements.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/find_suspicious_chained_comparison.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/merge_identical_branches.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/remove_duplicate_conditions.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/remove_self_assignment.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/remove_unconditional_value_overwrite.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/simplify_boolean_literal.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_code_quality_python/codequality/simplify_redundant_logical_expression.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/__init__.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_decorators.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_langchain_tables.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_markers.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_method_renames.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_module_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/_slots.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/aifc_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/array_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/ast_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/asyncio_coroutine_to_async.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/asyncio_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/avro_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/backoff_to_tenacity.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/calendar_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/cgi_escape_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/cgi_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/cgi_parse_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/collections_abc_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/configparser_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/datetime_utc.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/distutils_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/distutils_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/functools_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/future_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/gettext_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/html_parser_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/imp_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/importlib_resources_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/inspect_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/langchain_classic_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/langchain_community_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/langchain_provider_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/locale_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/locale_getdefaultlocale_deprecation.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/macpath_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/mailcap_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/module_cached_attribute.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/nntplib_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/os_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pep594_system_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pipes_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pkgutil_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pydantic_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pydantic_fields.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/pydantic_model_fields.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/re_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/removed_modules_312.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/shutil_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/socket_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/ssl_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/string_formatting.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/sys_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/sys_last_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/tarfile_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/telnetlib_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/tempfile_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/threading_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/threading_is_alive_deprecation.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/typing_callable.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/typing_functional_syntax.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/typing_union_to_pipe.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/unittest_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain02.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_langchain1.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_pandas.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_pydantic.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python310.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python311.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python312.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python313.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python314.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python38.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/upgrade_to_python39.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/urllib_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/uu_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/xdrlib_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python/migrate/xml_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/dependency_links.txt +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/entry_points.txt +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/requires.txt +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/src/openrewrite_migrate_python.egg-info/top_level.txt +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_aifc_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_array_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_ast_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_asyncio_coroutine_to_async.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_asyncio_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_avro_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_backoff_to_tenacity.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_calendar_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_cgi_escape_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_cgi_parse_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_change_import_recipes.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_collections_abc_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_configparser_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_datetime_utc.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_distutils_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_distutils_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_functools_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_future_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_gettext_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_html_parser_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_imp_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_importlib_resources_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_inspect_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_langchain_classic_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_langchain_community_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_langchain_provider_imports.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_locale_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_locale_getdefaultlocale_deprecation.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_macpath_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_mailcap_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_markers.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_module_cached_attribute.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_os_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pep594_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pep594_system_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pkgutil_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pydantic_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pydantic_fields.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_pydantic_model_fields.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_re_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_removed_modules_312.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_shutil_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_socket_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_ssl_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_string_formatting.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_sys_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_sys_last_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_tarfile_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_tempfile_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_threading_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_threading_extended.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_threading_is_alive_deprecation.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_typing_alias_moves.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_typing_callable.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_typing_functional_syntax.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_typing_union_to_pipe.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_unittest_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_upgrade_to_pydantic.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_urllib_deprecations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/tests/test_xdrlib_migrations.py +0 -0
- {openrewrite_migrate_python-0.17.0.dev20261022150922 → openrewrite_migrate_python-0.17.0.dev20261022193254}/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.17.0.
|
|
3
|
+
Version: 0.17.0.dev20261022193254
|
|
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.17.0.
|
|
8
|
+
version = "0.17.0.dev20261022193254" # 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"
|
|
@@ -44,15 +44,18 @@ from .configparser_deprecations import (
|
|
|
44
44
|
ReplaceConfigparserReadfp,
|
|
45
45
|
ReplaceConfigparserSafeConfigParser,
|
|
46
46
|
)
|
|
47
|
+
from .ctypes_deprecations import FindCtypesSetPointerType
|
|
47
48
|
from .datetime_utc import ReplaceDatetimeUtcFromTimestamp, ReplaceDatetimeUtcNow
|
|
48
49
|
from .distutils_deprecations import FindDistutilsUsage
|
|
49
50
|
from .distutils_migrations import ReplaceDistutilsVersion
|
|
50
51
|
from .functools_deprecations import FindFunctoolsCmpToKey
|
|
51
52
|
from .future_imports import RemoveFutureImports
|
|
52
53
|
from .gettext_deprecations import ReplaceGettextDeprecations
|
|
53
|
-
from .glob_deprecations import ReplaceGlobGlob1
|
|
54
|
+
from .glob_deprecations import FindGlobGlob0, ReplaceGlobGlob1
|
|
54
55
|
from .html_parser_deprecations import ReplaceHtmlParserUnescape
|
|
56
|
+
from .http_server_deprecations import FindCgiHttpRequestHandler
|
|
55
57
|
from .imp_migrations import FindImpUsage
|
|
58
|
+
from .importlib_deprecations import FindLoaderLoadModule
|
|
56
59
|
from .importlib_resources_deprecations import ReplaceImportlibResourcesFilesPackage
|
|
57
60
|
from .inspect_deprecations import FindInspectGetargspec
|
|
58
61
|
from .locale_deprecations import ReplaceLocaleResetlocale
|
|
@@ -62,8 +65,8 @@ from .mailcap_migrations import FindMailcapModule
|
|
|
62
65
|
from .module_cached_attribute import ReplaceModuleCachedAttribute
|
|
63
66
|
from .nntplib_migrations import FindNntplibModule
|
|
64
67
|
from .os_deprecations import FindOsPopen, FindOsSpawn
|
|
65
|
-
from .pathlib_deprecations import FindPathlibLinkTo
|
|
66
|
-
from .platform_deprecations import ReplacePlatformPopen
|
|
68
|
+
from .pathlib_deprecations import FindPathlibIsReserved, FindPathlibLinkTo
|
|
69
|
+
from .platform_deprecations import FindPlatformJavaVer, ReplacePlatformPopen
|
|
67
70
|
from .pep594_system_migrations import (
|
|
68
71
|
FindCryptModule,
|
|
69
72
|
FindMsilibModule,
|
|
@@ -88,6 +91,7 @@ from .re_deprecations import ReplaceReTemplate
|
|
|
88
91
|
from .removed_modules_312 import FindRemovedModules312
|
|
89
92
|
from .shutil_deprecations import FindShutilRmtreeOnerror
|
|
90
93
|
from .socket_deprecations import FindSocketGetFQDN
|
|
94
|
+
from .sre_migrations import FindSreModules
|
|
91
95
|
from .ssl_deprecations import FindSslMatchHostname
|
|
92
96
|
from .string_formatting import ReplacePercentFormatWithFString, ReplaceStrFormatWithFString
|
|
93
97
|
from .sys_deprecations import FindSysCheckInterval, FindSysCoroutineWrapper
|
|
@@ -95,6 +99,7 @@ from .sys_last_deprecations import ReplaceSysLastExcInfo
|
|
|
95
99
|
from .tarfile_deprecations import ReplaceTarfileFilemode
|
|
96
100
|
from .telnetlib_migrations import FindTelnetlibModule
|
|
97
101
|
from .tempfile_deprecations import FindTempfileMktemp
|
|
102
|
+
from .text_encoding import FindImplicitTextEncoding
|
|
98
103
|
from .threading_is_alive_deprecation import ReplaceThreadIsAlive
|
|
99
104
|
from .threading_deprecations import (
|
|
100
105
|
ReplaceConditionNotifyAll,
|
|
@@ -106,8 +111,10 @@ from .threading_deprecations import (
|
|
|
106
111
|
ReplaceThreadingActiveCount,
|
|
107
112
|
ReplaceThreadingCurrentThread,
|
|
108
113
|
)
|
|
114
|
+
from .types_deprecations import FindCodeObjectCoLnotab
|
|
109
115
|
from .typing_callable import ReplaceTypingCallableWithCollectionsAbcCallable
|
|
110
116
|
from .typing_deprecations import (
|
|
117
|
+
FindTypingNoTypeCheckDecorator,
|
|
111
118
|
ReplaceTypingDictWithDict,
|
|
112
119
|
ReplaceTypingFrozenSetWithFrozenset,
|
|
113
120
|
ReplaceTypingListWithList,
|
|
@@ -140,6 +147,7 @@ from .upgrade_to_pydantic import (
|
|
|
140
147
|
)
|
|
141
148
|
from .urllib_deprecations import FindUrllibParseSplitFunctions, FindUrllibParseToBytes
|
|
142
149
|
from .uu_migrations import FindUuModule
|
|
150
|
+
from .wave_deprecations import FindWaveMarkers
|
|
143
151
|
from .xdrlib_migrations import FindXdrlibModule
|
|
144
152
|
from .xml_deprecations import ReplaceElementGetchildren, ReplaceElementGetiterator
|
|
145
153
|
|
|
@@ -259,6 +267,18 @@ __all__ = [
|
|
|
259
267
|
"ReplaceModuleCachedAttribute",
|
|
260
268
|
"ReplaceNamedTupleKeywordFields",
|
|
261
269
|
"ReplaceTypedDictWithoutFields",
|
|
270
|
+
# Detection: Python 3.15
|
|
271
|
+
"FindCgiHttpRequestHandler",
|
|
272
|
+
"FindCodeObjectCoLnotab",
|
|
273
|
+
"FindCtypesSetPointerType",
|
|
274
|
+
"FindGlobGlob0",
|
|
275
|
+
"FindImplicitTextEncoding",
|
|
276
|
+
"FindLoaderLoadModule",
|
|
277
|
+
"FindPathlibIsReserved",
|
|
278
|
+
"FindPlatformJavaVer",
|
|
279
|
+
"FindSreModules",
|
|
280
|
+
"FindTypingNoTypeCheckDecorator",
|
|
281
|
+
"FindWaveMarkers",
|
|
262
282
|
# Auto-fix: LangChain
|
|
263
283
|
"ReplaceLangchainCommunityImports",
|
|
264
284
|
"ReplaceLangchainProviderImports",
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Marking calls and module-member references that a recipe only reports."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Sequence
|
|
4
|
+
|
|
5
|
+
from rewrite import Cursor, ExecutionContext, Preconditions, TreeVisitor
|
|
6
|
+
from rewrite.java.tree import FieldAccess, Identifier, J, MethodInvocation
|
|
7
|
+
from rewrite.python.binding_utils import import_bindings
|
|
8
|
+
from rewrite.python.method_matcher import MethodMatcher
|
|
9
|
+
from rewrite.python.preconditions import uses_import, uses_method
|
|
10
|
+
from rewrite.python.visitor import PythonVisitor
|
|
11
|
+
|
|
12
|
+
from ._markers import mark_deprecated
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def module_member_path(cursor: Cursor, node: J) -> str | None:
|
|
16
|
+
"""The dotted path ``node`` reads, such as ``http.server.CGIHTTPRequestHandler``, or None.
|
|
17
|
+
|
|
18
|
+
``cursor`` stands on ``node``. A name answers where a ``from`` import binds it, and a dotted
|
|
19
|
+
attribute where its root name is a module an import binds. A guarded or relative import binds
|
|
20
|
+
a name that may not be the standard library's, so it answers None.
|
|
21
|
+
"""
|
|
22
|
+
attributes: List[str] = []
|
|
23
|
+
chain: List[FieldAccess] = []
|
|
24
|
+
root = node
|
|
25
|
+
while isinstance(root, FieldAccess):
|
|
26
|
+
attributes.append(root.name.simple_name)
|
|
27
|
+
chain.append(root)
|
|
28
|
+
root = root.target
|
|
29
|
+
if not isinstance(root, Identifier):
|
|
30
|
+
return None
|
|
31
|
+
|
|
32
|
+
root_cursor = cursor
|
|
33
|
+
for field_access in chain[1:]:
|
|
34
|
+
root_cursor = Cursor(root_cursor, field_access)
|
|
35
|
+
binding = import_bindings(cursor).reference(root_cursor, root)
|
|
36
|
+
if binding is None or binding.guarded or binding.module.startswith(".") or binding.member == "*":
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
if binding.member is not None:
|
|
40
|
+
base = f"{binding.module}.{binding.member}"
|
|
41
|
+
elif binding.name == binding.module.split(".")[0]:
|
|
42
|
+
# `import http.server` binds `http`, and the code spells the rest of the path itself.
|
|
43
|
+
base = binding.name
|
|
44
|
+
else:
|
|
45
|
+
base = binding.module
|
|
46
|
+
return ".".join([base, *reversed(attributes)])
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _gate(refs: Sequence[Any]) -> Any:
|
|
50
|
+
return refs[0] if len(refs) == 1 else Preconditions.or_(*refs)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def find_calls(
|
|
54
|
+
patterns: Sequence[str], message: str, match_overrides: bool = False
|
|
55
|
+
) -> TreeVisitor[Any, ExecutionContext]:
|
|
56
|
+
"""Marks each call matching one of ``patterns``."""
|
|
57
|
+
matchers = [MethodMatcher.create(p, match_overrides=match_overrides) for p in patterns]
|
|
58
|
+
|
|
59
|
+
class Visitor(PythonVisitor[ExecutionContext]):
|
|
60
|
+
def visit_method_invocation(self, method: MethodInvocation, p: ExecutionContext) -> J:
|
|
61
|
+
m = super().visit_method_invocation(method, p)
|
|
62
|
+
if isinstance(m, MethodInvocation) and any(mm.matches(m, cursor=self.cursor) for mm in matchers):
|
|
63
|
+
return mark_deprecated(m, message)
|
|
64
|
+
return m
|
|
65
|
+
|
|
66
|
+
return Preconditions.check(
|
|
67
|
+
_gate([uses_method(p, match_overrides=match_overrides) for p in patterns]), Visitor()
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def find_member_references(messages: Dict[str, str]) -> TreeVisitor[Any, ExecutionContext]:
|
|
72
|
+
"""Marks every use of a module member in ``messages``, keyed by its dotted path, called or not.
|
|
73
|
+
|
|
74
|
+
A use reaches the visitor in one of three shapes, one ``visit_*`` method each:
|
|
75
|
+
|
|
76
|
+
- a name a ``from`` import binds: ``CGIHTTPRequestHandler``, also as the name of a call
|
|
77
|
+
- a dotted attribute: ``http.server.CGIHTTPRequestHandler``
|
|
78
|
+
- a dotted call, held as a method invocation whose ``select`` is the owner rather than as a
|
|
79
|
+
field access: ``http.server.CGIHTTPRequestHandler(...)``
|
|
80
|
+
|
|
81
|
+
A name or attribute that no import binds to the module, such as ``obj.CGIHTTPRequestHandler``,
|
|
82
|
+
is left alone.
|
|
83
|
+
"""
|
|
84
|
+
modules = {path.rsplit(".", 1)[0] for path in messages}
|
|
85
|
+
|
|
86
|
+
class Visitor(PythonVisitor[ExecutionContext]):
|
|
87
|
+
def visit_method_invocation(self, method: MethodInvocation, p: ExecutionContext) -> J:
|
|
88
|
+
m = super().visit_method_invocation(method, p)
|
|
89
|
+
if not isinstance(m, MethodInvocation) or m.select is None:
|
|
90
|
+
return m
|
|
91
|
+
owner = module_member_path(Cursor(self.cursor, m.select), m.select)
|
|
92
|
+
message = messages.get(f"{owner}.{m.name.simple_name}") if owner else None
|
|
93
|
+
return mark_deprecated(m, message) if message else m
|
|
94
|
+
|
|
95
|
+
def visit_field_access(self, field_access: FieldAccess, p: ExecutionContext) -> J:
|
|
96
|
+
fa = super().visit_field_access(field_access, p)
|
|
97
|
+
if not isinstance(fa, FieldAccess):
|
|
98
|
+
return fa
|
|
99
|
+
message = messages.get(module_member_path(self.cursor, fa) or "")
|
|
100
|
+
return mark_deprecated(fa, message) if message else fa
|
|
101
|
+
|
|
102
|
+
def visit_identifier(self, ident: Identifier, p: ExecutionContext) -> J:
|
|
103
|
+
i = super().visit_identifier(ident, p)
|
|
104
|
+
if not isinstance(i, Identifier):
|
|
105
|
+
return i
|
|
106
|
+
message = messages.get(module_member_path(self.cursor, i) or "")
|
|
107
|
+
return mark_deprecated(i, message) if message else i
|
|
108
|
+
|
|
109
|
+
return Preconditions.check(_gate([uses_import(m) for m in sorted(modules)]), Visitor())
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Recipe for finding the removed `ctypes.SetPointerType()`.
|
|
3
|
+
|
|
4
|
+
The undocumented `ctypes.SetPointerType()` was deprecated in Python 3.13
|
|
5
|
+
and removed in Python 3.15. Call `set_type()` on the incomplete pointer
|
|
6
|
+
type instead.
|
|
7
|
+
|
|
8
|
+
See: https://docs.python.org/3/whatsnew/3.15.html#removed
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from typing import Any, List
|
|
12
|
+
|
|
13
|
+
from rewrite import ExecutionContext, Recipe, TreeVisitor
|
|
14
|
+
from rewrite.category import CategoryDescriptor
|
|
15
|
+
from rewrite.decorators import categorize
|
|
16
|
+
from rewrite.marketplace import Python
|
|
17
|
+
|
|
18
|
+
from ._finders import find_calls
|
|
19
|
+
|
|
20
|
+
# Define category path: Python > Migrate > Python 3.15
|
|
21
|
+
_Python315 = [
|
|
22
|
+
*Python,
|
|
23
|
+
CategoryDescriptor(display_name="Migrate"),
|
|
24
|
+
CategoryDescriptor(display_name="Python 3.15"),
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@categorize(_Python315)
|
|
29
|
+
class FindCtypesSetPointerType(Recipe):
|
|
30
|
+
"""
|
|
31
|
+
Find calls to the undocumented `ctypes.SetPointerType()`, removed in
|
|
32
|
+
Python 3.15.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
Before:
|
|
36
|
+
import ctypes
|
|
37
|
+
ctypes.SetPointerType(node_p, Node)
|
|
38
|
+
|
|
39
|
+
After:
|
|
40
|
+
import ctypes
|
|
41
|
+
node_p.set_type(Node)
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def name(self) -> str:
|
|
46
|
+
return "org.openrewrite.python.migrate.FindCtypesSetPointerType"
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def display_name(self) -> str:
|
|
50
|
+
return "Find removed `ctypes.SetPointerType()`"
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def description(self) -> str:
|
|
54
|
+
return (
|
|
55
|
+
"The undocumented `ctypes.SetPointerType()` was removed in Python 3.15. "
|
|
56
|
+
"Call `set_type()` on the incomplete pointer type instead."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def tags(self) -> List[str]:
|
|
61
|
+
return ["python", "migration", "3.15", "ctypes"]
|
|
62
|
+
|
|
63
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
64
|
+
return find_calls(
|
|
65
|
+
["ctypes SetPointerType(..)"],
|
|
66
|
+
"ctypes.SetPointerType() was removed in Python 3.15. "
|
|
67
|
+
"Call set_type() on the pointer type instead.",
|
|
68
|
+
)
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Recipes for the removed `glob.glob0()` and `glob.glob1()`.
|
|
3
3
|
|
|
4
|
-
The undocumented `glob.glob1()`
|
|
5
|
-
in Python 3.15. `glob.glob()` with `root_dir`
|
|
4
|
+
The undocumented `glob.glob0()` and `glob.glob1()` were deprecated in
|
|
5
|
+
Python 3.13 and removed in Python 3.15. `glob.glob()` with `root_dir`
|
|
6
|
+
returns the same names as `glob1()`. `glob0()` treated its argument
|
|
7
|
+
literally rather than as a pattern, so its calls are only found.
|
|
6
8
|
|
|
7
9
|
See: https://docs.python.org/3/whatsnew/3.15.html#glob
|
|
8
10
|
"""
|
|
@@ -21,6 +23,8 @@ from rewrite.python.template import capture, template
|
|
|
21
23
|
from rewrite.python.tree import NamedArgument
|
|
22
24
|
from rewrite.python.visitor import PythonVisitor
|
|
23
25
|
|
|
26
|
+
from ._finders import find_calls
|
|
27
|
+
|
|
24
28
|
# Define category path: Python > Migrate > Python 3.15
|
|
25
29
|
_Python315 = [
|
|
26
30
|
*Python,
|
|
@@ -110,3 +114,48 @@ class ReplaceGlobGlob1(Recipe):
|
|
|
110
114
|
return replaced
|
|
111
115
|
|
|
112
116
|
return Preconditions.check(uses_method(_GLOB1), Visitor())
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@categorize(_Python315)
|
|
120
|
+
class FindGlobGlob0(Recipe):
|
|
121
|
+
"""
|
|
122
|
+
Find calls to the undocumented `glob.glob0()`, removed in Python 3.15.
|
|
123
|
+
|
|
124
|
+
`glob0(dirname, basename)` returned `[basename]` when it existed in
|
|
125
|
+
`dirname`, treating `basename` literally rather than as a pattern.
|
|
126
|
+
|
|
127
|
+
Example:
|
|
128
|
+
Before:
|
|
129
|
+
import glob
|
|
130
|
+
glob.glob0("src", "setup.py")
|
|
131
|
+
|
|
132
|
+
After:
|
|
133
|
+
import os.path
|
|
134
|
+
["setup.py"] if os.path.lexists(os.path.join("src", "setup.py")) else []
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def name(self) -> str:
|
|
139
|
+
return "org.openrewrite.python.migrate.FindGlobGlob0"
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def display_name(self) -> str:
|
|
143
|
+
return "Find removed `glob.glob0()`"
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def description(self) -> str:
|
|
147
|
+
return (
|
|
148
|
+
"The undocumented `glob.glob0()` was removed in Python 3.15. Use `glob.glob()` with "
|
|
149
|
+
"`root_dir`, escaping the name with `glob.escape()`, or test for the file directly."
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def tags(self) -> List[str]:
|
|
154
|
+
return ["python", "migration", "3.15", "glob"]
|
|
155
|
+
|
|
156
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
157
|
+
return find_calls(
|
|
158
|
+
["glob glob0(..)"],
|
|
159
|
+
"glob.glob0() was removed in Python 3.15. "
|
|
160
|
+
"Use glob.glob(glob.escape(basename), root_dir=dirname) instead.",
|
|
161
|
+
)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Recipe for finding the removed `http.server.CGIHTTPRequestHandler`.
|
|
3
|
+
|
|
4
|
+
`CGIHTTPRequestHandler` was deprecated in Python 3.13 and removed in
|
|
5
|
+
Python 3.15, along with the `--cgi` flag of `python -m http.server`.
|
|
6
|
+
|
|
7
|
+
See: https://docs.python.org/3/whatsnew/3.15.html#removed
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Any, List
|
|
11
|
+
|
|
12
|
+
from rewrite import ExecutionContext, Recipe, TreeVisitor
|
|
13
|
+
from rewrite.category import CategoryDescriptor
|
|
14
|
+
from rewrite.decorators import categorize
|
|
15
|
+
from rewrite.marketplace import Python
|
|
16
|
+
|
|
17
|
+
from ._finders import find_member_references
|
|
18
|
+
|
|
19
|
+
# Define category path: Python > Migrate > Python 3.15
|
|
20
|
+
_Python315 = [
|
|
21
|
+
*Python,
|
|
22
|
+
CategoryDescriptor(display_name="Migrate"),
|
|
23
|
+
CategoryDescriptor(display_name="Python 3.15"),
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@categorize(_Python315)
|
|
28
|
+
class FindCgiHttpRequestHandler(Recipe):
|
|
29
|
+
"""
|
|
30
|
+
Find references to `http.server.CGIHTTPRequestHandler`, removed in
|
|
31
|
+
Python 3.15.
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
Before:
|
|
35
|
+
from http.server import CGIHTTPRequestHandler, HTTPServer
|
|
36
|
+
HTTPServer(("", 8000), CGIHTTPRequestHandler).serve_forever()
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def name(self) -> str:
|
|
41
|
+
return "org.openrewrite.python.migrate.FindCgiHttpRequestHandler"
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def display_name(self) -> str:
|
|
45
|
+
return "Find removed `http.server.CGIHTTPRequestHandler`"
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def description(self) -> str:
|
|
49
|
+
return (
|
|
50
|
+
"`http.server.CGIHTTPRequestHandler` was removed in Python 3.15, along with the `--cgi` "
|
|
51
|
+
"flag of `python -m http.server`. Serve CGI scripts through a WSGI or ASGI server instead."
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def tags(self) -> List[str]:
|
|
56
|
+
return ["python", "migration", "3.15", "http.server"]
|
|
57
|
+
|
|
58
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
59
|
+
return find_member_references({
|
|
60
|
+
"http.server.CGIHTTPRequestHandler": "http.server.CGIHTTPRequestHandler was removed in Python 3.15.",
|
|
61
|
+
})
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Recipe for finding the removed `load_module()` of import loaders.
|
|
3
|
+
|
|
4
|
+
Python 3.15 removed `importlib.abc.Loader.load_module()` and
|
|
5
|
+
`zipimport.zipimporter.load_module()`, and the import system no longer
|
|
6
|
+
calls `load_module()` on a custom loader.
|
|
7
|
+
|
|
8
|
+
See: https://docs.python.org/3/whatsnew/3.15.html#removed
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from typing import Any, List
|
|
12
|
+
|
|
13
|
+
from rewrite import Cursor, ExecutionContext, Preconditions, Recipe, TreeVisitor
|
|
14
|
+
from rewrite.category import CategoryDescriptor
|
|
15
|
+
from rewrite.decorators import categorize
|
|
16
|
+
from rewrite.marketplace import Python
|
|
17
|
+
from rewrite.java.tree import ClassDeclaration, J, MethodDeclaration, MethodInvocation
|
|
18
|
+
from rewrite.python.method_matcher import MethodMatcher
|
|
19
|
+
from rewrite.python.preconditions import uses_method, uses_type
|
|
20
|
+
from rewrite.python.type_utils import is_assignable_to
|
|
21
|
+
from rewrite.python.visitor import PythonVisitor
|
|
22
|
+
|
|
23
|
+
from ._markers import mark_deprecated
|
|
24
|
+
|
|
25
|
+
# Define category path: Python > Migrate > Python 3.15
|
|
26
|
+
_Python315 = [
|
|
27
|
+
*Python,
|
|
28
|
+
CategoryDescriptor(display_name="Migrate"),
|
|
29
|
+
CategoryDescriptor(display_name="Python 3.15"),
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _is_loader(type_: Any) -> bool:
|
|
34
|
+
return any(is_assignable_to(loader, type_) for loader in _LOADER_TYPES)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _declaring_class(cursor: Cursor) -> ClassDeclaration | None:
|
|
38
|
+
"""The class whose body declares the method ``cursor`` stands on, None for a nested function."""
|
|
39
|
+
enclosing = cursor.parent
|
|
40
|
+
while enclosing is not None:
|
|
41
|
+
if isinstance(enclosing.value, ClassDeclaration):
|
|
42
|
+
return enclosing.value
|
|
43
|
+
if isinstance(enclosing.value, MethodDeclaration):
|
|
44
|
+
return None
|
|
45
|
+
enclosing = enclosing.parent
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# typeshed declares `importlib.abc.Loader` in `importlib._abc` and re-exports it.
|
|
50
|
+
_LOADER_TYPES = ("importlib._abc.Loader", "importlib.abc.Loader")
|
|
51
|
+
_LOAD_MODULE_PATTERNS = [
|
|
52
|
+
*(f"{loader} load_module(..)" for loader in _LOADER_TYPES),
|
|
53
|
+
"zipimport.zipimporter load_module(..)",
|
|
54
|
+
]
|
|
55
|
+
_LOAD_MODULE_MESSAGE = (
|
|
56
|
+
"load_module() was removed in Python 3.15, and the import system no longer calls it. "
|
|
57
|
+
"Implement create_module() and exec_module() instead."
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@categorize(_Python315)
|
|
62
|
+
class FindLoaderLoadModule(Recipe):
|
|
63
|
+
"""
|
|
64
|
+
Find `load_module()` calls on, and definitions in, import loaders.
|
|
65
|
+
|
|
66
|
+
Python 3.15 removed `importlib.abc.Loader.load_module()` and
|
|
67
|
+
`zipimport.zipimporter.load_module()`, and the import system no longer
|
|
68
|
+
calls `load_module()` on a custom loader. A loader that only defines
|
|
69
|
+
`load_module()` stops loading anything.
|
|
70
|
+
|
|
71
|
+
Example:
|
|
72
|
+
Before:
|
|
73
|
+
import importlib.abc
|
|
74
|
+
|
|
75
|
+
class Loader(importlib.abc.Loader):
|
|
76
|
+
def load_module(self, fullname): ...
|
|
77
|
+
|
|
78
|
+
After:
|
|
79
|
+
import importlib.abc
|
|
80
|
+
|
|
81
|
+
class Loader(importlib.abc.Loader):
|
|
82
|
+
def create_module(self, spec): ...
|
|
83
|
+
def exec_module(self, module): ...
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def name(self) -> str:
|
|
88
|
+
return "org.openrewrite.python.migrate.FindLoaderLoadModule"
|
|
89
|
+
|
|
90
|
+
@property
|
|
91
|
+
def display_name(self) -> str:
|
|
92
|
+
return "Find removed `load_module()` on import loaders"
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def description(self) -> str:
|
|
96
|
+
return (
|
|
97
|
+
"`importlib.abc.Loader.load_module()` and `zipimport.zipimporter.load_module()` were "
|
|
98
|
+
"removed in Python 3.15, and the import system no longer calls `load_module()` on a "
|
|
99
|
+
"custom loader. Marks calls to it and its definitions in `Loader` subclasses. Only fires "
|
|
100
|
+
"where the receiver's or class's type resolves."
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def tags(self) -> List[str]:
|
|
105
|
+
return ["python", "migration", "3.15", "importlib"]
|
|
106
|
+
|
|
107
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
108
|
+
matchers = [MethodMatcher.create(p, match_overrides=True) for p in _LOAD_MODULE_PATTERNS]
|
|
109
|
+
|
|
110
|
+
class Visitor(PythonVisitor[ExecutionContext]):
|
|
111
|
+
def visit_method_invocation(self, method: MethodInvocation, p: ExecutionContext) -> J:
|
|
112
|
+
m = super().visit_method_invocation(method, p)
|
|
113
|
+
if not isinstance(m, MethodInvocation) or m.name.simple_name != "load_module":
|
|
114
|
+
return m
|
|
115
|
+
# A loader subclass declares its own `load_module`, which the method type names
|
|
116
|
+
# without the class hierarchy, so the receiver's type decides it.
|
|
117
|
+
if any(mm.matches(m, cursor=self.cursor) for mm in matchers) or (
|
|
118
|
+
m.select is not None and _is_loader(m.select.type)
|
|
119
|
+
):
|
|
120
|
+
return mark_deprecated(m, _LOAD_MODULE_MESSAGE)
|
|
121
|
+
return m
|
|
122
|
+
|
|
123
|
+
def visit_method_declaration(self, method: MethodDeclaration, p: ExecutionContext) -> J:
|
|
124
|
+
md = super().visit_method_declaration(method, p)
|
|
125
|
+
if not isinstance(md, MethodDeclaration) or md.name.simple_name != "load_module":
|
|
126
|
+
return md
|
|
127
|
+
owner = _declaring_class(self.cursor)
|
|
128
|
+
if owner is not None and _is_loader(owner.type):
|
|
129
|
+
return mark_deprecated(md, _LOAD_MODULE_MESSAGE)
|
|
130
|
+
return md
|
|
131
|
+
|
|
132
|
+
gate = Preconditions.or_(
|
|
133
|
+
*(uses_method(p, match_overrides=True) for p in _LOAD_MODULE_PATTERNS),
|
|
134
|
+
*(uses_type(loader, check_assignability=True) for loader in _LOADER_TYPES),
|
|
135
|
+
)
|
|
136
|
+
return Preconditions.check(gate, Visitor())
|
|
@@ -4,6 +4,9 @@ Recipes for migrating deprecated pathlib methods.
|
|
|
4
4
|
Path.link_to() was deprecated in Python 3.10 and removed in Python 3.12.
|
|
5
5
|
Use Path.hardlink_to() instead (note the reversed argument order).
|
|
6
6
|
|
|
7
|
+
PurePath.is_reserved() was deprecated in Python 3.13 and removed in
|
|
8
|
+
Python 3.15. Use os.path.isreserved(), which is only available on Windows.
|
|
9
|
+
|
|
7
10
|
See: https://docs.python.org/3/library/pathlib.html
|
|
8
11
|
"""
|
|
9
12
|
|
|
@@ -18,6 +21,7 @@ from rewrite.python.preconditions import uses_method
|
|
|
18
21
|
from rewrite.python.visitor import PythonVisitor
|
|
19
22
|
from rewrite.java.tree import J, MethodInvocation
|
|
20
23
|
from ._markers import mark_deprecated
|
|
24
|
+
from ._finders import find_calls
|
|
21
25
|
|
|
22
26
|
_LINK_TO = "pathlib.Path link_to(..)"
|
|
23
27
|
_LINK_TO_MATCHER = MethodMatcher.create(_LINK_TO, match_overrides=True)
|
|
@@ -29,6 +33,12 @@ _Python312 = [
|
|
|
29
33
|
CategoryDescriptor(display_name="Python 3.12"),
|
|
30
34
|
]
|
|
31
35
|
|
|
36
|
+
_Python315 = [
|
|
37
|
+
*Python,
|
|
38
|
+
CategoryDescriptor(display_name="Migrate"),
|
|
39
|
+
CategoryDescriptor(display_name="Python 3.15"),
|
|
40
|
+
]
|
|
41
|
+
|
|
32
42
|
|
|
33
43
|
@categorize(_Python312)
|
|
34
44
|
class FindPathlibLinkTo(Recipe):
|
|
@@ -88,3 +98,52 @@ class FindPathlibLinkTo(Recipe):
|
|
|
88
98
|
)
|
|
89
99
|
|
|
90
100
|
return Preconditions.check(uses_method(_LINK_TO, match_overrides=True), Visitor())
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@categorize(_Python315)
|
|
104
|
+
class FindPathlibIsReserved(Recipe):
|
|
105
|
+
"""
|
|
106
|
+
Find calls to `PurePath.is_reserved()`, removed in Python 3.15.
|
|
107
|
+
|
|
108
|
+
`os.path.isreserved()` is the replacement, but only exists on Windows,
|
|
109
|
+
where reserved names exist at all. `PurePosixPath.is_reserved()` always
|
|
110
|
+
returned `False`, so code that is not Windows-only can usually drop the
|
|
111
|
+
check.
|
|
112
|
+
|
|
113
|
+
Example:
|
|
114
|
+
Before:
|
|
115
|
+
from pathlib import PureWindowsPath
|
|
116
|
+
PureWindowsPath("nul").is_reserved()
|
|
117
|
+
|
|
118
|
+
After:
|
|
119
|
+
import os.path
|
|
120
|
+
os.path.isreserved("nul") # on Windows
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
@property
|
|
124
|
+
def name(self) -> str:
|
|
125
|
+
return "org.openrewrite.python.migrate.FindPathlibIsReserved"
|
|
126
|
+
|
|
127
|
+
@property
|
|
128
|
+
def display_name(self) -> str:
|
|
129
|
+
return "Find removed `PurePath.is_reserved()`"
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def description(self) -> str:
|
|
133
|
+
return (
|
|
134
|
+
"`pathlib.PurePath.is_reserved()` was removed in Python 3.15. Use `os.path.isreserved()`, "
|
|
135
|
+
"which is only available on Windows. Only fires where the receiver's type resolves to a "
|
|
136
|
+
"`pathlib` path."
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def tags(self) -> List[str]:
|
|
141
|
+
return ["python", "migration", "3.15", "pathlib"]
|
|
142
|
+
|
|
143
|
+
def editor(self) -> TreeVisitor[Any, ExecutionContext]:
|
|
144
|
+
return find_calls(
|
|
145
|
+
["pathlib.PurePath is_reserved(..)"],
|
|
146
|
+
"PurePath.is_reserved() was removed in Python 3.15. "
|
|
147
|
+
"Use os.path.isreserved(), which is only available on Windows.",
|
|
148
|
+
match_overrides=True,
|
|
149
|
+
)
|