Skip to content

Commit

Permalink
Exclude node properties from node events
Browse files Browse the repository at this point in the history
  • Loading branch information
ogenstad committed Feb 4, 2025
1 parent e041291 commit 0b69457
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 5 deletions.
5 changes: 4 additions & 1 deletion backend/infrahub/core/attribute.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ async def to_graphql(
related_node_ids: Optional[set] = None,
filter_sensitive: bool = False,
permissions: Optional[dict] = None,
include_properties: bool = True,
) -> dict:
"""Generate GraphQL Payload for this attribute."""
# pylint: disable=too-many-branches
Expand All @@ -480,7 +481,9 @@ async def to_graphql(
field_names = fields.keys()
else:
# REMOVED updated_at for now, need to investigate further how it's being used today
field_names = ["__typename", "value"] + self._node_properties + self._flag_properties
field_names = ["__typename", "value"]
if include_properties:
field_names += self._node_properties + self._flag_properties

for field_name in field_names:
if field_name == "updated_at":
Expand Down
7 changes: 6 additions & 1 deletion backend/infrahub/core/node/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ async def to_graphql(
related_node_ids: set | None = None,
filter_sensitive: bool = False,
permissions: dict | None = None,
include_properties: bool = True,
) -> dict:
"""Generate GraphQL Payload for all attributes
Expand Down Expand Up @@ -686,10 +687,14 @@ async def to_graphql(
related_node_ids=related_node_ids,
filter_sensitive=filter_sensitive,
permissions=permissions,
include_properties=include_properties,
)
else:
response[field_name] = await field.to_graphql(
db=db, filter_sensitive=filter_sensitive, permissions=permissions
db=db,
filter_sensitive=filter_sensitive,
permissions=permissions,
include_properties=include_properties,
)

for relationship_schema in self.get_schema().relationships:
Expand Down
7 changes: 6 additions & 1 deletion backend/infrahub/core/node/ipam.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ async def to_graphql(
related_node_ids: Optional[set] = None,
filter_sensitive: bool = False,
permissions: Optional[dict] = None,
include_properties: bool = True,
) -> dict:
response = await super().to_graphql(
db, fields=fields, related_node_ids=related_node_ids, filter_sensitive=filter_sensitive
db,
fields=fields,
related_node_ids=related_node_ids,
filter_sensitive=filter_sensitive,
include_properties=include_properties,
)

if fields:
Expand Down
4 changes: 4 additions & 0 deletions backend/infrahub/core/node/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ async def to_graphql(
related_node_ids: Optional[set] = None,
filter_sensitive: bool = False,
permissions: Optional[dict] = None,
include_properties: bool = True,
) -> dict:
response = await super().to_graphql(
db,
fields=fields,
related_node_ids=related_node_ids,
filter_sensitive=filter_sensitive,
permissions=permissions,
include_properties=include_properties,
)

if fields:
Expand All @@ -43,13 +45,15 @@ async def to_graphql(
related_node_ids: Optional[set] = None,
filter_sensitive: bool = False,
permissions: Optional[dict] = None,
include_properties: bool = True,
) -> dict:
response = await super().to_graphql(
db,
fields=fields,
related_node_ids=related_node_ids,
filter_sensitive=filter_sensitive,
permissions=permissions,
include_properties=include_properties,
)

if fields:
Expand Down
4 changes: 3 additions & 1 deletion backend/infrahub/graphql/mutations/computed_attribute.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ async def mutate(
log_data = get_log_data()
request_id = log_data.get("request_id", "")

graphql_payload = await target_node.to_graphql(db=context.db, filter_sensitive=True)
graphql_payload = await target_node.to_graphql(
db=context.db, filter_sensitive=True, include_properties=False
)

event = NodeMutatedEvent(
branch=context.branch.name,
Expand Down
2 changes: 1 addition & 1 deletion backend/infrahub/graphql/mutations/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ async def mutate(cls, root: dict, info: GraphQLResolveInfo, data: InputObjectTyp
log_data = get_log_data()
request_id = log_data.get("request_id", "")

graphql_payload = await obj.to_graphql(db=context.db, filter_sensitive=True)
graphql_payload = await obj.to_graphql(db=context.db, filter_sensitive=True, include_properties=False)
event = NodeMutatedEvent(
branch=context.branch.name,
kind=obj._schema.kind,
Expand Down
40 changes: 40 additions & 0 deletions backend/tests/unit/core/test_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,46 @@ async def test_to_graphql_no_fields(db: InfrahubDatabase, default_branch: Branch
assert await c1.to_graphql(db=db) == expected_data


async def test_to_graphql_without_properties(db: InfrahubDatabase, default_branch: Branch, car_person_schema):
car = registry.schema.get(name="TestCar")
person = registry.schema.get(name="TestPerson")

p1 = await Node.init(db=db, schema=person)
await p1.new(db=db, name="John", height=180)
await p1.save(db=db)

c1 = await Node.init(db=db, schema=car)
await c1.new(db=db, name="volt", nbr_seats=4, is_electric=True, owner=p1)
await c1.save(db=db)

graphql_data_properties = await c1.to_graphql(db=db, include_properties=True)
graphql_data_no_properties = await c1.to_graphql(db=db, include_properties=False)
top_level_keys = [
"__kind__",
"__typename",
"color",
"display_label",
"id",
"is_electric",
"name",
"nbr_seats",
"transmission",
]

assert sorted(graphql_data_properties.keys()) == top_level_keys
assert sorted(graphql_data_no_properties.keys()) == top_level_keys
assert sorted(graphql_data_properties["name"].keys()) == [
"__typename",
"id",
"is_protected",
"is_visible",
"owner",
"source",
"value",
]
assert sorted(graphql_data_no_properties["name"].keys()) == ["__typename", "id", "value"]


# --------------------------------------------------------------------------
# Create
# --------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions changelog/5664.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Modified node mutation events to not send metadata properties as part of the mutation payload. The reason is that the property lookup was time consuming. This information will return again in Infrahub 1.2 with a completely updated format.

0 comments on commit 0b69457

Please sign in to comment.