From 732188eabcf2ebccf09c26d878f8952fe2b18d20 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Sat, 15 Jun 2024 13:09:56 -0400 Subject: [PATCH] Add isort rule and lint (#62) --- .pre-commit-config.yaml | 23 +++++++++++++++-------- pyproject.toml | 19 +++++++++++++++++++ stac_geoparquet/_compat.py | 2 +- stac_geoparquet/arrow/_util.py | 2 +- stac_geoparquet/cli.py | 3 ++- stac_geoparquet/pc_runner.py | 3 ++- stac_geoparquet/pgstac_reader.py | 16 ++++++++-------- stac_geoparquet/stac_geoparquet.py | 11 +++++------ stac_geoparquet/utils.py | 7 ++++--- tests/json_equals.py | 1 - tests/test_pgstac_reader.py | 5 ++--- tests/test_stac_geoparquet.py | 8 ++++---- tests/test_to_dict.py | 3 +-- 13 files changed, 64 insertions(+), 39 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cedf8ac..3cffeaa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,3 +1,6 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks + repos: - repo: https://github.com/asottile/pyupgrade rev: v3.15.2 @@ -5,16 +8,20 @@ repos: - id: pyupgrade args: - --py38-plus - - repo: https://github.com/psf/black - rev: 24.4.0 - hooks: - - id: black - language_version: python3 - exclude: versioneer.py - args: - - --target-version=py38 - repo: https://github.com/pycqa/flake8 rev: 7.0.0 hooks: - id: flake8 language_version: python3 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + exclude: tests/.*\.json + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.4.9 + hooks: + - id: ruff + args: ["--fix"] + - id: ruff-format diff --git a/pyproject.toml b/pyproject.toml index 1d5e371..eb85ace 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,3 +84,22 @@ ignore_missing_imports = true [[tool.mypy.overrides]] module = "stac_geoparquet.*" disallow_untyped_defs = true + +[tool.ruff.lint] +select = [ + # Pyflakes + "F", + # Pycodestyle + "E", + "W", + # isort + "I", +] +ignore = [ + "E501", # Line too long +] + +[tool.ruff.lint.extend-per-file-ignores] +"__init__.py" = [ + "F401", # Allow unused imports in __init__.py files +] diff --git a/stac_geoparquet/_compat.py b/stac_geoparquet/_compat.py index c349943..fd3c992 100644 --- a/stac_geoparquet/_compat.py +++ b/stac_geoparquet/_compat.py @@ -1,5 +1,5 @@ -import pystac import packaging.version +import pystac PYSTAC_1_7_0 = packaging.version.parse(pystac.__version__) >= packaging.version.Version( "1.7.0" diff --git a/stac_geoparquet/arrow/_util.py b/stac_geoparquet/arrow/_util.py index 6b73dac..34e353d 100644 --- a/stac_geoparquet/arrow/_util.py +++ b/stac_geoparquet/arrow/_util.py @@ -1,5 +1,6 @@ import operator from functools import reduce +from itertools import islice from typing import ( Any, Dict, @@ -11,7 +12,6 @@ ) import pyarrow as pa -from itertools import islice def update_batch_schema( diff --git a/stac_geoparquet/cli.py b/stac_geoparquet/cli.py index 6e350e6..2200f43 100644 --- a/stac_geoparquet/cli.py +++ b/stac_geoparquet/cli.py @@ -2,8 +2,8 @@ import argparse import logging -import sys import os +import sys from stac_geoparquet import pc_runner @@ -53,6 +53,7 @@ def parse_args(args: list[str] | None = None) -> argparse.Namespace: def setup_logging() -> None: import logging import warnings + import rich.logging warnings.filterwarnings("ignore", message=".*initial implementation of Parquet.*") diff --git a/stac_geoparquet/pc_runner.py b/stac_geoparquet/pc_runner.py index d65be25..7973d9a 100644 --- a/stac_geoparquet/pc_runner.py +++ b/stac_geoparquet/pc_runner.py @@ -1,11 +1,12 @@ from __future__ import annotations import json +import urllib.parse from typing import Any import azure.data.tables import requests -import urllib.parse + from stac_geoparquet.pgstac_reader import CollectionConfig PARTITION_FREQUENCIES = { diff --git a/stac_geoparquet/pgstac_reader.py b/stac_geoparquet/pgstac_reader.py index 724d099..ddd506e 100644 --- a/stac_geoparquet/pgstac_reader.py +++ b/stac_geoparquet/pgstac_reader.py @@ -1,25 +1,25 @@ from __future__ import annotations -import textwrap -import hashlib +import collections.abc +import dataclasses import datetime +import hashlib +import itertools import logging +import textwrap from typing import Any -import collections.abc -import itertools +import dateutil.tz import fsspec import pandas as pd -import pystac -import dateutil.tz -import dataclasses import pyarrow.fs import pypgstac.db import pypgstac.hydration +import pystac import shapely.wkb import tqdm.auto -from stac_geoparquet import to_geodataframe +from stac_geoparquet import to_geodataframe logger = logging.getLogger(__name__) diff --git a/stac_geoparquet/stac_geoparquet.py b/stac_geoparquet/stac_geoparquet.py index ccea058..6c8aca5 100644 --- a/stac_geoparquet/stac_geoparquet.py +++ b/stac_geoparquet/stac_geoparquet.py @@ -3,20 +3,19 @@ """ from __future__ import annotations -import collections -from typing import Sequence, Any, Literal +import collections import warnings +from typing import Any, Literal, Sequence +from urllib.parse import urlparse -import pystac import geopandas +import numpy as np import pandas as pd import pyarrow as pa -import numpy as np +import pystac import shapely.geometry -from urllib.parse import urlparse - from stac_geoparquet.utils import fix_empty_multipolygon STAC_ITEM_TYPES = ["application/json", "application/geo+json"] diff --git a/stac_geoparquet/utils.py b/stac_geoparquet/utils.py index 68e4eba..8b0ffb7 100644 --- a/stac_geoparquet/utils.py +++ b/stac_geoparquet/utils.py @@ -3,8 +3,9 @@ import functools from typing import Any -import shapely.geometry import pystac +import shapely.geometry +import shapely.geometry.base @functools.singledispatch @@ -36,7 +37,7 @@ def assert_equal_item( ) assert result.bbox == expected.bbox assert result.datetime == expected.datetime - assert type(result.stac_extensions) == type(expected.stac_extensions) + assert isinstance(result.stac_extensions, type(expected.stac_extensions)) assert sorted(result.stac_extensions) == sorted(expected.stac_extensions) assert result.collection_id == expected.collection_id assert result.extra_fields == expected.extra_fields @@ -86,7 +87,7 @@ def assert_link_equal( def fix_empty_multipolygon( - item_geometry: dict[str, Any] + item_geometry: dict[str, Any], ) -> shapely.geometry.base.BaseGeometry: # Filter out missing geoms in MultiPolygons # https://github.com/shapely/shapely/issues/1407 diff --git a/tests/json_equals.py b/tests/json_equals.py index 79a3ad5..251bf49 100644 --- a/tests/json_equals.py +++ b/tests/json_equals.py @@ -3,7 +3,6 @@ from ciso8601 import parse_rfc3339 - JsonValue = Union[list, tuple, int, float, dict, str, bool, None] diff --git a/tests/test_pgstac_reader.py b/tests/test_pgstac_reader.py index d921a6e..22e7f73 100644 --- a/tests/test_pgstac_reader.py +++ b/tests/test_pgstac_reader.py @@ -2,15 +2,14 @@ import json import pathlib -import pystac import dateutil import pandas as pd +import pystac import pytest import stac_geoparquet.pgstac_reader -from stac_geoparquet.utils import assert_equal from stac_geoparquet._compat import PYSTAC_1_7_0 - +from stac_geoparquet.utils import assert_equal HERE = pathlib.Path(__file__).parent diff --git a/tests/test_stac_geoparquet.py b/tests/test_stac_geoparquet.py index db6b978..f5cbfeb 100644 --- a/tests/test_stac_geoparquet.py +++ b/tests/test_stac_geoparquet.py @@ -1,16 +1,16 @@ import json import pathlib -import stac_geoparquet -import shapely.geometry +import geopandas import pandas as pd import pandas.testing import pyarrow as pa import pystac -import geopandas -import requests import pytest +import requests +import shapely.geometry +import stac_geoparquet from stac_geoparquet.stac_geoparquet import to_item_collection from stac_geoparquet.utils import assert_equal, fix_empty_multipolygon diff --git a/tests/test_to_dict.py b/tests/test_to_dict.py index 9b5b336..eeaddb7 100644 --- a/tests/test_to_dict.py +++ b/tests/test_to_dict.py @@ -1,11 +1,10 @@ import pathlib -import pytest import geopandas +import pytest import stac_geoparquet - HERE = pathlib.Path(__file__).parent