Skip to content

Commit e3e0817

Browse files
committed
Review fixes
1 parent 6b745cc commit e3e0817

File tree

5 files changed

+41
-31
lines changed

5 files changed

+41
-31
lines changed

lib/dl_connector_ydb/dl_connector_ydb/core/base/adapter.py

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import datetime
43
import logging
54
from typing import (
65
TYPE_CHECKING,
@@ -13,13 +12,15 @@
1312

1413
import attr
1514
import sqlalchemy as sa
16-
import ydb_sqlalchemy as ydb_sa
15+
import ydb_sqlalchemy.sqlalchemy as ydb_sa
1716

1817
from dl_core import exc
1918
from dl_core.connection_executors.adapters.adapters_base_sa_classic import BaseClassicAdapter
2019
from dl_core.connection_models import TableIdent
2120
import dl_sqlalchemy_ydb.dialect
2221

22+
import dl_connector_ydb.core.base.row_converters
23+
2324

2425
if TYPE_CHECKING:
2526
from dl_core.connection_executors.models.connection_target_dto_base import BaseSQLConnTargetDTO # noqa: F401
@@ -91,34 +92,10 @@ def _cursor_column_to_sa(self, cursor_col: tuple[Any, ...], require: bool = True
9192

9293
_subselect_cursor_info_where_false: ClassVar[bool] = False
9394

94-
@staticmethod
95-
def _convert_bytes(value: bytes) -> str:
96-
return value.decode("utf-8", errors="replace")
97-
98-
@staticmethod
99-
def _convert_interval(value: datetime.timedelta | int) -> int:
100-
if value is None:
101-
return None
102-
if isinstance(value, datetime.timedelta):
103-
return int(value.total_seconds() * 1_000_000)
104-
return value
105-
106-
@staticmethod
107-
def _convert_ts(value: int | datetime.datetime) -> datetime.datetime:
108-
if isinstance(value, datetime.datetime):
109-
return value.replace(tzinfo=datetime.timezone.utc)
110-
return datetime.datetime.utcfromtimestamp(value / 1e6).replace(tzinfo=datetime.timezone.utc)
111-
11295
def _get_row_converters(self, cursor_info: ExecutionStepCursorInfo) -> tuple[Optional[Callable[[Any], Any]], ...]:
113-
type_names_norm = [col[1].lower().strip("?") for col in cursor_info.raw_cursor_description]
96+
type_names_norm = [col[1].lower().replace("?", "") for col in cursor_info.raw_cursor_description]
11497
return tuple(
115-
self._convert_bytes
116-
if type_name_norm == "string"
117-
else self._convert_ts
118-
if type_name_norm == "timestamp"
119-
else self._convert_interval
120-
if type_name_norm == "interval"
121-
else None
98+
dl_connector_ydb.core.base.row_converters.ROW_CONVERTERS.get(type_name_norm, None)
12299
for type_name_norm in type_names_norm
123100
)
124101

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import datetime
2+
from typing import (
3+
Any,
4+
Callable,
5+
)
6+
7+
8+
def convert_list_of_string(value: list[bytes | None]) -> list[str | None]:
9+
return [v.decode("utf-8", errors="replace") if v is not None else None for v in value]
10+
11+
12+
def convert_bytes(value: bytes) -> str:
13+
return value.decode("utf-8", errors="replace")
14+
15+
16+
def convert_interval(value: datetime.timedelta | int) -> int:
17+
if isinstance(value, datetime.timedelta):
18+
return int(value.total_seconds() * 1_000_000)
19+
return value
20+
21+
22+
def convert_timestamp(value: int | datetime.datetime) -> datetime.datetime:
23+
if isinstance(value, datetime.datetime):
24+
return value.replace(tzinfo=datetime.timezone.utc)
25+
return datetime.datetime.utcfromtimestamp(value / 1e6).replace(tzinfo=datetime.timezone.utc)
26+
27+
28+
ROW_CONVERTERS: dict[str, Callable[[Any], Any]] = {
29+
"list<string>": convert_bytes,
30+
"string": convert_bytes,
31+
"timestamp": convert_timestamp,
32+
"interval": convert_interval,
33+
}

lib/dl_connector_ydb/dl_connector_ydb/db_testing/engine_wrapper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import sqlalchemy as sa
1414
from sqlalchemy.types import TypeEngine
1515
import ydb
16-
import ydb_sqlalchemy as ydb_sa
16+
import ydb_sqlalchemy.sqlalchemy as ydb_sa
1717

1818
from dl_db_testing.database.engine_wrapper import EngineWrapperBase
1919
import dl_sqlalchemy_ydb.dialect

lib/dl_connector_ydb/dl_connector_ydb/formula/definitions/functions_datetime.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sqlalchemy as sa
22
from sqlalchemy.sql.elements import ClauseElement
3-
import ydb_sqlalchemy as ydb_sa
3+
import ydb_sqlalchemy.sqlalchemy as ydb_sa
44

55
from dl_formula.connectors.base.literal import Literal
66
from dl_formula.definitions.base import (

lib/dl_connector_ydb/dl_connector_ydb/formula/definitions/operators_binary.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sqlalchemy as sa
2-
import ydb_sqlalchemy as ydb_sa
2+
import ydb_sqlalchemy.sqlalchemy as ydb_sa
33

44
from dl_formula.definitions.base import TranslationVariant
55
from dl_formula.definitions.common_datetime import (

0 commit comments

Comments
 (0)