improve date handling
This commit is contained in:
@ -76,7 +76,7 @@ class UndefinedType: # pragma no cover
|
||||
|
||||
Undefined = UndefinedType()
|
||||
|
||||
__version__ = "0.10.13"
|
||||
__version__ = "0.10.14"
|
||||
__all__ = [
|
||||
"Integer",
|
||||
"BigInteger",
|
||||
|
||||
@ -351,6 +351,19 @@ class DateTime(ModelFieldFactory, datetime.datetime):
|
||||
_type = datetime.datetime
|
||||
_sample = "datetime"
|
||||
|
||||
def __new__( # type: ignore # noqa CFQ002
|
||||
cls, *, timezone: bool = False, **kwargs: Any
|
||||
) -> BaseField: # type: ignore
|
||||
kwargs = {
|
||||
**kwargs,
|
||||
**{
|
||||
k: v
|
||||
for k, v in locals().items()
|
||||
if k not in ["cls", "__class__", "kwargs"]
|
||||
},
|
||||
}
|
||||
return super().__new__(cls, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def get_column_type(cls, **kwargs: Any) -> Any:
|
||||
"""
|
||||
@ -362,7 +375,7 @@ class DateTime(ModelFieldFactory, datetime.datetime):
|
||||
:return: initialized column with proper options
|
||||
:rtype: sqlalchemy Column
|
||||
"""
|
||||
return sqlalchemy.DateTime()
|
||||
return sqlalchemy.DateTime(timezone=kwargs.get("timezone", False))
|
||||
|
||||
|
||||
class Date(ModelFieldFactory, datetime.date):
|
||||
@ -395,6 +408,19 @@ class Time(ModelFieldFactory, datetime.time):
|
||||
_type = datetime.time
|
||||
_sample = "time"
|
||||
|
||||
def __new__( # type: ignore # noqa CFQ002
|
||||
cls, *, timezone: bool = False, **kwargs: Any
|
||||
) -> BaseField: # type: ignore
|
||||
kwargs = {
|
||||
**kwargs,
|
||||
**{
|
||||
k: v
|
||||
for k, v in locals().items()
|
||||
if k not in ["cls", "__class__", "kwargs"]
|
||||
},
|
||||
}
|
||||
return super().__new__(cls, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def get_column_type(cls, **kwargs: Any) -> Any:
|
||||
"""
|
||||
@ -406,7 +432,7 @@ class Time(ModelFieldFactory, datetime.time):
|
||||
:return: initialized column with proper options
|
||||
:rtype: sqlalchemy Column
|
||||
"""
|
||||
return sqlalchemy.Time()
|
||||
return sqlalchemy.Time(timezone=kwargs.get("timezone", False))
|
||||
|
||||
|
||||
class JSON(ModelFieldFactory, pydantic.Json):
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import datetime
|
||||
from typing import Any, Dict, TYPE_CHECKING, Type
|
||||
|
||||
import sqlalchemy
|
||||
@ -138,6 +139,19 @@ class FilterAction(QueryAction):
|
||||
if isinstance(self.filter_value, ormar.Model):
|
||||
self.filter_value = self.filter_value.pk
|
||||
|
||||
if isinstance(
|
||||
self.filter_value, (datetime.date, datetime.time, datetime.datetime)
|
||||
):
|
||||
self.filter_value = self.filter_value.isoformat()
|
||||
|
||||
if isinstance(self.filter_value, (list, tuple, set)):
|
||||
self.filter_value = [
|
||||
x.isoformat()
|
||||
if isinstance(x, (datetime.date, datetime.time, datetime.datetime))
|
||||
else x
|
||||
for x in self.filter_value
|
||||
]
|
||||
|
||||
op_attr = FILTER_OPERATORS[self.operator]
|
||||
if self.operator == "isnull":
|
||||
op_attr = "is_" if self.filter_value else "isnot"
|
||||
|
||||
Reference in New Issue
Block a user