summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/_py_processors.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine/_py_processors.py')
-rw-r--r--lib/sqlalchemy/engine/_py_processors.py30
1 files changed, 23 insertions, 7 deletions
diff --git a/lib/sqlalchemy/engine/_py_processors.py b/lib/sqlalchemy/engine/_py_processors.py
index e3024471a..27cb9e939 100644
--- a/lib/sqlalchemy/engine/_py_processors.py
+++ b/lib/sqlalchemy/engine/_py_processors.py
@@ -16,16 +16,30 @@ They all share one common characteristic: None is passed through unchanged.
from __future__ import annotations
import datetime
+from decimal import Decimal
import re
+import typing
+from typing import Any
+from typing import Callable
+from typing import Optional
+from typing import Type
+from typing import TypeVar
+from typing import Union
+
+_DT = TypeVar(
+ "_DT", bound=Union[datetime.datetime, datetime.time, datetime.date]
+)
-def str_to_datetime_processor_factory(regexp, type_):
+def str_to_datetime_processor_factory(
+ regexp: typing.Pattern[str], type_: Callable[..., _DT]
+) -> Callable[[Optional[str]], Optional[_DT]]:
rmatch = regexp.match
# Even on python2.6 datetime.strptime is both slower than this code
# and it does not support microseconds.
has_named_groups = bool(regexp.groupindex)
- def process(value):
+ def process(value: Optional[str]) -> Optional[_DT]:
if value is None:
return None
else:
@@ -59,10 +73,12 @@ def str_to_datetime_processor_factory(regexp, type_):
return process
-def to_decimal_processor_factory(target_class, scale):
+def to_decimal_processor_factory(
+ target_class: Type[Decimal], scale: int
+) -> Callable[[Optional[float]], Optional[Decimal]]:
fstring = "%%.%df" % scale
- def process(value):
+ def process(value: Optional[float]) -> Optional[Decimal]:
if value is None:
return None
else:
@@ -71,21 +87,21 @@ def to_decimal_processor_factory(target_class, scale):
return process
-def to_float(value):
+def to_float(value: Optional[Union[int, float]]) -> Optional[float]:
if value is None:
return None
else:
return float(value)
-def to_str(value):
+def to_str(value: Optional[Any]) -> Optional[str]:
if value is None:
return None
else:
return str(value)
-def int_to_boolean(value):
+def int_to_boolean(value: Optional[int]) -> Optional[bool]:
if value is None:
return None
else: