blob: 8f50f53c0f679b1e7857ef972571a83738932215 [file] [log] [blame] [edit]
import json
from google.protobuf.json_format import MessageToDict
from google.protobuf.timestamp_pb2 import Timestamp
# Replace these imports with your actual generated proto package paths
from generated import offer_pb2
from generated import money_pb2
from generated import dayofweek_pb2
from generated import timeofday_pb2
_MAX_BYTES_DATA_FILE = 200 * 1024 * 1024
def generate_offer_feed():
# Create OfferFeed
feed = offer_pb2.OfferFeed()
# Build the offers
offer = offer_pb2.Offer(
offer_id="offer-1",
entity_ids=["dining-1"],
offer_source=offer_pb2.OFFER_SOURCE_AGGREGATOR,
action_type=offer_pb2.ACTION_TYPE_DINING,
offer_modes=[
offer_pb2.OFFER_MODE_WALK_IN,
offer_pb2.OFFER_MODE_FREE_RESERVATION
],
offer_category=offer_pb2.OFFER_CATEGORY_BASE_OFFER,
offer_details=offer_pb2.OfferDetails(
offer_display_text="₹100 off on your order",
# Note: If this is a 'oneof', you set the field name directly
discount_value=money_pb2.Money(
currency_code="INR",
units=100
)
),
offer_restrictions=offer_pb2.OfferRestrictions(
combinable_with_other_offers=True,
combinable_offer_categories=[
offer_pb2.OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER,
offer_pb2.OFFER_CATEGORY_ADD_ON_COUPON_OFFER
]
),
terms=offer_pb2.Terms(
restricted_to_certain_users=False,
terms_and_conditions="Valid on all menu items."
),
validity_periods=[
offer_pb2.ValidityPeriod(
valid_period=offer_pb2.ValidityRange(
valid_from_time=Timestamp(seconds=1687062000),
valid_through_time=Timestamp(seconds=1956556800)
),
time_of_day=[
# Monday - Thursday Window
offer_pb2.TimeOfDayWindow(
time_windows=offer_pb2.TimeOfDayRange(
open_time=timeofday_pb2.TimeOfDay(hours=13),
close_time=timeofday_pb2.TimeOfDay(hours=23)
),
day_of_week=[
dayofweek_pb2.DayOfWeek.MONDAY,
dayofweek_pb2.DayOfWeek.TUESDAY,
dayofweek_pb2.DayOfWeek.WEDNESDAY,
dayofweek_pb2.DayOfWeek.THURSDAY
]
),
# Friday - Sunday Window
offer_pb2.TimeOfDayWindow(
time_windows=offer_pb2.TimeOfDayRange(
open_time=timeofday_pb2.TimeOfDay(hours=13),
close_time=timeofday_pb2.TimeOfDay(hours=23, minutes=59, seconds=59)
),
day_of_week=[
dayofweek_pb2.DayOfWeek.FRIDAY,
dayofweek_pb2.DayOfWeek.SATURDAY,
dayofweek_pb2.DayOfWeek.SUNDAY
]
)
]
)
],
offer_url="https://www.example-restaurant.com/offer/base_offer_1",
image_url="https://www.example-restaurant.com/images/offer_base.jpg"
)
# Example testing for menu feed size
# Protocol buffer message must be less than 2 GiB
# https://protobuf.dev/programming-guides/proto-limits/
# It is recommended to not exceed 200 MB, as there is an Actions
# Center limit of 200 MB per file after compression.
if feed.ByteSize() + offer.ByteSize() < _MAX_BYTES_DATA_FILE:
feed.data.append(offer)
# else write current feed to file and start a new feed
# Serialize to JSON
# preserving_proto_field_names=True ensures camelCase becomes snake_case if defined that way in .proto
json_output = json.dumps(
MessageToDict(feed, preserving_proto_field_name=True)
)
print(json_output)
if __name__ == "__main__":
generate_offer_feed()