Files
Alexey MilovidovandClaude Opus 4.8 295ced78d1 Enable more Ruff checks (F401/F403/F405/F541/F841) and clean up tests
Follow-up to #105171, which added `ruff` with a deliberately narrow,
bug-class-only rule set and left the unused-name and star-import rules
off pending a dedicated cleanup pass. This enables that second batch in
`pyproject.toml` and fixes every violation across the tree (the bulk in
integration tests):

- `F401` unused-import and `F841` unused-variable: removed, preserving
  any side-effecting right-hand side (e.g. `result = node.query(...)`
  becomes `node.query(...)`). Two `try: import ...` feature probes are
  kept with `# noqa: F401`.
- `F541` f-string-missing-placeholders: dropped the redundant `f` prefix.
- `F403`/`F405` star imports: every `from module import *` is expanded
  into explicit imports of the names actually used, taken from each
  name's real origin, so stdlib/third-party names import from their real
  source rather than through a test "convenience bundle". The now-empty
  `tests/integration/helpers/kafka/common_direct.py` bundle is removed and
  its three remaining consumers import `_VarintBytes`/`KafkaAdminClient`
  directly.

Eliminating the star imports surfaced a real bug the wildcard had masked
from `F821`: `generate_presets.py` in `test_prometheus_protocols` called
an undefined `execute_instant_query_with_http_api`; fixed to the existing
`execute_query_via_http_api`.

No `black`/`isort` reformatting was applied (neither is enforced in the
style check), so the diff is limited to the lint fixes themselves.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-18 23:22:25 +00:00

99 lines
3.0 KiB
Python

import pytest
import logging
import pyspark
import subprocess
from helpers.cluster import ClickHouseCluster, minio_access_key, minio_secret_key
from helpers.s3_tools import (
prepare_s3_bucket,
)
from helpers.spark_tools import ResilientSparkSession, write_spark_log_config
def check_spark(spark):
p = subprocess.run(["echo", "hello world!"], capture_output=True, text=True)
logging.info(f"Java version: {p.stdout}")
spark.sql(
"""
DROP DATABASE IF EXISTS spark_catalog.db CASCADE
"""
)
spark.sql(
"""
CREATE DATABASE spark_catalog.db
"""
)
spark.sql(
"""
CREATE TABLE IF NOT EXISTS spark_catalog.db.lol2 (order_number bigint) USING iceberg OPTIONS ('format-version'='1');
"""
)
spark.sql(
"""
INSERT INTO spark_catalog.db.lol2 (order_number) VALUES (123), (456), (789);
"""
)
logging.info(f"Dataframe: {spark.sql('SELECT * FROM spark_catalog.db.lol2').show()}")
def get_spark(cluster : ClickHouseCluster):
builder = (
pyspark.sql.SparkSession.builder \
.appName("IcebergS3Example") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.catalog.spark_catalog", "org.apache.iceberg.spark.SparkSessionCatalog") \
.config("spark.sql.catalog.spark_catalog.type", "hadoop") \
.config("spark.sql.catalog.spark_catalog.warehouse", "s3a://root/var/lib/clickhouse/user_files/iceberg_data") \
.config("spark.hadoop.fs.s3a.endpoint", f"http://{cluster.minio_ip}:{cluster.minio_port}/") \
.config("spark.hadoop.fs.s3a.access.key", minio_access_key) \
.config("spark.hadoop.fs.s3a.secret.key", minio_secret_key) \
.config("spark.hadoop.fs.s3a.path.style.access", "true") \
.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
.master("local")
)
props_path = write_spark_log_config(cluster.instances_dir)
builder = builder.config(
"spark.driver.extraJavaOptions",
f"-Dlog4j2.configurationFile=file:{props_path}",
)
return builder.getOrCreate()
@pytest.fixture(scope="package")
def started_cluster_iceberg():
try:
cluster = ClickHouseCluster(__file__, with_spark=True)
cluster.add_instance(
"node1",
main_configs=[
"configs/config.d/named_collections.xml",
"configs/config.d/log_level_override.xml",
],
user_configs=["configs/users.d/users.xml"],
with_minio=True,
stay_alive=True,
mem_limit='15g',
cpu_limit=False,
)
logging.info("Starting cluster...")
cluster.start()
prepare_s3_bucket(cluster)
cluster.spark_session = ResilientSparkSession(lambda: get_spark(cluster))
# check_spark(cluster.spark_session)
yield cluster
finally:
cluster.shutdown()