Skip to content

Commit 1e19918

Browse files
authored
Replace flake8/isort with ruff (#566)
1 parent a239f23 commit 1e19918

File tree

8 files changed

+120
-92
lines changed

8 files changed

+120
-92
lines changed

.pre-commit-config.yaml

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ repos:
1111
- id: debug-statements
1212
- id: mixed-line-ending
1313

14-
- repo: https://github.com/asottile/pyupgrade
15-
rev: v3.3.1
14+
- repo: https://github.com/charliermarsh/ruff-pre-commit
15+
rev: 'v0.0.238'
1616
hooks:
17-
- id: pyupgrade
18-
args:
19-
- '--py37-plus'
17+
- id: ruff
18+
args: ['--fix']
2019

2120
- repo: https://github.com/psf/black
2221
rev: 22.12.0
@@ -28,16 +27,6 @@ repos:
2827
hooks:
2928
- id: blackdoc
3029

31-
- repo: https://github.com/PyCQA/flake8
32-
rev: 6.0.0
33-
hooks:
34-
- id: flake8
35-
36-
- repo: https://github.com/PyCQA/isort
37-
rev: 5.11.4
38-
hooks:
39-
- id: isort
40-
4130
- repo: https://github.com/pre-commit/mirrors-prettier
4231
rev: v3.0.0-alpha.4
4332
hooks:

intake_esm/_search.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def is_pattern(value):
3030

3131

3232
def search(
33-
*, df: pd.DataFrame, query: typing.Dict[str, typing.Any], columns_with_iterables: set
33+
*, df: pd.DataFrame, query: dict[str, typing.Any], columns_with_iterables: set
3434
) -> pd.DataFrame:
3535
"""Search for entries in the catalog."""
3636

@@ -59,8 +59,8 @@ def search(
5959
def search_apply_require_all_on(
6060
*,
6161
df: pd.DataFrame,
62-
query: typing.Dict[str, typing.Any],
63-
require_all_on: typing.Union[str, typing.List[typing.Any]],
62+
query: dict[str, typing.Any],
63+
require_all_on: typing.Union[str, list[typing.Any]],
6464
columns_with_iterables: set = None,
6565
) -> pd.DataFrame:
6666
_query = query.copy()

intake_esm/cat.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def _validate_data_format(cls, values):
8686
class Aggregation(pydantic.BaseModel):
8787
type: AggregationType
8888
attribute_name: pydantic.StrictStr
89-
options: typing.Optional[typing.Dict] = {}
89+
options: typing.Optional[dict] = {}
9090

9191
class Config:
9292
validate_all = True
@@ -95,8 +95,8 @@ class Config:
9595

9696
class AggregationControl(pydantic.BaseModel):
9797
variable_column_name: pydantic.StrictStr
98-
groupby_attrs: typing.List[pydantic.StrictStr]
99-
aggregations: typing.List[Aggregation] = []
98+
groupby_attrs: list[pydantic.StrictStr]
99+
aggregations: list[Aggregation] = []
100100

101101
class Config:
102102
validate_all = True
@@ -109,11 +109,11 @@ class ESMCatalogModel(pydantic.BaseModel):
109109
"""
110110

111111
esmcat_version: pydantic.StrictStr
112-
attributes: typing.List[Attribute]
112+
attributes: list[Attribute]
113113
assets: Assets
114114
aggregation_control: typing.Optional[AggregationControl] = None
115115
id: typing.Optional[str] = ''
116-
catalog_dict: typing.Optional[typing.List[typing.Dict]] = None
116+
catalog_dict: typing.Optional[list[dict]] = None
117117
catalog_file: pydantic.StrictStr = None
118118
description: pydantic.StrictStr = None
119119
title: pydantic.StrictStr = None
@@ -135,7 +135,7 @@ def validate_catalog(cls, values):
135135
return values
136136

137137
@classmethod
138-
def from_dict(cls, data: typing.Dict) -> 'ESMCatalogModel':
138+
def from_dict(cls, data: dict) -> 'ESMCatalogModel':
139139
esmcat = data['esmcat']
140140
df = data['df']
141141
if 'last_updated' not in esmcat:
@@ -152,7 +152,7 @@ def save(
152152
catalog_type: str = 'dict',
153153
to_csv_kwargs: dict = None,
154154
json_dump_kwargs: dict = None,
155-
storage_options: typing.Dict[str, typing.Any] = None,
155+
storage_options: dict[str, typing.Any] = None,
156156
) -> None:
157157
"""
158158
Save the catalog to a file.
@@ -227,8 +227,8 @@ def save(
227227
def load(
228228
cls,
229229
json_file: typing.Union[str, pydantic.FilePath, pydantic.AnyUrl],
230-
storage_options: typing.Dict[str, typing.Any] = None,
231-
read_csv_kwargs: typing.Dict[str, typing.Any] = None,
230+
storage_options: dict[str, typing.Any] = None,
231+
read_csv_kwargs: dict[str, typing.Any] = None,
232232
) -> 'ESMCatalogModel':
233233
"""
234234
Loads the catalog from a file
@@ -273,7 +273,7 @@ def load(
273273
return cat
274274

275275
@property
276-
def columns_with_iterables(self) -> typing.Set[str]:
276+
def columns_with_iterables(self) -> set[str]:
277277
"""Return a set of columns that have iterables."""
278278
if self._df.empty:
279279
return set()
@@ -325,9 +325,7 @@ def grouped(self) -> typing.Union[pd.core.groupby.DataFrameGroupBy, pd.DataFrame
325325
return self.df.groupby(self.aggregation_control.groupby_attrs)
326326
return self.df
327327

328-
def _construct_group_keys(
329-
self, sep: str = '.'
330-
) -> typing.Dict[str, typing.Union[str, typing.Tuple[str]]]:
328+
def _construct_group_keys(self, sep: str = '.') -> dict[str, typing.Union[str, tuple[str]]]:
331329
grouped = self.grouped
332330
if isinstance(grouped, pd.core.groupby.generic.DataFrameGroupBy):
333331
internal_keys = grouped.groups.keys()
@@ -346,7 +344,7 @@ def _construct_group_keys(
346344

347345
return dict(zip(public_keys, internal_keys))
348346

349-
def _unique(self) -> typing.Dict:
347+
def _unique(self) -> dict:
350348
def _find_unique(series):
351349
values = series.dropna()
352350
if series.name in self.columns_with_iterables:
@@ -370,8 +368,8 @@ def nunique(self) -> pd.Series:
370368
def search(
371369
self,
372370
*,
373-
query: typing.Union['QueryModel', typing.Dict[str, typing.Any]],
374-
require_all_on: typing.Union[str, typing.List[str]] = None,
371+
query: typing.Union['QueryModel', dict[str, typing.Any]],
372+
require_all_on: typing.Union[str, list[str]] = None,
375373
) -> 'ESMCatalogModel':
376374
"""
377375
Search for entries in the catalog.
@@ -417,9 +415,9 @@ def search(
417415
class QueryModel(pydantic.BaseModel):
418416
"""A Pydantic model to represent a query to be executed against a catalog."""
419417

420-
query: typing.Dict[pydantic.StrictStr, typing.Union[typing.Any, typing.List[typing.Any]]]
421-
columns: typing.List[str]
422-
require_all_on: typing.Union[str, typing.List[typing.Any]] = None
418+
query: dict[pydantic.StrictStr, typing.Union[typing.Any, list[typing.Any]]]
419+
columns: list[str]
420+
require_all_on: typing.Union[str, list[typing.Any]] = None
423421

424422
class Config:
425423
validate_all = True

intake_esm/core.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ class esm_datastore(Catalog):
7171

7272
def __init__(
7373
self,
74-
obj: typing.Union[pydantic.FilePath, pydantic.AnyUrl, typing.Dict[str, typing.Any]],
74+
obj: typing.Union[pydantic.FilePath, pydantic.AnyUrl, dict[str, typing.Any]],
7575
*,
7676
progressbar: bool = True,
7777
sep: str = '.',
7878
registry: typing.Optional[DerivedVariableRegistry] = None,
79-
read_csv_kwargs: typing.Dict[str, typing.Any] = None,
80-
storage_options: typing.Dict[str, typing.Any] = None,
81-
**intake_kwargs: typing.Dict[str, typing.Any],
79+
read_csv_kwargs: dict[str, typing.Any] = None,
80+
storage_options: dict[str, typing.Any] = None,
81+
**intake_kwargs: dict[str, typing.Any],
8282
):
8383

8484
"""Intake Catalog representing an ESM Collection."""
@@ -113,7 +113,7 @@ def _validate_derivedcat(self) -> None:
113113
f'Derived variable {key} depends on unknown column {col} in query: {entry.query}. Valid ESM catalog columns: {self.esmcat.df.columns.tolist()}.'
114114
)
115115

116-
def keys(self) -> typing.List[str]:
116+
def keys(self) -> list[str]:
117117
"""
118118
Get keys for the catalog entries
119119
@@ -182,7 +182,7 @@ def df(self) -> pd.DataFrame:
182182
def __len__(self) -> int:
183183
return len(self.keys())
184184

185-
def _get_entries(self) -> typing.Dict[str, ESMDataSource]:
185+
def _get_entries(self) -> dict[str, ESMDataSource]:
186186
# Due to just-in-time entry creation, we may not have all entries loaded
187187
# We need to make sure to create entries missing from self._entries
188188
missing = set(self.keys()) - set(self._entries.keys())
@@ -283,7 +283,7 @@ def _ipython_display_(self):
283283
contents = self._repr_html_()
284284
display(HTML(contents))
285285

286-
def __dir__(self) -> typing.List[str]:
286+
def __dir__(self) -> list[str]:
287287
rv = [
288288
'df',
289289
'to_dataset_dict',
@@ -304,9 +304,7 @@ def _ipython_key_completions_(self):
304304
return self.__dir__()
305305

306306
@pydantic.validate_arguments
307-
def search(
308-
self, require_all_on: typing.Union[str, typing.List[str]] = None, **query: typing.Any
309-
):
307+
def search(self, require_all_on: typing.Union[str, list[str]] = None, **query: typing.Any):
310308
"""Search for entries in the catalog.
311309
312310
Parameters
@@ -419,9 +417,9 @@ def serialize(
419417
name: pydantic.StrictStr,
420418
directory: typing.Union[pydantic.DirectoryPath, pydantic.StrictStr] = None,
421419
catalog_type: str = 'dict',
422-
to_csv_kwargs: typing.Dict[typing.Any, typing.Any] = None,
423-
json_dump_kwargs: typing.Dict[typing.Any, typing.Any] = None,
424-
storage_options: typing.Dict[str, typing.Any] = None,
420+
to_csv_kwargs: dict[typing.Any, typing.Any] = None,
421+
json_dump_kwargs: dict[typing.Any, typing.Any] = None,
422+
storage_options: dict[str, typing.Any] = None,
425423
) -> None:
426424
"""Serialize catalog to corresponding json and csv files.
427425
@@ -508,15 +506,15 @@ def unique(self) -> pd.Series:
508506
@pydantic.validate_arguments
509507
def to_dataset_dict(
510508
self,
511-
xarray_open_kwargs: typing.Dict[str, typing.Any] = None,
512-
xarray_combine_by_coords_kwargs: typing.Dict[str, typing.Any] = None,
509+
xarray_open_kwargs: dict[str, typing.Any] = None,
510+
xarray_combine_by_coords_kwargs: dict[str, typing.Any] = None,
513511
preprocess: typing.Callable = None,
514-
storage_options: typing.Dict[pydantic.StrictStr, typing.Any] = None,
512+
storage_options: dict[pydantic.StrictStr, typing.Any] = None,
515513
progressbar: pydantic.StrictBool = None,
516514
aggregate: pydantic.StrictBool = None,
517515
skip_on_error: pydantic.StrictBool = False,
518516
**kwargs,
519-
) -> typing.Dict[str, xr.Dataset]:
517+
) -> dict[str, xr.Dataset]:
520518
"""
521519
Load catalog entries into a dictionary of xarray datasets.
522520
@@ -654,10 +652,10 @@ def to_dataset_dict(
654652
@pydantic.validate_arguments
655653
def to_datatree(
656654
self,
657-
xarray_open_kwargs: typing.Dict[str, typing.Any] = None,
658-
xarray_combine_by_coords_kwargs: typing.Dict[str, typing.Any] = None,
655+
xarray_open_kwargs: dict[str, typing.Any] = None,
656+
xarray_combine_by_coords_kwargs: dict[str, typing.Any] = None,
659657
preprocess: typing.Callable = None,
660-
storage_options: typing.Dict[pydantic.StrictStr, typing.Any] = None,
658+
storage_options: dict[pydantic.StrictStr, typing.Any] = None,
661659
progressbar: pydantic.StrictBool = None,
662660
aggregate: pydantic.StrictBool = None,
663661
skip_on_error: pydantic.StrictBool = False,

intake_esm/derived.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class DerivedVariableError(Exception):
1414
class DerivedVariable(pydantic.BaseModel):
1515
func: typing.Callable
1616
variable: pydantic.StrictStr
17-
query: typing.Dict[pydantic.StrictStr, typing.Union[typing.Any, typing.List[typing.Any]]]
17+
query: dict[pydantic.StrictStr, typing.Union[typing.Any, list[typing.Any]]]
1818
prefer_derived: bool
1919

2020
@pydantic.validator('query')
@@ -25,7 +25,7 @@ def validate_query(cls, values):
2525
_query[key] = [value]
2626
return _query
2727

28-
def dependent_variables(self, variable_key_name: str) -> typing.List[pydantic.StrictStr]:
28+
def dependent_variables(self, variable_key_name: str) -> list[pydantic.StrictStr]:
2929
"""Return a list of dependent variables for a given variable"""
3030
return self.query[variable_key_name]
3131

@@ -92,7 +92,7 @@ def register(
9292
func: typing.Callable,
9393
*,
9494
variable: str,
95-
query: typing.Dict[pydantic.StrictStr, typing.Union[typing.Any, typing.List[typing.Any]]],
95+
query: dict[pydantic.StrictStr, typing.Union[typing.Any, list[typing.Any]]],
9696
prefer_derived: bool = False,
9797
) -> typing.Callable:
9898
"""Register a derived variable
@@ -134,16 +134,16 @@ def __repr__(self) -> str:
134134
def __len__(self) -> int:
135135
return len(self._registry)
136136

137-
def items(self) -> typing.List[typing.Tuple[str, DerivedVariable]]:
137+
def items(self) -> list[tuple[str, DerivedVariable]]:
138138
return list(self._registry.items())
139139

140-
def keys(self) -> typing.List[str]:
140+
def keys(self) -> list[str]:
141141
return list(self._registry.keys())
142142

143-
def values(self) -> typing.List[DerivedVariable]:
143+
def values(self) -> list[DerivedVariable]:
144144
return list(self._registry.values())
145145

146-
def search(self, variable: typing.Union[str, typing.List[str]]) -> 'DerivedVariableRegistry':
146+
def search(self, variable: typing.Union[str, list[str]]) -> 'DerivedVariableRegistry':
147147
"""Search for a derived variable by name or list of names
148148
149149
Parameters
@@ -166,10 +166,10 @@ def search(self, variable: typing.Union[str, typing.List[str]]) -> 'DerivedVaria
166166
def update_datasets(
167167
self,
168168
*,
169-
datasets: typing.Dict[str, xr.Dataset],
169+
datasets: dict[str, xr.Dataset],
170170
variable_key_name: str,
171171
skip_on_error: bool = False,
172-
) -> typing.Dict[str, xr.Dataset]:
172+
) -> dict[str, xr.Dataset]:
173173
"""Given a dictionary of datasets, return a dictionary of datasets with the derived variables
174174
175175
Parameters

intake_esm/source.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,19 +125,19 @@ class ESMDataSource(DataSource):
125125
def __init__(
126126
self,
127127
key: pydantic.StrictStr,
128-
records: typing.List[typing.Dict[str, typing.Any]],
128+
records: list[dict[str, typing.Any]],
129129
variable_column_name: pydantic.StrictStr,
130130
path_column_name: pydantic.StrictStr,
131131
data_format: typing.Optional[DataFormat],
132132
format_column_name: typing.Optional[pydantic.StrictStr],
133133
*,
134-
aggregations: typing.Optional[typing.List[Aggregation]] = None,
135-
requested_variables: typing.List[str] = None,
134+
aggregations: typing.Optional[list[Aggregation]] = None,
135+
requested_variables: list[str] = None,
136136
preprocess: typing.Callable = None,
137-
storage_options: typing.Dict[str, typing.Any] = None,
138-
xarray_open_kwargs: typing.Dict[str, typing.Any] = None,
139-
xarray_combine_by_coords_kwargs: typing.Dict[str, typing.Any] = None,
140-
intake_kwargs: typing.Dict[str, typing.Any] = None,
137+
storage_options: dict[str, typing.Any] = None,
138+
xarray_open_kwargs: dict[str, typing.Any] = None,
139+
xarray_combine_by_coords_kwargs: dict[str, typing.Any] = None,
140+
intake_kwargs: dict[str, typing.Any] = None,
141141
):
142142
"""An intake compatible Data Source for ESM data.
143143

0 commit comments

Comments
 (0)