From 6ffc318fd0ec755caff7ee84e0205bcf3ca1896a Mon Sep 17 00:00:00 2001 From: xiechen Date: Thu, 5 Aug 2021 16:11:10 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9ASmallInteger()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + ormar/fields/model_fields.py | 48 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/README.md b/README.md index c38c41b..82f42d9 100644 --- a/README.md +++ b/README.md @@ -614,6 +614,7 @@ Available Model Fields (with required args - optional ones in docs): * `Time()` * `DateTime()` * `JSON()` +* `SmallInteger()` * `BigInteger()` * `Decimal(scale, precision)` * `UUID()` diff --git a/ormar/fields/model_fields.py b/ormar/fields/model_fields.py index 07e9ed0..1196048 100644 --- a/ormar/fields/model_fields.py +++ b/ormar/fields/model_fields.py @@ -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.