Skip to content

Commit dcba561

Browse files
committed
Added a whole bunch of models
1 parent 52d810e commit dcba561

File tree

2 files changed

+422
-0
lines changed

2 files changed

+422
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from typing import Any, Dict, List, Union
2+
3+
from pydantic import BaseModel, Field
4+
5+
from pyiceberg.typedef import IcebergBaseModel
6+
7+
8+
class ExpressionType(BaseModel):
9+
__root__: str = Field(
10+
...,
11+
example=[
12+
"true",
13+
"false",
14+
"eq",
15+
"and",
16+
"or",
17+
"not",
18+
"in",
19+
"not-in",
20+
"lt",
21+
"lt-eq",
22+
"gt",
23+
"gt-eq",
24+
"not-eq",
25+
"starts-with",
26+
"not-starts-with",
27+
"is-null",
28+
"not-null",
29+
"is-nan",
30+
"not-nan",
31+
],
32+
)
33+
34+
35+
class TrueExpression(IcebergBaseModel):
36+
type: ExpressionType = Field(default_factory=lambda: ExpressionType.parse_obj("true"), const=True)
37+
38+
39+
class FalseExpression(IcebergBaseModel):
40+
type: ExpressionType = Field(default_factory=lambda: ExpressionType.parse_obj("false"), const=True)
41+
42+
43+
class Transform(IcebergBaseModel):
44+
__root__: str = Field(
45+
...,
46+
example=[
47+
"identity",
48+
"year",
49+
"month",
50+
"day",
51+
"hour",
52+
"bucket[256]",
53+
"truncate[16]",
54+
],
55+
)
56+
57+
58+
class Reference(IcebergBaseModel):
59+
__root__: str = Field(..., example=["column-name"])
60+
61+
62+
class TransformTerm(IcebergBaseModel):
63+
type: str = Field("transform", const=True)
64+
transform: Transform
65+
term: Reference
66+
67+
68+
class Term(BaseModel):
69+
__root__: Union[Reference, TransformTerm]
70+
71+
72+
class AndOrExpression(IcebergBaseModel):
73+
type: ExpressionType
74+
left: "Expression"
75+
right: "Expression"
76+
77+
78+
class NotExpression(IcebergBaseModel):
79+
type: ExpressionType = Field(default_factory=lambda: ExpressionType.parse_obj("not"), const=True)
80+
child: "Expression"
81+
82+
83+
class SetExpression(IcebergBaseModel):
84+
type: ExpressionType
85+
term: Term
86+
values: List[Dict[str, Any]]
87+
88+
89+
class LiteralExpression(IcebergBaseModel):
90+
type: ExpressionType
91+
term: Term
92+
value: Dict[str, Any]
93+
94+
95+
class UnaryExpression(IcebergBaseModel):
96+
type: ExpressionType
97+
term: Term
98+
value: Dict[str, Any]
99+
100+
101+
class Expression(IcebergBaseModel):
102+
__root__: Union[
103+
TrueExpression,
104+
FalseExpression,
105+
AndOrExpression,
106+
NotExpression,
107+
SetExpression,
108+
LiteralExpression,
109+
UnaryExpression,
110+
]
111+
112+
113+
Expression.model_rebuild()

0 commit comments

Comments
 (0)