diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 163d0884ac..c59b18ee26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -138,6 +138,7 @@ jobs: globs: | **/*.{md,mdx} !changelog/*.md + !python_sdk/changelog/*.md action-lint: if: needs.files-changed.outputs.github_workflows == 'true' diff --git a/backend/tests/unit/git/conftest.py b/backend/tests/unit/git/conftest.py index a833b56366..df2cf34dd7 100644 --- a/backend/tests/unit/git/conftest.py +++ b/backend/tests/unit/git/conftest.py @@ -639,7 +639,9 @@ async def mock_schema_query_01(helper, httpx_mock: HTTPXMock) -> HTTPXMock: encoding="UTF-8" ) - httpx_mock.add_response(method="GET", url="http://mock/api/schema/?branch=main", json=ujson.loads(response_text)) + httpx_mock.add_response( + method="GET", url=re.compile(r"^http://mock/api/schema/\?branch=(main|cr1234)"), json=ujson.loads(response_text) + ) return httpx_mock diff --git a/python_sdk/changelog/4056.fixed.md b/python_sdk/changelog/4056.fixed.md new file mode 100644 index 0000000000..694af5b16d --- /dev/null +++ b/python_sdk/changelog/4056.fixed.md @@ -0,0 +1 @@ +Fix the retrieving on schema and nodes on the right branch diff --git a/python_sdk/infrahub_sdk/checks.py b/python_sdk/infrahub_sdk/checks.py index 131b1b2775..4d869c1c95 100644 --- a/python_sdk/infrahub_sdk/checks.py +++ b/python_sdk/infrahub_sdk/checks.py @@ -36,7 +36,7 @@ class InfrahubCheck: def __init__( self, - branch: str = "", + branch: Optional[str] = None, root_directory: str = "", output: Optional[str] = None, initializer: Optional[InfrahubCheckInitializer] = None, diff --git a/python_sdk/infrahub_sdk/client.py b/python_sdk/infrahub_sdk/client.py index ac7755c95d..c70b003790 100644 --- a/python_sdk/infrahub_sdk/client.py +++ b/python_sdk/infrahub_sdk/client.py @@ -476,7 +476,7 @@ async def filters( Returns: list[InfrahubNodeSync]: List of Nodes that match the given filters. """ - schema = await self.schema.get(kind=kind) + schema = await self.schema.get(kind=kind, branch=branch) branch = branch or self.default_branch if at: @@ -1262,7 +1262,7 @@ def filters( Returns: list[InfrahubNodeSync]: List of Nodes that match the given filters. """ - schema = self.schema.get(kind=kind) + schema = self.schema.get(kind=kind, branch=branch) branch = branch or self.default_branch if at: diff --git a/python_sdk/infrahub_sdk/generator.py b/python_sdk/infrahub_sdk/generator.py index 449f713f59..8e502a74f7 100644 --- a/python_sdk/infrahub_sdk/generator.py +++ b/python_sdk/infrahub_sdk/generator.py @@ -122,10 +122,12 @@ async def process_nodes(self, data: dict) -> None: for kind in data: if kind in self._init_client.schema.cache[self.branch_name]: for result in data[kind].get("edges", []): - node = await self.infrahub_node.from_graphql(client=self._init_client, branch="main", data=result) + node = await self.infrahub_node.from_graphql( + client=self._init_client, branch=self.branch_name, data=result + ) self._nodes.append(node) await node._process_relationships( - node_data=result, branch="main", related_nodes=self._related_nodes + node_data=result, branch=self.branch_name, related_nodes=self._related_nodes ) for node in self._nodes + self._related_nodes: diff --git a/python_sdk/infrahub_sdk/node.py b/python_sdk/infrahub_sdk/node.py index b387c83444..79b27eb70e 100644 --- a/python_sdk/infrahub_sdk/node.py +++ b/python_sdk/infrahub_sdk/node.py @@ -1064,7 +1064,7 @@ async def from_graphql( node_kind = data.get("__typename", None) or data.get("node", {}).get("__typename", None) if not node_kind: raise ValueError("Unable to determine the type of the node, __typename not present in data") - schema = await client.schema.get(kind=node_kind) + schema = await client.schema.get(kind=node_kind, branch=branch) return cls(client=client, schema=schema, branch=branch, data=cls._strip_alias(data)) @@ -1264,7 +1264,7 @@ async def generate_query_data_node( peer_data: dict[str, Any] = {} if rel_schema and prefetch_relationships: - peer_schema = await self._client.schema.get(kind=rel_schema.peer) + peer_schema = await self._client.schema.get(kind=rel_schema.peer, branch=self._branch) peer_node = InfrahubNode(client=self._client, schema=peer_schema, branch=self._branch) peer_data = await peer_node.generate_query_data_node(include=include, exclude=exclude, inherited=False) @@ -1528,7 +1528,7 @@ def from_graphql( node_kind = data.get("__typename", None) or data.get("node", {}).get("__typename", None) if not node_kind: raise ValueError("Unable to determine the type of the node, __typename not present in data") - schema = client.schema.get(kind=node_kind) + schema = client.schema.get(kind=node_kind, branch=branch) return cls(client=client, schema=schema, branch=branch, data=cls._strip_alias(data)) @@ -1720,7 +1720,7 @@ def generate_query_data_node( peer_data: dict[str, Any] = {} if rel_schema and prefetch_relationships: - peer_schema = self._client.schema.get(kind=rel_schema.peer) + peer_schema = self._client.schema.get(kind=rel_schema.peer, branch=self._branch) peer_node = InfrahubNodeSync(client=self._client, schema=peer_schema, branch=self._branch) peer_data = peer_node.generate_query_data_node(include=include, exclude=exclude, inherited=False) diff --git a/python_sdk/tests/unit/sdk/conftest.py b/python_sdk/tests/unit/sdk/conftest.py index 88466e91ba..515bb22e01 100644 --- a/python_sdk/tests/unit/sdk/conftest.py +++ b/python_sdk/tests/unit/sdk/conftest.py @@ -1661,9 +1661,7 @@ async def mock_schema_query_02(httpx_mock: HTTPXMock) -> HTTPXMock: response_text = (get_fixtures_dir() / "schema_02.json").read_text(encoding="UTF-8") httpx_mock.add_response( - method="GET", - url="http://mock/api/schema/?branch=main", - json=ujson.loads(response_text), + method="GET", url=re.compile(r"^http://mock/api/schema/\?branch=(main|cr1234)"), json=ujson.loads(response_text) ) return httpx_mock