Skip to content

Commit 26722cf

Browse files
committed
feat: fix or instance creation for _build_balanced_tree
1 parent 25f3fcd commit 26722cf

File tree

2 files changed

+15
-20
lines changed

2 files changed

+15
-20
lines changed

pyiceberg/expressions/__init__.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
from __future__ import annotations
1919

20-
import typing
2120
from abc import ABC, abstractmethod
2221
from functools import cached_property
2322
from typing import (
@@ -34,8 +33,6 @@
3433
)
3534
from typing import Literal as TypingLiteral
3635

37-
from pydantic import Field
38-
3936
from pydantic import ConfigDict, Field, field_serializer
4037

4138
from pyiceberg.expressions.literals import (
@@ -310,12 +307,13 @@ class Or(IcebergBaseModel, BooleanExpression):
310307

311308
model_config = ConfigDict(arbitrary_types_allowed=True)
312309

313-
type: str = Field(default="or", repr=False)
310+
type: TypingLiteral["str"] = Field(default="or", alias="type")
314311
left: BooleanExpression
315312
right: BooleanExpression
316313

317-
def __init__(self, left: typing.Union[BooleanExpression, Or], right: typing.Union[BooleanExpression, Or], *rest: Any):
318-
return super().__init__(left=left, right=right)
314+
def __init__(self, left: BooleanExpression, right: BooleanExpression, *rest: BooleanExpression) -> None:
315+
if isinstance(self, Or) and not hasattr(self, "left") and not hasattr(self, "right"):
316+
super().__init__(left=left, right=right)
319317

320318
def __new__(cls, left: BooleanExpression, right: BooleanExpression, *rest: BooleanExpression) -> BooleanExpression: # type: ignore
321319
if rest:
@@ -328,7 +326,6 @@ def __new__(cls, left: BooleanExpression, right: BooleanExpression, *rest: Boole
328326
return left
329327
else:
330328
obj = super().__new__(cls)
331-
super(Or, obj).__init__(left=left, right=right)
332329
return obj
333330

334331
@field_serializer("left")

tests/expressions/test_visitors.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -417,21 +417,19 @@ def test_and_expression_binding(
417417
),
418418
{literal("bar"), literal("baz")},
419419
),
420-
Or(
421-
BoundIn(
422-
BoundReference(
423-
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
424-
accessor=Accessor(position=0, inner=None),
425-
),
426-
{literal("bar")},
420+
BoundIn(
421+
BoundReference(
422+
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
423+
accessor=Accessor(position=0, inner=None),
427424
),
428-
BoundIn(
429-
BoundReference(
430-
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
431-
accessor=Accessor(position=0, inner=None),
432-
),
433-
{literal("baz")},
425+
{literal("bar")},
426+
),
427+
BoundIn(
428+
BoundReference(
429+
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
430+
accessor=Accessor(position=0, inner=None),
434431
),
432+
{literal("baz")},
435433
),
436434
),
437435
),

0 commit comments

Comments
 (0)