Skip to content

Commit 29dd126

Browse files
feat: Release of query system (#467)
* feat: Release of query system Committer: lvv@ PiperOrigin-RevId: 466748663 Source-Link: googleapis/googleapis@80d630f Source-Link: googleapis/googleapis-gen@252f5ad Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjUyZjVhZGUxOGEzMWE3MmYxMjgxMGJiZmQxZDgzZDU2YThlNzJlMSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * set coverage level to 99% * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com> Co-authored-by: Anthonios Partheniou <partheniou@google.com>
1 parent 280ada5 commit 29dd126

File tree

18 files changed

+1121
-23
lines changed

18 files changed

+1121
-23
lines changed

packages/google-cloud-asset/.github/workflows/unittest.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,4 @@ jobs:
5454
- name: Report coverage results
5555
run: |
5656
coverage combine .coverage-results/.coverage*
57-
coverage report --show-missing --fail-under=100
57+
coverage report --show-missing --fail-under=99

packages/google-cloud-asset/google/cloud/asset/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,17 @@
6666
from google.cloud.asset_v1.types.asset_service import OutputResult
6767
from google.cloud.asset_v1.types.asset_service import PartitionSpec
6868
from google.cloud.asset_v1.types.asset_service import PubsubDestination
69+
from google.cloud.asset_v1.types.asset_service import QueryAssetsOutputConfig
70+
from google.cloud.asset_v1.types.asset_service import QueryAssetsRequest
71+
from google.cloud.asset_v1.types.asset_service import QueryAssetsResponse
72+
from google.cloud.asset_v1.types.asset_service import QueryResult
6973
from google.cloud.asset_v1.types.asset_service import SavedQuery
7074
from google.cloud.asset_v1.types.asset_service import SearchAllIamPoliciesRequest
7175
from google.cloud.asset_v1.types.asset_service import SearchAllIamPoliciesResponse
7276
from google.cloud.asset_v1.types.asset_service import SearchAllResourcesRequest
7377
from google.cloud.asset_v1.types.asset_service import SearchAllResourcesResponse
78+
from google.cloud.asset_v1.types.asset_service import TableFieldSchema
79+
from google.cloud.asset_v1.types.asset_service import TableSchema
7480
from google.cloud.asset_v1.types.asset_service import UpdateFeedRequest
7581
from google.cloud.asset_v1.types.asset_service import UpdateSavedQueryRequest
7682
from google.cloud.asset_v1.types.asset_service import ContentType
@@ -133,11 +139,17 @@
133139
"OutputResult",
134140
"PartitionSpec",
135141
"PubsubDestination",
142+
"QueryAssetsOutputConfig",
143+
"QueryAssetsRequest",
144+
"QueryAssetsResponse",
145+
"QueryResult",
136146
"SavedQuery",
137147
"SearchAllIamPoliciesRequest",
138148
"SearchAllIamPoliciesResponse",
139149
"SearchAllResourcesRequest",
140150
"SearchAllResourcesResponse",
151+
"TableFieldSchema",
152+
"TableSchema",
141153
"UpdateFeedRequest",
142154
"UpdateSavedQueryRequest",
143155
"ContentType",

packages/google-cloud-asset/google/cloud/asset_v1/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,17 @@
5656
from .types.asset_service import OutputResult
5757
from .types.asset_service import PartitionSpec
5858
from .types.asset_service import PubsubDestination
59+
from .types.asset_service import QueryAssetsOutputConfig
60+
from .types.asset_service import QueryAssetsRequest
61+
from .types.asset_service import QueryAssetsResponse
62+
from .types.asset_service import QueryResult
5963
from .types.asset_service import SavedQuery
6064
from .types.asset_service import SearchAllIamPoliciesRequest
6165
from .types.asset_service import SearchAllIamPoliciesResponse
6266
from .types.asset_service import SearchAllResourcesRequest
6367
from .types.asset_service import SearchAllResourcesResponse
68+
from .types.asset_service import TableFieldSchema
69+
from .types.asset_service import TableSchema
6470
from .types.asset_service import UpdateFeedRequest
6571
from .types.asset_service import UpdateSavedQueryRequest
6672
from .types.asset_service import ContentType
@@ -130,6 +136,10 @@
130136
"OutputResult",
131137
"PartitionSpec",
132138
"PubsubDestination",
139+
"QueryAssetsOutputConfig",
140+
"QueryAssetsRequest",
141+
"QueryAssetsResponse",
142+
"QueryResult",
133143
"RelatedAsset",
134144
"RelatedAssets",
135145
"RelatedResource",
@@ -142,6 +152,8 @@
142152
"SearchAllIamPoliciesResponse",
143153
"SearchAllResourcesRequest",
144154
"SearchAllResourcesResponse",
155+
"TableFieldSchema",
156+
"TableSchema",
145157
"TemporalAsset",
146158
"TimeWindow",
147159
"UpdateFeedRequest",

packages/google-cloud-asset/google/cloud/asset_v1/gapic_metadata.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@
8585
"list_saved_queries"
8686
]
8787
},
88+
"QueryAssets": {
89+
"methods": [
90+
"query_assets"
91+
]
92+
},
8893
"SearchAllIamPolicies": {
8994
"methods": [
9095
"search_all_iam_policies"
@@ -185,6 +190,11 @@
185190
"list_saved_queries"
186191
]
187192
},
193+
"QueryAssets": {
194+
"methods": [
195+
"query_assets"
196+
]
197+
},
188198
"SearchAllIamPolicies": {
189199
"methods": [
190200
"search_all_iam_policies"

packages/google-cloud-asset/google/cloud/asset_v1/services/asset_service/async_client.py

Lines changed: 97 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from google.cloud.asset_v1.types import assets
3939
from google.protobuf import field_mask_pb2 # type: ignore
4040
from google.protobuf import timestamp_pb2 # type: ignore
41+
from google.rpc import status_pb2 # type: ignore
4142
from google.type import expr_pb2 # type: ignore
4243
from .transports.base import AssetServiceTransport, DEFAULT_CLIENT_INFO
4344
from .transports.grpc_asyncio import AssetServiceGrpcAsyncIOTransport
@@ -1748,6 +1749,101 @@ async def sample_analyze_move():
17481749
# Done; return the response.
17491750
return response
17501751

1752+
async def query_assets(
1753+
self,
1754+
request: Union[asset_service.QueryAssetsRequest, dict] = None,
1755+
*,
1756+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
1757+
timeout: float = None,
1758+
metadata: Sequence[Tuple[str, str]] = (),
1759+
) -> asset_service.QueryAssetsResponse:
1760+
r"""Issue a job that queries assets using a SQL statement compatible
1761+
with `BigQuery Standard
1762+
SQL <http://cloud/bigquery/docs/reference/standard-sql/enabling-standard-sql>`__.
1763+
1764+
If the query execution finishes within timeout and there's no
1765+
pagination, the full query results will be returned in the
1766+
``QueryAssetsResponse``.
1767+
1768+
Otherwise, full query results can be obtained by issuing extra
1769+
requests with the ``job_reference`` from the a previous
1770+
``QueryAssets`` call.
1771+
1772+
Note, the query result has approximately 10 GB limitation
1773+
enforced by BigQuery
1774+
https://cloud.google.com/bigquery/docs/best-practices-performance-output,
1775+
queries return larger results will result in errors.
1776+
1777+
.. code-block:: python
1778+
1779+
from google.cloud import asset_v1
1780+
1781+
async def sample_query_assets():
1782+
# Create a client
1783+
client = asset_v1.AssetServiceAsyncClient()
1784+
1785+
# Initialize request argument(s)
1786+
request = asset_v1.QueryAssetsRequest(
1787+
statement="statement_value",
1788+
parent="parent_value",
1789+
)
1790+
1791+
# Make the request
1792+
response = await client.query_assets(request=request)
1793+
1794+
# Handle the response
1795+
print(response)
1796+
1797+
Args:
1798+
request (Union[google.cloud.asset_v1.types.QueryAssetsRequest, dict]):
1799+
The request object. QueryAssets request.
1800+
retry (google.api_core.retry.Retry): Designation of what errors, if any,
1801+
should be retried.
1802+
timeout (float): The timeout for this request.
1803+
metadata (Sequence[Tuple[str, str]]): Strings which should be
1804+
sent along with the request as metadata.
1805+
1806+
Returns:
1807+
google.cloud.asset_v1.types.QueryAssetsResponse:
1808+
QueryAssets response.
1809+
"""
1810+
# Create or coerce a protobuf request object.
1811+
request = asset_service.QueryAssetsRequest(request)
1812+
1813+
# Wrap the RPC method; this adds retry and timeout information,
1814+
# and friendly error handling.
1815+
rpc = gapic_v1.method_async.wrap_method(
1816+
self._client._transport.query_assets,
1817+
default_retry=retries.Retry(
1818+
initial=0.1,
1819+
maximum=60.0,
1820+
multiplier=1.3,
1821+
predicate=retries.if_exception_type(
1822+
core_exceptions.ServiceUnavailable,
1823+
),
1824+
deadline=200.0,
1825+
),
1826+
default_timeout=200.0,
1827+
client_info=DEFAULT_CLIENT_INFO,
1828+
)
1829+
1830+
# Certain fields should be provided within the metadata header;
1831+
# add these here.
1832+
metadata = tuple(metadata) + (
1833+
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
1834+
)
1835+
1836+
# Send the request.
1837+
response = await rpc(
1838+
request,
1839+
retry=retry,
1840+
timeout=timeout,
1841+
metadata=metadata,
1842+
)
1843+
1844+
# Done; return the response.
1845+
return response
1846+
17511847
async def create_saved_query(
17521848
self,
17531849
request: Union[asset_service.CreateSavedQueryRequest, dict] = None,
@@ -2337,16 +2433,7 @@ async def sample_batch_get_effective_iam_policies():
23372433
# and friendly error handling.
23382434
rpc = gapic_v1.method_async.wrap_method(
23392435
self._client._transport.batch_get_effective_iam_policies,
2340-
default_retry=retries.Retry(
2341-
initial=0.1,
2342-
maximum=60.0,
2343-
multiplier=1.3,
2344-
predicate=retries.if_exception_type(
2345-
core_exceptions.ServiceUnavailable,
2346-
),
2347-
deadline=300.0,
2348-
),
2349-
default_timeout=300.0,
2436+
default_timeout=None,
23502437
client_info=DEFAULT_CLIENT_INFO,
23512438
)
23522439

packages/google-cloud-asset/google/cloud/asset_v1/services/asset_service/client.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from google.cloud.asset_v1.types import assets
4242
from google.protobuf import field_mask_pb2 # type: ignore
4343
from google.protobuf import timestamp_pb2 # type: ignore
44+
from google.rpc import status_pb2 # type: ignore
4445
from google.type import expr_pb2 # type: ignore
4546
from .transports.base import AssetServiceTransport, DEFAULT_CLIENT_INFO
4647
from .transports.grpc import AssetServiceGrpcTransport
@@ -1987,6 +1988,93 @@ def sample_analyze_move():
19871988
# Done; return the response.
19881989
return response
19891990

1991+
def query_assets(
1992+
self,
1993+
request: Union[asset_service.QueryAssetsRequest, dict] = None,
1994+
*,
1995+
retry: OptionalRetry = gapic_v1.method.DEFAULT,
1996+
timeout: float = None,
1997+
metadata: Sequence[Tuple[str, str]] = (),
1998+
) -> asset_service.QueryAssetsResponse:
1999+
r"""Issue a job that queries assets using a SQL statement compatible
2000+
with `BigQuery Standard
2001+
SQL <http://cloud/bigquery/docs/reference/standard-sql/enabling-standard-sql>`__.
2002+
2003+
If the query execution finishes within timeout and there's no
2004+
pagination, the full query results will be returned in the
2005+
``QueryAssetsResponse``.
2006+
2007+
Otherwise, full query results can be obtained by issuing extra
2008+
requests with the ``job_reference`` from the a previous
2009+
``QueryAssets`` call.
2010+
2011+
Note, the query result has approximately 10 GB limitation
2012+
enforced by BigQuery
2013+
https://cloud.google.com/bigquery/docs/best-practices-performance-output,
2014+
queries return larger results will result in errors.
2015+
2016+
.. code-block:: python
2017+
2018+
from google.cloud import asset_v1
2019+
2020+
def sample_query_assets():
2021+
# Create a client
2022+
client = asset_v1.AssetServiceClient()
2023+
2024+
# Initialize request argument(s)
2025+
request = asset_v1.QueryAssetsRequest(
2026+
statement="statement_value",
2027+
parent="parent_value",
2028+
)
2029+
2030+
# Make the request
2031+
response = client.query_assets(request=request)
2032+
2033+
# Handle the response
2034+
print(response)
2035+
2036+
Args:
2037+
request (Union[google.cloud.asset_v1.types.QueryAssetsRequest, dict]):
2038+
The request object. QueryAssets request.
2039+
retry (google.api_core.retry.Retry): Designation of what errors, if any,
2040+
should be retried.
2041+
timeout (float): The timeout for this request.
2042+
metadata (Sequence[Tuple[str, str]]): Strings which should be
2043+
sent along with the request as metadata.
2044+
2045+
Returns:
2046+
google.cloud.asset_v1.types.QueryAssetsResponse:
2047+
QueryAssets response.
2048+
"""
2049+
# Create or coerce a protobuf request object.
2050+
# Minor optimization to avoid making a copy if the user passes
2051+
# in a asset_service.QueryAssetsRequest.
2052+
# There's no risk of modifying the input as we've already verified
2053+
# there are no flattened fields.
2054+
if not isinstance(request, asset_service.QueryAssetsRequest):
2055+
request = asset_service.QueryAssetsRequest(request)
2056+
2057+
# Wrap the RPC method; this adds retry and timeout information,
2058+
# and friendly error handling.
2059+
rpc = self._transport._wrapped_methods[self._transport.query_assets]
2060+
2061+
# Certain fields should be provided within the metadata header;
2062+
# add these here.
2063+
metadata = tuple(metadata) + (
2064+
gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)),
2065+
)
2066+
2067+
# Send the request.
2068+
response = rpc(
2069+
request,
2070+
retry=retry,
2071+
timeout=timeout,
2072+
metadata=metadata,
2073+
)
2074+
2075+
# Done; return the response.
2076+
return response
2077+
19902078
def create_saved_query(
19912079
self,
19922080
request: Union[asset_service.CreateSavedQueryRequest, dict] = None,

packages/google-cloud-asset/google/cloud/asset_v1/services/asset_service/transports/base.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,20 @@ def _prep_wrapped_messages(self, client_info):
272272
default_timeout=None,
273273
client_info=client_info,
274274
),
275+
self.query_assets: gapic_v1.method.wrap_method(
276+
self.query_assets,
277+
default_retry=retries.Retry(
278+
initial=0.1,
279+
maximum=60.0,
280+
multiplier=1.3,
281+
predicate=retries.if_exception_type(
282+
core_exceptions.ServiceUnavailable,
283+
),
284+
deadline=200.0,
285+
),
286+
default_timeout=200.0,
287+
client_info=client_info,
288+
),
275289
self.create_saved_query: gapic_v1.method.wrap_method(
276290
self.create_saved_query,
277291
default_timeout=None,
@@ -299,16 +313,7 @@ def _prep_wrapped_messages(self, client_info):
299313
),
300314
self.batch_get_effective_iam_policies: gapic_v1.method.wrap_method(
301315
self.batch_get_effective_iam_policies,
302-
default_retry=retries.Retry(
303-
initial=0.1,
304-
maximum=60.0,
305-
multiplier=1.3,
306-
predicate=retries.if_exception_type(
307-
core_exceptions.ServiceUnavailable,
308-
),
309-
deadline=300.0,
310-
),
311-
default_timeout=300.0,
316+
default_timeout=None,
312317
client_info=client_info,
313318
),
314319
}
@@ -464,6 +469,18 @@ def analyze_move(
464469
]:
465470
raise NotImplementedError()
466471

472+
@property
473+
def query_assets(
474+
self,
475+
) -> Callable[
476+
[asset_service.QueryAssetsRequest],
477+
Union[
478+
asset_service.QueryAssetsResponse,
479+
Awaitable[asset_service.QueryAssetsResponse],
480+
],
481+
]:
482+
raise NotImplementedError()
483+
467484
@property
468485
def create_saved_query(
469486
self,

0 commit comments

Comments
 (0)