From e675efd901d9d88e16268b054aafea0c8ce20c9d Mon Sep 17 00:00:00 2001 From: mox-bot <83104757+mox-bot@users.noreply.github.com> Date: Sat, 28 Aug 2021 20:12:31 -0400 Subject: [PATCH 1/7] python version >=3.7 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 05e639c..e72b210 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ url='https://github.com/google/python-spanner-orm', packages=['spanner_orm', 'spanner_orm.admin'], include_package_data=True, - python_requires='~=3.7', + python_requires='>=3.7', install_requires=[ 'google-cloud-spanner >= 1.6, <2.0.0dev', 'immutabledict', From f8569b389f7c5a432c7f29bff1871f95d7e024e6 Mon Sep 17 00:00:00 2001 From: mox-bot <83104757+mox-bot@users.noreply.github.com> Date: Sat, 28 Aug 2021 20:14:13 -0400 Subject: [PATCH 2/7] 3.8 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e72b210..7ebaa7e 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ url='https://github.com/google/python-spanner-orm', packages=['spanner_orm', 'spanner_orm.admin'], include_package_data=True, - python_requires='>=3.7', + python_requires='~=3.8', install_requires=[ 'google-cloud-spanner >= 1.6, <2.0.0dev', 'immutabledict', From a730706b9e819d5fc277894ed0bdaf5369ef70f4 Mon Sep 17 00:00:00 2001 From: mox-bot <83104757+mox-bot@users.noreply.github.com> Date: Sat, 28 Aug 2021 20:15:20 -0400 Subject: [PATCH 3/7] 3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7ebaa7e..b4b035e 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ url='https://github.com/google/python-spanner-orm', packages=['spanner_orm', 'spanner_orm.admin'], include_package_data=True, - python_requires='~=3.8', + python_requires='3', install_requires=[ 'google-cloud-spanner >= 1.6, <2.0.0dev', 'immutabledict', From 54e178fca4d11a4ce322593e5343c8a90f8afd69 Mon Sep 17 00:00:00 2001 From: mox-bot <83104757+mox-bot@users.noreply.github.com> Date: Sat, 28 Aug 2021 20:16:12 -0400 Subject: [PATCH 4/7] '>=3' --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b4b035e..901a98b 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ url='https://github.com/google/python-spanner-orm', packages=['spanner_orm', 'spanner_orm.admin'], include_package_data=True, - python_requires='3', + python_requires='>=3', install_requires=[ 'google-cloud-spanner >= 1.6, <2.0.0dev', 'immutabledict', From b133e117f62aae5ad133773f4c0f5fd529005693 Mon Sep 17 00:00:00 2001 From: Keith Webber Date: Thu, 30 Sep 2021 21:19:25 -0400 Subject: [PATCH 5/7] version bump --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 171f474..0ff6a07 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ setup( name='spanner-orm', - version='0.1.10', + version='0.1.11', description='Basic ORM for Spanner', maintainer='Python Spanner ORM developers', maintainer_email='python-spanner-orm@google.com', From 0e91fcf9667cc16a068882ce7b94a1eca98f9847 Mon Sep 17 00:00:00 2001 From: Keith Webber Date: Fri, 11 Mar 2022 19:46:05 -0500 Subject: [PATCH 6/7] Add FloatArray and IntegerArray --- spanner_orm/__init__.py | 4 +- spanner_orm/field.py | 39 ++++++++++++++++++- .../create_unittest_model.py | 2 + spanner_orm/tests/models.py | 10 +++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/spanner_orm/__init__.py b/spanner_orm/__init__.py index 193ab45..0a97789 100644 --- a/spanner_orm/__init__.py +++ b/spanner_orm/__init__.py @@ -60,8 +60,10 @@ Boolean = field.Boolean Field = field.Field -Integer = field.Integer Float = field.Float +FloatArray = field.FloatArray +Integer = field.Integer +IntegerArray = field.IntegerArray ForeignKeyRelationship = foreign_key_relationship.ForeignKeyRelationship Index = index.Index Relationship = relationship.Relationship diff --git a/spanner_orm/field.py b/spanner_orm/field.py index d5d864b..d06bfa8 100644 --- a/spanner_orm/field.py +++ b/spanner_orm/field.py @@ -167,6 +167,43 @@ def validate_type(value: Any) -> None: if not isinstance(item, str): raise error.ValidationError('{} is not of type str'.format(item)) +class FloatArray(FieldType): + """Represents an array of strings type.""" + + @staticmethod + def ddl() -> str: + return 'ARRAY' + + @staticmethod + def grpc_type() -> type_pb2.Type: + return type_pb2.Type(code=type_pb2.ARRAY) + + @staticmethod + def validate_type(value: Any) -> None: + if not isinstance(value, list): + raise error.ValidationError('{} is not of type list'.format(value)) + for item in value: + if not isinstance(item, float): + raise error.ValidationError('{} is not of type float'.format(item)) + +class IntegerArray(FieldType): + """Represents an array of strings type.""" + + @staticmethod + def ddl() -> str: + return 'ARRAY' + + @staticmethod + def grpc_type() -> type_pb2.Type: + return type_pb2.Type(code=type_pb2.ARRAY) + + @staticmethod + def validate_type(value: Any) -> None: + if not isinstance(value, list): + raise error.ValidationError('{} is not of type list'.format(value)) + for item in value: + if not isinstance(item, int): + raise error.ValidationError('{} is not of type int'.format(item)) class Timestamp(FieldType): """Represents a timestamp type.""" @@ -209,5 +246,5 @@ def validate_type(value) -> None: ALL_TYPES = [ - Boolean, Integer, Float, String, StringArray, Timestamp, BytesBase64 + Boolean, Integer, IntegerArray, Float, FloatArray, String, StringArray, Timestamp, BytesBase64 ] diff --git a/spanner_orm/tests/migrations_for_emulator_test/create_unittest_model.py b/spanner_orm/tests/migrations_for_emulator_test/create_unittest_model.py index db8387b..cf8fb3b 100644 --- a/spanner_orm/tests/migrations_for_emulator_test/create_unittest_model.py +++ b/spanner_orm/tests/migrations_for_emulator_test/create_unittest_model.py @@ -39,6 +39,8 @@ class OriginalUnittestModelTable(spanner_orm.model.Model): bytes_2 = field.Field(field.BytesBase64, nullable=True) timestamp = field.Field(field.Timestamp) string_array = field.Field(field.StringArray, nullable=True) + int_array = field.Field(field.IntegerArray, nullable=True) + float_array = field.Field(field.FloatArray, nullable=True) def upgrade() -> spanner_orm.CreateTable: diff --git a/spanner_orm/tests/models.py b/spanner_orm/tests/models.py index 697a582..c3a048d 100644 --- a/spanner_orm/tests/models.py +++ b/spanner_orm/tests/models.py @@ -140,3 +140,13 @@ class NullFilteredIndexModel(model.Model): value_1 = field.Field(field.String, nullable=True) value_2 = field.Field(field.Integer) value_index = index.Index(['value_1', 'value_2'], null_filtered=True) + + +class NumericFloatArrayModel(model.Model): + """Model class for testing Integer and Float Arrays.""" + + __table__ = 'NumericFloatArrayModel' + key = field.Field(field.String, primary_key=True) + value_1 = field.Field(field.FloatArray) + value_2 = field.Field(field.IntegerArray) + From 429dce154fbbff47b29054854678dfbf0a544b14 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 11 Aug 2024 02:34:21 -0700 Subject: [PATCH 7/7] wip --- .DS_Store | Bin 0 -> 8196 bytes .python-version | 1 + Dockerfile | 12 ++++++++++++ setup.py | 2 +- 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 .python-version create mode 100644 Dockerfile diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cda05b9505b3e84613d26d815b092999ba11c38f GIT binary patch literal 8196 zcmeHMO=}cE5Ut)1cgZLOKOkPD@fs9@M-j%b9z`KPz;!e0ZeTYvXmSX881yWNo^$gD zcosbg-u(lD5Y0{e1?uamUboBHS)&)ltq$F9=&IU!^?I10CPZY`cat@u6(VY5I$Vyh z%oxt@W@*&?js+UT(`c}^v6+sulBaH{0;+&2pbDr0s=&XZ0N&Ydv@72GY}Hj2Pz4rJ z0rz~cm=0r)Ib-qYz*4jTzy`L9f$L>=0kj@tk2xbO7=}ZE9BO=vVK^N7*89aCb4Cs) zbP=^oZwv`M!yht!wck|wy#@eX;eemx&GndjVyDd(d_Nd7M-dNTh#)FC<7 zjz95w1|A{L_vh|k@jRWL!fVQ{+Dq`Me{p=8)Wf-M(TEbEUoAT$ts#%Ymmi-VW4(fS zai%jpWd7LYZ%~5lI7yM+Tz(bW!rYH&|N5!PeeGkz%(LtwFTZUf)-=eRCtD*zTJ4Y<_7;4jn@*?Gv-#pK=;OICpbJoOo9<95Dxl`U z@5F{Ry?*=P(plE|$hpIF_>*{1H+5azI#hv0R-n$suekpITJ`t;MV3fwR|Woi1x%x} z(OE~CzPBzF?0RjB*~N6j`Q?m72o~q!_KS8L_~RdjxVGLFd(0VO!T38L0=h+RT~vWZ GRp2{azAMfE literal 0 HcmV?d00001 diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..f06fb9e --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.7.10 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ac677ab --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.7.10 + +WORKDIR /app + +COPY ./ ./ +RUN pip install google-cloud-spanner==1.19.1 google_cloud_storage==1.43.0 + +RUN pip install -e . + +RUN pip install pytest absl-py google-api-core portpicker + +ENV GOOGLE_APPLICATION_CREDENTIALS '/app/spanner-key.json' diff --git a/setup.py b/setup.py index be8a9f3..ad9d221 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ setup( name='spanner-orm', - version='0.1.11', + version='0.1.12', description='Basic ORM for Spanner', maintainer='Python Spanner ORM developers', maintainer_email='python-spanner-orm@google.com',