Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9e8ac90

Browse filesBrowse files
authored
Purge products (GoogleCloudPlatform#2349)
* add vision_product_search_purge_products_in_product_set * add vision_product_search_purge_orphan_products * update comment * flake * update print message * update python sample to use operation.result * longer timeout * remove unused variable
1 parent db332fd commit 9e8ac90
Copy full SHA for 9e8ac90

File tree

Expand file treeCollapse file tree

5 files changed

+115
-4
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+115
-4
lines changed

‎vision/cloud-client/product_search/product_in_product_set_management.py

Copy file name to clipboardExpand all lines: vision/cloud-client/product_search/product_in_product_set_management.py
+46Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525

2626
# [START vision_product_search_add_product_to_product_set]
2727
# [START vision_product_search_remove_product_from_product_set]
28+
# [START vision_product_search_purge_products_in_product_set]
2829
from google.cloud import vision
2930

3031
# [END vision_product_search_add_product_to_product_set]
3132
# [END vision_product_search_remove_product_from_product_set]
33+
# [END vision_product_search_purge_products_in_product_set]
3234

3335

3436
# [START vision_product_search_add_product_to_product_set]
@@ -117,6 +119,40 @@ def remove_product_from_product_set(
117119
# [END vision_product_search_remove_product_from_product_set]
118120

119121

122+
# [START vision_product_search_purge_products_in_product_set]
123+
def purge_products_in_product_set(
124+
project_id, location, product_set_id, force):
125+
"""Delete all products in a product set.
126+
Args:
127+
project_id: Id of the project.
128+
location: A compute region name.
129+
product_set_id: Id of the product set.
130+
force: Perform the purge only when force is set to True.
131+
"""
132+
client = vision.ProductSearchClient()
133+
134+
parent = client.location_path(
135+
project=project_id, location=location)
136+
137+
product_set_purge_config = vision.types.ProductSetPurgeConfig(
138+
product_set_id=product_set_id)
139+
140+
# The purge operation is async.
141+
operation = client.purge_products(
142+
parent=parent,
143+
product_set_purge_config=product_set_purge_config,
144+
# The operation is irreversible and removes multiple products.
145+
# The user is required to pass in force=True to actually perform the
146+
# purge.
147+
# If force is not set to True, the service raises an exception.
148+
force=force)
149+
150+
operation.result(timeout=120)
151+
152+
print('Deleted products in product set.')
153+
# [END vision_product_search_purge_products_in_product_set]
154+
155+
120156
if __name__ == '__main__':
121157
parser = argparse.ArgumentParser(
122158
description=__doc__,
@@ -147,6 +183,13 @@ def remove_product_from_product_set(
147183
remove_product_from_product_set_parser.add_argument('product_id')
148184
remove_product_from_product_set_parser.add_argument('product_set_id')
149185

186+
purge_products_in_product_set_parser = subparsers.add_parser(
187+
'purge_products_in_product_set',
188+
help=purge_products_in_product_set.__doc__)
189+
purge_products_in_product_set_parser.add_argument('product_set_id')
190+
purge_products_in_product_set_parser.add_argument(
191+
'--force', action='store_true')
192+
150193
args = parser.parse_args()
151194

152195
if args.command == 'add_product_to_product_set':
@@ -160,3 +203,6 @@ def remove_product_from_product_set(
160203
remove_product_from_product_set(
161204
args.project_id, args.location, args.product_id,
162205
args.product_set_id)
206+
elif args.command == 'purge_products_in_product_set':
207+
purge_products_in_product_set(
208+
args.project_id, args.location, args.product_set_id, args.force)

‎vision/cloud-client/product_search/product_in_product_set_management_test.py

Copy file name to clipboardExpand all lines: vision/cloud-client/product_search/product_in_product_set_management_test.py
+19-2Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
from product_in_product_set_management import (
2020
add_product_to_product_set, list_products_in_product_set,
21-
remove_product_from_product_set)
22-
from product_management import create_product, delete_product
21+
purge_products_in_product_set, remove_product_from_product_set)
22+
from product_management import create_product, delete_product, list_products
2323
from product_set_management import (
2424
create_product_set, delete_product_set)
2525

@@ -75,3 +75,20 @@ def test_remove_product_from_product_set(capsys, product_and_product_set):
7575
list_products_in_product_set(PROJECT_ID, LOCATION, PRODUCT_SET_ID)
7676
out, _ = capsys.readouterr()
7777
assert 'Product id: {}'.format(PRODUCT_ID) not in out
78+
79+
80+
def test_purge_products_in_product_set(capsys, product_and_product_set):
81+
add_product_to_product_set(
82+
PROJECT_ID, LOCATION, PRODUCT_ID, PRODUCT_SET_ID)
83+
list_products(PROJECT_ID, LOCATION)
84+
out, _ = capsys.readouterr()
85+
assert 'Product id: {}'.format(PRODUCT_ID) in out
86+
87+
purge_products_in_product_set(
88+
PROJECT_ID, LOCATION, PRODUCT_SET_ID, force=True)
89+
90+
list_products(PROJECT_ID, LOCATION)
91+
out, _ = capsys.readouterr()
92+
assert 'Product id: {}'.format(PRODUCT_ID) not in out
93+
94+
print(out)

‎vision/cloud-client/product_search/product_management.py

Copy file name to clipboardExpand all lines: vision/cloud-client/product_search/product_management.py
+36Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@
2828
# [START vision_product_search_list_products]
2929
# [START vision_product_search_get_product]
3030
# [START vision_product_search_update_product_labels]
31+
# [START vision_product_search_purge_orphan_products]
3132
from google.cloud import vision
3233

3334
# [END vision_product_search_create_product]
3435
# [END vision_product_search_delete_product]
3536
# [END vision_product_search_list_products]
3637
# [END vision_product_search_get_product]
3738
# [END vision_product_search_update_product_labels]
39+
# [END vision_product_search_purge_orphan_products]
3840

3941

4042
# [START vision_product_search_create_product]
@@ -181,6 +183,34 @@ def delete_product(project_id, location, product_id):
181183
# [END vision_product_search_delete_product]
182184

183185

186+
# [START vision_product_search_purge_orphan_products]
187+
def purge_orphan_products(project_id, location, force):
188+
"""Delete all products not in any product sets.
189+
Args:
190+
project_id: Id of the project.
191+
location: A compute region name.
192+
"""
193+
client = vision.ProductSearchClient()
194+
195+
parent = client.location_path(
196+
project=project_id, location=location)
197+
198+
# The purge operation is async.
199+
operation = client.purge_products(
200+
parent=parent,
201+
delete_orphan_products=True,
202+
# The operation is irreversible and removes multiple products.
203+
# The user is required to pass in force=True to actually perform the
204+
# purge.
205+
# If force is not set to True, the service raises an exception.
206+
force=force)
207+
208+
operation.result(timeout=120)
209+
210+
print('Orphan products deleted.')
211+
# [END vision_product_search_purge_orphan_products]
212+
213+
184214
if __name__ == '__main__':
185215
parser = argparse.ArgumentParser(
186216
description=__doc__,
@@ -219,6 +249,10 @@ def delete_product(project_id, location, product_id):
219249
'delete_product', help=delete_product.__doc__)
220250
delete_product_parser.add_argument('product_id')
221251

252+
purge_orphan_products_parser = subparsers.add_parser(
253+
'purge_orphan_products', help=purge_orphan_products.__doc__)
254+
purge_orphan_products_parser.add_argument('--force', action='store_true')
255+
222256
args = parser.parse_args()
223257

224258
if args.command == 'create_product':
@@ -235,3 +269,5 @@ def delete_product(project_id, location, product_id):
235269
args.key, args.value)
236270
elif args.command == 'delete_product':
237271
delete_product(args.project_id, args.location, args.product_id)
272+
elif args.command == 'purge_orphan_products':
273+
purge_orphan_products(args.project_id, args.location, args.force)

‎vision/cloud-client/product_search/product_management_test.py

Copy file name to clipboardExpand all lines: vision/cloud-client/product_search/product_management_test.py
+13-1Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from product_management import (
2020
create_product, delete_product, get_product, list_products,
21-
update_product_labels)
21+
purge_orphan_products, update_product_labels)
2222

2323

2424
PROJECT_ID = os.getenv('GCLOUD_PROJECT')
@@ -83,3 +83,15 @@ def test_update_product_labels(capsys, product):
8383
assert VALUE in out
8484

8585
delete_product(PROJECT_ID, LOCATION, PRODUCT_ID)
86+
87+
88+
def test_purge_orphan_products(capsys, product):
89+
list_products(PROJECT_ID, LOCATION)
90+
out, _ = capsys.readouterr()
91+
assert PRODUCT_ID in out
92+
93+
purge_orphan_products(PROJECT_ID, LOCATION, force=True)
94+
95+
list_products(PROJECT_ID, LOCATION)
96+
out, _ = capsys.readouterr()
97+
assert PRODUCT_ID not in out
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
google-cloud-vision==0.35.2
1+
google-cloud-vision==0.39.0

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.