"
+}
+```
+
+## Building locally
+
+We use `bundler` to manage dependencies. To get started, simply `bundle install`.
+
+## Running locally
+
+You may run this service locally with `bundle exec ruby email_server.rb`.
+
+## Building docker image
+
+From `src/emailservice`, run `docker build .`
diff --git a/src/emailservice/demo_pb2.py b/src/emailservice/demo_pb2.py
deleted file mode 100644
index 2306c91d98..0000000000
--- a/src/emailservice/demo_pb2.py
+++ /dev/null
@@ -1,1851 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: demo.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='demo.proto',
- package='hipstershop',
- syntax='proto3',
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\ndemo.proto\x12\x0bhipstershop\"0\n\x08\x43\x61rtItem\x12\x12\n\nproduct_id\x18\x01 \x01(\t\x12\x10\n\x08quantity\x18\x02 \x01(\x05\"F\n\x0e\x41\x64\x64ItemRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12#\n\x04item\x18\x02 \x01(\x0b\x32\x15.hipstershop.CartItem\"#\n\x10\x45mptyCartRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"!\n\x0eGetCartRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"=\n\x04\x43\x61rt\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12$\n\x05items\x18\x02 \x03(\x0b\x32\x15.hipstershop.CartItem\"\x07\n\x05\x45mpty\"B\n\x1aListRecommendationsRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x13\n\x0bproduct_ids\x18\x02 \x03(\t\"2\n\x1bListRecommendationsResponse\x12\x13\n\x0bproduct_ids\x18\x01 \x03(\t\"\x84\x01\n\x07Product\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0f\n\x07picture\x18\x04 \x01(\t\x12%\n\tprice_usd\x18\x05 \x01(\x0b\x32\x12.hipstershop.Money\x12\x12\n\ncategories\x18\x06 \x03(\t\">\n\x14ListProductsResponse\x12&\n\x08products\x18\x01 \x03(\x0b\x32\x14.hipstershop.Product\"\x1f\n\x11GetProductRequest\x12\n\n\x02id\x18\x01 \x01(\t\"&\n\x15SearchProductsRequest\x12\r\n\x05query\x18\x01 \x01(\t\"?\n\x16SearchProductsResponse\x12%\n\x07results\x18\x01 \x03(\x0b\x32\x14.hipstershop.Product\"^\n\x0fGetQuoteRequest\x12%\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x14.hipstershop.Address\x12$\n\x05items\x18\x02 \x03(\x0b\x32\x15.hipstershop.CartItem\"8\n\x10GetQuoteResponse\x12$\n\x08\x63ost_usd\x18\x01 \x01(\x0b\x32\x12.hipstershop.Money\"_\n\x10ShipOrderRequest\x12%\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x14.hipstershop.Address\x12$\n\x05items\x18\x02 \x03(\x0b\x32\x15.hipstershop.CartItem\"(\n\x11ShipOrderResponse\x12\x13\n\x0btracking_id\x18\x01 \x01(\t\"a\n\x07\x41\x64\x64ress\x12\x16\n\x0estreet_address\x18\x01 \x01(\t\x12\x0c\n\x04\x63ity\x18\x02 \x01(\t\x12\r\n\x05state\x18\x03 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x04 \x01(\t\x12\x10\n\x08zip_code\x18\x05 \x01(\x05\"<\n\x05Money\x12\x15\n\rcurrency_code\x18\x01 \x01(\t\x12\r\n\x05units\x18\x02 \x01(\x03\x12\r\n\x05nanos\x18\x03 \x01(\x05\"8\n\x1eGetSupportedCurrenciesResponse\x12\x16\n\x0e\x63urrency_codes\x18\x01 \x03(\t\"N\n\x19\x43urrencyConversionRequest\x12 \n\x04\x66rom\x18\x01 \x01(\x0b\x32\x12.hipstershop.Money\x12\x0f\n\x07to_code\x18\x02 \x01(\t\"\x90\x01\n\x0e\x43reditCardInfo\x12\x1a\n\x12\x63redit_card_number\x18\x01 \x01(\t\x12\x17\n\x0f\x63redit_card_cvv\x18\x02 \x01(\x05\x12#\n\x1b\x63redit_card_expiration_year\x18\x03 \x01(\x05\x12$\n\x1c\x63redit_card_expiration_month\x18\x04 \x01(\x05\"e\n\rChargeRequest\x12\"\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x12.hipstershop.Money\x12\x30\n\x0b\x63redit_card\x18\x02 \x01(\x0b\x32\x1b.hipstershop.CreditCardInfo\"(\n\x0e\x43hargeResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\t\"R\n\tOrderItem\x12#\n\x04item\x18\x01 \x01(\x0b\x32\x15.hipstershop.CartItem\x12 \n\x04\x63ost\x18\x02 \x01(\x0b\x32\x12.hipstershop.Money\"\xbf\x01\n\x0bOrderResult\x12\x10\n\x08order_id\x18\x01 \x01(\t\x12\x1c\n\x14shipping_tracking_id\x18\x02 \x01(\t\x12)\n\rshipping_cost\x18\x03 \x01(\x0b\x32\x12.hipstershop.Money\x12.\n\x10shipping_address\x18\x04 \x01(\x0b\x32\x14.hipstershop.Address\x12%\n\x05items\x18\x05 \x03(\x0b\x32\x16.hipstershop.OrderItem\"V\n\x1cSendOrderConfirmationRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\'\n\x05order\x18\x02 \x01(\x0b\x32\x18.hipstershop.OrderResult\"\xa3\x01\n\x11PlaceOrderRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x15\n\ruser_currency\x18\x02 \x01(\t\x12%\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x14.hipstershop.Address\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x30\n\x0b\x63redit_card\x18\x06 \x01(\x0b\x32\x1b.hipstershop.CreditCardInfo\"=\n\x12PlaceOrderResponse\x12\'\n\x05order\x18\x01 \x01(\x0b\x32\x18.hipstershop.OrderResult\"!\n\tAdRequest\x12\x14\n\x0c\x63ontext_keys\x18\x01 \x03(\t\"*\n\nAdResponse\x12\x1c\n\x03\x61\x64s\x18\x01 \x03(\x0b\x32\x0f.hipstershop.Ad\"(\n\x02\x41\x64\x12\x14\n\x0credirect_url\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t2\xca\x01\n\x0b\x43\x61rtService\x12<\n\x07\x41\x64\x64Item\x12\x1b.hipstershop.AddItemRequest\x1a\x12.hipstershop.Empty\"\x00\x12;\n\x07GetCart\x12\x1b.hipstershop.GetCartRequest\x1a\x11.hipstershop.Cart\"\x00\x12@\n\tEmptyCart\x12\x1d.hipstershop.EmptyCartRequest\x1a\x12.hipstershop.Empty\"\x00\x32\x83\x01\n\x15RecommendationService\x12j\n\x13ListRecommendations\x12\'.hipstershop.ListRecommendationsRequest\x1a(.hipstershop.ListRecommendationsResponse\"\x00\x32\x83\x02\n\x15ProductCatalogService\x12G\n\x0cListProducts\x12\x12.hipstershop.Empty\x1a!.hipstershop.ListProductsResponse\"\x00\x12\x44\n\nGetProduct\x12\x1e.hipstershop.GetProductRequest\x1a\x14.hipstershop.Product\"\x00\x12[\n\x0eSearchProducts\x12\".hipstershop.SearchProductsRequest\x1a#.hipstershop.SearchProductsResponse\"\x00\x32\xaa\x01\n\x0fShippingService\x12I\n\x08GetQuote\x12\x1c.hipstershop.GetQuoteRequest\x1a\x1d.hipstershop.GetQuoteResponse\"\x00\x12L\n\tShipOrder\x12\x1d.hipstershop.ShipOrderRequest\x1a\x1e.hipstershop.ShipOrderResponse\"\x00\x32\xb7\x01\n\x0f\x43urrencyService\x12[\n\x16GetSupportedCurrencies\x12\x12.hipstershop.Empty\x1a+.hipstershop.GetSupportedCurrenciesResponse\"\x00\x12G\n\x07\x43onvert\x12&.hipstershop.CurrencyConversionRequest\x1a\x12.hipstershop.Money\"\x00\x32U\n\x0ePaymentService\x12\x43\n\x06\x43harge\x12\x1a.hipstershop.ChargeRequest\x1a\x1b.hipstershop.ChargeResponse\"\x00\x32h\n\x0c\x45mailService\x12X\n\x15SendOrderConfirmation\x12).hipstershop.SendOrderConfirmationRequest\x1a\x12.hipstershop.Empty\"\x00\x32\x62\n\x0f\x43heckoutService\x12O\n\nPlaceOrder\x12\x1e.hipstershop.PlaceOrderRequest\x1a\x1f.hipstershop.PlaceOrderResponse\"\x00\x32H\n\tAdService\x12;\n\x06GetAds\x12\x16.hipstershop.AdRequest\x1a\x17.hipstershop.AdResponse\"\x00\x62\x06proto3'
-)
-
-
-
-
-_CARTITEM = _descriptor.Descriptor(
- name='CartItem',
- full_name='hipstershop.CartItem',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='product_id', full_name='hipstershop.CartItem.product_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='quantity', full_name='hipstershop.CartItem.quantity', index=1,
- number=2, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=27,
- serialized_end=75,
-)
-
-
-_ADDITEMREQUEST = _descriptor.Descriptor(
- name='AddItemRequest',
- full_name='hipstershop.AddItemRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.AddItemRequest.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='item', full_name='hipstershop.AddItemRequest.item', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=77,
- serialized_end=147,
-)
-
-
-_EMPTYCARTREQUEST = _descriptor.Descriptor(
- name='EmptyCartRequest',
- full_name='hipstershop.EmptyCartRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.EmptyCartRequest.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=149,
- serialized_end=184,
-)
-
-
-_GETCARTREQUEST = _descriptor.Descriptor(
- name='GetCartRequest',
- full_name='hipstershop.GetCartRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.GetCartRequest.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=186,
- serialized_end=219,
-)
-
-
-_CART = _descriptor.Descriptor(
- name='Cart',
- full_name='hipstershop.Cart',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.Cart.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='items', full_name='hipstershop.Cart.items', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=221,
- serialized_end=282,
-)
-
-
-_EMPTY = _descriptor.Descriptor(
- name='Empty',
- full_name='hipstershop.Empty',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=284,
- serialized_end=291,
-)
-
-
-_LISTRECOMMENDATIONSREQUEST = _descriptor.Descriptor(
- name='ListRecommendationsRequest',
- full_name='hipstershop.ListRecommendationsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.ListRecommendationsRequest.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='product_ids', full_name='hipstershop.ListRecommendationsRequest.product_ids', index=1,
- number=2, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=293,
- serialized_end=359,
-)
-
-
-_LISTRECOMMENDATIONSRESPONSE = _descriptor.Descriptor(
- name='ListRecommendationsResponse',
- full_name='hipstershop.ListRecommendationsResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='product_ids', full_name='hipstershop.ListRecommendationsResponse.product_ids', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=361,
- serialized_end=411,
-)
-
-
-_PRODUCT = _descriptor.Descriptor(
- name='Product',
- full_name='hipstershop.Product',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='id', full_name='hipstershop.Product.id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='name', full_name='hipstershop.Product.name', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='description', full_name='hipstershop.Product.description', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='picture', full_name='hipstershop.Product.picture', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='price_usd', full_name='hipstershop.Product.price_usd', index=4,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='categories', full_name='hipstershop.Product.categories', index=5,
- number=6, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=414,
- serialized_end=546,
-)
-
-
-_LISTPRODUCTSRESPONSE = _descriptor.Descriptor(
- name='ListProductsResponse',
- full_name='hipstershop.ListProductsResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='products', full_name='hipstershop.ListProductsResponse.products', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=548,
- serialized_end=610,
-)
-
-
-_GETPRODUCTREQUEST = _descriptor.Descriptor(
- name='GetProductRequest',
- full_name='hipstershop.GetProductRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='id', full_name='hipstershop.GetProductRequest.id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=612,
- serialized_end=643,
-)
-
-
-_SEARCHPRODUCTSREQUEST = _descriptor.Descriptor(
- name='SearchProductsRequest',
- full_name='hipstershop.SearchProductsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='query', full_name='hipstershop.SearchProductsRequest.query', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=645,
- serialized_end=683,
-)
-
-
-_SEARCHPRODUCTSRESPONSE = _descriptor.Descriptor(
- name='SearchProductsResponse',
- full_name='hipstershop.SearchProductsResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='results', full_name='hipstershop.SearchProductsResponse.results', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=685,
- serialized_end=748,
-)
-
-
-_GETQUOTEREQUEST = _descriptor.Descriptor(
- name='GetQuoteRequest',
- full_name='hipstershop.GetQuoteRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='address', full_name='hipstershop.GetQuoteRequest.address', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='items', full_name='hipstershop.GetQuoteRequest.items', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=750,
- serialized_end=844,
-)
-
-
-_GETQUOTERESPONSE = _descriptor.Descriptor(
- name='GetQuoteResponse',
- full_name='hipstershop.GetQuoteResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='cost_usd', full_name='hipstershop.GetQuoteResponse.cost_usd', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=846,
- serialized_end=902,
-)
-
-
-_SHIPORDERREQUEST = _descriptor.Descriptor(
- name='ShipOrderRequest',
- full_name='hipstershop.ShipOrderRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='address', full_name='hipstershop.ShipOrderRequest.address', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='items', full_name='hipstershop.ShipOrderRequest.items', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=904,
- serialized_end=999,
-)
-
-
-_SHIPORDERRESPONSE = _descriptor.Descriptor(
- name='ShipOrderResponse',
- full_name='hipstershop.ShipOrderResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='tracking_id', full_name='hipstershop.ShipOrderResponse.tracking_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1001,
- serialized_end=1041,
-)
-
-
-_ADDRESS = _descriptor.Descriptor(
- name='Address',
- full_name='hipstershop.Address',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='street_address', full_name='hipstershop.Address.street_address', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='city', full_name='hipstershop.Address.city', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='state', full_name='hipstershop.Address.state', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='country', full_name='hipstershop.Address.country', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='zip_code', full_name='hipstershop.Address.zip_code', index=4,
- number=5, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1043,
- serialized_end=1140,
-)
-
-
-_MONEY = _descriptor.Descriptor(
- name='Money',
- full_name='hipstershop.Money',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='currency_code', full_name='hipstershop.Money.currency_code', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='units', full_name='hipstershop.Money.units', index=1,
- number=2, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='nanos', full_name='hipstershop.Money.nanos', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1142,
- serialized_end=1202,
-)
-
-
-_GETSUPPORTEDCURRENCIESRESPONSE = _descriptor.Descriptor(
- name='GetSupportedCurrenciesResponse',
- full_name='hipstershop.GetSupportedCurrenciesResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='currency_codes', full_name='hipstershop.GetSupportedCurrenciesResponse.currency_codes', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1204,
- serialized_end=1260,
-)
-
-
-_CURRENCYCONVERSIONREQUEST = _descriptor.Descriptor(
- name='CurrencyConversionRequest',
- full_name='hipstershop.CurrencyConversionRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='from', full_name='hipstershop.CurrencyConversionRequest.from', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='to_code', full_name='hipstershop.CurrencyConversionRequest.to_code', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1262,
- serialized_end=1340,
-)
-
-
-_CREDITCARDINFO = _descriptor.Descriptor(
- name='CreditCardInfo',
- full_name='hipstershop.CreditCardInfo',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='credit_card_number', full_name='hipstershop.CreditCardInfo.credit_card_number', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='credit_card_cvv', full_name='hipstershop.CreditCardInfo.credit_card_cvv', index=1,
- number=2, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='credit_card_expiration_year', full_name='hipstershop.CreditCardInfo.credit_card_expiration_year', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='credit_card_expiration_month', full_name='hipstershop.CreditCardInfo.credit_card_expiration_month', index=3,
- number=4, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1343,
- serialized_end=1487,
-)
-
-
-_CHARGEREQUEST = _descriptor.Descriptor(
- name='ChargeRequest',
- full_name='hipstershop.ChargeRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='amount', full_name='hipstershop.ChargeRequest.amount', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='credit_card', full_name='hipstershop.ChargeRequest.credit_card', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1489,
- serialized_end=1590,
-)
-
-
-_CHARGERESPONSE = _descriptor.Descriptor(
- name='ChargeResponse',
- full_name='hipstershop.ChargeResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='transaction_id', full_name='hipstershop.ChargeResponse.transaction_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1592,
- serialized_end=1632,
-)
-
-
-_ORDERITEM = _descriptor.Descriptor(
- name='OrderItem',
- full_name='hipstershop.OrderItem',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='item', full_name='hipstershop.OrderItem.item', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='cost', full_name='hipstershop.OrderItem.cost', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1634,
- serialized_end=1716,
-)
-
-
-_ORDERRESULT = _descriptor.Descriptor(
- name='OrderResult',
- full_name='hipstershop.OrderResult',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='order_id', full_name='hipstershop.OrderResult.order_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='shipping_tracking_id', full_name='hipstershop.OrderResult.shipping_tracking_id', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='shipping_cost', full_name='hipstershop.OrderResult.shipping_cost', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='shipping_address', full_name='hipstershop.OrderResult.shipping_address', index=3,
- number=4, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='items', full_name='hipstershop.OrderResult.items', index=4,
- number=5, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1719,
- serialized_end=1910,
-)
-
-
-_SENDORDERCONFIRMATIONREQUEST = _descriptor.Descriptor(
- name='SendOrderConfirmationRequest',
- full_name='hipstershop.SendOrderConfirmationRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='email', full_name='hipstershop.SendOrderConfirmationRequest.email', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='order', full_name='hipstershop.SendOrderConfirmationRequest.order', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1912,
- serialized_end=1998,
-)
-
-
-_PLACEORDERREQUEST = _descriptor.Descriptor(
- name='PlaceOrderRequest',
- full_name='hipstershop.PlaceOrderRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='user_id', full_name='hipstershop.PlaceOrderRequest.user_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='user_currency', full_name='hipstershop.PlaceOrderRequest.user_currency', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='address', full_name='hipstershop.PlaceOrderRequest.address', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='email', full_name='hipstershop.PlaceOrderRequest.email', index=3,
- number=5, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='credit_card', full_name='hipstershop.PlaceOrderRequest.credit_card', index=4,
- number=6, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2001,
- serialized_end=2164,
-)
-
-
-_PLACEORDERRESPONSE = _descriptor.Descriptor(
- name='PlaceOrderResponse',
- full_name='hipstershop.PlaceOrderResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='order', full_name='hipstershop.PlaceOrderResponse.order', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2166,
- serialized_end=2227,
-)
-
-
-_ADREQUEST = _descriptor.Descriptor(
- name='AdRequest',
- full_name='hipstershop.AdRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='context_keys', full_name='hipstershop.AdRequest.context_keys', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2229,
- serialized_end=2262,
-)
-
-
-_ADRESPONSE = _descriptor.Descriptor(
- name='AdResponse',
- full_name='hipstershop.AdResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='ads', full_name='hipstershop.AdResponse.ads', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2264,
- serialized_end=2306,
-)
-
-
-_AD = _descriptor.Descriptor(
- name='Ad',
- full_name='hipstershop.Ad',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='redirect_url', full_name='hipstershop.Ad.redirect_url', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='text', full_name='hipstershop.Ad.text', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2308,
- serialized_end=2348,
-)
-
-_ADDITEMREQUEST.fields_by_name['item'].message_type = _CARTITEM
-_CART.fields_by_name['items'].message_type = _CARTITEM
-_PRODUCT.fields_by_name['price_usd'].message_type = _MONEY
-_LISTPRODUCTSRESPONSE.fields_by_name['products'].message_type = _PRODUCT
-_SEARCHPRODUCTSRESPONSE.fields_by_name['results'].message_type = _PRODUCT
-_GETQUOTEREQUEST.fields_by_name['address'].message_type = _ADDRESS
-_GETQUOTEREQUEST.fields_by_name['items'].message_type = _CARTITEM
-_GETQUOTERESPONSE.fields_by_name['cost_usd'].message_type = _MONEY
-_SHIPORDERREQUEST.fields_by_name['address'].message_type = _ADDRESS
-_SHIPORDERREQUEST.fields_by_name['items'].message_type = _CARTITEM
-_CURRENCYCONVERSIONREQUEST.fields_by_name['from'].message_type = _MONEY
-_CHARGEREQUEST.fields_by_name['amount'].message_type = _MONEY
-_CHARGEREQUEST.fields_by_name['credit_card'].message_type = _CREDITCARDINFO
-_ORDERITEM.fields_by_name['item'].message_type = _CARTITEM
-_ORDERITEM.fields_by_name['cost'].message_type = _MONEY
-_ORDERRESULT.fields_by_name['shipping_cost'].message_type = _MONEY
-_ORDERRESULT.fields_by_name['shipping_address'].message_type = _ADDRESS
-_ORDERRESULT.fields_by_name['items'].message_type = _ORDERITEM
-_SENDORDERCONFIRMATIONREQUEST.fields_by_name['order'].message_type = _ORDERRESULT
-_PLACEORDERREQUEST.fields_by_name['address'].message_type = _ADDRESS
-_PLACEORDERREQUEST.fields_by_name['credit_card'].message_type = _CREDITCARDINFO
-_PLACEORDERRESPONSE.fields_by_name['order'].message_type = _ORDERRESULT
-_ADRESPONSE.fields_by_name['ads'].message_type = _AD
-DESCRIPTOR.message_types_by_name['CartItem'] = _CARTITEM
-DESCRIPTOR.message_types_by_name['AddItemRequest'] = _ADDITEMREQUEST
-DESCRIPTOR.message_types_by_name['EmptyCartRequest'] = _EMPTYCARTREQUEST
-DESCRIPTOR.message_types_by_name['GetCartRequest'] = _GETCARTREQUEST
-DESCRIPTOR.message_types_by_name['Cart'] = _CART
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['ListRecommendationsRequest'] = _LISTRECOMMENDATIONSREQUEST
-DESCRIPTOR.message_types_by_name['ListRecommendationsResponse'] = _LISTRECOMMENDATIONSRESPONSE
-DESCRIPTOR.message_types_by_name['Product'] = _PRODUCT
-DESCRIPTOR.message_types_by_name['ListProductsResponse'] = _LISTPRODUCTSRESPONSE
-DESCRIPTOR.message_types_by_name['GetProductRequest'] = _GETPRODUCTREQUEST
-DESCRIPTOR.message_types_by_name['SearchProductsRequest'] = _SEARCHPRODUCTSREQUEST
-DESCRIPTOR.message_types_by_name['SearchProductsResponse'] = _SEARCHPRODUCTSRESPONSE
-DESCRIPTOR.message_types_by_name['GetQuoteRequest'] = _GETQUOTEREQUEST
-DESCRIPTOR.message_types_by_name['GetQuoteResponse'] = _GETQUOTERESPONSE
-DESCRIPTOR.message_types_by_name['ShipOrderRequest'] = _SHIPORDERREQUEST
-DESCRIPTOR.message_types_by_name['ShipOrderResponse'] = _SHIPORDERRESPONSE
-DESCRIPTOR.message_types_by_name['Address'] = _ADDRESS
-DESCRIPTOR.message_types_by_name['Money'] = _MONEY
-DESCRIPTOR.message_types_by_name['GetSupportedCurrenciesResponse'] = _GETSUPPORTEDCURRENCIESRESPONSE
-DESCRIPTOR.message_types_by_name['CurrencyConversionRequest'] = _CURRENCYCONVERSIONREQUEST
-DESCRIPTOR.message_types_by_name['CreditCardInfo'] = _CREDITCARDINFO
-DESCRIPTOR.message_types_by_name['ChargeRequest'] = _CHARGEREQUEST
-DESCRIPTOR.message_types_by_name['ChargeResponse'] = _CHARGERESPONSE
-DESCRIPTOR.message_types_by_name['OrderItem'] = _ORDERITEM
-DESCRIPTOR.message_types_by_name['OrderResult'] = _ORDERRESULT
-DESCRIPTOR.message_types_by_name['SendOrderConfirmationRequest'] = _SENDORDERCONFIRMATIONREQUEST
-DESCRIPTOR.message_types_by_name['PlaceOrderRequest'] = _PLACEORDERREQUEST
-DESCRIPTOR.message_types_by_name['PlaceOrderResponse'] = _PLACEORDERRESPONSE
-DESCRIPTOR.message_types_by_name['AdRequest'] = _ADREQUEST
-DESCRIPTOR.message_types_by_name['AdResponse'] = _ADRESPONSE
-DESCRIPTOR.message_types_by_name['Ad'] = _AD
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-CartItem = _reflection.GeneratedProtocolMessageType('CartItem', (_message.Message,), {
- 'DESCRIPTOR' : _CARTITEM,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.CartItem)
- })
-_sym_db.RegisterMessage(CartItem)
-
-AddItemRequest = _reflection.GeneratedProtocolMessageType('AddItemRequest', (_message.Message,), {
- 'DESCRIPTOR' : _ADDITEMREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.AddItemRequest)
- })
-_sym_db.RegisterMessage(AddItemRequest)
-
-EmptyCartRequest = _reflection.GeneratedProtocolMessageType('EmptyCartRequest', (_message.Message,), {
- 'DESCRIPTOR' : _EMPTYCARTREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.EmptyCartRequest)
- })
-_sym_db.RegisterMessage(EmptyCartRequest)
-
-GetCartRequest = _reflection.GeneratedProtocolMessageType('GetCartRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETCARTREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.GetCartRequest)
- })
-_sym_db.RegisterMessage(GetCartRequest)
-
-Cart = _reflection.GeneratedProtocolMessageType('Cart', (_message.Message,), {
- 'DESCRIPTOR' : _CART,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Cart)
- })
-_sym_db.RegisterMessage(Cart)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
- 'DESCRIPTOR' : _EMPTY,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Empty)
- })
-_sym_db.RegisterMessage(Empty)
-
-ListRecommendationsRequest = _reflection.GeneratedProtocolMessageType('ListRecommendationsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTRECOMMENDATIONSREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ListRecommendationsRequest)
- })
-_sym_db.RegisterMessage(ListRecommendationsRequest)
-
-ListRecommendationsResponse = _reflection.GeneratedProtocolMessageType('ListRecommendationsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _LISTRECOMMENDATIONSRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ListRecommendationsResponse)
- })
-_sym_db.RegisterMessage(ListRecommendationsResponse)
-
-Product = _reflection.GeneratedProtocolMessageType('Product', (_message.Message,), {
- 'DESCRIPTOR' : _PRODUCT,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Product)
- })
-_sym_db.RegisterMessage(Product)
-
-ListProductsResponse = _reflection.GeneratedProtocolMessageType('ListProductsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _LISTPRODUCTSRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ListProductsResponse)
- })
-_sym_db.RegisterMessage(ListProductsResponse)
-
-GetProductRequest = _reflection.GeneratedProtocolMessageType('GetProductRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETPRODUCTREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.GetProductRequest)
- })
-_sym_db.RegisterMessage(GetProductRequest)
-
-SearchProductsRequest = _reflection.GeneratedProtocolMessageType('SearchProductsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _SEARCHPRODUCTSREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.SearchProductsRequest)
- })
-_sym_db.RegisterMessage(SearchProductsRequest)
-
-SearchProductsResponse = _reflection.GeneratedProtocolMessageType('SearchProductsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _SEARCHPRODUCTSRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.SearchProductsResponse)
- })
-_sym_db.RegisterMessage(SearchProductsResponse)
-
-GetQuoteRequest = _reflection.GeneratedProtocolMessageType('GetQuoteRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETQUOTEREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.GetQuoteRequest)
- })
-_sym_db.RegisterMessage(GetQuoteRequest)
-
-GetQuoteResponse = _reflection.GeneratedProtocolMessageType('GetQuoteResponse', (_message.Message,), {
- 'DESCRIPTOR' : _GETQUOTERESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.GetQuoteResponse)
- })
-_sym_db.RegisterMessage(GetQuoteResponse)
-
-ShipOrderRequest = _reflection.GeneratedProtocolMessageType('ShipOrderRequest', (_message.Message,), {
- 'DESCRIPTOR' : _SHIPORDERREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ShipOrderRequest)
- })
-_sym_db.RegisterMessage(ShipOrderRequest)
-
-ShipOrderResponse = _reflection.GeneratedProtocolMessageType('ShipOrderResponse', (_message.Message,), {
- 'DESCRIPTOR' : _SHIPORDERRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ShipOrderResponse)
- })
-_sym_db.RegisterMessage(ShipOrderResponse)
-
-Address = _reflection.GeneratedProtocolMessageType('Address', (_message.Message,), {
- 'DESCRIPTOR' : _ADDRESS,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Address)
- })
-_sym_db.RegisterMessage(Address)
-
-Money = _reflection.GeneratedProtocolMessageType('Money', (_message.Message,), {
- 'DESCRIPTOR' : _MONEY,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Money)
- })
-_sym_db.RegisterMessage(Money)
-
-GetSupportedCurrenciesResponse = _reflection.GeneratedProtocolMessageType('GetSupportedCurrenciesResponse', (_message.Message,), {
- 'DESCRIPTOR' : _GETSUPPORTEDCURRENCIESRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.GetSupportedCurrenciesResponse)
- })
-_sym_db.RegisterMessage(GetSupportedCurrenciesResponse)
-
-CurrencyConversionRequest = _reflection.GeneratedProtocolMessageType('CurrencyConversionRequest', (_message.Message,), {
- 'DESCRIPTOR' : _CURRENCYCONVERSIONREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.CurrencyConversionRequest)
- })
-_sym_db.RegisterMessage(CurrencyConversionRequest)
-
-CreditCardInfo = _reflection.GeneratedProtocolMessageType('CreditCardInfo', (_message.Message,), {
- 'DESCRIPTOR' : _CREDITCARDINFO,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.CreditCardInfo)
- })
-_sym_db.RegisterMessage(CreditCardInfo)
-
-ChargeRequest = _reflection.GeneratedProtocolMessageType('ChargeRequest', (_message.Message,), {
- 'DESCRIPTOR' : _CHARGEREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ChargeRequest)
- })
-_sym_db.RegisterMessage(ChargeRequest)
-
-ChargeResponse = _reflection.GeneratedProtocolMessageType('ChargeResponse', (_message.Message,), {
- 'DESCRIPTOR' : _CHARGERESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.ChargeResponse)
- })
-_sym_db.RegisterMessage(ChargeResponse)
-
-OrderItem = _reflection.GeneratedProtocolMessageType('OrderItem', (_message.Message,), {
- 'DESCRIPTOR' : _ORDERITEM,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.OrderItem)
- })
-_sym_db.RegisterMessage(OrderItem)
-
-OrderResult = _reflection.GeneratedProtocolMessageType('OrderResult', (_message.Message,), {
- 'DESCRIPTOR' : _ORDERRESULT,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.OrderResult)
- })
-_sym_db.RegisterMessage(OrderResult)
-
-SendOrderConfirmationRequest = _reflection.GeneratedProtocolMessageType('SendOrderConfirmationRequest', (_message.Message,), {
- 'DESCRIPTOR' : _SENDORDERCONFIRMATIONREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.SendOrderConfirmationRequest)
- })
-_sym_db.RegisterMessage(SendOrderConfirmationRequest)
-
-PlaceOrderRequest = _reflection.GeneratedProtocolMessageType('PlaceOrderRequest', (_message.Message,), {
- 'DESCRIPTOR' : _PLACEORDERREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.PlaceOrderRequest)
- })
-_sym_db.RegisterMessage(PlaceOrderRequest)
-
-PlaceOrderResponse = _reflection.GeneratedProtocolMessageType('PlaceOrderResponse', (_message.Message,), {
- 'DESCRIPTOR' : _PLACEORDERRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.PlaceOrderResponse)
- })
-_sym_db.RegisterMessage(PlaceOrderResponse)
-
-AdRequest = _reflection.GeneratedProtocolMessageType('AdRequest', (_message.Message,), {
- 'DESCRIPTOR' : _ADREQUEST,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.AdRequest)
- })
-_sym_db.RegisterMessage(AdRequest)
-
-AdResponse = _reflection.GeneratedProtocolMessageType('AdResponse', (_message.Message,), {
- 'DESCRIPTOR' : _ADRESPONSE,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.AdResponse)
- })
-_sym_db.RegisterMessage(AdResponse)
-
-Ad = _reflection.GeneratedProtocolMessageType('Ad', (_message.Message,), {
- 'DESCRIPTOR' : _AD,
- '__module__' : 'demo_pb2'
- # @@protoc_insertion_point(class_scope:hipstershop.Ad)
- })
-_sym_db.RegisterMessage(Ad)
-
-
-
-_CARTSERVICE = _descriptor.ServiceDescriptor(
- name='CartService',
- full_name='hipstershop.CartService',
- file=DESCRIPTOR,
- index=0,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=2351,
- serialized_end=2553,
- methods=[
- _descriptor.MethodDescriptor(
- name='AddItem',
- full_name='hipstershop.CartService.AddItem',
- index=0,
- containing_service=None,
- input_type=_ADDITEMREQUEST,
- output_type=_EMPTY,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetCart',
- full_name='hipstershop.CartService.GetCart',
- index=1,
- containing_service=None,
- input_type=_GETCARTREQUEST,
- output_type=_CART,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='EmptyCart',
- full_name='hipstershop.CartService.EmptyCart',
- index=2,
- containing_service=None,
- input_type=_EMPTYCARTREQUEST,
- output_type=_EMPTY,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_CARTSERVICE)
-
-DESCRIPTOR.services_by_name['CartService'] = _CARTSERVICE
-
-
-_RECOMMENDATIONSERVICE = _descriptor.ServiceDescriptor(
- name='RecommendationService',
- full_name='hipstershop.RecommendationService',
- file=DESCRIPTOR,
- index=1,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=2556,
- serialized_end=2687,
- methods=[
- _descriptor.MethodDescriptor(
- name='ListRecommendations',
- full_name='hipstershop.RecommendationService.ListRecommendations',
- index=0,
- containing_service=None,
- input_type=_LISTRECOMMENDATIONSREQUEST,
- output_type=_LISTRECOMMENDATIONSRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_RECOMMENDATIONSERVICE)
-
-DESCRIPTOR.services_by_name['RecommendationService'] = _RECOMMENDATIONSERVICE
-
-
-_PRODUCTCATALOGSERVICE = _descriptor.ServiceDescriptor(
- name='ProductCatalogService',
- full_name='hipstershop.ProductCatalogService',
- file=DESCRIPTOR,
- index=2,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=2690,
- serialized_end=2949,
- methods=[
- _descriptor.MethodDescriptor(
- name='ListProducts',
- full_name='hipstershop.ProductCatalogService.ListProducts',
- index=0,
- containing_service=None,
- input_type=_EMPTY,
- output_type=_LISTPRODUCTSRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetProduct',
- full_name='hipstershop.ProductCatalogService.GetProduct',
- index=1,
- containing_service=None,
- input_type=_GETPRODUCTREQUEST,
- output_type=_PRODUCT,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SearchProducts',
- full_name='hipstershop.ProductCatalogService.SearchProducts',
- index=2,
- containing_service=None,
- input_type=_SEARCHPRODUCTSREQUEST,
- output_type=_SEARCHPRODUCTSRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_PRODUCTCATALOGSERVICE)
-
-DESCRIPTOR.services_by_name['ProductCatalogService'] = _PRODUCTCATALOGSERVICE
-
-
-_SHIPPINGSERVICE = _descriptor.ServiceDescriptor(
- name='ShippingService',
- full_name='hipstershop.ShippingService',
- file=DESCRIPTOR,
- index=3,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=2952,
- serialized_end=3122,
- methods=[
- _descriptor.MethodDescriptor(
- name='GetQuote',
- full_name='hipstershop.ShippingService.GetQuote',
- index=0,
- containing_service=None,
- input_type=_GETQUOTEREQUEST,
- output_type=_GETQUOTERESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ShipOrder',
- full_name='hipstershop.ShippingService.ShipOrder',
- index=1,
- containing_service=None,
- input_type=_SHIPORDERREQUEST,
- output_type=_SHIPORDERRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_SHIPPINGSERVICE)
-
-DESCRIPTOR.services_by_name['ShippingService'] = _SHIPPINGSERVICE
-
-
-_CURRENCYSERVICE = _descriptor.ServiceDescriptor(
- name='CurrencyService',
- full_name='hipstershop.CurrencyService',
- file=DESCRIPTOR,
- index=4,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=3125,
- serialized_end=3308,
- methods=[
- _descriptor.MethodDescriptor(
- name='GetSupportedCurrencies',
- full_name='hipstershop.CurrencyService.GetSupportedCurrencies',
- index=0,
- containing_service=None,
- input_type=_EMPTY,
- output_type=_GETSUPPORTEDCURRENCIESRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='Convert',
- full_name='hipstershop.CurrencyService.Convert',
- index=1,
- containing_service=None,
- input_type=_CURRENCYCONVERSIONREQUEST,
- output_type=_MONEY,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_CURRENCYSERVICE)
-
-DESCRIPTOR.services_by_name['CurrencyService'] = _CURRENCYSERVICE
-
-
-_PAYMENTSERVICE = _descriptor.ServiceDescriptor(
- name='PaymentService',
- full_name='hipstershop.PaymentService',
- file=DESCRIPTOR,
- index=5,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=3310,
- serialized_end=3395,
- methods=[
- _descriptor.MethodDescriptor(
- name='Charge',
- full_name='hipstershop.PaymentService.Charge',
- index=0,
- containing_service=None,
- input_type=_CHARGEREQUEST,
- output_type=_CHARGERESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_PAYMENTSERVICE)
-
-DESCRIPTOR.services_by_name['PaymentService'] = _PAYMENTSERVICE
-
-
-_EMAILSERVICE = _descriptor.ServiceDescriptor(
- name='EmailService',
- full_name='hipstershop.EmailService',
- file=DESCRIPTOR,
- index=6,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=3397,
- serialized_end=3501,
- methods=[
- _descriptor.MethodDescriptor(
- name='SendOrderConfirmation',
- full_name='hipstershop.EmailService.SendOrderConfirmation',
- index=0,
- containing_service=None,
- input_type=_SENDORDERCONFIRMATIONREQUEST,
- output_type=_EMPTY,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_EMAILSERVICE)
-
-DESCRIPTOR.services_by_name['EmailService'] = _EMAILSERVICE
-
-
-_CHECKOUTSERVICE = _descriptor.ServiceDescriptor(
- name='CheckoutService',
- full_name='hipstershop.CheckoutService',
- file=DESCRIPTOR,
- index=7,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=3503,
- serialized_end=3601,
- methods=[
- _descriptor.MethodDescriptor(
- name='PlaceOrder',
- full_name='hipstershop.CheckoutService.PlaceOrder',
- index=0,
- containing_service=None,
- input_type=_PLACEORDERREQUEST,
- output_type=_PLACEORDERRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_CHECKOUTSERVICE)
-
-DESCRIPTOR.services_by_name['CheckoutService'] = _CHECKOUTSERVICE
-
-
-_ADSERVICE = _descriptor.ServiceDescriptor(
- name='AdService',
- full_name='hipstershop.AdService',
- file=DESCRIPTOR,
- index=8,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=3603,
- serialized_end=3675,
- methods=[
- _descriptor.MethodDescriptor(
- name='GetAds',
- full_name='hipstershop.AdService.GetAds',
- index=0,
- containing_service=None,
- input_type=_ADREQUEST,
- output_type=_ADRESPONSE,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_ADSERVICE)
-
-DESCRIPTOR.services_by_name['AdService'] = _ADSERVICE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/emailservice/demo_pb2_grpc.py b/src/emailservice/demo_pb2_grpc.py
deleted file mode 100644
index c172b0ac10..0000000000
--- a/src/emailservice/demo_pb2_grpc.py
+++ /dev/null
@@ -1,806 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-import demo_pb2 as demo__pb2
-
-
-class CartServiceStub(object):
- """-----------------Cart service-----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.AddItem = channel.unary_unary(
- '/hipstershop.CartService/AddItem',
- request_serializer=demo__pb2.AddItemRequest.SerializeToString,
- response_deserializer=demo__pb2.Empty.FromString,
- )
- self.GetCart = channel.unary_unary(
- '/hipstershop.CartService/GetCart',
- request_serializer=demo__pb2.GetCartRequest.SerializeToString,
- response_deserializer=demo__pb2.Cart.FromString,
- )
- self.EmptyCart = channel.unary_unary(
- '/hipstershop.CartService/EmptyCart',
- request_serializer=demo__pb2.EmptyCartRequest.SerializeToString,
- response_deserializer=demo__pb2.Empty.FromString,
- )
-
-
-class CartServiceServicer(object):
- """-----------------Cart service-----------------
-
- """
-
- def AddItem(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetCart(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def EmptyCart(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_CartServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'AddItem': grpc.unary_unary_rpc_method_handler(
- servicer.AddItem,
- request_deserializer=demo__pb2.AddItemRequest.FromString,
- response_serializer=demo__pb2.Empty.SerializeToString,
- ),
- 'GetCart': grpc.unary_unary_rpc_method_handler(
- servicer.GetCart,
- request_deserializer=demo__pb2.GetCartRequest.FromString,
- response_serializer=demo__pb2.Cart.SerializeToString,
- ),
- 'EmptyCart': grpc.unary_unary_rpc_method_handler(
- servicer.EmptyCart,
- request_deserializer=demo__pb2.EmptyCartRequest.FromString,
- response_serializer=demo__pb2.Empty.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.CartService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class CartService(object):
- """-----------------Cart service-----------------
-
- """
-
- @staticmethod
- def AddItem(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CartService/AddItem',
- demo__pb2.AddItemRequest.SerializeToString,
- demo__pb2.Empty.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetCart(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CartService/GetCart',
- demo__pb2.GetCartRequest.SerializeToString,
- demo__pb2.Cart.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def EmptyCart(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CartService/EmptyCart',
- demo__pb2.EmptyCartRequest.SerializeToString,
- demo__pb2.Empty.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class RecommendationServiceStub(object):
- """---------------Recommendation service----------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.ListRecommendations = channel.unary_unary(
- '/hipstershop.RecommendationService/ListRecommendations',
- request_serializer=demo__pb2.ListRecommendationsRequest.SerializeToString,
- response_deserializer=demo__pb2.ListRecommendationsResponse.FromString,
- )
-
-
-class RecommendationServiceServicer(object):
- """---------------Recommendation service----------
-
- """
-
- def ListRecommendations(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_RecommendationServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'ListRecommendations': grpc.unary_unary_rpc_method_handler(
- servicer.ListRecommendations,
- request_deserializer=demo__pb2.ListRecommendationsRequest.FromString,
- response_serializer=demo__pb2.ListRecommendationsResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.RecommendationService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class RecommendationService(object):
- """---------------Recommendation service----------
-
- """
-
- @staticmethod
- def ListRecommendations(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.RecommendationService/ListRecommendations',
- demo__pb2.ListRecommendationsRequest.SerializeToString,
- demo__pb2.ListRecommendationsResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class ProductCatalogServiceStub(object):
- """---------------Product Catalog----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.ListProducts = channel.unary_unary(
- '/hipstershop.ProductCatalogService/ListProducts',
- request_serializer=demo__pb2.Empty.SerializeToString,
- response_deserializer=demo__pb2.ListProductsResponse.FromString,
- )
- self.GetProduct = channel.unary_unary(
- '/hipstershop.ProductCatalogService/GetProduct',
- request_serializer=demo__pb2.GetProductRequest.SerializeToString,
- response_deserializer=demo__pb2.Product.FromString,
- )
- self.SearchProducts = channel.unary_unary(
- '/hipstershop.ProductCatalogService/SearchProducts',
- request_serializer=demo__pb2.SearchProductsRequest.SerializeToString,
- response_deserializer=demo__pb2.SearchProductsResponse.FromString,
- )
-
-
-class ProductCatalogServiceServicer(object):
- """---------------Product Catalog----------------
-
- """
-
- def ListProducts(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetProduct(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SearchProducts(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_ProductCatalogServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'ListProducts': grpc.unary_unary_rpc_method_handler(
- servicer.ListProducts,
- request_deserializer=demo__pb2.Empty.FromString,
- response_serializer=demo__pb2.ListProductsResponse.SerializeToString,
- ),
- 'GetProduct': grpc.unary_unary_rpc_method_handler(
- servicer.GetProduct,
- request_deserializer=demo__pb2.GetProductRequest.FromString,
- response_serializer=demo__pb2.Product.SerializeToString,
- ),
- 'SearchProducts': grpc.unary_unary_rpc_method_handler(
- servicer.SearchProducts,
- request_deserializer=demo__pb2.SearchProductsRequest.FromString,
- response_serializer=demo__pb2.SearchProductsResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.ProductCatalogService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class ProductCatalogService(object):
- """---------------Product Catalog----------------
-
- """
-
- @staticmethod
- def ListProducts(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.ProductCatalogService/ListProducts',
- demo__pb2.Empty.SerializeToString,
- demo__pb2.ListProductsResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetProduct(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.ProductCatalogService/GetProduct',
- demo__pb2.GetProductRequest.SerializeToString,
- demo__pb2.Product.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SearchProducts(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.ProductCatalogService/SearchProducts',
- demo__pb2.SearchProductsRequest.SerializeToString,
- demo__pb2.SearchProductsResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class ShippingServiceStub(object):
- """---------------Shipping Service----------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.GetQuote = channel.unary_unary(
- '/hipstershop.ShippingService/GetQuote',
- request_serializer=demo__pb2.GetQuoteRequest.SerializeToString,
- response_deserializer=demo__pb2.GetQuoteResponse.FromString,
- )
- self.ShipOrder = channel.unary_unary(
- '/hipstershop.ShippingService/ShipOrder',
- request_serializer=demo__pb2.ShipOrderRequest.SerializeToString,
- response_deserializer=demo__pb2.ShipOrderResponse.FromString,
- )
-
-
-class ShippingServiceServicer(object):
- """---------------Shipping Service----------
-
- """
-
- def GetQuote(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ShipOrder(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_ShippingServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'GetQuote': grpc.unary_unary_rpc_method_handler(
- servicer.GetQuote,
- request_deserializer=demo__pb2.GetQuoteRequest.FromString,
- response_serializer=demo__pb2.GetQuoteResponse.SerializeToString,
- ),
- 'ShipOrder': grpc.unary_unary_rpc_method_handler(
- servicer.ShipOrder,
- request_deserializer=demo__pb2.ShipOrderRequest.FromString,
- response_serializer=demo__pb2.ShipOrderResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.ShippingService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class ShippingService(object):
- """---------------Shipping Service----------
-
- """
-
- @staticmethod
- def GetQuote(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.ShippingService/GetQuote',
- demo__pb2.GetQuoteRequest.SerializeToString,
- demo__pb2.GetQuoteResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ShipOrder(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.ShippingService/ShipOrder',
- demo__pb2.ShipOrderRequest.SerializeToString,
- demo__pb2.ShipOrderResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class CurrencyServiceStub(object):
- """-----------------Currency service-----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.GetSupportedCurrencies = channel.unary_unary(
- '/hipstershop.CurrencyService/GetSupportedCurrencies',
- request_serializer=demo__pb2.Empty.SerializeToString,
- response_deserializer=demo__pb2.GetSupportedCurrenciesResponse.FromString,
- )
- self.Convert = channel.unary_unary(
- '/hipstershop.CurrencyService/Convert',
- request_serializer=demo__pb2.CurrencyConversionRequest.SerializeToString,
- response_deserializer=demo__pb2.Money.FromString,
- )
-
-
-class CurrencyServiceServicer(object):
- """-----------------Currency service-----------------
-
- """
-
- def GetSupportedCurrencies(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def Convert(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_CurrencyServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'GetSupportedCurrencies': grpc.unary_unary_rpc_method_handler(
- servicer.GetSupportedCurrencies,
- request_deserializer=demo__pb2.Empty.FromString,
- response_serializer=demo__pb2.GetSupportedCurrenciesResponse.SerializeToString,
- ),
- 'Convert': grpc.unary_unary_rpc_method_handler(
- servicer.Convert,
- request_deserializer=demo__pb2.CurrencyConversionRequest.FromString,
- response_serializer=demo__pb2.Money.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.CurrencyService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class CurrencyService(object):
- """-----------------Currency service-----------------
-
- """
-
- @staticmethod
- def GetSupportedCurrencies(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CurrencyService/GetSupportedCurrencies',
- demo__pb2.Empty.SerializeToString,
- demo__pb2.GetSupportedCurrenciesResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def Convert(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CurrencyService/Convert',
- demo__pb2.CurrencyConversionRequest.SerializeToString,
- demo__pb2.Money.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class PaymentServiceStub(object):
- """-------------Payment service-----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.Charge = channel.unary_unary(
- '/hipstershop.PaymentService/Charge',
- request_serializer=demo__pb2.ChargeRequest.SerializeToString,
- response_deserializer=demo__pb2.ChargeResponse.FromString,
- )
-
-
-class PaymentServiceServicer(object):
- """-------------Payment service-----------------
-
- """
-
- def Charge(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_PaymentServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'Charge': grpc.unary_unary_rpc_method_handler(
- servicer.Charge,
- request_deserializer=demo__pb2.ChargeRequest.FromString,
- response_serializer=demo__pb2.ChargeResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.PaymentService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class PaymentService(object):
- """-------------Payment service-----------------
-
- """
-
- @staticmethod
- def Charge(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.PaymentService/Charge',
- demo__pb2.ChargeRequest.SerializeToString,
- demo__pb2.ChargeResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class EmailServiceStub(object):
- """-------------Email service-----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.SendOrderConfirmation = channel.unary_unary(
- '/hipstershop.EmailService/SendOrderConfirmation',
- request_serializer=demo__pb2.SendOrderConfirmationRequest.SerializeToString,
- response_deserializer=demo__pb2.Empty.FromString,
- )
-
-
-class EmailServiceServicer(object):
- """-------------Email service-----------------
-
- """
-
- def SendOrderConfirmation(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_EmailServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'SendOrderConfirmation': grpc.unary_unary_rpc_method_handler(
- servicer.SendOrderConfirmation,
- request_deserializer=demo__pb2.SendOrderConfirmationRequest.FromString,
- response_serializer=demo__pb2.Empty.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.EmailService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class EmailService(object):
- """-------------Email service-----------------
-
- """
-
- @staticmethod
- def SendOrderConfirmation(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.EmailService/SendOrderConfirmation',
- demo__pb2.SendOrderConfirmationRequest.SerializeToString,
- demo__pb2.Empty.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class CheckoutServiceStub(object):
- """-------------Checkout service-----------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.PlaceOrder = channel.unary_unary(
- '/hipstershop.CheckoutService/PlaceOrder',
- request_serializer=demo__pb2.PlaceOrderRequest.SerializeToString,
- response_deserializer=demo__pb2.PlaceOrderResponse.FromString,
- )
-
-
-class CheckoutServiceServicer(object):
- """-------------Checkout service-----------------
-
- """
-
- def PlaceOrder(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_CheckoutServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'PlaceOrder': grpc.unary_unary_rpc_method_handler(
- servicer.PlaceOrder,
- request_deserializer=demo__pb2.PlaceOrderRequest.FromString,
- response_serializer=demo__pb2.PlaceOrderResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.CheckoutService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class CheckoutService(object):
- """-------------Checkout service-----------------
-
- """
-
- @staticmethod
- def PlaceOrder(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.CheckoutService/PlaceOrder',
- demo__pb2.PlaceOrderRequest.SerializeToString,
- demo__pb2.PlaceOrderResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-
-class AdServiceStub(object):
- """------------Ad service------------------
-
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.GetAds = channel.unary_unary(
- '/hipstershop.AdService/GetAds',
- request_serializer=demo__pb2.AdRequest.SerializeToString,
- response_deserializer=demo__pb2.AdResponse.FromString,
- )
-
-
-class AdServiceServicer(object):
- """------------Ad service------------------
-
- """
-
- def GetAds(self, request, context):
- """Missing associated documentation comment in .proto file."""
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_AdServiceServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'GetAds': grpc.unary_unary_rpc_method_handler(
- servicer.GetAds,
- request_deserializer=demo__pb2.AdRequest.FromString,
- response_serializer=demo__pb2.AdResponse.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'hipstershop.AdService', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class AdService(object):
- """------------Ad service------------------
-
- """
-
- @staticmethod
- def GetAds(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/hipstershop.AdService/GetAds',
- demo__pb2.AdRequest.SerializeToString,
- demo__pb2.AdResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/emailservice/email_client.py b/src/emailservice/email_client.py
deleted file mode 100644
index 01409c83b9..0000000000
--- a/src/emailservice/email_client.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2018 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import grpc
-
-import demo_pb2
-import demo_pb2_grpc
-
-from logger import getJSONLogger
-logger = getJSONLogger('emailservice-client')
-
-
-def send_confirmation_email(email, order):
- channel = grpc.insecure_channel('0.0.0.0:8080')
-
- stub = demo_pb2_grpc.EmailServiceStub(channel)
- try:
- response = stub.SendOrderConfirmation(demo_pb2.SendOrderConfirmationRequest(
- email = email,
- order = order
- ))
- logger.info('Request sent.')
- except grpc.RpcError as err:
- logger.error(err.details())
- logger.error('{}, {}'.format(err.code().name, err.code().value))
-
-if __name__ == '__main__':
- logger.info('Client for email service.')
diff --git a/src/emailservice/email_server.py b/src/emailservice/email_server.py
deleted file mode 100644
index a8abccfcf3..0000000000
--- a/src/emailservice/email_server.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2018 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from concurrent import futures
-import argparse
-import os
-import sys
-import time
-import grpc
-import traceback
-from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateError
-from google.api_core.exceptions import GoogleAPICallError
-
-import demo_pb2
-import demo_pb2_grpc
-from grpc_health.v1 import health_pb2
-from grpc_health.v1 import health_pb2_grpc
-
-from opentelemetry import trace
-from opentelemetry.sdk.trace import TracerProvider
-from opentelemetry.sdk.trace.export import (BatchSpanProcessor)
-from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
-
-from logger import getJSONLogger
-logger = getJSONLogger('emailservice-server')
-
-tracer_provider = TracerProvider()
-trace.set_tracer_provider(tracer_provider)
-tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
-
-# Loads confirmation email template from file
-env = Environment(
- loader=FileSystemLoader('templates'),
- autoescape=select_autoescape(['html', 'xml'])
-)
-template = env.get_template('confirmation.html')
-
-class BaseEmailService(demo_pb2_grpc.EmailServiceServicer):
- def Check(self, request, context):
- return health_pb2.HealthCheckResponse(
- status=health_pb2.HealthCheckResponse.SERVING)
-
- def Watch(self, request, context):
- return health_pb2.HealthCheckResponse(
- status=health_pb2.HealthCheckResponse.UNIMPLEMENTED)
-
-class EmailService(BaseEmailService):
- def __init__(self):
- raise Exception('cloud mail client not implemented')
- super().__init__()
-
- @staticmethod
- def send_email(client, email_address, content):
- response = client.send_message(
- sender = client.sender_path(project_id, region, sender_id),
- envelope_from_authority = '',
- header_from_authority = '',
- envelope_from_address = from_address,
- simple_message = {
- "from": {
- "address_spec": from_address,
- },
- "to": [{
- "address_spec": email_address
- }],
- "subject": "Your Confirmation Email",
- "html_body": content
- }
- )
- logger.info("Message sent: {}".format(response.rfc822_message_id))
-
- def SendOrderConfirmation(self, request, context):
- email = request.email
- order = request.order
-
- try:
- confirmation = template.render(order = order)
- except TemplateError as err:
- context.set_details("An error occurred when preparing the confirmation mail.")
- logger.error(err.message)
- context.set_code(grpc.StatusCode.INTERNAL)
- return demo_pb2.Empty()
-
- try:
- EmailService.send_email(self.client, email, confirmation)
- except GoogleAPICallError as err:
- context.set_details("An error occurred when sending the email.")
- print(err.message)
- context.set_code(grpc.StatusCode.INTERNAL)
- return demo_pb2.Empty()
-
- return demo_pb2.Empty()
-
-class DummyEmailService(BaseEmailService):
- def SendOrderConfirmation(self, request, context):
- logger.info('A request to send order confirmation email to {} has been received.'.format(request.email))
- return demo_pb2.Empty()
-
-class HealthCheck():
- def Check(self, request, context):
- return health_pb2.HealthCheckResponse(
- status=health_pb2.HealthCheckResponse.SERVING)
-
-def start(dummy_mode):
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=10),)
- service = None
- if dummy_mode:
- service = DummyEmailService()
- else:
- raise Exception('non-dummy mode not implemented yet')
-
- demo_pb2_grpc.add_EmailServiceServicer_to_server(service, server)
- health_pb2_grpc.add_HealthServicer_to_server(service, server)
-
- port = os.environ.get('PORT', "8080")
- logger.info("listening on port: "+port)
- server.add_insecure_port('[::]:'+port)
- server.start()
- try:
- while True:
- time.sleep(3600)
- except KeyboardInterrupt:
- server.stop(0)
-
-
-if __name__ == '__main__':
- logger.info('starting the email service in dummy mode.')
-
- start(dummy_mode = True)
diff --git a/src/emailservice/email_server.rb b/src/emailservice/email_server.rb
new file mode 100644
index 0000000000..f5c1b1de1f
--- /dev/null
+++ b/src/emailservice/email_server.rb
@@ -0,0 +1,22 @@
+require "ostruct"
+require "pony"
+require "sinatra"
+
+require "opentelemetry/sdk"
+require "opentelemetry/exporter/otlp"
+require "opentelemetry/instrumentation/sinatra"
+
+OpenTelemetry::SDK.configure do |c|
+ c.use "OpenTelemetry::Instrumentation::Sinatra"
+end
+
+post "/send_order_confirmation" do
+ data = JSON.parse(request.body.read, object_class: OpenStruct)
+ Pony.mail(
+ to: data.email,
+ from: "noreply@example.com",
+ subject: "Your confirmation email",
+ body: erb(:confirmation, locals: { order: data.order }),
+ via: :logger
+ )
+end
diff --git a/src/emailservice/logger.py b/src/emailservice/logger.py
deleted file mode 100644
index ce98e268be..0000000000
--- a/src/emailservice/logger.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2018 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import logging
-import sys
-from pythonjsonlogger import jsonlogger
-from opentelemetry import trace
-
-
-class CustomJsonFormatter(jsonlogger.JsonFormatter):
- def add_fields(self, log_record, record, message_dict):
- super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
- if not log_record.get('otelTraceID'):
- log_record['otelTraceID'] = trace.format_trace_id(trace.get_current_span().get_span_context().trace_id)
- if not log_record.get('otelSpanID'):
- log_record['otelSpanID'] = trace.format_span_id(trace.get_current_span().get_span_context().span_id)
-
-def getJSONLogger(name):
- logger = logging.getLogger(name)
- handler = logging.StreamHandler(sys.stdout)
- formatter = CustomJsonFormatter('%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] [trace_id=%(otelTraceID)s span_id=%(otelSpanID)s] - %(message)s')
- handler.setFormatter(formatter)
- logger.addHandler(handler)
- logger.setLevel(logging.INFO)
- logger.propagate = False
- return logger
diff --git a/src/emailservice/requirements.in b/src/emailservice/requirements.in
deleted file mode 100644
index bcd79043d6..0000000000
--- a/src/emailservice/requirements.in
+++ /dev/null
@@ -1,12 +0,0 @@
-google-api-core==2.4.0
-grpcio-health-checking==1.43.0
-grpcio==1.43.0
-jinja2==3.0.3
-opentelemetry-api==1.9.1
-opentelemetry-exporter-otlp-proto-grpc==1.9.1
-opentelemetry-instrumentation==0.28b1
-opentelemetry-instrumentation-grpc==0.28b1
-opentelemetry-instrumentation-jinja2==0.28b1
-opentelemetry-sdk==1.9.1
-python-json-logger==2.0.2
-requests==2.27.1
diff --git a/src/emailservice/requirements.txt b/src/emailservice/requirements.txt
deleted file mode 100644
index 692f736d43..0000000000
--- a/src/emailservice/requirements.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-#
-# This file is autogenerated by pip-compile with python 3.8
-# To update, run:
-#
-# pip-compile
-#
-backoff==1.10.0
- # via opentelemetry-exporter-otlp-proto-grpc
-cachetools==4.2.0
- # via google-auth
-certifi==2020.12.5
- # via requests
-charset-normalizer==2.0.10
- # via requests
-deprecated==1.2.13
- # via opentelemetry-api
-google-api-core==2.4.0
- # via -r requirements.in
-google-auth==2.4.1
- # via google-api-core
-googleapis-common-protos==1.52.0
- # via
- # google-api-core
- # opentelemetry-exporter-otlp-proto-grpc
-grpcio==1.43.0
- # via
- # -r requirements.in
- # grpcio-health-checking
- # opentelemetry-exporter-otlp-proto-grpc
-grpcio-health-checking==1.43.0
- # via -r requirements.in
-idna==2.10
- # via requests
-jinja2==3.0.3
- # via -r requirements.in
-markupsafe==2.0.1
- # via jinja2
-opentelemetry-api==1.9.1
- # via
- # -r requirements.in
- # opentelemetry-exporter-otlp-proto-grpc
- # opentelemetry-instrumentation
- # opentelemetry-instrumentation-grpc
- # opentelemetry-instrumentation-jinja2
- # opentelemetry-sdk
-opentelemetry-exporter-otlp-proto-grpc==1.9.1
- # via -r requirements.in
-opentelemetry-instrumentation==0.28b1
- # via
- # -r requirements.in
- # opentelemetry-instrumentation-grpc
- # opentelemetry-instrumentation-jinja2
-opentelemetry-instrumentation-grpc==0.28b1
- # via -r requirements.in
-opentelemetry-instrumentation-jinja2==0.28b1
- # via -r requirements.in
-opentelemetry-proto==1.9.1
- # via opentelemetry-exporter-otlp-proto-grpc
-opentelemetry-sdk==1.9.1
- # via
- # -r requirements.in
- # opentelemetry-exporter-otlp-proto-grpc
- # opentelemetry-instrumentation-grpc
-opentelemetry-semantic-conventions==0.28b1
- # via
- # opentelemetry-instrumentation-grpc
- # opentelemetry-sdk
-protobuf==3.13.0
- # via
- # google-api-core
- # googleapis-common-protos
- # grpcio-health-checking
- # opentelemetry-proto
-pyasn1==0.4.8
- # via
- # pyasn1-modules
- # rsa
-pyasn1-modules==0.2.8
- # via google-auth
-python-json-logger==2.0.2
- # via -r requirements.in
-requests==2.27.1
- # via
- # -r requirements.in
- # google-api-core
-rsa==4.7
- # via google-auth
-six==1.15.0
- # via
- # google-auth
- # grpcio
- # protobuf
-typing-extensions==4.0.1
- # via opentelemetry-sdk
-urllib3==1.25.10
- # via requests
-wrapt==1.13.3
- # via
- # deprecated
- # opentelemetry-instrumentation
- # opentelemetry-instrumentation-grpc
- # opentelemetry-instrumentation-jinja2
-
-# The following packages are considered to be unsafe in a requirements file:
-# setuptools
diff --git a/src/emailservice/templates/confirmation.html b/src/emailservice/views/confirmation.erb
similarity index 60%
rename from src/emailservice/templates/confirmation.html
rename to src/emailservice/views/confirmation.erb
index b65574509f..551721c338 100644
--- a/src/emailservice/templates/confirmation.html
+++ b/src/emailservice/views/confirmation.erb
@@ -29,25 +29,25 @@
Your Order Confirmation
Thanks for shopping with us!
Order ID
- #{{ order.order_id }}
+ <%= order.order_id %>
Shipping
- #{{ order.shipping_tracking_id }}
- {{ order.shipping_cost.units }}. {{ "%02d" | format(order.shipping_cost.nanos // 10000000) }} {{ order.shipping_cost.currency_code }}
- {{ order.shipping_address.street_address_1 }}, {{order.shipping_address.street_address_2}}, {{order.shipping_address.city}}, {{order.shipping_address.country}} {{order.shipping_address.zip_code}}
+ <%= order.shipping_tracking_id %>
+ <%= order.shipping_cost.units %>.<%= order.shipping_cost %> <%= order.shipping_cost.currency_code %>
+ <%= order.shipping_address.street_address_1 %>, <%= order.shipping_address.street_address_2 %>, <%= order.shipping_address.city %>, <%= order.shipping_address.country %> <%= order.shipping_address.zip_code %>
Items
Item No. |
- Quantity |
+ Quantity |
Price |
- {% for item in order.items %}
-
- #{{ item.item.product_id }} |
- {{ item.item.quantity }} |
- {{ item.cost.units }}.{{ "%02d" | format(item.cost.nanos // 10000000) }} {{ item.cost.currency_code }} |
-
- {% endfor %}
+ <% order.items.each do |item| %>
+
+ <%= item.item.product_id %> |
+ <%= item.item.quantity %> |
+ <%= item.cost.units %>.<%= item.cost.nanos %> <%= item.cost.currency_code %> |
+
+ <% end %>