retail/interactive-tutorials/product/crud_product.py (91 lines of code) (raw):
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Create, update, get and delete product in a catalog using Retail API.
#
import random
import string
import google.auth
from google.cloud.retail import (
CreateProductRequest,
DeleteProductRequest,
GetProductRequest,
PriceInfo,
Product,
ProductServiceClient,
UpdateProductRequest,
)
from google.cloud.retail_v2.types import product
project_id = google.auth.default()[1]
default_branch_name = (
"projects/"
+ project_id
+ "/locations/global/catalogs/default_catalog/branches/default_branch"
)
product_id = "".join(random.sample(string.ascii_lowercase, 8))
product_name = f"{default_branch_name}/products/{product_id}"
# generate product for create
def generate_product() -> Product:
price_info = PriceInfo()
price_info.price = 30.0
price_info.original_price = 35.5
price_info.currency_code = "USD"
return product.Product(
title="Nest Mini",
type_=product.Product.Type.PRIMARY,
categories=["Speakers and displays"],
brands=["Google"],
price_info=price_info,
availability="IN_STOCK",
)
# generate product for update
def generate_product_for_update() -> Product:
price_info = PriceInfo()
price_info.price = 20.0
price_info.original_price = 25.5
price_info.currency_code = "EUR"
return product.Product(
id=product_id,
name=product_name,
title="Updated Nest Mini",
type_=product.Product.Type.PRIMARY,
categories=["Updated Speakers and displays"],
brands=["Updated Google"],
availability="OUT_OF_STOCK",
price_info=price_info,
)
# create product
def create_product() -> object:
create_product_request = CreateProductRequest()
create_product_request.product = generate_product()
create_product_request.product_id = product_id
create_product_request.parent = default_branch_name
print("---create product request---")
print(create_product_request)
product_created = ProductServiceClient().create_product(create_product_request)
print("---created product:---")
print(product_created)
return product_created
# get product
def get_product() -> object:
get_product_request = GetProductRequest()
get_product_request.name = product_name
print("---get product request---")
print(get_product_request)
get_product_response = ProductServiceClient().get_product(get_product_request)
print("---get product response:---")
print(get_product_response)
return get_product_response
# update product
def update_product():
update_product_request = UpdateProductRequest()
update_product_request.product = generate_product_for_update()
update_product_request.allow_missing = True
print("---update product request---")
print(update_product_request)
updated_product = ProductServiceClient().update_product(update_product_request)
print("---updated product---:")
print(updated_product)
return updated_product
# delete product
def delete_product():
delete_product_request = DeleteProductRequest()
delete_product_request.name = product_name
print("---delete product request---")
print(delete_product_request)
ProductServiceClient().delete_product(delete_product_request)
print("deleting product " + product_name)
print("---product was deleted:---")
# call the methods
create_product()
get_product()
update_product()
delete_product()