Skip to content

Commit 8d6a8a9

Browse files
align required python versions and test on python version matrix
1 parent 740cef8 commit 8d6a8a9

23 files changed

+116
-119
lines changed

.github/workflows/ci.yml

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,34 @@ jobs:
1313
runs-on: ubuntu-latest
1414
strategy:
1515
matrix:
16+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
17+
image_tag: ["4.4.1.0-100000032025101610"]
18+
init_sql: ["ALTER SYSTEM ob_vector_memory_limit_percentage = 30; SET GLOBAL ob_query_timeout=100000000;"]
19+
test_filter: ["tests/test_hybrid_search.py::HybridSearchTest"]
1620
include:
17-
- image_tag: "4.3.5.3-103000092025080818"
21+
- python-version: 3.12
22+
image_tag: "4.3.5.3-103000092025080818"
1823
init_sql: "ALTER SYSTEM ob_vector_memory_limit_percentage = 30; CREATE USER 'jtuser'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE ON test.* TO 'jtuser'@'%'; FLUSH PRIVILEGES;"
1924
test_filter: "-k \"not HybridSearchTest\""
20-
- image_tag: "4.4.1.0-100000032025101610"
21-
init_sql: "ALTER SYSTEM ob_vector_memory_limit_percentage = 30; SET GLOBAL ob_query_timeout=100000000;"
22-
test_filter: "tests/test_hybrid_search.py::HybridSearchTest"
2325

2426
steps:
27+
- name: Check out code
28+
uses: actions/checkout@v6
29+
30+
- name: Install uv
31+
uses: astral-sh/setup-uv@v6
32+
with:
33+
python-version: ${{ matrix.python-version }}
34+
35+
- name: Install dependencies
36+
run: uv sync --dev
37+
38+
- name: Lint
39+
run: uv run ruff check
40+
41+
- name: Package build test
42+
run: uv build
43+
2544
- name: Free disk space
2645
uses: kfir4444/free-disk-space@main
2746
with:
@@ -32,21 +51,6 @@ jobs:
3251
large-packages: true
3352
swap-storage: true
3453

35-
- name: Check out code
36-
uses: actions/checkout@v4
37-
38-
- name: Set up Python
39-
uses: actions/setup-python@v3
40-
with:
41-
python-version: '3.x'
42-
43-
- name: Install uv
44-
uses: astral-sh/setup-uv@v6
45-
46-
- name: Install dependencies
47-
run: |
48-
uv sync --dev
49-
5054
- name: Start OceanBase container
5155
uses: oceanbase/setup-oceanbase-ce@v1
5256
with:

.github/workflows/python-publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121
runs-on: ubuntu-latest
2222

2323
steps:
24-
- uses: actions/checkout@v4
24+
- uses: actions/checkout@v6
2525

2626
- name: Set up Python
27-
uses: actions/setup-python@v3
27+
uses: actions/setup-python@v6
2828
with:
2929
python-version: '3.x'
3030

pyobvector/client/collection_schema.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""FieldSchema & CollectionSchema definition module to be compatible with Milvus."""
22
import copy
3-
from typing import Optional, List
3+
from typing import Optional
44
from sqlalchemy import Column
55
from .schema_type import DataType, convert_datatype_to_sqltype
66
from .exceptions import *
@@ -125,7 +125,7 @@ class CollectionSchema:
125125
"""
126126
def __init__(
127127
self,
128-
fields: Optional[List[FieldSchema]] = None,
128+
fields: Optional[list[FieldSchema]] = None,
129129
partitions: Optional[ObPartition] = None,
130130
description: str = "", # ignored in oceanbase
131131
**kwargs,

pyobvector/client/fts_index_param.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""A module to specify fts index parameters"""
22
from enum import Enum
3-
from typing import List, Optional, Union
3+
from typing import Optional, Union
44

55
class FtsParser(Enum):
66
"""Built-in full-text search parser types supported by OceanBase"""
@@ -23,7 +23,7 @@ class FtsIndexParam:
2323
def __init__(
2424
self,
2525
index_name: str,
26-
field_names: List[str],
26+
field_names: list[str],
2727
parser_type: Optional[Union[FtsParser, str]] = None,
2828
):
2929
self.index_name = index_name

pyobvector/client/hybrid_search.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""OceanBase Hybrid Search Client."""
22
import json
33
import logging
4-
from typing import Dict, Any
4+
from typing import Any
55

66
from sqlalchemy import text
77

@@ -41,7 +41,7 @@ def __init__(
4141
def search(
4242
self,
4343
index: str,
44-
body: Dict[str, Any],
44+
body: dict[str, Any],
4545
**kwargs,
4646
):
4747
"""Execute hybrid search with parameter compatible with Elasticsearch.
@@ -66,7 +66,7 @@ def search(
6666
def get_sql(
6767
self,
6868
index: str,
69-
body: Dict[str, Any],
69+
body: dict[str, Any],
7070
) -> str:
7171
"""Get the SQL actually to be executed in hybrid search.
7272

pyobvector/client/milvus_like_client.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Milvus Like Client."""
22
import logging
33
import json
4-
from typing import Optional, Union, Dict, List
4+
from typing import Optional, Union
55

66
from sqlalchemy.exc import NoSuchTableError
77
from sqlalchemy import (
@@ -147,7 +147,7 @@ def create_collection(
147147

148148
def get_collection_stats(
149149
self, collection_name: str, timeout: Optional[float] = None # pylint: disable=unused-argument
150-
) -> Dict:
150+
) -> dict:
151151
"""Get collection row count.
152152
153153
Args:
@@ -354,12 +354,12 @@ def search(
354354
with_dist: bool = False,
355355
flter=None,
356356
limit: int = 10,
357-
output_fields: Optional[List[str]] = None,
357+
output_fields: Optional[list[str]] = None,
358358
search_params: Optional[dict] = None,
359359
timeout: Optional[float] = None, # pylint: disable=unused-argument
360-
partition_names: Optional[List[str]] = None,
360+
partition_names: Optional[list[str]] = None,
361361
**kwargs, # pylint: disable=unused-argument
362-
) -> List[dict]:
362+
) -> list[dict]:
363363
"""Perform ann search.
364364
Note: OceanBase does not support batch search now. `data` & the return value is not a batch.
365365
@@ -467,11 +467,11 @@ def query(
467467
self,
468468
collection_name: str,
469469
flter=None,
470-
output_fields: Optional[List[str]] = None,
470+
output_fields: Optional[list[str]] = None,
471471
timeout: Optional[float] = None, # pylint: disable=unused-argument
472-
partition_names: Optional[List[str]] = None,
472+
partition_names: Optional[list[str]] = None,
473473
**kwargs, # pylint: disable=unused-argument
474-
) -> List[dict]:
474+
) -> list[dict]:
475475
"""Query records.
476476
477477
Args:
@@ -533,11 +533,11 @@ def get(
533533
self,
534534
collection_name: str,
535535
ids: Union[list, str, int] = None,
536-
output_fields: Optional[List[str]] = None,
536+
output_fields: Optional[list[str]] = None,
537537
timeout: Optional[float] = None, # pylint: disable=unused-argument
538-
partition_names: Optional[List[str]] = None,
538+
partition_names: Optional[list[str]] = None,
539539
**kwargs, # pylint: disable=unused-argument
540-
) -> List[dict]:
540+
) -> list[dict]:
541541
"""Get records with specified primary field `ids`.
542542
543543
Args:
@@ -672,7 +672,7 @@ def delete(
672672
def insert(
673673
self,
674674
collection_name: str,
675-
data: Union[Dict, List[Dict]],
675+
data: Union[dict, list[dict]],
676676
timeout: Optional[float] = None,
677677
partition_name: Optional[str] = "",
678678
) -> (
@@ -700,10 +700,10 @@ def insert(
700700
def upsert(
701701
self,
702702
collection_name: str,
703-
data: Union[Dict, List[Dict]],
703+
data: Union[dict, list[dict]],
704704
timeout: Optional[float] = None, # pylint: disable=unused-argument
705705
partition_name: Optional[str] = "",
706-
) -> List[Union[str, int]]:
706+
) -> list[Union[str, int]]:
707707
"""Update data in table. If primary key is duplicated, replace it.
708708
709709
Args:

pyobvector/client/ob_client.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import List, Optional, Dict, Union
2+
from typing import Optional, Union
33
from urllib.parse import quote
44

55
import sqlalchemy.sql.functions as func_mod
@@ -141,8 +141,8 @@ def check_table_exists(self, table_name: str):
141141
def create_table(
142142
self,
143143
table_name: str,
144-
columns: List[Column],
145-
indexes: Optional[List[Index]] = None,
144+
columns: list[Column],
145+
indexes: Optional[list[Index]] = None,
146146
partitions: Optional[ObPartition] = None,
147147
**kwargs,
148148
):
@@ -208,7 +208,7 @@ def drop_index(self, table_name: str, index_name: str):
208208
def insert(
209209
self,
210210
table_name: str,
211-
data: Union[Dict, List[Dict]],
211+
data: Union[dict, list[dict]],
212212
partition_name: Optional[str] = "",
213213
):
214214
"""Insert data into table.
@@ -218,7 +218,7 @@ def insert(
218218
data (Union[Dict, List[Dict]]): data that will be inserted
219219
partition_name (Optional[str]): limit the query to certain partition
220220
"""
221-
if isinstance(data, Dict):
221+
if isinstance(data, dict):
222222
data = [data]
223223

224224
if len(data) == 0:
@@ -240,7 +240,7 @@ def insert(
240240
def upsert(
241241
self,
242242
table_name: str,
243-
data: Union[Dict, List[Dict]],
243+
data: Union[dict, list[dict]],
244244
partition_name: Optional[str] = "",
245245
):
246246
"""Update data in table. If primary key is duplicated, replace it.
@@ -250,7 +250,7 @@ def upsert(
250250
data (Union[Dict, List[Dict]]): data that will be upserted
251251
partition_name (Optional[str]): limit the query to certain partition
252252
"""
253-
if isinstance(data, Dict):
253+
if isinstance(data, dict):
254254
data = [data]
255255

256256
if len(data) == 0:
@@ -365,8 +365,8 @@ def get(
365365
table_name: str,
366366
ids: Optional[Union[list, str, int]] = None,
367367
where_clause=None,
368-
output_column_name: Optional[List[str]] = None,
369-
partition_names: Optional[List[str]] = None,
368+
output_column_name: Optional[list[str]] = None,
369+
partition_names: Optional[list[str]] = None,
370370
n_limits: Optional[int] = None,
371371
):
372372
"""Get records with specified primary field `ids`.

pyobvector/client/ob_vec_client.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""OceanBase Vector Store Client."""
22
import logging
3-
from typing import List, Optional, Union
3+
from typing import Optional, Union
44

55
import numpy as np
66
from sqlalchemy import (
@@ -60,10 +60,10 @@ def _get_sparse_vector_index_params(
6060
def create_table_with_index_params(
6161
self,
6262
table_name: str,
63-
columns: List[Column],
64-
indexes: Optional[List[Index]] = None,
63+
columns: list[Column],
64+
indexes: Optional[list[Index]] = None,
6565
vidxs: Optional[IndexParams] = None,
66-
fts_idxs: Optional[List[FtsIndexParam]] = None,
66+
fts_idxs: Optional[list[FtsIndexParam]] = None,
6767
partitions: Optional[ObPartition] = None,
6868
):
6969
"""Create table with optional index_params.
@@ -140,7 +140,7 @@ def create_index(
140140
table_name: str,
141141
is_vec_index: bool,
142142
index_name: str,
143-
column_names: List[str],
143+
column_names: list[str],
144144
vidx_params: Optional[str] = None,
145145
**kw,
146146
):
@@ -274,12 +274,12 @@ def ann_search(
274274
distance_func,
275275
with_dist: bool = False,
276276
topk: int = 10,
277-
output_column_names: Optional[List[str]] = None,
278-
output_columns: Optional[Union[List, tuple]] = None,
279-
extra_output_cols: Optional[List] = None,
277+
output_column_names: Optional[list[str]] = None,
278+
output_columns: Optional[Union[list, tuple]] = None,
279+
extra_output_cols: Optional[list] = None,
280280
where_clause=None,
281-
partition_names: Optional[List[str]] = None,
282-
idx_name_hint: Optional[List[str]] = None,
281+
partition_names: Optional[list[str]] = None,
282+
idx_name_hint: Optional[list[str]] = None,
283283
distance_threshold: Optional[float] = None,
284284
**kwargs,
285285
): # pylint: disable=unused-argument
@@ -403,11 +403,11 @@ def post_ann_search(
403403
distance_func,
404404
with_dist: bool = False,
405405
topk: int = 10,
406-
output_column_names: Optional[List[str]] = None,
407-
extra_output_cols: Optional[List] = None,
406+
output_column_names: Optional[list[str]] = None,
407+
extra_output_cols: Optional[list] = None,
408408
where_clause=None,
409-
partition_names: Optional[List[str]] = None,
410-
str_list: Optional[List[str]] = None,
409+
partition_names: Optional[list[str]] = None,
410+
str_list: Optional[list[str]] = None,
411411
**kwargs,
412412
): # pylint: disable=unused-argument
413413
"""Perform post ann search.
@@ -483,7 +483,7 @@ def precise_search(
483483
vec_column_name: str,
484484
distance_func,
485485
topk: int = 10,
486-
output_column_names: Optional[List[str]] = None,
486+
output_column_names: Optional[list[str]] = None,
487487
where_clause=None,
488488
**kwargs,
489489
): # pylint: disable=unused-argument

0 commit comments

Comments
 (0)