This is an automated email from the ASF dual-hosted git repository.

jrmccluskey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 1c9fd1bc1b9 Remove isort dependency, migrate to ruff equivalent 
(#39411)
1c9fd1bc1b9 is described below

commit 1c9fd1bc1b92d71d3283520d09339ad47b36c8cd
Author: Jack McCluskey <[email protected]>
AuthorDate: Thu Jul 23 09:15:42 2026 -0400

    Remove isort dependency, migrate to ruff equivalent (#39411)
    
    * Remove isort dependency, migrate to ruff equivalent
    
    * Clean up old gen clients from the ignore list
---
 sdks/python/pyproject.toml      | 105 ++++++++++++++++++++--------------------
 sdks/python/scripts/run_lint.sh |  37 +-------------
 sdks/python/setup.py            |   1 -
 3 files changed, 54 insertions(+), 89 deletions(-)

diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml
index 5901d817c9c..f89297cb766 100644
--- a/sdks/python/pyproject.toml
+++ b/sdks/python/pyproject.toml
@@ -45,57 +45,6 @@ requires = [
 # legacy installation is needed to generate `apache_beam.portability.api` 
package.
 build-backend = "setuptools.build_meta"
 
-[tool.isort]
-py_version = 310
-line_length = 120
-old_finders = true
-order_by_type = true
-force_single_line = true
-combine_star = true
-src_paths = ["apache_beam"]
-extra_standard_library = ["dataclasses"]
-known_third_party = ["yaml"]
-skip = [
-    "apiclient.py",
-    "avroio_test.py",
-    "cloudpickle.py",
-    "datastore_wordcount.py",
-    "datastoreio_test.py",
-    "doctests_test.py",
-    "fast_coders_test.py",
-    "hadoopfilesystem.py",
-    "iobase_test.py",
-    "main_test.py",
-    "model.py",
-    "preprocess.py",
-    "process_tfma.py",
-    "render_test.py",
-    "slow_coders_test.py",
-    "taxi.py",
-    "tfdv_analyze_and_validate.py",
-    "yaml/main.py",
-    "yaml_testing_test.py",
-    "bigquery_v2_client.py",
-    "bigquery_v2_messages.py",
-    "dataflow_v1b3_client.py",
-    "dataflow_v1b3_messages.py",
-    "storage_v1_client.py",
-    "storage_v1_messages.py",
-    "proto2_coder_test_messages_pb2.py",
-    "rate_limit_pb2.py",
-    "cloudbuild_v1_client.py",
-    "cloudbuild_v1_messages.py",
-    "boto3_client.py",
-]
-skip_glob = [
-    "*.pxd",
-    "*.pyx",
-    "*pb2*.py",
-    "**/examples/**/*.py",
-    "**/portability/api/**/*.py",
-    "**/portability/api/__init__.py",
-]
-
 [tool.ruff]
 exclude = [
     ".bzr",
@@ -127,6 +76,8 @@ exclude = [
     "*.pxd",
     "*.pyx",
     "*pb2*.py",
+    "*.ipynb",
+    "**/*.ipynb",
     "**/examples/**/*.py",
     "**/examples/**/*.ipynb",
     "**/portability/api/**/*.py",
@@ -134,9 +85,10 @@ exclude = [
 ]
 target-version = "py310"
 src = ["apache_beam"]
+line-length = 120
 
 [tool.ruff.lint]
-select = ["E9", "PL", "F821", "F822", "F823", "UP006"]
+select = ["E9", "PL", "F821", "F822", "F823", "UP006", "I"]
 ignore = [
     # Ignored Pylint Checks
     "PLC0415",  # import-outside-toplevel
@@ -175,6 +127,55 @@ unfixable = []
 # Allow unused variables when underscore-prefixed.
 dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
 
+[tool.ruff.lint.isort]
+force-single-line = true
+order-by-type = true
+extra-standard-library = ["dataclasses"]
+known-third-party = ["yaml"]
+known-first-party = ["apache_beam"]
+
+[tool.ruff.lint.per-file-ignores]
+"**/apiclient.py" = ["I"]
+"**/avroio_test.py" = ["I"]
+"**/cloudpickle.py" = ["I"]
+"**/datastore_wordcount.py" = ["I"]
+"**/datastoreio_test.py" = ["I"]
+"**/doctests_test.py" = ["I"]
+"**/fast_coders_test.py" = ["I"]
+"**/hadoopfilesystem.py" = ["I"]
+"**/iobase_test.py" = ["I"]
+"**/main_test.py" = ["I"]
+"**/model.py" = ["I"]
+"**/preprocess.py" = ["I"]
+"**/process_tfma.py" = ["I"]
+"**/render_test.py" = ["I"]
+"**/slow_coders_test.py" = ["I"]
+"**/taxi.py" = ["I"]
+"**/tfdv_analyze_and_validate.py" = ["I"]
+"**/yaml/main.py" = ["I"]
+"**/yaml_testing_test.py" = ["I"]
+"**/bigquery_v2_client.py" = ["I"]
+"**/bigquery_v2_messages.py" = ["I"]
+"**/proto2_coder_test_messages_pb2.py" = ["I"]
+"**/rate_limit_pb2.py" = ["I"]
+"**/boto3_client.py" = ["I"]
+"**/coders_property_based_test.py" = ["I"]
+"**/filebasedsource_test.py" = ["I"]
+"**/bigtableio_it_test.py" = ["I"]
+"**/bigtableio_test.py" = ["I"]
+"**/mongodbio.py" = ["I"]
+"**/textio_test.py" = ["I"]
+"**/streaming_cache.py" = ["I"]
+"**/pcoll_visualization.py" = ["I"]
+"**/interactive_environment.py" = ["I"]
+"**/pipeline_instrument_test.py" = ["I"]
+"**/worker_handlers.py" = ["I"]
+"**/feast_feature_store_it_test.py" = ["I"]
+"**/vertex_ai_feature_store_it_test.py" = ["I"]
+"**/vertex_ai_feature_store_test.py" = ["I"]
+"setup.py" = ["I"]
+"container/**" = ["I"]
+
 [tool.pyrefly]
 project-includes = ["apache_beam"]
 python-version = "3.10.0"
diff --git a/sdks/python/scripts/run_lint.sh b/sdks/python/scripts/run_lint.sh
index 068c838952d..3b45b9cf781 100755
--- a/sdks/python/scripts/run_lint.sh
+++ b/sdks/python/scripts/run_lint.sh
@@ -16,10 +16,9 @@
 #    limitations under the License.
 #
 
-# This script will run ruff and isort on all module files.
+# This script will run ruff on all module files.
 #
 # Use "ruff check apache_beam" to run ruff all files.
-# Use "isort apache_beam" to run isort all files.
 #
 # The exit-code of the script indicates success or a failure.
 
@@ -82,40 +81,6 @@ echo -e "Linting modules:\n${MODULE}"
 echo "Running ruff..."
 ruff check ${MODULE} --extend-exclude="$FILES_TO_IGNORE"
 
-echo "Running isort..."
-# Skip files where isort is behaving weirdly
-ISORT_EXCLUDED=(
-  "apiclient.py"
-  "avroio_test.py"
-  "cloudpickle.py"
-  "datastore_wordcount.py"
-  "datastoreio_test.py"
-  "doctests_test.py"
-  "fast_coders_test.py"
-  "hadoopfilesystem.py"
-  "iobase_test.py"
-  "main_test.py"
-  "model.py"
-  "preprocess.py"
-  "process_tfma.py"
-  "render_test.py"
-  "slow_coders_test.py"
-  "taxi.py"
-  "tfdv_analyze_and_validate.py"
-  "yaml/main.py"
-  "main_test.py"
-  "yaml_testing_test.py"
-)
-SKIP_PARAM=""
-for file in "${ISORT_EXCLUDED[@]}"; do
-  SKIP_PARAM="$SKIP_PARAM --skip $file"
-done
-for file in "${EXCLUDED_GENERATED_FILES[@]}"; do
-  SKIP_PARAM="$SKIP_PARAM --skip $(basename $file)"
-done
-isort ${MODULE} -p apache_beam --line-width 120 --check-only --order-by-type \
-    --combine-star --force-single-line-imports --diff --magic-placement 
${SKIP_PARAM}
-
 echo "Checking unittest.main..."
 TESTS_MISSING_MAIN=$(
     find ${MODULE} \
diff --git a/sdks/python/setup.py b/sdks/python/setup.py
index 471f15723e7..65c247fa505 100644
--- a/sdks/python/setup.py
+++ b/sdks/python/setup.py
@@ -461,7 +461,6 @@ if __name__ == '__main__':
       # BEAM-8840: Do NOT use tests_require or setup_requires.
       extras_require={
           'dev': [
-            'isort==7.0.0',
             'pyrefly==0.54.0',
             'ruff==0.15.7',
             'yapf==0.43.0',

Reply via email to