add:SmallInteger()

This commit is contained in:
xiechen
2021-08-05 16:11:10 +08:00
parent ef3edd4594
commit 6ffc318fd0
2 changed files with 49 additions and 0 deletions

View File

@ -614,6 +614,7 @@ Available Model Fields (with required args - optional ones in docs):
* `Time()`
* `DateTime()`
* `JSON()`
* `SmallInteger()`
* `BigInteger()`
* `Decimal(scale, precision)`
* `UUID()`

View File

@ -538,6 +538,54 @@ else:
)
class SmallInteger(Integer, int):
"""
SmallInteger field factory that construct Field classes and populated their values.
"""
_type = int
_sample = 0
def __new__( # type: ignore
cls,
*,
minimum: int = None,
maximum: int = None,
multiple_of: int = None,
**kwargs: Any
) -> BaseField:
autoincrement = kwargs.pop("autoincrement", None)
autoincrement = (
autoincrement
if autoincrement is not None
else kwargs.get("primary_key", False)
)
kwargs = {
**kwargs,
**{
k: v
for k, v in locals().items()
if k not in ["cls", "__class__", "kwargs"]
},
}
kwargs["ge"] = kwargs["minimum"]
kwargs["le"] = kwargs["maximum"]
return super().__new__(cls, **kwargs)
@classmethod
def get_column_type(cls, **kwargs: Any) -> Any:
"""
Return proper type of db column for given field type.
Accepts required and optional parameters that each column type accepts.
:param kwargs: key, value pairs of sqlalchemy options
:type kwargs: Any
:return: initialized column with proper options
:rtype: sqlalchemy Column
"""
return sqlalchemy.SmallInteger()
class BigInteger(Integer, int):
"""
BigInteger field factory that construct Field classes and populated their values.