Skip to content

Commit ccbdefe

Browse files
committed
Add ability to order results by metadata created_at or updated_at
1 parent aa0164a commit ccbdefe

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

changelog/+86c0992a.added.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added ability to order nodes by metadata created_at or updated_at fields

infrahub_sdk/enums.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from enum import Enum
2+
3+
4+
class OrderDirection(str, Enum):
5+
ASC = "ASC"
6+
DESC = "DESC"

infrahub_sdk/node/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ def generate_query_data_init(
428428
data["@filters"] = deepcopy(filters) if filters is not None else {}
429429

430430
if order:
431-
data["@filters"]["order"] = order
431+
data["@filters"]["order"] = order.model_dump(exclude_none=True)
432432

433433
if offset is not None:
434434
data["@filters"]["offset"] = offset

infrahub_sdk/types.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
from logging import Logger
55
from typing import TYPE_CHECKING, Any, Protocol, runtime_checkable
66

7-
from pydantic import BaseModel
7+
from pydantic import BaseModel, Field, model_validator
8+
9+
from infrahub_sdk.enums import OrderDirection # noqa: TC001
810

911
if TYPE_CHECKING:
1012
import httpx
@@ -68,5 +70,19 @@ def exception(self, event: str | None = None, *args: Any, **kw: Any) -> Any:
6870
InfrahubLoggers = InfrahubLogger | Logger
6971

7072

73+
class NodeMetaOrder(BaseModel):
74+
created_at: OrderDirection | None = None
75+
updated_at: OrderDirection | None = None
76+
77+
@model_validator(mode="after")
78+
def validate_selection(self) -> NodeMetaOrder:
79+
if self.created_at and self.updated_at:
80+
raise ValueError("'created_at' and 'updated_at' are mutually exclusive")
81+
return self
82+
83+
7184
class Order(BaseModel):
72-
disable: bool | None = None
85+
disable: bool | None = Field(
86+
default=None, description="Disable default ordering, can be used to improve performance"
87+
)
88+
node_meta: NodeMetaOrder | None = Field(default=None, description="Order by node meta fields")

0 commit comments

Comments
 (0)