Skip to content

Commit 3148c6c

Browse files
authored
feat: Scalar things (#5)
1 parent 07a94f1 commit 3148c6c

33 files changed

+812
-131
lines changed

cloudquery/sdk/scalar/__init__.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
from .scalar import Scalar, ScalarInvalidTypeError, NULL_VALUE
22
from .scalar_factory import ScalarFactory
3+
from .vector import Vector
4+
35
from .binary import Binary
46
from .bool import Bool
57
from .date32 import Date32
6-
from .float64 import Float64
7-
from .int64 import Int64
8+
from .date64 import Date64
9+
from .float import Float
10+
from .int import Int
11+
from .list import List
12+
from .string import String
13+
from .timestamp import Timestamp
14+
from .uint import Uint
815
from .uuid import UUID

cloudquery/sdk/scalar/binary.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,33 @@
33

44

55
class Binary(Scalar):
6-
def __init__(self, valid: bool = False, value: bytes = None):
7-
self._valid = valid
8-
self._value = value
9-
106
def __eq__(self, scalar: Scalar) -> bool:
117
if scalar is None:
128
return False
139
if type(scalar) == Binary:
1410
return self._value == scalar._value and self._valid == scalar._valid
1511
return False
1612

17-
def __str__(self) -> str:
18-
return str(self._value) if self._valid else NULL_VALUE
19-
2013
@property
2114
def value(self):
2215
return self._value
2316

24-
def set(self, scalar):
25-
if scalar is None:
17+
def set(self, value: any):
18+
if value is None:
19+
return
20+
21+
if isinstance(value, Binary):
22+
self._valid = value.is_valid
23+
self._value = value.value
2624
return
2725

28-
if type(scalar) == bytes:
26+
if type(value) == bytes:
2927
self._valid = True
30-
self._value = scalar
31-
elif type(scalar) == str:
28+
self._value = value
29+
elif type(value) == str:
3230
self._valid = True
33-
self._value = scalar.encode()
31+
self._value = value.encode()
3432
else:
35-
raise ScalarInvalidTypeError("Invalid type for Binary scalar")
33+
raise ScalarInvalidTypeError(
34+
"Invalid type {} for Binary scalar".format(type(value))
35+
)

cloudquery/sdk/scalar/bool.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,34 @@ def parse_string_to_bool(input_string):
1717

1818

1919
class Bool(Scalar):
20-
def __init__(self, valid: bool = False, value: bool = False) -> None:
21-
self._valid = valid
22-
self._value = value
23-
2420
def __eq__(self, scalar: Scalar) -> bool:
2521
if scalar is None:
2622
return False
2723
if type(scalar) == Bool:
2824
return self._value == scalar._value and self._valid == scalar._valid
2925
return False
3026

31-
def __str__(self) -> str:
32-
return str(self._value) if self._valid else NULL_VALUE
33-
3427
@property
3528
def value(self):
3629
return self._value
3730

3831
def set(self, value: Any):
3932
if value is None:
33+
self._valid = False
34+
return
35+
36+
if isinstance(value, Bool):
37+
self._valid = value.is_valid
38+
self._value = value.value
4039
return
4140

4241
if type(value) == bool:
4342
self._value = value
4443
elif type(value) == str:
4544
self._value = parse_string_to_bool(value)
4645
else:
47-
raise ScalarInvalidTypeError("Invalid type for Bool scalar")
46+
raise ScalarInvalidTypeError(
47+
"Invalid type {} for Bool scalar".format(type(value))
48+
)
4849

4950
self._valid = True

cloudquery/sdk/scalar/date32.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,25 @@
44

55

66
class Date32(Scalar):
7-
def __init__(self, valid: bool = False, value: bool = False) -> None:
8-
self._valid = valid
9-
self._value = value
10-
117
def __eq__(self, scalar: Scalar) -> bool:
128
if scalar is None:
139
return False
1410
if type(scalar) == Date32:
1511
return self._value == scalar._value and self._valid == scalar._valid
1612
return False
1713

18-
def __str__(self) -> str:
19-
return str(self._value) if self._valid else NULL_VALUE
20-
2114
@property
2215
def value(self):
2316
return self._value
2417

2518
def set(self, value: Any):
2619
if value is None:
20+
self._valid = False
21+
return
22+
23+
if isinstance(value, Date32):
24+
self._valid = value.is_valid
25+
self._value = value.value
2726
return
2827

2928
if type(value) == datetime:
@@ -33,6 +32,8 @@ def set(self, value: Any):
3332
elif type(value) == time:
3433
self._value = datetime.combine(datetime.today(), value)
3534
else:
36-
raise ScalarInvalidTypeError("Invalid type for Bool scalar")
35+
raise ScalarInvalidTypeError(
36+
"Invalid type {} for Date32 scalar".format(type(value))
37+
)
3738

3839
self._valid = True

cloudquery/sdk/scalar/date64.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from cloudquery.sdk.scalar import Scalar, ScalarInvalidTypeError, NULL_VALUE
2+
from datetime import datetime, time
3+
from typing import Any
4+
5+
6+
class Date64(Scalar):
7+
def __eq__(self, scalar: Scalar) -> bool:
8+
if scalar is None:
9+
return False
10+
if type(scalar) == Date64:
11+
return self._value == scalar._value and self._valid == scalar._valid
12+
return False
13+
14+
@property
15+
def value(self):
16+
return self._value
17+
18+
def set(self, value: Any):
19+
if value is None:
20+
self._valid = False
21+
return
22+
23+
if isinstance(value, Date64):
24+
self._valid = value.is_valid
25+
self._value = value.value
26+
return
27+
28+
if type(value) == datetime:
29+
self._value = value
30+
elif type(value) == str:
31+
self._value = datetime.strptime(value, "%Y-%m-%d")
32+
elif type(value) == time:
33+
self._value = datetime.combine(datetime.today(), value)
34+
else:
35+
raise ScalarInvalidTypeError(
36+
"Invalid type {} for Date64 scalar".format(type(value))
37+
)
38+
39+
self._valid = True

cloudquery/sdk/scalar/float.py

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from cloudquery.sdk.scalar import Scalar, ScalarInvalidTypeError
2+
3+
4+
class Float(Scalar):
5+
def __init__(self, valid: bool = False, value: any = None, bitwidth: int = 64):
6+
super().__init__(valid, value)
7+
self._bitwidth = bitwidth
8+
9+
def __eq__(self, scalar: Scalar) -> bool:
10+
if scalar is None:
11+
return False
12+
if type(scalar) == Float and self._bitwidth == scalar.bitwidth:
13+
return self._value == scalar._value and self._valid == scalar._valid
14+
return False
15+
16+
@property
17+
def bitwidth(self):
18+
return self._bitwidth
19+
20+
@property
21+
def value(self):
22+
return self._value
23+
24+
def set(self, value: any):
25+
if value is None:
26+
self._valid = False
27+
return
28+
29+
if isinstance(value, Float) and value.bitwidth == self._bitwidth:
30+
self._valid = value.is_valid
31+
self._value = value.value
32+
return
33+
34+
if type(value) == int:
35+
self._value = float(value)
36+
elif type(value) == float:
37+
self._value = value
38+
elif type(value) == str:
39+
try:
40+
self._value = float(value)
41+
except ValueError:
42+
raise ScalarInvalidTypeError(
43+
"Invalid value for Float{} scalar".format(self._bitwidth)
44+
)
45+
else:
46+
raise ScalarInvalidTypeError(
47+
"Invalid type {} for Float{} scalar".format(type(value), self._bitwidth)
48+
)
49+
self._valid = True

cloudquery/sdk/scalar/float64.py

-35
This file was deleted.

cloudquery/sdk/scalar/int.py

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from cloudquery.sdk.scalar import Scalar, ScalarInvalidTypeError
2+
3+
4+
class Int(Scalar):
5+
def __init__(self, valid: bool = False, value: any = None, bitwidth: int = 64):
6+
self._bitwidth = bitwidth
7+
self._min = -(2 ** (bitwidth - 1))
8+
self._max = 2 ** (bitwidth - 1)
9+
super().__init__(valid, value)
10+
11+
def __eq__(self, scalar: Scalar) -> bool:
12+
if scalar is None:
13+
return False
14+
if type(scalar) == Int and self._bitwidth == scalar.bitwidth:
15+
return self._value == scalar._value and self._valid == scalar._valid
16+
return False
17+
18+
@property
19+
def bitwidth(self):
20+
return self._bitwidth
21+
22+
@property
23+
def value(self):
24+
return self._value
25+
26+
def set(self, value: any):
27+
if value is None:
28+
self._valid = False
29+
return
30+
31+
if isinstance(value, Int) and value.bitwidth == self._bitwidth:
32+
self._valid = value.is_valid
33+
self._value = value.value
34+
return
35+
36+
if type(value) == int:
37+
val = value
38+
elif type(value) == float:
39+
val = int(value)
40+
elif type(value) == str:
41+
try:
42+
val = int(value)
43+
except ValueError as e:
44+
raise ScalarInvalidTypeError(
45+
"Invalid type for Int{} scalar".format(self._bitwidth)
46+
) from e
47+
else:
48+
raise ScalarInvalidTypeError(
49+
"Invalid type {} for Int{} scalar".format(type(value), self._bitwidth)
50+
)
51+
if val < self._min or val >= self._max:
52+
raise ScalarInvalidTypeError(
53+
"Invalid Int{} scalar with value {}".format(self._bitwidth, val)
54+
)
55+
self._value = val
56+
self._valid = True

cloudquery/sdk/scalar/int64.py

-37
This file was deleted.

0 commit comments

Comments
 (0)