Skip to content

Commit 27b4d31

Browse files
authored
Merge pull request #422 from mabel-dev/0.6.28-release
support sorting by multiple columns
2 parents 1a3cc36 + 77d49ac commit 27b4d31

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+338
-147
lines changed

Makefile

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,32 @@
1-
lint:
2-
python -m pip install --quiet --upgrade pycln isort black
3-
python -m pycln .
4-
python -m isort .
5-
python -m black .
1+
SRC_DIR := mabel
2+
PYTHON := python
3+
UV := $(PYTHON) -m uv
4+
PIP := $(UV) pip
65

7-
update:
8-
python -m pip install --upgrade pip
9-
python -m pip install --upgrade -r requirements.txt
10-
python -m pip install --upgrade -r tests/requirements.txt
6+
define print_green
7+
@echo "\033[0;32m$(1)\033[0m"
8+
endef
9+
10+
define print_blue
11+
@echo "\033[0;34m$(1)\033[0m"
12+
endef
13+
14+
lint: ## Run all linting tools
15+
$(call print_blue,"Installing linting tools...")
16+
@$(PIP) install --quiet --upgrade pycln isort ruff
17+
$(call print_blue,"Cleaning unused imports...")
18+
@$(PYTHON) -m pycln .
19+
$(call print_blue,"Sorting imports...")
20+
@$(PYTHON) -m isort .
21+
$(call print_blue,"Formatting code...")
22+
@$(PYTHON) -m ruff format $(SRC_DIR)
23+
$(call print_green,"Linting complete!")
24+
25+
update: ## Update all dependencies
26+
$(call print_blue,"Updating dependencies...")
27+
@$(PYTHON) -m pip install --upgrade pip uv
28+
@$(UV) pip install --upgrade -r tests/requirements.txt
29+
@$(UV) pip install --upgrade -r requirements.txt
1130

1231
test:
1332
clear

examples/Reading Data.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
"metadata": {},
108108
"outputs": [],
109109
"source": [
110-
"from mabel.data import Reader, STORAGE_CLASS, DictSet, SqlReader\n",
110+
"from mabel.data import STORAGE_CLASS, DictSet, SqlReader\n",
111111
"from mabel.adapters.disk import DiskReader"
112112
]
113113
},

mabel/adapters/database/null_writer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
class NullWriter(BaseDatabaseWriter):
77
def commit(self, dataframe: DataFrame):
88
# save the data to an interim table
9-
naive_inserter = f"INSERT INTO `{self.dataset}` ( {', '.join(dataframe.column_names)} )"
9+
naive_inserter = (
10+
f"INSERT INTO `{self.dataset}` ( {', '.join(dataframe.column_names)} )"
11+
)
1012
naive_inserter += ",\n".join(f"\t({row})" for row in dataframe) + ";"
1113

1214
# row acts like a tuple when used

mabel/adapters/disk/disk_reader.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from ...data.readers.internals.base_inner_reader import BUFFER_SIZE
21
from ...data.readers.internals.base_inner_reader import BaseInnerReader
32

43

mabel/adapters/google/bigquery_writer.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ def __init__(self, project: str, credentials=None, **kwargs):
4747

4848
super().__init__(**kwargs)
4949

50-
def _get_table(self, dataset, table, schema, partition_expiration: Optional[int] = None):
50+
def _get_table(
51+
self, dataset, table, schema, partition_expiration: Optional[int] = None
52+
):
5153
bigquery_client = bigquery.Client()
5254
dataset = bigquery_client.dataset(dataset)
5355

@@ -62,8 +64,12 @@ def _get_table(self, dataset, table, schema, partition_expiration: Optional[int]
6264
bigquery.SchemaField(
6365
name="_system_date", field_type="TIMESTAMP", mode=FieldMode.REQUIRED
6466
),
65-
bigquery.SchemaField(name="name", field_type="STRING", mode=FieldMode.REQUIRED),
66-
bigquery.SchemaField(name="age", field_type="INTEGER", mode=FieldMode.REQUIRED),
67+
bigquery.SchemaField(
68+
name="name", field_type="STRING", mode=FieldMode.REQUIRED
69+
),
70+
bigquery.SchemaField(
71+
name="age", field_type="INTEGER", mode=FieldMode.REQUIRED
72+
),
6773
]
6874
table = bigquery.Table(table_ref, schema=schema)
6975

mabel/adapters/google/google_cloud_storage_reader.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ def get_blobs_at_path(self, path):
4848
gcs_bucket = client.get_bucket(bucket)
4949
blobs = list(client.list_blobs(bucket_or_name=gcs_bucket, prefix=object_path))
5050

51-
yield from [bucket + "/" + blob.name for blob in blobs if not blob.name.endswith("/")]
51+
yield from [
52+
bucket + "/" + blob.name for blob in blobs if not blob.name.endswith("/")
53+
]
5254

5355

5456
def get_blob(bucket: str = None, blob_name: str = None):

mabel/adapters/google/google_cloud_storage_writer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ def commit(self, byte_data, override_blob_name=None):
5353

5454
try:
5555
blob = self.gcs_bucket.blob(blob_name)
56-
self.retry(blob.upload_from_string)(byte_data, content_type="application/octet-stream")
56+
self.retry(blob.upload_from_string)(
57+
byte_data, content_type="application/octet-stream"
58+
)
5759
return blob_name
5860
except Exception as err: # pragma: no cover
5961
import traceback

mabel/adapters/minio/minio_reader.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ def get_blobs_at_path(self, path):
3737
bucket, object_path, _, _ = paths.get_parts(path)
3838
for cycle_date in dates.date_range(self.start_date, self.end_date):
3939
cycle_path = paths.build_path(path=object_path, date=cycle_date)
40-
blobs = self.minio.list_objects(bucket_name=bucket, prefix=cycle_path, recursive=True)
40+
blobs = self.minio.list_objects(
41+
bucket_name=bucket, prefix=cycle_path, recursive=True
42+
)
4143

4244
yield from [
4345
bucket + "/" + blob.object_name

mabel/adapters/minio/minio_writer.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313

1414
class MinIoWriter(BaseInnerWriter):
1515
def __init__(
16-
self, *, end_point: str, access_key: str, secret_key: str, secure: bool = False, **kwargs
16+
self,
17+
*,
18+
end_point: str,
19+
access_key: str,
20+
secret_key: str,
21+
secure: bool = False,
22+
**kwargs,
1723
):
1824
if not minio_installed: # pragma: no cover
1925
raise MissingDependencyError(
@@ -32,6 +38,8 @@ def commit(self, byte_data, override_blob_name=None):
3238
else:
3339
blob_name = self._build_path()
3440

35-
self.client.put_object(self.bucket, blob_name, io.BytesIO(byte_data), len(byte_data))
41+
self.client.put_object(
42+
self.bucket, blob_name, io.BytesIO(byte_data), len(byte_data)
43+
)
3644

3745
return blob_name

mabel/data/internals/collected_set.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def __init__(self, dictset: DictSet, column: str, dedupe: bool = False):
3333
collections.setdefault(key, []).append(my_item)
3434
if dedupe:
3535
collections = {
36-
k: {frozenset(i.items()): i for i in v}.values() for k, v in collections.items()
36+
k: {frozenset(i.items()): i for i in v}.values()
37+
for k, v in collections.items()
3738
}
3839

3940
self._collections = collections
@@ -52,7 +53,9 @@ def count(self, collection=None):
5253
return {x: len(y) for x, y in self._collections.items()}
5354
else:
5455
try:
55-
return [len(y) for x, y in self._collections.items() if x == collection].pop()
56+
return [
57+
len(y) for x, y in self._collections.items() if x == collection
58+
].pop()
5659
except IndexError:
5760
return 0
5861

@@ -72,7 +75,9 @@ def aggregate(self, column, method):
7275
"""
7376
response = {}
7477
for key, items in self._collections.items():
75-
values = [item.get(column) for item in items if item.get(column) is not None]
78+
values = [
79+
item.get(column) for item in items if item.get(column) is not None
80+
]
7681
response[key] = method(values)
7782
return response
7883

0 commit comments

Comments
 (0)