diff --git a/src/cartservice/.vs/cartservice/DesignTimeBuild/.dtbcache b/src/cartservice/.vs/cartservice/DesignTimeBuild/.dtbcache new file mode 100644 index 0000000..bfe1ed8 Binary files /dev/null and b/src/cartservice/.vs/cartservice/DesignTimeBuild/.dtbcache differ diff --git a/src/cartservice/.vs/cartservice/v15/.suo b/src/cartservice/.vs/cartservice/v15/.suo new file mode 100644 index 0000000..c0d4b5c Binary files /dev/null and b/src/cartservice/.vs/cartservice/v15/.suo differ diff --git a/src/cartservice/.vs/cartservice/v15/Server/sqlite3/db.lock b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/db.lock new file mode 100644 index 0000000..e69de29 diff --git a/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide new file mode 100644 index 0000000..56758a8 Binary files /dev/null and b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide differ diff --git a/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-shm b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-shm new file mode 100644 index 0000000..5d79d37 Binary files /dev/null and b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-shm differ diff --git a/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-wal b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-wal new file mode 100644 index 0000000..854c462 Binary files /dev/null and b/src/cartservice/.vs/cartservice/v15/Server/sqlite3/storage.ide-wal differ diff --git a/src/emailservice/Dockerfile b/src/emailservice/Dockerfile new file mode 100644 index 0000000..e5c0bf3 --- /dev/null +++ b/src/emailservice/Dockerfile @@ -0,0 +1,20 @@ +# Use the grpc.io provided Python image as the base image +FROM grpc/python:1.0 + +# show python logs as they occur +ENV PYTHONUNBUFFERED=0 + +# install pip for python3 +RUN apt-get -qqy update && \ + apt-get -qqy install python3-pip + +# get packages +WORKDIR /email_server +COPY requirements.txt . +RUN pip3 install -r requirements.txt + +# Add the application +COPY . . + +EXPOSE 8080 +ENTRYPOINT [ "python3", "email_server.py" ] diff --git a/src/emailservice/demo_pb2.py b/src/emailservice/demo_pb2.py new file mode 100644 index 0000000..ba0401c --- /dev/null +++ b/src/emailservice/demo_pb2.py @@ -0,0 +1,1750 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: demo.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +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 +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='demo.proto', + package='hipstershop', + syntax='proto3', + 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\"p\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\">\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\"n\n\x07\x41\x64\x64ress\x12\x18\n\x10street_address_1\x18\x01 \x01(\t\x12\x18\n\x10street_address_2\x18\x02 \x01(\t\x12\x0c\n\x04\x63ity\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\"c\n\x12\x43reateOrderRequest\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\"g\n\x13\x43reateOrderResponse\x12%\n\x05items\x18\x01 \x03(\x0b\x32\x16.hipstershop.OrderItem\x12)\n\rshipping_cost\x18\x02 \x01(\x0b\x32\x12.hipstershop.Money\"\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.OrderResult2\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\xb6\x01\n\x0f\x43heckoutService\x12R\n\x0b\x43reateOrder\x12\x1f.hipstershop.CreateOrderRequest\x1a .hipstershop.CreateOrderResponse\"\x00\x12O\n\nPlaceOrder\x12\x1e.hipstershop.PlaceOrderRequest\x1a\x1f.hipstershop.PlaceOrderResponse\"\x00\x62\x06proto3') +) + + + + +_CARTITEM = _descriptor.Descriptor( + name='CartItem', + full_name='hipstershop.CartItem', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + 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, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=413, + serialized_end=525, +) + + +_LISTPRODUCTSRESPONSE = _descriptor.Descriptor( + name='ListProductsResponse', + full_name='hipstershop.ListProductsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=527, + serialized_end=589, +) + + +_GETPRODUCTREQUEST = _descriptor.Descriptor( + name='GetProductRequest', + full_name='hipstershop.GetProductRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=591, + serialized_end=622, +) + + +_SEARCHPRODUCTSREQUEST = _descriptor.Descriptor( + name='SearchProductsRequest', + full_name='hipstershop.SearchProductsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=624, + serialized_end=662, +) + + +_SEARCHPRODUCTSRESPONSE = _descriptor.Descriptor( + name='SearchProductsResponse', + full_name='hipstershop.SearchProductsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=664, + serialized_end=727, +) + + +_GETQUOTEREQUEST = _descriptor.Descriptor( + name='GetQuoteRequest', + full_name='hipstershop.GetQuoteRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=729, + serialized_end=823, +) + + +_GETQUOTERESPONSE = _descriptor.Descriptor( + name='GetQuoteResponse', + full_name='hipstershop.GetQuoteResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=825, + serialized_end=881, +) + + +_SHIPORDERREQUEST = _descriptor.Descriptor( + name='ShipOrderRequest', + full_name='hipstershop.ShipOrderRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=883, + serialized_end=978, +) + + +_SHIPORDERRESPONSE = _descriptor.Descriptor( + name='ShipOrderResponse', + full_name='hipstershop.ShipOrderResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=980, + serialized_end=1020, +) + + +_ADDRESS = _descriptor.Descriptor( + name='Address', + full_name='hipstershop.Address', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='street_address_1', full_name='hipstershop.Address.street_address_1', 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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='street_address_2', full_name='hipstershop.Address.street_address_2', 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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='city', full_name='hipstershop.Address.city', 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1022, + serialized_end=1132, +) + + +_MONEY = _descriptor.Descriptor( + name='Money', + full_name='hipstershop.Money', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1134, + serialized_end=1194, +) + + +_GETSUPPORTEDCURRENCIESRESPONSE = _descriptor.Descriptor( + name='GetSupportedCurrenciesResponse', + full_name='hipstershop.GetSupportedCurrenciesResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1196, + serialized_end=1252, +) + + +_CURRENCYCONVERSIONREQUEST = _descriptor.Descriptor( + name='CurrencyConversionRequest', + full_name='hipstershop.CurrencyConversionRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1254, + serialized_end=1332, +) + + +_CREDITCARDINFO = _descriptor.Descriptor( + name='CreditCardInfo', + full_name='hipstershop.CreditCardInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1335, + serialized_end=1479, +) + + +_CHARGEREQUEST = _descriptor.Descriptor( + name='ChargeRequest', + full_name='hipstershop.ChargeRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1481, + serialized_end=1582, +) + + +_CHARGERESPONSE = _descriptor.Descriptor( + name='ChargeResponse', + full_name='hipstershop.ChargeResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1584, + serialized_end=1624, +) + + +_ORDERITEM = _descriptor.Descriptor( + name='OrderItem', + full_name='hipstershop.OrderItem', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1626, + serialized_end=1708, +) + + +_ORDERRESULT = _descriptor.Descriptor( + name='OrderResult', + full_name='hipstershop.OrderResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1711, + serialized_end=1902, +) + + +_SENDORDERCONFIRMATIONREQUEST = _descriptor.Descriptor( + name='SendOrderConfirmationRequest', + full_name='hipstershop.SendOrderConfirmationRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1904, + serialized_end=1990, +) + + +_CREATEORDERREQUEST = _descriptor.Descriptor( + name='CreateOrderRequest', + full_name='hipstershop.CreateOrderRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='user_id', full_name='hipstershop.CreateOrderRequest.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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='user_currency', full_name='hipstershop.CreateOrderRequest.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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='address', full_name='hipstershop.CreateOrderRequest.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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1992, + serialized_end=2091, +) + + +_CREATEORDERRESPONSE = _descriptor.Descriptor( + name='CreateOrderResponse', + full_name='hipstershop.CreateOrderResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='items', full_name='hipstershop.CreateOrderResponse.items', 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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shipping_cost', full_name='hipstershop.CreateOrderResponse.shipping_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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2093, + serialized_end=2196, +) + + +_PLACEORDERREQUEST = _descriptor.Descriptor( + name='PlaceOrderRequest', + full_name='hipstershop.PlaceOrderRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + _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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2199, + serialized_end=2362, +) + + +_PLACEORDERRESPONSE = _descriptor.Descriptor( + name='PlaceOrderResponse', + full_name='hipstershop.PlaceOrderResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2364, + serialized_end=2425, +) + +_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 +_CREATEORDERREQUEST.fields_by_name['address'].message_type = _ADDRESS +_CREATEORDERRESPONSE.fields_by_name['items'].message_type = _ORDERITEM +_CREATEORDERRESPONSE.fields_by_name['shipping_cost'].message_type = _MONEY +_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 +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['CreateOrderRequest'] = _CREATEORDERREQUEST +DESCRIPTOR.message_types_by_name['CreateOrderResponse'] = _CREATEORDERRESPONSE +DESCRIPTOR.message_types_by_name['PlaceOrderRequest'] = _PLACEORDERREQUEST +DESCRIPTOR.message_types_by_name['PlaceOrderResponse'] = _PLACEORDERRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +CartItem = _reflection.GeneratedProtocolMessageType('CartItem', (_message.Message,), dict( + DESCRIPTOR = _CARTITEM, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.CartItem) + )) +_sym_db.RegisterMessage(CartItem) + +AddItemRequest = _reflection.GeneratedProtocolMessageType('AddItemRequest', (_message.Message,), dict( + DESCRIPTOR = _ADDITEMREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.AddItemRequest) + )) +_sym_db.RegisterMessage(AddItemRequest) + +EmptyCartRequest = _reflection.GeneratedProtocolMessageType('EmptyCartRequest', (_message.Message,), dict( + DESCRIPTOR = _EMPTYCARTREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.EmptyCartRequest) + )) +_sym_db.RegisterMessage(EmptyCartRequest) + +GetCartRequest = _reflection.GeneratedProtocolMessageType('GetCartRequest', (_message.Message,), dict( + DESCRIPTOR = _GETCARTREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.GetCartRequest) + )) +_sym_db.RegisterMessage(GetCartRequest) + +Cart = _reflection.GeneratedProtocolMessageType('Cart', (_message.Message,), dict( + DESCRIPTOR = _CART, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.Cart) + )) +_sym_db.RegisterMessage(Cart) + +Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), dict( + DESCRIPTOR = _EMPTY, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.Empty) + )) +_sym_db.RegisterMessage(Empty) + +ListRecommendationsRequest = _reflection.GeneratedProtocolMessageType('ListRecommendationsRequest', (_message.Message,), dict( + DESCRIPTOR = _LISTRECOMMENDATIONSREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ListRecommendationsRequest) + )) +_sym_db.RegisterMessage(ListRecommendationsRequest) + +ListRecommendationsResponse = _reflection.GeneratedProtocolMessageType('ListRecommendationsResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTRECOMMENDATIONSRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ListRecommendationsResponse) + )) +_sym_db.RegisterMessage(ListRecommendationsResponse) + +Product = _reflection.GeneratedProtocolMessageType('Product', (_message.Message,), dict( + DESCRIPTOR = _PRODUCT, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.Product) + )) +_sym_db.RegisterMessage(Product) + +ListProductsResponse = _reflection.GeneratedProtocolMessageType('ListProductsResponse', (_message.Message,), dict( + DESCRIPTOR = _LISTPRODUCTSRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ListProductsResponse) + )) +_sym_db.RegisterMessage(ListProductsResponse) + +GetProductRequest = _reflection.GeneratedProtocolMessageType('GetProductRequest', (_message.Message,), dict( + DESCRIPTOR = _GETPRODUCTREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.GetProductRequest) + )) +_sym_db.RegisterMessage(GetProductRequest) + +SearchProductsRequest = _reflection.GeneratedProtocolMessageType('SearchProductsRequest', (_message.Message,), dict( + DESCRIPTOR = _SEARCHPRODUCTSREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.SearchProductsRequest) + )) +_sym_db.RegisterMessage(SearchProductsRequest) + +SearchProductsResponse = _reflection.GeneratedProtocolMessageType('SearchProductsResponse', (_message.Message,), dict( + DESCRIPTOR = _SEARCHPRODUCTSRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.SearchProductsResponse) + )) +_sym_db.RegisterMessage(SearchProductsResponse) + +GetQuoteRequest = _reflection.GeneratedProtocolMessageType('GetQuoteRequest', (_message.Message,), dict( + DESCRIPTOR = _GETQUOTEREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.GetQuoteRequest) + )) +_sym_db.RegisterMessage(GetQuoteRequest) + +GetQuoteResponse = _reflection.GeneratedProtocolMessageType('GetQuoteResponse', (_message.Message,), dict( + DESCRIPTOR = _GETQUOTERESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.GetQuoteResponse) + )) +_sym_db.RegisterMessage(GetQuoteResponse) + +ShipOrderRequest = _reflection.GeneratedProtocolMessageType('ShipOrderRequest', (_message.Message,), dict( + DESCRIPTOR = _SHIPORDERREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ShipOrderRequest) + )) +_sym_db.RegisterMessage(ShipOrderRequest) + +ShipOrderResponse = _reflection.GeneratedProtocolMessageType('ShipOrderResponse', (_message.Message,), dict( + DESCRIPTOR = _SHIPORDERRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ShipOrderResponse) + )) +_sym_db.RegisterMessage(ShipOrderResponse) + +Address = _reflection.GeneratedProtocolMessageType('Address', (_message.Message,), dict( + DESCRIPTOR = _ADDRESS, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.Address) + )) +_sym_db.RegisterMessage(Address) + +Money = _reflection.GeneratedProtocolMessageType('Money', (_message.Message,), dict( + DESCRIPTOR = _MONEY, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.Money) + )) +_sym_db.RegisterMessage(Money) + +GetSupportedCurrenciesResponse = _reflection.GeneratedProtocolMessageType('GetSupportedCurrenciesResponse', (_message.Message,), dict( + DESCRIPTOR = _GETSUPPORTEDCURRENCIESRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.GetSupportedCurrenciesResponse) + )) +_sym_db.RegisterMessage(GetSupportedCurrenciesResponse) + +CurrencyConversionRequest = _reflection.GeneratedProtocolMessageType('CurrencyConversionRequest', (_message.Message,), dict( + DESCRIPTOR = _CURRENCYCONVERSIONREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.CurrencyConversionRequest) + )) +_sym_db.RegisterMessage(CurrencyConversionRequest) + +CreditCardInfo = _reflection.GeneratedProtocolMessageType('CreditCardInfo', (_message.Message,), dict( + DESCRIPTOR = _CREDITCARDINFO, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.CreditCardInfo) + )) +_sym_db.RegisterMessage(CreditCardInfo) + +ChargeRequest = _reflection.GeneratedProtocolMessageType('ChargeRequest', (_message.Message,), dict( + DESCRIPTOR = _CHARGEREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ChargeRequest) + )) +_sym_db.RegisterMessage(ChargeRequest) + +ChargeResponse = _reflection.GeneratedProtocolMessageType('ChargeResponse', (_message.Message,), dict( + DESCRIPTOR = _CHARGERESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.ChargeResponse) + )) +_sym_db.RegisterMessage(ChargeResponse) + +OrderItem = _reflection.GeneratedProtocolMessageType('OrderItem', (_message.Message,), dict( + DESCRIPTOR = _ORDERITEM, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.OrderItem) + )) +_sym_db.RegisterMessage(OrderItem) + +OrderResult = _reflection.GeneratedProtocolMessageType('OrderResult', (_message.Message,), dict( + DESCRIPTOR = _ORDERRESULT, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.OrderResult) + )) +_sym_db.RegisterMessage(OrderResult) + +SendOrderConfirmationRequest = _reflection.GeneratedProtocolMessageType('SendOrderConfirmationRequest', (_message.Message,), dict( + DESCRIPTOR = _SENDORDERCONFIRMATIONREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.SendOrderConfirmationRequest) + )) +_sym_db.RegisterMessage(SendOrderConfirmationRequest) + +CreateOrderRequest = _reflection.GeneratedProtocolMessageType('CreateOrderRequest', (_message.Message,), dict( + DESCRIPTOR = _CREATEORDERREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.CreateOrderRequest) + )) +_sym_db.RegisterMessage(CreateOrderRequest) + +CreateOrderResponse = _reflection.GeneratedProtocolMessageType('CreateOrderResponse', (_message.Message,), dict( + DESCRIPTOR = _CREATEORDERRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.CreateOrderResponse) + )) +_sym_db.RegisterMessage(CreateOrderResponse) + +PlaceOrderRequest = _reflection.GeneratedProtocolMessageType('PlaceOrderRequest', (_message.Message,), dict( + DESCRIPTOR = _PLACEORDERREQUEST, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.PlaceOrderRequest) + )) +_sym_db.RegisterMessage(PlaceOrderRequest) + +PlaceOrderResponse = _reflection.GeneratedProtocolMessageType('PlaceOrderResponse', (_message.Message,), dict( + DESCRIPTOR = _PLACEORDERRESPONSE, + __module__ = 'demo_pb2' + # @@protoc_insertion_point(class_scope:hipstershop.PlaceOrderResponse) + )) +_sym_db.RegisterMessage(PlaceOrderResponse) + + + +_CARTSERVICE = _descriptor.ServiceDescriptor( + name='CartService', + full_name='hipstershop.CartService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=2428, + serialized_end=2630, + methods=[ + _descriptor.MethodDescriptor( + name='AddItem', + full_name='hipstershop.CartService.AddItem', + index=0, + containing_service=None, + input_type=_ADDITEMREQUEST, + output_type=_EMPTY, + options=None, + ), + _descriptor.MethodDescriptor( + name='GetCart', + full_name='hipstershop.CartService.GetCart', + index=1, + containing_service=None, + input_type=_GETCARTREQUEST, + output_type=_CART, + options=None, + ), + _descriptor.MethodDescriptor( + name='EmptyCart', + full_name='hipstershop.CartService.EmptyCart', + index=2, + containing_service=None, + input_type=_EMPTYCARTREQUEST, + output_type=_EMPTY, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_CARTSERVICE) + +DESCRIPTOR.services_by_name['CartService'] = _CARTSERVICE + + +_RECOMMENDATIONSERVICE = _descriptor.ServiceDescriptor( + name='RecommendationService', + full_name='hipstershop.RecommendationService', + file=DESCRIPTOR, + index=1, + options=None, + serialized_start=2633, + serialized_end=2764, + methods=[ + _descriptor.MethodDescriptor( + name='ListRecommendations', + full_name='hipstershop.RecommendationService.ListRecommendations', + index=0, + containing_service=None, + input_type=_LISTRECOMMENDATIONSREQUEST, + output_type=_LISTRECOMMENDATIONSRESPONSE, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_RECOMMENDATIONSERVICE) + +DESCRIPTOR.services_by_name['RecommendationService'] = _RECOMMENDATIONSERVICE + + +_PRODUCTCATALOGSERVICE = _descriptor.ServiceDescriptor( + name='ProductCatalogService', + full_name='hipstershop.ProductCatalogService', + file=DESCRIPTOR, + index=2, + options=None, + serialized_start=2767, + serialized_end=3026, + methods=[ + _descriptor.MethodDescriptor( + name='ListProducts', + full_name='hipstershop.ProductCatalogService.ListProducts', + index=0, + containing_service=None, + input_type=_EMPTY, + output_type=_LISTPRODUCTSRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='GetProduct', + full_name='hipstershop.ProductCatalogService.GetProduct', + index=1, + containing_service=None, + input_type=_GETPRODUCTREQUEST, + output_type=_PRODUCT, + options=None, + ), + _descriptor.MethodDescriptor( + name='SearchProducts', + full_name='hipstershop.ProductCatalogService.SearchProducts', + index=2, + containing_service=None, + input_type=_SEARCHPRODUCTSREQUEST, + output_type=_SEARCHPRODUCTSRESPONSE, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_PRODUCTCATALOGSERVICE) + +DESCRIPTOR.services_by_name['ProductCatalogService'] = _PRODUCTCATALOGSERVICE + + +_SHIPPINGSERVICE = _descriptor.ServiceDescriptor( + name='ShippingService', + full_name='hipstershop.ShippingService', + file=DESCRIPTOR, + index=3, + options=None, + serialized_start=3029, + serialized_end=3199, + methods=[ + _descriptor.MethodDescriptor( + name='GetQuote', + full_name='hipstershop.ShippingService.GetQuote', + index=0, + containing_service=None, + input_type=_GETQUOTEREQUEST, + output_type=_GETQUOTERESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='ShipOrder', + full_name='hipstershop.ShippingService.ShipOrder', + index=1, + containing_service=None, + input_type=_SHIPORDERREQUEST, + output_type=_SHIPORDERRESPONSE, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_SHIPPINGSERVICE) + +DESCRIPTOR.services_by_name['ShippingService'] = _SHIPPINGSERVICE + + +_CURRENCYSERVICE = _descriptor.ServiceDescriptor( + name='CurrencyService', + full_name='hipstershop.CurrencyService', + file=DESCRIPTOR, + index=4, + options=None, + serialized_start=3202, + serialized_end=3385, + methods=[ + _descriptor.MethodDescriptor( + name='GetSupportedCurrencies', + full_name='hipstershop.CurrencyService.GetSupportedCurrencies', + index=0, + containing_service=None, + input_type=_EMPTY, + output_type=_GETSUPPORTEDCURRENCIESRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='Convert', + full_name='hipstershop.CurrencyService.Convert', + index=1, + containing_service=None, + input_type=_CURRENCYCONVERSIONREQUEST, + output_type=_MONEY, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_CURRENCYSERVICE) + +DESCRIPTOR.services_by_name['CurrencyService'] = _CURRENCYSERVICE + + +_PAYMENTSERVICE = _descriptor.ServiceDescriptor( + name='PaymentService', + full_name='hipstershop.PaymentService', + file=DESCRIPTOR, + index=5, + options=None, + serialized_start=3387, + serialized_end=3472, + methods=[ + _descriptor.MethodDescriptor( + name='Charge', + full_name='hipstershop.PaymentService.Charge', + index=0, + containing_service=None, + input_type=_CHARGEREQUEST, + output_type=_CHARGERESPONSE, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_PAYMENTSERVICE) + +DESCRIPTOR.services_by_name['PaymentService'] = _PAYMENTSERVICE + + +_EMAILSERVICE = _descriptor.ServiceDescriptor( + name='EmailService', + full_name='hipstershop.EmailService', + file=DESCRIPTOR, + index=6, + options=None, + serialized_start=3474, + serialized_end=3578, + methods=[ + _descriptor.MethodDescriptor( + name='SendOrderConfirmation', + full_name='hipstershop.EmailService.SendOrderConfirmation', + index=0, + containing_service=None, + input_type=_SENDORDERCONFIRMATIONREQUEST, + output_type=_EMPTY, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_EMAILSERVICE) + +DESCRIPTOR.services_by_name['EmailService'] = _EMAILSERVICE + + +_CHECKOUTSERVICE = _descriptor.ServiceDescriptor( + name='CheckoutService', + full_name='hipstershop.CheckoutService', + file=DESCRIPTOR, + index=7, + options=None, + serialized_start=3581, + serialized_end=3763, + methods=[ + _descriptor.MethodDescriptor( + name='CreateOrder', + full_name='hipstershop.CheckoutService.CreateOrder', + index=0, + containing_service=None, + input_type=_CREATEORDERREQUEST, + output_type=_CREATEORDERRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='PlaceOrder', + full_name='hipstershop.CheckoutService.PlaceOrder', + index=1, + containing_service=None, + input_type=_PLACEORDERREQUEST, + output_type=_PLACEORDERRESPONSE, + options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_CHECKOUTSERVICE) + +DESCRIPTOR.services_by_name['CheckoutService'] = _CHECKOUTSERVICE + +# @@protoc_insertion_point(module_scope) diff --git a/src/emailservice/demo_pb2_grpc.py b/src/emailservice/demo_pb2_grpc.py new file mode 100644 index 0000000..86e0815 --- /dev/null +++ b/src/emailservice/demo_pb2_grpc.py @@ -0,0 +1,475 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +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 + pass + 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 + pass + 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 + pass + 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,)) + + +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 + pass + 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,)) + + +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 + pass + 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 + pass + 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 + pass + 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,)) + + +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 + pass + 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 + pass + 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,)) + + +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 + pass + 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 + pass + 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,)) + + +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 + pass + 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,)) + + +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 + pass + 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,)) + + +class CheckoutServiceStub(object): + """-------------Checkout service----------------- + + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.CreateOrder = channel.unary_unary( + '/hipstershop.CheckoutService/CreateOrder', + request_serializer=demo__pb2.CreateOrderRequest.SerializeToString, + response_deserializer=demo__pb2.CreateOrderResponse.FromString, + ) + 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 CreateOrder(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def PlaceOrder(self, request, context): + # missing associated documentation comment in .proto file + pass + 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 = { + 'CreateOrder': grpc.unary_unary_rpc_method_handler( + servicer.CreateOrder, + request_deserializer=demo__pb2.CreateOrderRequest.FromString, + response_serializer=demo__pb2.CreateOrderResponse.SerializeToString, + ), + '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,)) diff --git a/src/emailservice/email_client.py b/src/emailservice/email_client.py new file mode 100644 index 0000000..f0a1a20 --- /dev/null +++ b/src/emailservice/email_client.py @@ -0,0 +1,32 @@ +import grpc + +import demo_pb2 +import demo_pb2_grpc + +# from opencensus.trace.tracer import Tracer +# from opencensus.trace.exporters import stackdriver_exporter +# from opencensus.trace.ext.grpc import client_interceptor + +# try: +# exporter = stackdriver_exporter.StackdriverExporter() +# tracer = Tracer(exporter=exporter) +# tracer_interceptor = client_interceptor.OpenCensusClientInterceptor(tracer, host_port='0.0.0.0:8080') +# except: +# tracer_interceptor = client_interceptor.OpenCensusClientInterceptor() + +def send_confirmation_email(email, order): + channel = grpc.insecure_channel('0.0.0.0:8080') + # channel = grpc.intercept_channel(channel, tracer_interceptor) + stub = demo_pb2_grpc.EmailServiceStub(channel) + try: + response = stub.SendOrderConfirmation(demo_pb2.SendOrderConfirmationRequest( + email = email, + order = order + )) + print('Request sent.') + except grpc.RpcError as err: + print(err.details()) + print('{}, {}'.format(err.code().name, err.code().value)) + +if __name__ == '__main__': + print('Client for email service.') \ No newline at end of file diff --git a/src/emailservice/email_server.py b/src/emailservice/email_server.py new file mode 100644 index 0000000..2c6b37e --- /dev/null +++ b/src/emailservice/email_server.py @@ -0,0 +1,113 @@ +from concurrent import futures +import argparse +import os +import sys +import time + +from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateError +from google.api_core.exceptions import GoogleAPICallError +import grpc + +import demo_pb2 +import demo_pb2_grpc + +# from opencensus.trace.ext.grpc import server_interceptor +# from opencensus.trace.samplers import always_on +# from opencensus.trace.exporters import stackdriver_exporter +# from opencensus.trace.exporters import print_exporter + +# import googleclouddebugger + +# try: +# sampler = always_on.AlwaysOnSampler() +# exporter = stackdriver_exporter.StackdriverExporter() +# tracer_interceptor = server_interceptor.OpenCensusServerInterceptor(sampler, exporter) +# except: +# tracer_interceptor = server_interceptor.OpenCensusServerInterceptor() + +# try: +# googleclouddebugger.enable( +# module='emailserver', +# version='1.0.0' +# ) +# except: +# pass + +# Loads confirmation email template from file +env = Environment( + loader=FileSystemLoader('templates'), + autoescape=select_autoescape(['html', 'xml']) +) +template = env.get_template('confirmation.html') + +class EmailService(demo_pb2_grpc.EmailServiceServicer): + 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 + } + ) + + print("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.") + print(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(demo_pb2_grpc.EmailServiceServicer): + def SendOrderConfirmation(self, request, context): + print('A request to send order confirmation email to {} has been received.'.format(request.email)) + return demo_pb2.Empty() + +def start(dummy_mode): + server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))#, interceptors=(tracer_interceptor,)) + if dummy_mode: + demo_pb2_grpc.add_EmailServiceServicer_to_server(DummyEmailService(), server) + else: + raise Exception('non-dummy mode not implemented') + server.add_insecure_port('[::]:8080') + server.start() + try: + while True: + time.sleep(3600) + except KeyboardInterrupt: + server.stop(0) + + +if __name__ == '__main__': + print('Starting the email service in dummy mode.') + start(dummy_mode = True) diff --git a/src/emailservice/genproto.sh b/src/emailservice/genproto.sh new file mode 100755 index 0000000..d5ef489 --- /dev/null +++ b/src/emailservice/genproto.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e + +python -m grpc_tools.protoc -I../../pb --python_out=. --grpc_python_out=. ../../pb/demo.proto diff --git a/src/emailservice/requirements.txt b/src/emailservice/requirements.txt new file mode 100644 index 0000000..5c65c2b --- /dev/null +++ b/src/emailservice/requirements.txt @@ -0,0 +1,30 @@ +cachetools==2.1.0 +certifi==2018.4.16 +chardet==3.0.4 +cryptography==1.7.1 +google-api-core==1.2.1 +google-auth==1.5.0 +google-cloud-core==0.28.1 +google-cloud-trace==0.19.0 +googleapis-common-protos==1.5.3 +grpc-google-iam-v1==0.11.4 +grpcio==1.12.1 +grpcio-tools==1.12.1 +idna==2.7 +Jinja2==2.10 +keyring==10.1 +keyrings.alt==1.3 +MarkupSafe==1.0 +opencensus==0.1.5 +protobuf==3.6.0 +pyasn1==0.4.3 +pyasn1-modules==0.2.2 +pycrypto==2.6.1 +pygobject==3.22.0 +pytz==2018.5 +pyxdg==0.25 +requests==2.19.1 +rsa==3.4.2 +SecretStorage==2.3.1 +six==1.11.0 +urllib3==1.23 diff --git a/src/emailservice/templates/confirmation.html b/src/emailservice/templates/confirmation.html new file mode 100644 index 0000000..8e56fc6 --- /dev/null +++ b/src/emailservice/templates/confirmation.html @@ -0,0 +1,37 @@ + + + + Your Order Confirmation + + + + +

Your Order Confirmation

+

Thanks for shopping with us!

+

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}}

+

Items

+ + + + + + + {% for item in order.items %} + + + + + + {% endfor %} +
Item No.QuantityPrice
#{{ item.item.product_id }}{{ item.item.quantity }}{{ item.cost.units }}.{{ "%02d" | format(item.cost.nanos // 10000000) }} {{ item.cost.currency_code }}
+ +