mirror of
https://github.com/google-wallet/rest-samples.git
synced 2026-01-09 13:38:01 -05:00
Use installable Google APIs lib for Python
This commit is contained in:
@@ -4,6 +4,7 @@ verify_ssl = true
|
||||
name = "pypi"
|
||||
|
||||
[packages]
|
||||
googleapiclient = "*"
|
||||
google-auth = "*"
|
||||
requests = "*"
|
||||
|
||||
|
||||
62
python/demo.py
Normal file
62
python/demo.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import os
|
||||
|
||||
from demo_eventticket import DemoEventTicket
|
||||
from demo_flight import DemoFlight
|
||||
from demo_generic import DemoGeneric
|
||||
from demo_giftcard import DemoGiftCard
|
||||
from demo_loyalty import DemoLoyalty
|
||||
from demo_offer import DemoOffer
|
||||
from demo_transit import DemoTransit
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Create a demo class instance
|
||||
# Creates the authenticated HTTP client
|
||||
demo = DemoTransit() # change to demo a different pass type
|
||||
|
||||
issuer_id = os.environ.get("WALLET_ISSUER_ID", "your-issuer-id")
|
||||
class_suffix = os.environ.get("WALLET_CLASS_SUFFIX", "your-class-suffix") + demo.__class__.__name__
|
||||
object_suffix = os.environ.get("WALLET_OBJECT_SUFFIX", "your-object-suffix") + demo.__class__.__name__
|
||||
|
||||
# Create a pass class
|
||||
demo.create_class(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix)
|
||||
|
||||
# Update a pass class
|
||||
demo.update_class(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix)
|
||||
|
||||
# Patch a pass class
|
||||
demo.patch_class(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix)
|
||||
|
||||
# Create a pass object
|
||||
demo.create_object(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix,
|
||||
object_suffix=object_suffix)
|
||||
|
||||
# Update a pass object
|
||||
demo.update_object(issuer_id=issuer_id,
|
||||
object_suffix=object_suffix)
|
||||
|
||||
# Patch a pass object
|
||||
demo.patch_object(issuer_id=issuer_id,
|
||||
object_suffix=object_suffix)
|
||||
|
||||
# Expire a pass object
|
||||
demo.expire_object(issuer_id=issuer_id,
|
||||
object_suffix=object_suffix)
|
||||
|
||||
# Create an "Add to Google Wallet" link
|
||||
# that generates a new pass class and object
|
||||
demo.create_jwt_new_objects(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix,
|
||||
object_suffix=object_suffix)
|
||||
|
||||
# Create an "Add to Google Wallet" link
|
||||
# that references existing pass classes and objects
|
||||
demo.create_jwt_existing_objects(issuer_id=issuer_id)
|
||||
|
||||
# Create pass objects in batch
|
||||
demo.batch_create_objects(issuer_id=issuer_id,
|
||||
class_suffix=class_suffix)
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoEventTicket:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/eventTicketClass'
|
||||
self.object_url = f'{self.base_url}/eventTicketObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoEventTicket:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +69,16 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.eventticketclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/tickets/events/rest/v1/eventticketclass
|
||||
@@ -99,12 +95,12 @@ class DemoEventTicket:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.eventticketclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -123,19 +119,19 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.eventticketclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -146,14 +142,14 @@ class DemoEventTicket:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.eventticketclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -172,16 +168,16 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.eventticketclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -194,13 +190,14 @@ class DemoEventTicket:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.eventticketclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -220,28 +217,28 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.eventticketclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.eventticketclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -260,16 +257,15 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -360,12 +356,12 @@ class DemoEventTicket:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.eventticketobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -384,19 +380,19 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -407,14 +403,14 @@ class DemoEventTicket:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.eventticketobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -431,19 +427,19 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -458,14 +454,14 @@ class DemoEventTicket:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.eventticketobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -485,28 +481,28 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.eventticketobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -526,28 +522,28 @@ class DemoEventTicket:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.eventticketobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -797,7 +793,7 @@ class DemoEventTicket:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -891,25 +887,11 @@ class DemoEventTicket:
|
||||
'ticketNumber': 'Ticket number'
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/eventTicketObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.eventticketobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoFlight:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/flightClass'
|
||||
self.object_url = f'{self.base_url}/flightObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoFlight:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +69,16 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.flightclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/tickets/events/rest/v1/eventticketclass
|
||||
@@ -109,12 +105,12 @@ class DemoFlight:
|
||||
}
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.flightclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -133,19 +129,19 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.flightclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -156,14 +152,14 @@ class DemoFlight:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.flightclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -182,16 +178,16 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.flightclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -204,13 +200,14 @@ class DemoFlight:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.flightclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -230,28 +227,28 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.flightclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.flightclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -270,16 +267,15 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.flightobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -350,12 +346,12 @@ class DemoFlight:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.flightobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -374,19 +370,19 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.flightobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -397,14 +393,14 @@ class DemoFlight:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.flightobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -421,19 +417,19 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.flightobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -448,14 +444,14 @@ class DemoFlight:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.flightobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -475,28 +471,28 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.flightobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.flightobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -516,28 +512,28 @@ class DemoFlight:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.flightobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.flightobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -778,7 +774,7 @@ class DemoFlight:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -852,25 +848,11 @@ class DemoFlight:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/flightObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.flightobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoGeneric:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/genericClass'
|
||||
self.object_url = f'{self.base_url}/genericObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoGeneric:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,27 +69,27 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.genericclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/generic/rest/v1/genericclass
|
||||
new_class = {'id': f'{issuer_id}.{class_suffix}'}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.genericclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -112,19 +108,19 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.genericclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a link
|
||||
new_link = {
|
||||
@@ -138,14 +134,14 @@ class DemoGeneric:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.genericclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -164,19 +160,19 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.genericclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
existing_class = response.json()
|
||||
existing_class = response
|
||||
|
||||
# Patch the class by adding a link
|
||||
patch_body = {}
|
||||
@@ -195,57 +191,17 @@ class DemoGeneric:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for patches
|
||||
patch_body['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.genericclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
# [START addMessageClass]
|
||||
def add_class_message(self, issuer_id: str, class_suffix: str, header: str,
|
||||
body: str) -> str:
|
||||
"""Add a message to a pass class.
|
||||
|
||||
Args:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
header (str): The message header.
|
||||
body (str): The message body.
|
||||
|
||||
Returns:
|
||||
The pass class ID: f"{issuer_id}.{class_suffix}"
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
|
||||
return response.json().get('id')
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
# [START createObject]
|
||||
def create_object(self, issuer_id: str, class_suffix: str,
|
||||
object_suffix: str) -> str:
|
||||
@@ -261,16 +217,15 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.genericobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -354,12 +309,12 @@ class DemoGeneric:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.genericobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -378,19 +333,19 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.genericobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -401,14 +356,14 @@ class DemoGeneric:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.genericobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -425,19 +380,19 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.genericobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -452,14 +407,14 @@ class DemoGeneric:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.genericobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -479,72 +434,31 @@ class DemoGeneric:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.genericobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.genericobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
# [START addMessageObject]
|
||||
def add_object_message(self, issuer_id: str, object_suffix: str,
|
||||
header: str, body: str) -> str:
|
||||
"""Add a message to a pass object.
|
||||
|
||||
Args:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
object_suffix (str): Developer-defined unique ID for this pass object.
|
||||
header (str): The message header.
|
||||
body (str): The message body.
|
||||
|
||||
Returns:
|
||||
The pass class ID: f"{issuer_id}.{class_suffix}"
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
|
||||
return response.json().get('id')
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
# [START jwtNew]
|
||||
def create_jwt_new_objects(self, issuer_id: str, class_suffix: str,
|
||||
object_suffix: str) -> str:
|
||||
@@ -774,7 +688,7 @@ class DemoGeneric:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -861,25 +775,11 @@ class DemoGeneric:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/genericObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.genericobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoGiftCard:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/giftCardClass'
|
||||
self.object_url = f'{self.base_url}/giftCardObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoGiftCard:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +69,16 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.giftcardclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/retail/gift-cards/rest/v1/giftcardclass
|
||||
@@ -92,12 +88,12 @@ class DemoGiftCard:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.giftcardclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -116,19 +112,19 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.giftcardclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -139,14 +135,14 @@ class DemoGiftCard:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.giftcardclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -165,16 +161,16 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.giftcardclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -187,13 +183,14 @@ class DemoGiftCard:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.giftcardclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -213,28 +210,28 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.giftcardclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.giftcardclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -253,16 +250,15 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.giftcardobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -334,12 +330,12 @@ class DemoGiftCard:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.giftcardobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -358,19 +354,19 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.giftcardobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -381,14 +377,14 @@ class DemoGiftCard:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.giftcardobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -405,19 +401,19 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.giftcardobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -432,14 +428,14 @@ class DemoGiftCard:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.giftcardobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -459,28 +455,28 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.giftcardobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.giftcardobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -500,28 +496,28 @@ class DemoGiftCard:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.giftcardobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.giftcardobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -746,7 +742,7 @@ class DemoGiftCard:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -821,25 +817,11 @@ class DemoGiftCard:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/giftCardObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.giftcardobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoLoyalty:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/loyaltyClass'
|
||||
self.object_url = f'{self.base_url}/loyaltyObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoLoyalty:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +69,16 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.loyaltyclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/retail/loyalty-cards/rest/v1/loyaltyclass
|
||||
@@ -105,12 +101,12 @@ class DemoLoyalty:
|
||||
}
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.loyaltyclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -129,19 +125,19 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.loyaltyclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -152,14 +148,14 @@ class DemoLoyalty:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.loyaltyclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -178,16 +174,16 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.loyaltyclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -200,13 +196,14 @@ class DemoLoyalty:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.loyaltyclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -226,28 +223,28 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.loyaltyclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.loyaltyclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -266,16 +263,15 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.loyaltyobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -346,12 +342,12 @@ class DemoLoyalty:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.loyaltyobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -370,19 +366,19 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.loyaltyobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -393,14 +389,14 @@ class DemoLoyalty:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.loyaltyobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -417,19 +413,19 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.loyaltyobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -444,14 +440,14 @@ class DemoLoyalty:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.loyaltyobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -471,28 +467,28 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.loyaltyobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.loyaltyobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -512,28 +508,28 @@ class DemoLoyalty:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.loyaltyobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.loyaltyobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -770,7 +766,7 @@ class DemoLoyalty:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -844,25 +840,11 @@ class DemoLoyalty:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/loyaltyObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.loyaltyobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,8 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +40,6 @@ class DemoOffer:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/offerClass'
|
||||
self.object_url = f'{self.base_url}/offerObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +52,7 @@ class DemoOffer:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +69,16 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.offerclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/retail/offers/rest/v1/offerclass
|
||||
@@ -95,12 +91,12 @@ class DemoOffer:
|
||||
'redemptionChannel': 'ONLINE'
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.offerclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -119,19 +115,19 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.offerclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -142,14 +138,14 @@ class DemoOffer:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.offerclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -168,16 +164,16 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.offerclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -190,13 +186,14 @@ class DemoOffer:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.offerclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -216,28 +213,28 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.offerclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.offerclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -256,16 +253,15 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.offerobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -336,12 +332,12 @@ class DemoOffer:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.offerobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -360,19 +356,19 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.offerobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -383,14 +379,14 @@ class DemoOffer:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.offerobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -407,19 +403,19 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.offerobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -434,14 +430,14 @@ class DemoOffer:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.offerobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -461,28 +457,28 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.offerobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.offerobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -502,28 +498,28 @@ class DemoOffer:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.offerobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.offerobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -750,7 +746,7 @@ class DemoOffer:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -824,25 +820,11 @@ class DemoOffer:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/offerObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.offerobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
@@ -21,7 +21,9 @@ import json
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from google.auth.transport.requests import AuthorizedSession
|
||||
from googleapiclient.discovery import build
|
||||
from googleapiclient.errors import HttpError
|
||||
from googleapiclient.http import BatchHttpRequest
|
||||
from google.oauth2.service_account import Credentials
|
||||
from google.auth import jwt, crypt
|
||||
# [END imports]
|
||||
@@ -39,11 +41,6 @@ class DemoTransit:
|
||||
def __init__(self):
|
||||
self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'/path/to/key.json')
|
||||
self.base_url = 'https://walletobjects.googleapis.com/walletobjects/v1'
|
||||
self.batch_url = 'https://walletobjects.googleapis.com/batch'
|
||||
self.class_url = f'{self.base_url}/transitClass'
|
||||
self.object_url = f'{self.base_url}/transitObject'
|
||||
|
||||
# Set up authenticated client
|
||||
self.auth()
|
||||
|
||||
@@ -56,7 +53,7 @@ class DemoTransit:
|
||||
self.key_file_path,
|
||||
scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])
|
||||
|
||||
self.http_client = AuthorizedSession(self.credentials)
|
||||
self.client = build('walletobjects', 'v1', credentials=self.credentials)
|
||||
|
||||
# [END auth]
|
||||
|
||||
@@ -73,16 +70,16 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.transitclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
print(f'Class {issuer_id}.{class_suffix} already exists!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
# https://developers.google.com/wallet/tickets/transit-passes/qr-code/rest/v1/transitclass
|
||||
@@ -105,12 +102,12 @@ class DemoTransit:
|
||||
'transitType': 'BUS'
|
||||
}
|
||||
|
||||
response = self.http_client.post(url=self.class_url, json=new_class)
|
||||
response = self.client.transitclass().insert(body=new_class).execute()
|
||||
|
||||
print('Class insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END createClass]
|
||||
|
||||
@@ -129,19 +126,19 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.transitclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Class exists
|
||||
updated_class = response.json()
|
||||
updated_class = response
|
||||
|
||||
# Update the class by adding a homepage
|
||||
updated_class['homepageUri'] = {
|
||||
@@ -152,14 +149,14 @@ class DemoTransit:
|
||||
# Note: reviewStatus must be 'UNDER_REVIEW' or 'DRAFT' for updates
|
||||
updated_class['reviewStatus'] = 'UNDER_REVIEW'
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}',
|
||||
json=updated_class)
|
||||
response = self.client.transitclass().update(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=updated_class).execute()
|
||||
|
||||
print('Class update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END updateClass]
|
||||
|
||||
@@ -178,16 +175,16 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
try:
|
||||
response = self.client.transitclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# Patch the class by adding a homepage
|
||||
patch_body = {
|
||||
@@ -200,13 +197,14 @@ class DemoTransit:
|
||||
'reviewStatus': 'UNDER_REVIEW'
|
||||
}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}', json=patch_body)
|
||||
response = self.client.transitclass().patch(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Class patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END patchClass]
|
||||
|
||||
@@ -226,28 +224,28 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the class exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}')
|
||||
try:
|
||||
response = self.client.transitclass().get(resourceId=f'{issuer_id}.{class_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Class {issuer_id}.{class_suffix} not found!')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.class_url}/{issuer_id}.{class_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.transitclass().addmessage(
|
||||
resourceId=f'{issuer_id}.{class_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Class addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{class_suffix}'
|
||||
|
||||
# [END addMessageClass]
|
||||
|
||||
@@ -266,16 +264,15 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
self.client.transitobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
print(f'Object {issuer_id}.{object_suffix} already exists!')
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 404:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# See link below for more information on required properties
|
||||
@@ -365,12 +362,12 @@ class DemoTransit:
|
||||
}
|
||||
|
||||
# Create the object
|
||||
response = self.http_client.post(url=self.object_url, json=new_object)
|
||||
response = self.client.transitobject().insert(body=new_object).execute()
|
||||
|
||||
print('Object insert response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END createObject]
|
||||
|
||||
@@ -389,19 +386,19 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.transitobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
updated_object = response.json()
|
||||
updated_object = response
|
||||
|
||||
# Update the object by adding a link
|
||||
new_link = {
|
||||
@@ -412,14 +409,14 @@ class DemoTransit:
|
||||
updated_object['linksModuleData'] = {'uris': []}
|
||||
updated_object['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.put(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=updated_object)
|
||||
response = self.client.transitobject().update(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=updated_object).execute()
|
||||
|
||||
print('Object update response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END updateObject]
|
||||
|
||||
@@ -436,19 +433,19 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.transitobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Object exists
|
||||
existing_object = response.json()
|
||||
existing_object = response
|
||||
|
||||
# Patch the object by adding a link
|
||||
patch_body = {}
|
||||
@@ -463,14 +460,14 @@ class DemoTransit:
|
||||
patch_body['linksModuleData'] = {'uris': []}
|
||||
patch_body['linksModuleData']['uris'].append(new_link)
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.transitobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object patch response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END patchObject]
|
||||
|
||||
@@ -490,28 +487,28 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
try:
|
||||
response = self.client.transitobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# Patch the object, setting the pass as expired
|
||||
patch_body = {'state': 'EXPIRED'}
|
||||
|
||||
response = self.http_client.patch(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}',
|
||||
json=patch_body)
|
||||
response = self.client.transitobject().patch(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body=patch_body).execute()
|
||||
|
||||
print('Object expiration response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END expireObject]
|
||||
|
||||
@@ -531,28 +528,28 @@ class DemoTransit:
|
||||
"""
|
||||
|
||||
# Check if the object exists
|
||||
response = self.http_client.get(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}')
|
||||
try:
|
||||
response = self.client.transitobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
|
||||
except HttpError as e:
|
||||
if e.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
else:
|
||||
# Something else went wrong...
|
||||
print(e.error_details)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f'Object {issuer_id}.{object_suffix} not found!')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
elif response.status_code != 200:
|
||||
# Something else went wrong...
|
||||
print(response.text)
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
response = self.http_client.post(
|
||||
url=f'{self.object_url}/{issuer_id}.{object_suffix}/addMessage',
|
||||
json={'message': {
|
||||
response = self.client.transitobject().addmessage(
|
||||
resourceId=f'{issuer_id}.{object_suffix}',
|
||||
body={'message': {
|
||||
'header': header,
|
||||
'body': body
|
||||
}})
|
||||
}}).execute()
|
||||
|
||||
print('Object addMessage response')
|
||||
print(response.text)
|
||||
print(response)
|
||||
|
||||
return response.json().get('id')
|
||||
return f'{issuer_id}.{object_suffix}'
|
||||
|
||||
# [END addMessageObject]
|
||||
|
||||
@@ -808,7 +805,7 @@ class DemoTransit:
|
||||
issuer_id (str): The issuer ID being used for this request.
|
||||
class_suffix (str): Developer-defined unique ID for this pass class.
|
||||
"""
|
||||
data = ''
|
||||
batch = self.client.new_batch_http_request()
|
||||
|
||||
# Example: Generate three new pass objects
|
||||
for _ in range(3):
|
||||
@@ -901,25 +898,11 @@ class DemoTransit:
|
||||
}
|
||||
}
|
||||
|
||||
data += '--batch_createobjectbatch\n'
|
||||
data += 'Content-Type: application/json\n\n'
|
||||
data += 'POST /walletobjects/v1/transitObject/\n\n'
|
||||
|
||||
data += json.dumps(batch_object) + '\n\n'
|
||||
|
||||
data += '--batch_createobjectbatch--'
|
||||
batch.add(self.client.transitobject().insert(body=batch_object))
|
||||
|
||||
# Invoke the batch API calls
|
||||
response = self.http_client.post(
|
||||
url=self.batch_url, # https://walletobjects.googleapis.com/batch
|
||||
data=data,
|
||||
headers={
|
||||
# `boundary` is the delimiter between API calls in the batch request
|
||||
'Content-Type':
|
||||
'multipart/mixed; boundary=batch_createobjectbatch'
|
||||
})
|
||||
response = batch.execute()
|
||||
|
||||
print('Batch insert response')
|
||||
print(response.content.decode('UTF-8'))
|
||||
print('Batch complete')
|
||||
|
||||
# [END batch]
|
||||
|
||||
Reference in New Issue
Block a user