|
28 | 28 | QueryMetricsError, |
29 | 29 | QueryMetricsResult, |
30 | 30 | QueryMetricsSuccess, |
| 31 | + SavedQueryToolResponse, |
31 | 32 | ) |
32 | 33 |
|
33 | 34 |
|
@@ -103,6 +104,39 @@ async def list_metrics(self, search: str | None = None) -> list[MetricToolRespon |
103 | 104 | for m in metrics_result["data"]["metricsPaginated"]["items"] |
104 | 105 | ] |
105 | 106 |
|
| 107 | + async def list_saved_queries( |
| 108 | + self, search: str | None = None |
| 109 | + ) -> list[SavedQueryToolResponse]: |
| 110 | + """Fetch all saved queries from the Semantic Layer API.""" |
| 111 | + saved_queries_result = submit_request( |
| 112 | + await self.config_provider.get_config(), |
| 113 | + { |
| 114 | + "query": GRAPHQL_QUERIES["saved_queries"], |
| 115 | + "variables": {"search": search}, |
| 116 | + }, |
| 117 | + ) |
| 118 | + return [ |
| 119 | + SavedQueryToolResponse( |
| 120 | + name=sq.get("name"), |
| 121 | + label=sq.get("label"), |
| 122 | + description=sq.get("description"), |
| 123 | + metrics=[ |
| 124 | + m.get("name") for m in sq.get("queryParams", {}).get("metrics", []) |
| 125 | + ] |
| 126 | + if sq.get("queryParams", {}).get("metrics") |
| 127 | + else None, |
| 128 | + group_by=[ |
| 129 | + g.get("name") for g in sq.get("queryParams", {}).get("groupBy", []) |
| 130 | + ] |
| 131 | + if sq.get("queryParams", {}).get("groupBy") |
| 132 | + else None, |
| 133 | + where=sq.get("queryParams", {}).get("where", {}).get("whereSqlTemplate") |
| 134 | + if sq.get("queryParams", {}).get("where") |
| 135 | + else None, |
| 136 | + ) |
| 137 | + for sq in saved_queries_result["data"]["savedQueriesPaginated"]["items"] |
| 138 | + ] |
| 139 | + |
106 | 140 | async def get_dimensions( |
107 | 141 | self, metrics: list[str], search: str | None = None |
108 | 142 | ) -> list[DimensionToolResponse]: |
|
0 commit comments