From 564dc8c708062afa96bde10b8ac64af3736d0baa Mon Sep 17 00:00:00 2001 From: AMontagu Date: Wed, 3 Jan 2024 17:48:03 +0100 Subject: [PATCH 01/19] fix default value --- django_socio_grpc/protobuf/proto_classes.py | 6 ++++-- .../tests/fakeapp/grpc/fakeapp.proto | 10 +++++++++ django_socio_grpc/tests/fakeapp/models.py | 2 ++ .../tests/fakeapp/serializers.py | 4 +++- .../fakeapp.proto | 6 ++++++ .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 10 +++++++++ .../protos/NO_MODEL_GENERATED/fakeapp.proto | 4 ++++ .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 6 ++++++ .../tests/test_protobuf_registration.py | 21 ++++++++++++++----- 9 files changed, 61 insertions(+), 8 deletions(-) diff --git a/django_socio_grpc/protobuf/proto_classes.py b/django_socio_grpc/protobuf/proto_classes.py index 7f12ffd7..557022bc 100644 --- a/django_socio_grpc/protobuf/proto_classes.py +++ b/django_socio_grpc/protobuf/proto_classes.py @@ -20,7 +20,7 @@ from django.core.exceptions import FieldDoesNotExist from django.db import models from rest_framework import serializers -from rest_framework.fields import HiddenField +from rest_framework.fields import HiddenField, empty from rest_framework.utils.model_meta import RelationInfo, get_field_info from django_socio_grpc.protobuf.message_name_constructor import MessageNameConstructor @@ -89,7 +89,9 @@ def field_line(self) -> str: @classmethod def _get_cardinality(self, field: serializers.Field): - return FieldCardinality.OPTIONAL if field.allow_null else FieldCardinality.NONE + if field.allow_null or field.default not in [None, empty]: + return FieldCardinality.OPTIONAL + return FieldCardinality.NONE @classmethod def from_field_dict(cls, field_dict: FieldDict) -> "ProtoField": diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index 4b8e9896..d97ba2c2 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -187,12 +187,16 @@ message BasicProtoListChildRequest { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicProtoListChildResponse { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicServiceListResponse { @@ -509,18 +513,24 @@ message UnitTestModelPartialUpdateRequest { string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; + optional int32 count = 5; + bool is_validated = 6; } message UnitTestModelRequest { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelResponse { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index e138a2b0..f72c0722 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -16,6 +16,8 @@ class UnitTestModel(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=20) text = models.CharField(max_length=100, null=True) + count = models.IntegerField() + is_validated = models.BooleanField(default=False) class Meta: grpc_messages = { diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index 13f6136e..e83dc75d 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -39,11 +39,13 @@ class Meta: class UnitTestModelSerializer(proto_serializers.ModelProtoSerializer): + count = serializers.IntegerField(default=10) + class Meta: model = UnitTestModel proto_class = fakeapp_pb2.UnitTestModelResponse proto_class_list = fakeapp_pb2.UnitTestModelListResponse - fields = ("id", "title", "text") + fields = "__all__" # INFO - AM - 14/02/2024 - This serializer exist just to be sure we do not override UnitTestModelSerializer in the proto diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 3bc19449..b553db47 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -164,6 +164,8 @@ message BasicProtoListChild { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicProtoListChildList { @@ -406,6 +408,8 @@ message UnitTestModel { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelDestroyRequest { @@ -435,6 +439,8 @@ message UnitTestModelPartialUpdateRequest { string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; + optional int32 count = 5; + bool is_validated = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index 4b8e9896..d97ba2c2 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -187,12 +187,16 @@ message BasicProtoListChildRequest { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicProtoListChildResponse { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicServiceListResponse { @@ -509,18 +513,24 @@ message UnitTestModelPartialUpdateRequest { string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; + optional int32 count = 5; + bool is_validated = 6; } message UnitTestModelRequest { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelResponse { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index 06928a74..1f0e9edc 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -97,12 +97,16 @@ message BasicProtoListChildRequest { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicProtoListChildResponse { int32 id = 1; string title = 2; optional string text = 3; + int32 count = 4; + bool is_validated = 5; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index c921d2e6..a6269cdf 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -42,18 +42,24 @@ message UnitTestModelPartialUpdateRequest { string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; + optional int32 count = 5; + bool is_validated = 6; } message UnitTestModelRequest { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelResponse { int32 id = 1; string title = 2; optional string text = 3; + optional int32 count = 4; + bool is_validated = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_protobuf_registration.py b/django_socio_grpc/tests/test_protobuf_registration.py index 8b1cb76b..143642df 100644 --- a/django_socio_grpc/tests/test_protobuf_registration.py +++ b/django_socio_grpc/tests/test_protobuf_registration.py @@ -83,6 +83,7 @@ class MySerializer(proto_serializers.ProtoSerializer): user_name = MyIntField(help_text=ProtoComment(["@test=comment1", "@test2=comment2"])) title = serializers.CharField() optional_field = serializers.CharField(allow_null=True) + default_char = serializers.CharField(default="value") list_field = serializers.ListField(child=serializers.CharField()) list_field_with_serializer = serializers.ListField(child=MyOtherSerializer()) @@ -261,6 +262,16 @@ def test_from_field_serializer_choice_field(self): assert proto_field.field_type == "int32" assert proto_field.cardinality == FieldCardinality.NONE + def test_from_field_default(self): + ser = MySerializer() + field_char = ser.fields["default_char"] + + proto_field_char = ProtoField.from_field(field_char) + + assert proto_field_char.name == "default_char" + assert proto_field_char.field_type == "string" + assert proto_field_char.cardinality == FieldCardinality.OPTIONAL + # FROM_SERIALIZER def test_from_serializer(self): @@ -395,26 +406,26 @@ def test_from_serializer(self): proto_message = ProtoMessage.from_serializer(MySerializer, name="My") assert proto_message.name == "My" - assert len(proto_message.fields) == 11 + assert len(proto_message.fields) == 12 def test_from_serializer_request(self): proto_message = RequestProtoMessage.from_serializer(MySerializer, name="MyRequest") assert proto_message.name == "MyRequest" - assert len(proto_message.fields) == 6 + assert len(proto_message.fields) == 7 assert "write_only_field" in proto_message proto_message = RequestProtoMessage.from_serializer(MySerializer, "CustomName") assert proto_message.name == "CustomName" - assert len(proto_message.fields) == 6 + assert len(proto_message.fields) == 7 def test_from_serializer_response(self): proto_message = ResponseProtoMessage.from_serializer(MySerializer, name="MyResponse") assert proto_message.name == "MyResponse" - assert len(proto_message.fields) == 10 + assert len(proto_message.fields) == 11 def test_from_serializer_nested(self): proto_message = ResponseProtoMessage.from_serializer( @@ -426,7 +437,7 @@ def test_from_serializer_nested(self): assert proto_message.comments == ["serializer comment"] assert proto_message.fields[0].name == "serializer" - assert len(proto_message.fields[0].field_type.fields) == 10 + assert len(proto_message.fields[0].field_type.fields) == 11 class TestGrpcActionProto(TestCase): From 39aa2b97bff0890f00730423b74f23cb5d515182 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Wed, 3 Jan 2024 20:13:38 +0100 Subject: [PATCH 02/19] working code for default value for required but need all implementation --- django_socio_grpc/mixins.py | 15 +- django_socio_grpc/proto_serializers.py | 13 +- django_socio_grpc/protobuf/json_format.py | 3 + django_socio_grpc/protobuf/proto_classes.py | 3 +- .../tests/fakeapp/grpc/fakeapp.proto | 90 ++--- .../tests/fakeapp/grpc/fakeapp_pb2.py | 322 ++++++++---------- django_socio_grpc/tests/fakeapp/models.py | 2 +- .../tests/fakeapp/serializers.py | 3 +- .../fakeapp.proto | 70 ++-- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 90 ++--- .../CUSTOM_APP_MODEL_GENERATED/fakeapp.proto | 4 +- .../fakeapp.proto | 18 +- .../MODEL_WITH_M2M_GENERATED/fakeapp.proto | 18 +- .../fakeapp.proto | 4 +- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 12 +- .../RECURSIVE_MODEL_GENERATED/fakeapp.proto | 12 +- .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 18 +- .../tests/test_app_handler_registry.py | 2 +- .../tests/test_async_model_service.py | 18 +- .../tests/test_filtering_metadata.py | 4 +- .../tests/test_pagination_metadata.py | 2 +- .../tests/test_sync_model_service.py | 2 +- django_socio_grpc/utils/debug.py | 9 + 23 files changed, 382 insertions(+), 352 deletions(-) diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index 19e408f9..a2f976d6 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -286,7 +286,12 @@ def PartialUpdate(self, request, context): content = message_to_dict(request) - data = {k: v for k, v in content.items() if k in request._partial_update_fields} + data = {} + for field_name, field_vale in content.items(): + if field_name not in request._partial_update_fields: + data[field_name] = None + continue + data[field_name] = field_vale instance = self.get_object() @@ -488,7 +493,13 @@ async def PartialUpdate(self, request, context): content = message_to_dict(request) - data = {k: v for k, v in content.items() if k in request._partial_update_fields} + # TODO use the serializer with the partial=True for that + data = {} + for field_name, field_vale in content.items(): + if field_name not in request._partial_update_fields: + data[field_name] = None + continue + data[field_name] = field_vale instance = await self.aget_object() diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 0ae04b8f..13d5c88e 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -4,6 +4,7 @@ from django.core.validators import MaxLengthValidator from django.utils.translation import gettext as _ from rest_framework.exceptions import ValidationError +from rest_framework.fields import empty from rest_framework.relations import SlugRelatedField from rest_framework.serializers import ( LIST_SERIALIZER_KWARGS, @@ -34,7 +35,17 @@ def __init__(self, *args, **kwargs): def message_to_data(self, message): """Protobuf message -> Dict of python primitive datatypes.""" - return message_to_dict(message) + data_dict = message_to_dict(message) + data_dict = self.populate_dict_with_none_if_not_required(data_dict) + return data_dict + + def populate_dict_with_none_if_not_required(self, data_dict): + for field in self.fields.values(): + if field.field_name in data_dict: + continue + if field.allow_null or field.default in [None, empty] and field.required is True: + data_dict[field.field_name] = None + return data_dict def data_to_message(self, data): """Protobuf message <- Dict of python primitive datatypes.""" diff --git a/django_socio_grpc/protobuf/json_format.py b/django_socio_grpc/protobuf/json_format.py index 08120018..234c498e 100644 --- a/django_socio_grpc/protobuf/json_format.py +++ b/django_socio_grpc/protobuf/json_format.py @@ -1,7 +1,9 @@ +from typing import Type from uuid import UUID from google.protobuf import json_format from google.protobuf.json_format import MessageToDict, ParseDict +from rest_framework import serializers def _is_field_optional(field): @@ -29,6 +31,7 @@ def message_to_dict(message, **kwargs): kwargs.setdefault("preserving_proto_field_name", True) result_dict = MessageToDict(message, **kwargs) + return result_dict optional_fields = { field.name: None for field in message.DESCRIPTOR.fields if _is_field_optional(field) } diff --git a/django_socio_grpc/protobuf/proto_classes.py b/django_socio_grpc/protobuf/proto_classes.py index 557022bc..2f8f248a 100644 --- a/django_socio_grpc/protobuf/proto_classes.py +++ b/django_socio_grpc/protobuf/proto_classes.py @@ -89,7 +89,8 @@ def field_line(self) -> str: @classmethod def _get_cardinality(self, field: serializers.Field): - if field.allow_null or field.default not in [None, empty]: + ProtoGeneratorPrintHelper.print("field.default: ", field.default) + if field.allow_null or field.required is False or field.default not in [None, empty]: return FieldCardinality.OPTIONAL return FieldCardinality.NONE diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index d97ba2c2..a24c1f39 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -184,19 +184,19 @@ message BasicProtoListChildListResponse { } message BasicProtoListChildRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicProtoListChildResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicServiceListResponse { @@ -245,8 +245,8 @@ message CustomNameForResponse { // Test comment for whole message message CustomRetrieveResponseSpecialFieldsModelResponse { - string uuid = 1; - int32 default_method_field = 2; + optional string uuid = 1; + optional int32 default_method_field = 2; repeated google.protobuf.Struct custom_method_field = 3; } @@ -263,13 +263,13 @@ message ForeignModelListResponse { } message ForeignModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } message ForeignModelRetrieveCustomResponse { string name = 1; - string custom = 2; + optional string custom = 2; } message ForeignModelRetrieveCustomRetrieveRequest { @@ -277,23 +277,23 @@ message ForeignModelRetrieveCustomRetrieveRequest { } message ImportStructEvenInArrayModelRequest { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ImportStructEvenInArrayModelResponse { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ManyManyModelRequest { - string uuid = 1; + optional string uuid = 1; string name = 2; string test_write_only_on_nested = 3; } message ManyManyModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } @@ -310,21 +310,21 @@ message RecursiveTestModelListResponse { } message RecursiveTestModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - RecursiveTestModelRequest parent = 3; + optional RecursiveTestModelRequest parent = 3; repeated RecursiveTestModelRequest children = 4; } message RecursiveTestModelRequest { - string uuid = 1; - RecursiveTestModelRequest parent = 2; + optional string uuid = 1; + optional RecursiveTestModelRequest parent = 2; repeated RecursiveTestModelRequest children = 3; } message RecursiveTestModelResponse { - string uuid = 1; - RecursiveTestModelResponse parent = 2; + optional string uuid = 1; + optional RecursiveTestModelResponse parent = 2; repeated RecursiveTestModelResponse children = 3; } @@ -345,7 +345,7 @@ message RelatedFieldModelListResponse { } message RelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string _partial_update_fields = 4; @@ -353,20 +353,20 @@ message RelatedFieldModelPartialUpdateRequest { } message RelatedFieldModelRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string many_many_foreigns = 4; } message RelatedFieldModelResponse { - string uuid = 1; - ForeignModelResponse foreign = 2; + optional string uuid = 1; + optional ForeignModelResponse foreign = 2; repeated ManyManyModelResponse many_many = 3; - int32 slug_test_model = 4; + optional int32 slug_test_model = 4; repeated bool slug_reverse_test_model = 5; repeated string slug_many_many = 6; - string proto_slug_related_field = 7; + optional string proto_slug_related_field = 7; string custom_field_name = 8; repeated string many_many_foreigns = 9; } @@ -388,7 +388,7 @@ message SimpleRelatedFieldModelListResponse { } message SimpleRelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; optional string foreign = 3; optional string slug_test_model = 4; @@ -398,7 +398,7 @@ message SimpleRelatedFieldModelPartialUpdateRequest { } message SimpleRelatedFieldModelRequest { - string uuid = 1; + optional string uuid = 1; optional string foreign = 2; optional string slug_test_model = 3; repeated string many_many = 4; @@ -407,7 +407,7 @@ message SimpleRelatedFieldModelRequest { } message SimpleRelatedFieldModelResponse { - string uuid = 1; + optional string uuid = 1; optional string foreign = 2; optional string slug_test_model = 3; repeated string many_many = 4; @@ -434,27 +434,27 @@ message SpecialFieldsModelListResponse { // Special Fields Model // with two lines comment message SpecialFieldsModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - google.protobuf.Struct meta_datas = 3; + optional google.protobuf.Struct meta_datas = 3; repeated int32 list_datas = 4; } // Special Fields Model // with two lines comment message SpecialFieldsModelRequest { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; } // Special Fields Model // with two lines comment message SpecialFieldsModelResponse { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; - bytes binary = 4; + optional bytes binary = 4; } message SpecialFieldsModelRetrieveRequest { @@ -509,28 +509,28 @@ message UnitTestModelListWithExtraArgsRequest { } message UnitTestModelPartialUpdateRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; - optional int32 count = 5; - bool is_validated = 6; + optional bool is_validated = 6; + optional int32 some_default_counter = 7; } message UnitTestModelRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 83e3d059..f65fc0f7 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"S\n\x1a\x42\x61sicProtoListChildRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\"T\n\x1b\x42\x61sicProtoListChildResponse\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\x94\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1c\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.Struct\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"2\n\x14\x46oreignModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"B\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x63ustom\x18\x02 \x01(\t\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"c\n#ImportStructEvenInArrayModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.Struct\"d\n$ImportStructEvenInArrayModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.Struct\"U\n\x14ManyManyModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\t\"3\n\x15ManyManyModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd4\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12<\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequest\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequest\"\xa7\x01\n\x19RecursiveTestModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12<\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequest\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequest\"\xaa\x01\n\x1aRecursiveTestModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12=\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc8\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\t\"\x9b\x01\n\x18RelatedFieldModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\t\"\xcb\x02\n\x19RelatedFieldModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x38\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x17\n\x0fslug_test_model\x18\x04 \x01(\x05\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12 \n\x18proto_slug_related_field\x18\x07 \x01(\t\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\t\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf6\x01\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xc9\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xca\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x97\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12+\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\"j\n\x19SpecialFieldsModelRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12+\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\"{\n\x1aSpecialFieldsModelResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12+\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x0e\n\x06\x62inary\x18\x04 \x01(\x0c\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"z\n!UnitTestModelPartialUpdateRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\tB\x07\n\x05_text\"M\n\x14UnitTestModelRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\"N\n\x15UnitTestModelResponse\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest\"9\n+UnitTestModelWithStructFilterDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\xb5\x01\n3UnitTestModelWithStructFilterEmptyWithFilterRequest\x12.\n\x08_filters\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x31\n\x0b_pagination\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x0b\n\tX_filtersB\x0e\n\x0cX_pagination\"\xaa\x01\n(UnitTestModelWithStructFilterListRequest\x12.\n\x08_filters\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x31\n\x0b_pagination\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x0b\n\tX_filtersB\x0e\n\x0cX_pagination\"\x85\x01\n)UnitTestModelWithStructFilterListResponse\x12I\n\x07results\x18\x01 \x03(\x0b\x32\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x8a\x01\n1UnitTestModelWithStructFilterPartialUpdateRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\tB\x07\n\x05_text\"]\n$UnitTestModelWithStructFilterRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\"^\n%UnitTestModelWithStructFilterResponse\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_text\":\n,UnitTestModelWithStructFilterRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\",\n*UnitTestModelWithStructFilterStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xad\x08\n\'UnitTestModelWithStructFilterController\x12}\n\x06\x43reate\x12\x37.myproject.fakeapp.UnitTestModelWithStructFilterRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x63\n\x07\x44\x65stroy\x12>.myproject.fakeapp.UnitTestModelWithStructFilterDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12s\n\x0f\x45mptyWithFilter\x12\x46.myproject.fakeapp.UnitTestModelWithStructFilterEmptyWithFilterRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x83\x01\n\x04List\x12;.myproject.fakeapp.UnitTestModelWithStructFilterListRequest\x1a<.myproject.fakeapp.UnitTestModelWithStructFilterListResponse\"\x00\x12\x91\x01\n\rPartialUpdate\x12\x44.myproject.fakeapp.UnitTestModelWithStructFilterPartialUpdateRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12?.myproject.fakeapp.UnitTestModelWithStructFilterRetrieveRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x85\x01\n\x06Stream\x12=.myproject.fakeapp.UnitTestModelWithStructFilterStreamRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x30\x01\x12}\n\x06Update\x12\x37.myproject.fakeapp.UnitTestModelWithStructFilterRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xa9\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"\xaa\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x19\n\x0cis_validated\x18\x06 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x07 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x06 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x06 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,174 +51,154 @@ _globals['_BASICPROTOLISTCHILDLISTREQUEST']._serialized_end=1271 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_start=1273 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_end=1386 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1388 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1471 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1473 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1557 - _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1559 - _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1658 - _globals['_BASICSERVICEREQUEST']._serialized_start=1661 - _globals['_BASICSERVICEREQUEST']._serialized_end=1838 - _globals['_BASICSERVICERESPONSE']._serialized_start=1841 - _globals['_BASICSERVICERESPONSE']._serialized_end=1996 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=1998 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2105 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2107 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2152 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2154 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2195 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2197 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2239 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2242 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2390 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2392 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2443 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2445 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2470 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2472 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2571 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=2573 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=2623 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2625 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=2691 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=2693 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=2750 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=2752 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=2851 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=2853 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=2953 - _globals['_MANYMANYMODELREQUEST']._serialized_start=2955 - _globals['_MANYMANYMODELREQUEST']._serialized_end=3040 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=3042 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=3093 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3095 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3143 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3145 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3176 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3178 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3289 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3292 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3504 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3507 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=3674 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=3677 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=3847 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=3849 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=3898 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=3900 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=3947 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=3949 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=3979 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=3981 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4105 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4108 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4308 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4311 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=4466 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=4469 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=4800 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=4802 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=4850 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4852 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4905 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=4907 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=4943 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=4945 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5066 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5069 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5315 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5318 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=5519 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=5522 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=5724 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5726 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5780 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=5782 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=5830 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=5832 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=5863 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=5865 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=5976 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=5979 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6130 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6132 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=6238 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=6240 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=6363 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=6365 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=6414 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=6416 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=6523 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=6525 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=6564 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=6566 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=6607 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=6609 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=6654 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=6656 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=6702 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=6704 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=6765 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=6767 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=6808 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=6811 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=6953 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=6955 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=6981 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=6983 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7084 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7086 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7143 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7145 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=7267 - _globals['_UNITTESTMODELREQUEST']._serialized_start=7269 - _globals['_UNITTESTMODELREQUEST']._serialized_end=7346 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=7348 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=7426 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=7428 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=7470 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=7472 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=7500 - _globals['_UNITTESTMODELWITHSTRUCTFILTERDESTROYREQUEST']._serialized_start=7502 - _globals['_UNITTESTMODELWITHSTRUCTFILTERDESTROYREQUEST']._serialized_end=7559 - _globals['_UNITTESTMODELWITHSTRUCTFILTEREMPTYWITHFILTERREQUEST']._serialized_start=7562 - _globals['_UNITTESTMODELWITHSTRUCTFILTEREMPTYWITHFILTERREQUEST']._serialized_end=7743 - _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTREQUEST']._serialized_start=7746 - _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTREQUEST']._serialized_end=7916 - _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTRESPONSE']._serialized_start=7919 - _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTRESPONSE']._serialized_end=8052 - _globals['_UNITTESTMODELWITHSTRUCTFILTERPARTIALUPDATEREQUEST']._serialized_start=8055 - _globals['_UNITTESTMODELWITHSTRUCTFILTERPARTIALUPDATEREQUEST']._serialized_end=8193 - _globals['_UNITTESTMODELWITHSTRUCTFILTERREQUEST']._serialized_start=8195 - _globals['_UNITTESTMODELWITHSTRUCTFILTERREQUEST']._serialized_end=8288 - _globals['_UNITTESTMODELWITHSTRUCTFILTERRESPONSE']._serialized_start=8290 - _globals['_UNITTESTMODELWITHSTRUCTFILTERRESPONSE']._serialized_end=8384 - _globals['_UNITTESTMODELWITHSTRUCTFILTERRETRIEVEREQUEST']._serialized_start=8386 - _globals['_UNITTESTMODELWITHSTRUCTFILTERRETRIEVEREQUEST']._serialized_end=8444 - _globals['_UNITTESTMODELWITHSTRUCTFILTERSTREAMREQUEST']._serialized_start=8446 - _globals['_UNITTESTMODELWITHSTRUCTFILTERSTREAMREQUEST']._serialized_end=8490 - _globals['_BASICCONTROLLER']._serialized_start=8493 - _globals['_BASICCONTROLLER']._serialized_end=9719 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=9722 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=10059 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10062 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10317 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10320 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10485 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10488 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11169 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11172 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=11841 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=11844 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12586 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12589 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13293 - _globals['_STREAMINCONTROLLER']._serialized_start=13296 - _globals['_STREAMINCONTROLLER']._serialized_end=13550 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13553 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14422 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14425 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15286 - _globals['_UNITTESTMODELWITHSTRUCTFILTERCONTROLLER']._serialized_start=15289 - _globals['_UNITTESTMODELWITHSTRUCTFILTERCONTROLLER']._serialized_end=16358 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1389 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1558 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1561 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1731 + _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1733 + _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1832 + _globals['_BASICSERVICEREQUEST']._serialized_start=1835 + _globals['_BASICSERVICEREQUEST']._serialized_end=2012 + _globals['_BASICSERVICERESPONSE']._serialized_start=2015 + _globals['_BASICSERVICERESPONSE']._serialized_end=2170 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2172 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2279 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2281 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2326 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2328 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2369 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2371 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2413 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2416 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2608 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2610 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2661 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2663 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2688 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2690 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2789 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=2791 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=2855 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2857 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=2939 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=2941 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=2998 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3000 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3113 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3115 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3229 + _globals['_MANYMANYMODELREQUEST']._serialized_start=3231 + _globals['_MANYMANYMODELREQUEST']._serialized_end=3330 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=3332 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=3397 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3399 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3447 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3449 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3480 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3482 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3593 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3596 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3838 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3841 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4038 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4041 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4241 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4243 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4292 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4294 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4341 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4343 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4373 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4375 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4499 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4502 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4716 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4719 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=4888 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=4891 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5312 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5314 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5362 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5364 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5417 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5419 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5455 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5457 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5578 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5581 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5841 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5844 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6059 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6062 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6278 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6280 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6334 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6336 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6384 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6386 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6417 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6419 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6530 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6533 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6718 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6721 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=6861 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=6864 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7037 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7039 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7088 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7090 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7197 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7199 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7238 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7240 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7281 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7283 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7328 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7330 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7376 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7378 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7439 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7441 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7482 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7485 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7627 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7629 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7655 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7657 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7758 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7760 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7817 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7820 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8058 + _globals['_UNITTESTMODELREQUEST']._serialized_start=8061 + _globals['_UNITTESTMODELREQUEST']._serialized_end=8254 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=8257 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=8451 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8453 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8495 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8497 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8525 + _globals['_BASICCONTROLLER']._serialized_start=8528 + _globals['_BASICCONTROLLER']._serialized_end=9754 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=9757 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=10094 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10097 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10352 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10355 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10520 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10523 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11204 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11207 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=11876 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=11879 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12621 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12624 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13328 + _globals['_STREAMINCONTROLLER']._serialized_start=13331 + _globals['_STREAMINCONTROLLER']._serialized_end=13585 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13588 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14457 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14460 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15321 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index f72c0722..e9663f07 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -16,7 +16,7 @@ class UnitTestModel(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=20) text = models.CharField(max_length=100, null=True) - count = models.IntegerField() + some_default_counter = models.IntegerField() is_validated = models.BooleanField(default=False) class Meta: diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index e83dc75d..72b0f3c3 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -39,7 +39,8 @@ class Meta: class UnitTestModelSerializer(proto_serializers.ModelProtoSerializer): - count = serializers.IntegerField(default=10) + some_default_counter = serializers.IntegerField(default=10) + is_validated = serializers.BooleanField(required=False) class Meta: model = UnitTestModel diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index b553db47..1b9fb4ef 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -161,11 +161,11 @@ message BasicParamWithSerializerRequestList { } message BasicProtoListChild { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicProtoListChildList { @@ -209,13 +209,13 @@ message CustomNameForResponse { // Test comment for whole message message CustomRetrieveResponseSpecialFieldsModel { - string uuid = 1; - int32 default_method_field = 2; + optional string uuid = 1; + optional int32 default_method_field = 2; repeated google.protobuf.Struct custom_method_field = 3; } message ForeignModel { - string uuid = 1; + optional string uuid = 1; string name = 2; } @@ -229,7 +229,7 @@ message ForeignModelListRequest { message ForeignModelRetrieveCustom { string name = 1; - string custom = 2; + optional string custom = 2; } message ForeignModelRetrieveCustomRetrieveRequest { @@ -237,19 +237,19 @@ message ForeignModelRetrieveCustomRetrieveRequest { } message ImportStructEvenInArrayModel { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ManyManyModel { - string uuid = 1; + optional string uuid = 1; string name = 2; string test_write_only_on_nested = 3; } message RecursiveTestModel { - string uuid = 1; - RecursiveTestModel parent = 2; + optional string uuid = 1; + optional RecursiveTestModel parent = 2; repeated RecursiveTestModel children = 3; } @@ -266,9 +266,9 @@ message RecursiveTestModelListRequest { } message RecursiveTestModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - RecursiveTestModel parent = 3; + optional RecursiveTestModel parent = 3; repeated RecursiveTestModel children = 4; } @@ -277,13 +277,13 @@ message RecursiveTestModelRetrieveRequest { } message RelatedFieldModel { - string uuid = 1; - ForeignModel foreign = 2; + optional string uuid = 1; + optional ForeignModel foreign = 2; repeated ManyManyModel many_many = 3; - int32 slug_test_model = 4; + optional int32 slug_test_model = 4; repeated bool slug_reverse_test_model = 5; repeated string slug_many_many = 6; - string proto_slug_related_field = 7; + optional string proto_slug_related_field = 7; string custom_field_name = 8; repeated string many_many_foreigns = 9; } @@ -301,13 +301,13 @@ message RelatedFieldModelListRequest { } message RelatedFieldModelPartialUpdateRequest { - string uuid = 1; - ForeignModel foreign = 2; + optional string uuid = 1; + optional ForeignModel foreign = 2; repeated ManyManyModel many_many = 3; - int32 slug_test_model = 4; + optional int32 slug_test_model = 4; repeated bool slug_reverse_test_model = 5; repeated string slug_many_many = 6; - string proto_slug_related_field = 7; + optional string proto_slug_related_field = 7; string custom_field_name = 8; repeated string _partial_update_fields = 9; repeated string many_many_foreigns = 10; @@ -318,7 +318,7 @@ message RelatedFieldModelRetrieveRequest { } message SimpleRelatedFieldModel { - string uuid = 1; + optional string uuid = 1; optional string foreign = 2; optional string slug_test_model = 3; repeated string many_many = 4; @@ -339,7 +339,7 @@ message SimpleRelatedFieldModelListRequest { } message SimpleRelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; optional string foreign = 3; optional string slug_test_model = 4; @@ -355,10 +355,10 @@ message SimpleRelatedFieldModelRetrieveRequest { // Special Fields Model // with two lines comment message SpecialFieldsModel { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; - bytes binary = 4; + optional bytes binary = 4; } message SpecialFieldsModelDestroyRequest { @@ -376,11 +376,11 @@ message SpecialFieldsModelListRequest { // Special Fields Model // with two lines comment message SpecialFieldsModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - google.protobuf.Struct meta_datas = 3; + optional google.protobuf.Struct meta_datas = 3; repeated int32 list_datas = 4; - bytes binary = 5; + optional bytes binary = 5; } message SpecialFieldsModelRetrieve { @@ -405,11 +405,11 @@ message SyncUnitTestModelListWithExtraArgs { } message UnitTestModel { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelDestroyRequest { @@ -435,12 +435,12 @@ message UnitTestModelListWithExtraArgs { } message UnitTestModelPartialUpdateRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; - optional int32 count = 5; - bool is_validated = 6; + optional bool is_validated = 6; + optional int32 some_default_counter = 7; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index d97ba2c2..a24c1f39 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -184,19 +184,19 @@ message BasicProtoListChildListResponse { } message BasicProtoListChildRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicProtoListChildResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicServiceListResponse { @@ -245,8 +245,8 @@ message CustomNameForResponse { // Test comment for whole message message CustomRetrieveResponseSpecialFieldsModelResponse { - string uuid = 1; - int32 default_method_field = 2; + optional string uuid = 1; + optional int32 default_method_field = 2; repeated google.protobuf.Struct custom_method_field = 3; } @@ -263,13 +263,13 @@ message ForeignModelListResponse { } message ForeignModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } message ForeignModelRetrieveCustomResponse { string name = 1; - string custom = 2; + optional string custom = 2; } message ForeignModelRetrieveCustomRetrieveRequest { @@ -277,23 +277,23 @@ message ForeignModelRetrieveCustomRetrieveRequest { } message ImportStructEvenInArrayModelRequest { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ImportStructEvenInArrayModelResponse { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ManyManyModelRequest { - string uuid = 1; + optional string uuid = 1; string name = 2; string test_write_only_on_nested = 3; } message ManyManyModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } @@ -310,21 +310,21 @@ message RecursiveTestModelListResponse { } message RecursiveTestModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - RecursiveTestModelRequest parent = 3; + optional RecursiveTestModelRequest parent = 3; repeated RecursiveTestModelRequest children = 4; } message RecursiveTestModelRequest { - string uuid = 1; - RecursiveTestModelRequest parent = 2; + optional string uuid = 1; + optional RecursiveTestModelRequest parent = 2; repeated RecursiveTestModelRequest children = 3; } message RecursiveTestModelResponse { - string uuid = 1; - RecursiveTestModelResponse parent = 2; + optional string uuid = 1; + optional RecursiveTestModelResponse parent = 2; repeated RecursiveTestModelResponse children = 3; } @@ -345,7 +345,7 @@ message RelatedFieldModelListResponse { } message RelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string _partial_update_fields = 4; @@ -353,20 +353,20 @@ message RelatedFieldModelPartialUpdateRequest { } message RelatedFieldModelRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string many_many_foreigns = 4; } message RelatedFieldModelResponse { - string uuid = 1; - ForeignModelResponse foreign = 2; + optional string uuid = 1; + optional ForeignModelResponse foreign = 2; repeated ManyManyModelResponse many_many = 3; - int32 slug_test_model = 4; + optional int32 slug_test_model = 4; repeated bool slug_reverse_test_model = 5; repeated string slug_many_many = 6; - string proto_slug_related_field = 7; + optional string proto_slug_related_field = 7; string custom_field_name = 8; repeated string many_many_foreigns = 9; } @@ -388,7 +388,7 @@ message SimpleRelatedFieldModelListResponse { } message SimpleRelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; optional string foreign = 3; optional string slug_test_model = 4; @@ -398,7 +398,7 @@ message SimpleRelatedFieldModelPartialUpdateRequest { } message SimpleRelatedFieldModelRequest { - string uuid = 1; + optional string uuid = 1; optional string foreign = 2; optional string slug_test_model = 3; repeated string many_many = 4; @@ -407,7 +407,7 @@ message SimpleRelatedFieldModelRequest { } message SimpleRelatedFieldModelResponse { - string uuid = 1; + optional string uuid = 1; optional string foreign = 2; optional string slug_test_model = 3; repeated string many_many = 4; @@ -434,27 +434,27 @@ message SpecialFieldsModelListResponse { // Special Fields Model // with two lines comment message SpecialFieldsModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - google.protobuf.Struct meta_datas = 3; + optional google.protobuf.Struct meta_datas = 3; repeated int32 list_datas = 4; } // Special Fields Model // with two lines comment message SpecialFieldsModelRequest { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; } // Special Fields Model // with two lines comment message SpecialFieldsModelResponse { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; - bytes binary = 4; + optional bytes binary = 4; } message SpecialFieldsModelRetrieveRequest { @@ -509,28 +509,28 @@ message UnitTestModelListWithExtraArgsRequest { } message UnitTestModelPartialUpdateRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; - optional int32 count = 5; - bool is_validated = 6; + optional bool is_validated = 6; + optional int32 some_default_counter = 7; } message UnitTestModelRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/CUSTOM_APP_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/CUSTOM_APP_MODEL_GENERATED/fakeapp.proto index 26c09b6c..e48c0042 100644 --- a/django_socio_grpc/tests/protos/CUSTOM_APP_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/CUSTOM_APP_MODEL_GENERATED/fakeapp.proto @@ -16,13 +16,13 @@ message ForeignModelListResponse { } message ForeignModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } message ForeignModelRetrieveCustomResponse { string name = 1; - string custom = 2; + optional string custom = 2; } message ForeignModelRetrieveCustomRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/MODEL_WITH_KNOWN_METHOD_OVERRIDEN_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/MODEL_WITH_KNOWN_METHOD_OVERRIDEN_GENERATED/fakeapp.proto index 8b93112d..3d094fc2 100644 --- a/django_socio_grpc/tests/protos/MODEL_WITH_KNOWN_METHOD_OVERRIDEN_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/MODEL_WITH_KNOWN_METHOD_OVERRIDEN_GENERATED/fakeapp.proto @@ -16,8 +16,8 @@ service SpecialFieldsModelController { // Test comment for whole message message CustomRetrieveResponseSpecialFieldsModelResponse { - string uuid = 1; - int32 default_method_field = 2; + optional string uuid = 1; + optional int32 default_method_field = 2; repeated google.protobuf.Struct custom_method_field = 3; } @@ -36,27 +36,27 @@ message SpecialFieldsModelListResponse { // Special Fields Model // with two lines comment message SpecialFieldsModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - google.protobuf.Struct meta_datas = 3; + optional google.protobuf.Struct meta_datas = 3; repeated int32 list_datas = 4; } // Special Fields Model // with two lines comment message SpecialFieldsModelRequest { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; } // Special Fields Model // with two lines comment message SpecialFieldsModelResponse { - string uuid = 1; - google.protobuf.Struct meta_datas = 2; + optional string uuid = 1; + optional google.protobuf.Struct meta_datas = 2; repeated int32 list_datas = 3; - bytes binary = 4; + optional bytes binary = 4; } message SpecialFieldsModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/MODEL_WITH_M2M_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/MODEL_WITH_M2M_GENERATED/fakeapp.proto index e53ad0ae..c440748c 100644 --- a/django_socio_grpc/tests/protos/MODEL_WITH_M2M_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/MODEL_WITH_M2M_GENERATED/fakeapp.proto @@ -14,18 +14,18 @@ service RelatedFieldModelController { } message ForeignModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } message ManyManyModelRequest { - string uuid = 1; + optional string uuid = 1; string name = 2; string test_write_only_on_nested = 3; } message ManyManyModelResponse { - string uuid = 1; + optional string uuid = 1; string name = 2; } @@ -42,7 +42,7 @@ message RelatedFieldModelListResponse { } message RelatedFieldModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string _partial_update_fields = 4; @@ -50,20 +50,20 @@ message RelatedFieldModelPartialUpdateRequest { } message RelatedFieldModelRequest { - string uuid = 1; + optional string uuid = 1; repeated ManyManyModelRequest many_many = 2; string custom_field_name = 3; repeated string many_many_foreigns = 4; } message RelatedFieldModelResponse { - string uuid = 1; - ForeignModelResponse foreign = 2; + optional string uuid = 1; + optional ForeignModelResponse foreign = 2; repeated ManyManyModelResponse many_many = 3; - int32 slug_test_model = 4; + optional int32 slug_test_model = 4; repeated bool slug_reverse_test_model = 5; repeated string slug_many_many = 6; - string proto_slug_related_field = 7; + optional string proto_slug_related_field = 7; string custom_field_name = 8; repeated string many_many_foreigns = 9; } diff --git a/django_socio_grpc/tests/protos/MODEL_WITH_STRUCT_IMORT_IN_ARRAY/fakeapp.proto b/django_socio_grpc/tests/protos/MODEL_WITH_STRUCT_IMORT_IN_ARRAY/fakeapp.proto index 910e1183..8ae6aecd 100644 --- a/django_socio_grpc/tests/protos/MODEL_WITH_STRUCT_IMORT_IN_ARRAY/fakeapp.proto +++ b/django_socio_grpc/tests/protos/MODEL_WITH_STRUCT_IMORT_IN_ARRAY/fakeapp.proto @@ -9,12 +9,12 @@ service ImportStructEvenInArrayModelController { } message ImportStructEvenInArrayModelRequest { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } message ImportStructEvenInArrayModelResponse { - string uuid = 1; + optional string uuid = 1; repeated google.protobuf.Struct this_is_crazy = 2; } diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index 1f0e9edc..4176739e 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -94,19 +94,19 @@ message BasicProtoListChildListResponse { } message BasicProtoListChildRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicProtoListChildResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + int32 some_default_counter = 6; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/RECURSIVE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/RECURSIVE_MODEL_GENERATED/fakeapp.proto index b9f6f16c..893609e1 100644 --- a/django_socio_grpc/tests/protos/RECURSIVE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/RECURSIVE_MODEL_GENERATED/fakeapp.proto @@ -26,21 +26,21 @@ message RecursiveTestModelListResponse { } message RecursiveTestModelPartialUpdateRequest { - string uuid = 1; + optional string uuid = 1; repeated string _partial_update_fields = 2; - RecursiveTestModelRequest parent = 3; + optional RecursiveTestModelRequest parent = 3; repeated RecursiveTestModelRequest children = 4; } message RecursiveTestModelRequest { - string uuid = 1; - RecursiveTestModelRequest parent = 2; + optional string uuid = 1; + optional RecursiveTestModelRequest parent = 2; repeated RecursiveTestModelRequest children = 3; } message RecursiveTestModelResponse { - string uuid = 1; - RecursiveTestModelResponse parent = 2; + optional string uuid = 1; + optional RecursiveTestModelResponse parent = 2; repeated RecursiveTestModelResponse children = 3; } diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index a6269cdf..74d24851 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -38,28 +38,28 @@ message UnitTestModelListWithExtraArgsRequest { } message UnitTestModelPartialUpdateRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; repeated string _partial_update_fields = 4; - optional int32 count = 5; - bool is_validated = 6; + optional bool is_validated = 6; + optional int32 some_default_counter = 7; } message UnitTestModelRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 count = 4; - bool is_validated = 5; + optional bool is_validated = 5; + optional int32 some_default_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_app_handler_registry.py b/django_socio_grpc/tests/test_app_handler_registry.py index 4c03e06a..9eddc114 100644 --- a/django_socio_grpc/tests/test_app_handler_registry.py +++ b/django_socio_grpc/tests/test_app_handler_registry.py @@ -17,7 +17,7 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() def tearDown(self) -> None: RegistrySingleton.clean_all() diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 78360e5f..386066ff 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -39,7 +39,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() async def test_async_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) @@ -49,6 +49,8 @@ async def test_async_create(self): self.assertNotEqual(response.id, None) self.assertEqual(response.title, "fake") self.assertEqual(response.text, "text") + self.assertEqual(response.some_default_counter, 10) + self.assertEqual(response.is_validated, False) self.assertEqual(await sync_to_async(UnitTestModel.objects.count)(), 11) async def test_async_list(self): @@ -77,6 +79,8 @@ async def test_async_update(self): self.assertEqual(response.title, "newTitle") self.assertEqual(response.text, "newText") + self.assertEqual(response.some_default_counter, 10) + self.assertEqual(response.is_validated, False) async def test_async_destroy(self): unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id @@ -144,13 +148,23 @@ async def test_optional_field(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) request = fakeapp_pb2.UnitTestModelRequest(title="fake") response = await grpc_stub.Create(request=request) - + + # INFO - AM - 03/01/2023 - text is optional and can be null and is null so it's not send self.assertFalse(response.HasField("text")) + # INFO - AM - 03/01/2023 - some_default_counter is optional but can't be null because it has a default in serializer so it appear in the response + self.assertTrue(response.HasField("some_default_counter")) + # INFO - AM - 03/01/2023 - is_validated is optional but can't be null because it has a default in model so it appear in the response + self.assertTrue(response.HasField("is_validated")) request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=response.id) response = await grpc_stub.Retrieve(request=request) + # INFO - AM - 03/01/2023 - text is optional and can be null and is null so it's not send self.assertFalse(response.HasField("text")) + # INFO - AM - 03/01/2023 - some_default_counter is optional but can't be null because it has a default in serializer so it appear in the response + self.assertTrue(response.HasField("some_default_counter")) + # INFO - AM - 03/01/2023 - is_validated is optional but can't be null because it has a default in model so it appear in the response + self.assertTrue(response.HasField("is_validated")) instance = await UnitTestModel.objects.aget(id=response.id) assert instance.text is None diff --git a/django_socio_grpc/tests/test_filtering_metadata.py b/django_socio_grpc/tests/test_filtering_metadata.py index 9f2f9a0f..d8900eeb 100644 --- a/django_socio_grpc/tests/test_filtering_metadata.py +++ b/django_socio_grpc/tests/test_filtering_metadata.py @@ -18,9 +18,9 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() - UnitTestModel(title="zzzz", text=text).save() + UnitTestModel(title="zzzz", text=text, some_default_counter=50).save() self.fake_grpc = FakeFullAIOGRPC( add_UnitTestModelControllerServicer_to_server, UnitTestModelService.as_servicer() ) diff --git a/django_socio_grpc/tests/test_pagination_metadata.py b/django_socio_grpc/tests/test_pagination_metadata.py index 28b32609..952c1289 100644 --- a/django_socio_grpc/tests/test_pagination_metadata.py +++ b/django_socio_grpc/tests/test_pagination_metadata.py @@ -32,7 +32,7 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() self.fake_grpc = FakeFullAIOGRPC( add_UnitTestModelControllerServicer_to_server, UnitTestModelServiceWithDifferentPagination.as_servicer(), diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index 09b179f0..aacaeea1 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -32,7 +32,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() def test_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) diff --git a/django_socio_grpc/utils/debug.py b/django_socio_grpc/utils/debug.py index b3b7ae70..12732d16 100644 --- a/django_socio_grpc/utils/debug.py +++ b/django_socio_grpc/utils/debug.py @@ -19,6 +19,15 @@ SUFFIX_TO_DEBUG = "" FIELD_TO_DEBUG = "" +from django_socio_grpc.utils.constants import REQUEST_SUFFIX, RESPONSE_SUFFIX + +ENABLE_PROTO_DEBUG = True +SERVICE_TO_DEBUG = "UnitTestModelService" +ACTION_TO_DEBUG = "Create" +PREFIX_TO_DEBUG = "UnitTestModel" +SUFFIX_TO_DEBUG = REQUEST_SUFFIX +FIELD_TO_DEBUG = "is_validated" + class ProtoGeneratorPrintHelper(metaclass=SingletonMeta): service_name: str = "" From 7168be4ae86e17bc735bbd0fac19d280fd01a1ce Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 11:58:40 +0100 Subject: [PATCH 03/19] wip workig partial update properly --- django_socio_grpc/mixins.py | 23 ++---------------- django_socio_grpc/proto_serializers.py | 21 ++++++++++++++-- django_socio_grpc/protobuf/json_format.py | 2 +- ...013_unittestmodel_is_validated_and_more.py | 24 +++++++++++++++++++ 4 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index a2f976d6..90ee3ea9 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -284,20 +284,11 @@ def PartialUpdate(self, request, context): Performs a partial update on the given `_partial_update_fields`. """ - content = message_to_dict(request) - - data = {} - for field_name, field_vale in content.items(): - if field_name not in request._partial_update_fields: - data[field_name] = None - continue - data[field_name] = field_vale - instance = self.get_object() # INFO - L.G. - 11/07/2022 - We use the data parameter instead of message # because we handle a dict not a grpc message. - serializer = self.get_serializer(instance, data=data, partial=True) + serializer = self.get_serializer(instance, message=request, partial=True) serializer.is_valid(raise_exception=True) self.perform_partial_update(serializer) @@ -491,21 +482,11 @@ async def PartialUpdate(self, request, context): Performs a partial update on the given `_partial_update_fields`. """ - content = message_to_dict(request) - - # TODO use the serializer with the partial=True for that - data = {} - for field_name, field_vale in content.items(): - if field_name not in request._partial_update_fields: - data[field_name] = None - continue - data[field_name] = field_vale - instance = await self.aget_object() # INFO - L.G. - 11/07/2022 - We use the data parameter instead of message # because we handle a dict not a grpc message. - serializer = await self.aget_serializer(instance, data=data, partial=True) + serializer = await self.aget_serializer(instance, message=request, partial=True) await sync_to_async(serializer.is_valid)(raise_exception=True) await self.aperform_partial_update(serializer) diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 13d5c88e..7f5e6d39 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -28,7 +28,10 @@ def __init__(self, *args, **kwargs): message = kwargs.pop("message", None) self.stream = kwargs.pop("stream", None) self.message_list_attr = kwargs.pop(LIST_ATTR_MESSAGE_NAME, DEFAULT_LIST_FIELD_NAME) + # INFO - AM - 04/01/2023 - Need to manually define partial before the super().__init__ as it's used in populate_dict_with_none_if_not_required that is used in message_to_data that is call before the super init + self.partial = kwargs.get("partial", False) if message is not None: + print("kikikikiki ", message, message.title) self.initial_message = message kwargs["data"] = self.message_to_data(message) super().__init__(*args, **kwargs) @@ -36,15 +39,29 @@ def __init__(self, *args, **kwargs): def message_to_data(self, message): """Protobuf message -> Dict of python primitive datatypes.""" data_dict = message_to_dict(message) - data_dict = self.populate_dict_with_none_if_not_required(data_dict) + print("data_dict", data_dict) + data_dict = self.populate_dict_with_none_if_not_required(data_dict, message) return data_dict - def populate_dict_with_none_if_not_required(self, data_dict): + def populate_dict_with_none_if_not_required(self, data_dict, message=None): + """ + todo + """ for field in self.fields.values(): + # todo + print(field.field_name, message and self.partial and hasattr(message, "_partial_update_fields") and field.field_name not in message._partial_update_fields) + if message and self.partial and hasattr(message, "_partial_update_fields") and field.field_name not in message._partial_update_fields: + print("continue") + continue + # todo if field.field_name in data_dict: continue + # todo if field.allow_null or field.default in [None, empty] and field.required is True: data_dict[field.field_name] = None + print("icicic\n"*5) + print(message) + print(data_dict) return data_dict def data_to_message(self, data): diff --git a/django_socio_grpc/protobuf/json_format.py b/django_socio_grpc/protobuf/json_format.py index 234c498e..2f67f273 100644 --- a/django_socio_grpc/protobuf/json_format.py +++ b/django_socio_grpc/protobuf/json_format.py @@ -27,7 +27,7 @@ def message_to_dict(message, **kwargs): Adds None values for optional fields that are not set. """ - kwargs.setdefault("including_default_value_fields", True) + # kwargs.setdefault("including_default_value_fields", True) kwargs.setdefault("preserving_proto_field_name", True) result_dict = MessageToDict(message, **kwargs) diff --git a/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py b/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py new file mode 100644 index 00000000..42814b30 --- /dev/null +++ b/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.8 on 2024-01-04 10:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fakeapp', '0012_recursivetestmodel'), + ] + + operations = [ + migrations.AddField( + model_name='unittestmodel', + name='is_validated', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='unittestmodel', + name='some_default_counter', + field=models.IntegerField(default=50), + preserve_default=False, + ), + ] From d5206063a5f283f92c99186a32cf4603a4836957 Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 12:53:53 +0100 Subject: [PATCH 04/19] working with partial update name variabilised --- django_socio_grpc/mixins.py | 21 ++++++++---- django_socio_grpc/proto_serializers.py | 33 ++++++++++++++++--- .../tests/fakeapp/grpc/fakeapp.proto | 28 ++++++++-------- .../tests/fakeapp/grpc/fakeapp_pb2.py | 2 +- .../fakeapp.proto | 18 +++++----- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 28 ++++++++-------- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 4 +-- .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 24 +++++++------- .../tests/test_async_model_service.py | 5 +-- .../tests/test_sync_model_service.py | 5 +-- django_socio_grpc/utils/constants.py | 1 + 11 files changed, 103 insertions(+), 66 deletions(-) diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index 90ee3ea9..30445acd 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -19,7 +19,7 @@ from .grpc_actions.utils import get_serializer_base_name from .protobuf.json_format import message_to_dict from .settings import grpc_settings -from .utils.constants import DEFAULT_LIST_FIELD_NAME, REQUEST_SUFFIX +from .utils.constants import DEFAULT_LIST_FIELD_NAME, PARTIAL_UPDATE_FIELD_NAME, REQUEST_SUFFIX ############################################################ @@ -253,9 +253,18 @@ def get_default_message(model_name, fields="__all__"): def _get_partial_update_request(service): serializer_class = service.get_serializer_class() - class PartialUpdateRequest(serializer_class): - _partial_update_fields = serializers.ListField(child=serializers.CharField()) + class PartialUpdateMetaClass(serializers.SerializerMetaclass): + """ + todo + """ + + def __new__(cls, name, bases, attrs): + attrs[PARTIAL_UPDATE_FIELD_NAME] = serializers.ListField( + child=serializers.CharField() + ) + return super().__new__(cls, name, bases, attrs) + class PartialUpdateRequest(serializer_class, metaclass=PartialUpdateMetaClass): class Meta(serializer_class.Meta): ... @@ -264,7 +273,7 @@ class Meta(serializer_class.Meta): if (fields := getattr(PartialUpdateRequest.Meta, "fields", None)) and not isinstance( fields, str ): - PartialUpdateRequest.Meta.fields = (*fields, "_partial_update_fields") + PartialUpdateRequest.Meta.fields = (*fields, PARTIAL_UPDATE_FIELD_NAME) return PartialUpdateRequest @@ -281,7 +290,7 @@ def PartialUpdate(self, request, context): """ Partial update a model instance. - Performs a partial update on the given `_partial_update_fields`. + Performs a partial update on the given PARTIAL_UPDATE_FIELD_NAME(`_partial_update_fields`). """ instance = self.get_object() @@ -479,7 +488,7 @@ async def PartialUpdate(self, request, context): """ Partial update a model instance. - Performs a partial update on the given `_partial_update_fields`. + Performs a partial update on the given PARTIAL_UPDATE_FIELD_NAME(`_partial_update_fields`). """ instance = await self.aget_object() diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 7f5e6d39..872844db 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -18,7 +18,11 @@ from rest_framework.utils.formatting import lazy_format from django_socio_grpc.protobuf.json_format import message_to_dict, parse_dict -from django_socio_grpc.utils.constants import DEFAULT_LIST_FIELD_NAME, LIST_ATTR_MESSAGE_NAME +from django_socio_grpc.utils.constants import ( + DEFAULT_LIST_FIELD_NAME, + LIST_ATTR_MESSAGE_NAME, + PARTIAL_UPDATE_FIELD_NAME, +) LIST_PROTO_SERIALIZER_KWARGS = (*LIST_SERIALIZER_KWARGS, LIST_ATTR_MESSAGE_NAME, "message") @@ -47,10 +51,31 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): """ todo """ + if self.partial and not hasattr(message, PARTIAL_UPDATE_FIELD_NAME): + raise ValidationError( + { + PARTIAL_UPDATE_FIELD_NAME: [ + f"Field {PARTIAL_UPDATE_FIELD_NAME} not set in message when using partial=True" + ] + }, + code="missing_partial_message_attribute", + ) + for field in self.fields.values(): # todo - print(field.field_name, message and self.partial and hasattr(message, "_partial_update_fields") and field.field_name not in message._partial_update_fields) - if message and self.partial and hasattr(message, "_partial_update_fields") and field.field_name not in message._partial_update_fields: + print( + field.field_name, + message + and self.partial + and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) + and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME), + ) + if ( + message + and self.partial + and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) + and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME) + ): print("continue") continue # todo @@ -59,7 +84,7 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): # todo if field.allow_null or field.default in [None, empty] and field.required is True: data_dict[field.field_name] = None - print("icicic\n"*5) + print("icicic\n" * 5) print(message) print(data_dict) return data_dict diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index a24c1f39..a2a4f955 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -187,16 +187,16 @@ message BasicProtoListChildRequest { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicServiceListResponse { @@ -510,27 +510,27 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional bool is_validated = 6; - optional int32 some_default_counter = 7; + string title = 5; + optional string text = 6; } message UnitTestModelRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index f65fc0f7..84143550 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xa9\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"\xaa\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x19\n\x0cis_validated\x18\x06 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x07 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x06 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12!\n\x14some_default_counter\x18\x06 \x01(\x05H\x03\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validatedB\x17\n\x15_some_default_counter\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xa9\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x04 \x01(\x05\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"\xaa\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x04 \x01(\x05\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 1b9fb4ef..9b059892 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -164,8 +164,8 @@ message BasicProtoListChild { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicProtoListChildList { @@ -406,10 +406,10 @@ message SyncUnitTestModelListWithExtraArgs { message UnitTestModel { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelDestroyRequest { @@ -436,11 +436,11 @@ message UnitTestModelListWithExtraArgs { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional bool is_validated = 6; - optional int32 some_default_counter = 7; + string title = 5; + optional string text = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index a24c1f39..a2a4f955 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -187,16 +187,16 @@ message BasicProtoListChildRequest { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicServiceListResponse { @@ -510,27 +510,27 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional bool is_validated = 6; - optional int32 some_default_counter = 7; + string title = 5; + optional string text = 6; } message UnitTestModelRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index 4176739e..e8344a8d 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -97,16 +97,16 @@ message BasicProtoListChildRequest { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; string title = 2; optional string text = 3; + int32 some_default_counter = 4; optional bool is_validated = 5; - int32 some_default_counter = 6; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index 74d24851..55db0920 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -39,27 +39,27 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional bool is_validated = 6; - optional int32 some_default_counter = 7; + string title = 5; + optional string text = 6; } message UnitTestModelRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - optional bool is_validated = 5; - optional int32 some_default_counter = 6; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; + string title = 4; + optional string text = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 386066ff..208dd100 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -19,6 +19,7 @@ RelatedFieldModelService, SimpleRelatedFieldModelService, ) +from django_socio_grpc.utils.constants import PARTIAL_UPDATE_FIELD_NAME from .grpc_test_utils.fake_grpc import FakeFullAIOGRPC @@ -137,7 +138,7 @@ async def test_async_partial_update(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( - id=instance.id, _partial_update_fields=["title"], title="newTitle" + id=instance.id, title="newTitle", **{PARTIAL_UPDATE_FIELD_NAME: ["title"]} ) response = await grpc_stub.PartialUpdate(request=request) @@ -148,7 +149,7 @@ async def test_optional_field(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) request = fakeapp_pb2.UnitTestModelRequest(title="fake") response = await grpc_stub.Create(request=request) - + # INFO - AM - 03/01/2023 - text is optional and can be null and is null so it's not send self.assertFalse(response.HasField("text")) # INFO - AM - 03/01/2023 - some_default_counter is optional but can't be null because it has a default in serializer so it appear in the response diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index aacaeea1..df97b088 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -11,6 +11,7 @@ from freezegun import freeze_time from django_socio_grpc.settings import grpc_settings +from django_socio_grpc.utils.constants import PARTIAL_UPDATE_FIELD_NAME from .grpc_test_utils.fake_grpc import FakeGRPC @@ -99,7 +100,7 @@ def test_partial_update(self): # Test partial update does not update fields not specified request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( - id=instance.id, _partial_update_fields=["title"], title="newTitle" + id=instance.id, title="newTitle", **{PARTIAL_UPDATE_FIELD_NAME: ["title"]} ) response = grpc_stub.PartialUpdate(request=request) @@ -108,7 +109,7 @@ def test_partial_update(self): # Test partial update takes into account empty optional fields request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( - id=instance.id, _partial_update_fields=["text"] + id=instance.id, **{PARTIAL_UPDATE_FIELD_NAME: ["text"]} ) response = grpc_stub.PartialUpdate(request=request) diff --git a/django_socio_grpc/utils/constants.py b/django_socio_grpc/utils/constants.py index 0735e632..aa002513 100644 --- a/django_socio_grpc/utils/constants.py +++ b/django_socio_grpc/utils/constants.py @@ -2,3 +2,4 @@ LIST_ATTR_MESSAGE_NAME = "message_list_attr" REQUEST_SUFFIX = "Request" RESPONSE_SUFFIX = "Response" +PARTIAL_UPDATE_FIELD_NAME = "_partial_update_fields" From e92ba4432da7f3d7498e5a5d23b8d41ffe3426e2 Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 14:34:04 +0100 Subject: [PATCH 05/19] working on tests --- django_socio_grpc/mixins.py | 7 +- django_socio_grpc/proto_serializers.py | 13 - .../generated_protobuf_files_old_way.py | 12 +- .../tests/fakeapp/grpc/fakeapp.proto | 12 +- .../tests/fakeapp/grpc/fakeapp_pb2.py | 300 +++++++++--------- .../tests/fakeapp/serializers.py | 2 + .../fakeapp.proto | 6 +- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 12 +- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 12 +- test_utils/generateproto.py | 2 +- 10 files changed, 191 insertions(+), 187 deletions(-) diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index 30445acd..57e0aa48 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -255,7 +255,12 @@ def _get_partial_update_request(service): class PartialUpdateMetaClass(serializers.SerializerMetaclass): """ - todo + this metaclass just exist so we can set the PARTIAL_UPDATE_FIELD_NAME variable as an attribute name of PartialUpdateRequest. + This can be replaced by just declaring in PartialUpdateRequest: + _partial_update_fields = serializers.ListField(child=serializers.CharField()) + but this would not be dynamic if constante change or if we want it to be configurable in settings in the futur + This metaclass should inherit from DRF SerializerMetaclass as serializer has it's own metaclass to add _declared_fields attibute + Using PartialUpdateRequest.setattr is not enough as _declared_fields is done in metaclass so all fields should be declared before """ def __new__(cls, name, bases, attrs): diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 872844db..5267a040 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -35,7 +35,6 @@ def __init__(self, *args, **kwargs): # INFO - AM - 04/01/2023 - Need to manually define partial before the super().__init__ as it's used in populate_dict_with_none_if_not_required that is used in message_to_data that is call before the super init self.partial = kwargs.get("partial", False) if message is not None: - print("kikikikiki ", message, message.title) self.initial_message = message kwargs["data"] = self.message_to_data(message) super().__init__(*args, **kwargs) @@ -43,7 +42,6 @@ def __init__(self, *args, **kwargs): def message_to_data(self, message): """Protobuf message -> Dict of python primitive datatypes.""" data_dict = message_to_dict(message) - print("data_dict", data_dict) data_dict = self.populate_dict_with_none_if_not_required(data_dict, message) return data_dict @@ -63,20 +61,12 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): for field in self.fields.values(): # todo - print( - field.field_name, - message - and self.partial - and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) - and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME), - ) if ( message and self.partial and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME) ): - print("continue") continue # todo if field.field_name in data_dict: @@ -84,9 +74,6 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): # todo if field.allow_null or field.default in [None, empty] and field.required is True: data_dict[field.field_name] = None - print("icicic\n" * 5) - print(message) - print(data_dict) return data_dict def data_to_message(self, data): diff --git a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py index 7e8bc6a3..2d3f9057 100644 --- a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py +++ b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py @@ -17,6 +17,8 @@ int32 id = 1; string title = 2; string text = 3; + int32 some_default_counter = 4; + bool is_validated = 5; } message UnitTestModelListRequest { @@ -65,6 +67,8 @@ int32 id = 1; string title = 2; string text = 3; + int32 some_default_counter = 4; + bool is_validated = 5; } message UnitTestModelListRequest { @@ -145,6 +149,8 @@ int32 id = 1; string title = 2; string text = 3; + int32 some_default_counter = 4; + bool is_validated = 5; } message UnitTestModelListRequest { @@ -381,6 +387,8 @@ message UnitTestModel { int32 id = 1; string text = 2; + int32 some_default_counter = 3; + bool is_validated = 4; } message UnitTestModelListRequest { @@ -422,7 +430,9 @@ message UnitTestModel { int32 id = 1; string text = 2; - string title = 3; + int32 some_default_counter = 3; + bool is_validated = 4; + string title = 5; } message UnitTestModelListRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index a2a4f955..c6dc93b6 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -185,17 +185,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } message BasicProtoListChildResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 84143550..15cec186 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xa9\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x04 \x01(\x05\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"\xaa\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x14some_default_counter\x18\x04 \x01(\x05\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -52,153 +52,153 @@ _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_start=1273 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_end=1386 _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1389 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1558 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1561 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1731 - _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1733 - _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1832 - _globals['_BASICSERVICEREQUEST']._serialized_start=1835 - _globals['_BASICSERVICEREQUEST']._serialized_end=2012 - _globals['_BASICSERVICERESPONSE']._serialized_start=2015 - _globals['_BASICSERVICERESPONSE']._serialized_end=2170 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2172 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2279 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2281 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2326 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2328 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2369 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2371 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2413 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2416 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2608 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2610 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2661 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2663 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2688 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2690 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2789 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=2791 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=2855 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2857 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=2939 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=2941 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=2998 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3000 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3113 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3115 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3229 - _globals['_MANYMANYMODELREQUEST']._serialized_start=3231 - _globals['_MANYMANYMODELREQUEST']._serialized_end=3330 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=3332 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=3397 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3399 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3447 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3449 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3480 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3482 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3593 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3596 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3838 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3841 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4038 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4041 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4241 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4243 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4292 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4294 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4341 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4343 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4373 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4375 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4499 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4502 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4716 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4719 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=4888 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=4891 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5312 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5314 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5362 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5364 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5417 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5419 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5455 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5457 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5578 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5581 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5841 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5844 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6059 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6062 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6278 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6280 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6334 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6336 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6384 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6386 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6417 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6419 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6530 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6533 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6718 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6721 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=6861 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=6864 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7037 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7039 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7088 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7090 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7197 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7199 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7238 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7240 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7281 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7283 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7328 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7330 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7376 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7378 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7439 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7441 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7482 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7485 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7627 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7629 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7655 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7657 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7758 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7760 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7817 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7820 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8058 - _globals['_UNITTESTMODELREQUEST']._serialized_start=8061 - _globals['_UNITTESTMODELREQUEST']._serialized_end=8254 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=8257 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=8451 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8453 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8495 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8497 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8525 - _globals['_BASICCONTROLLER']._serialized_start=8528 - _globals['_BASICCONTROLLER']._serialized_end=9754 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=9757 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=10094 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10097 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10352 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10355 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10520 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10523 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11204 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11207 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=11876 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=11879 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12621 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12624 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13328 - _globals['_STREAMINCONTROLLER']._serialized_start=13331 - _globals['_STREAMINCONTROLLER']._serialized_end=13585 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13588 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14457 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14460 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15321 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1588 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1591 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1791 + _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1793 + _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1892 + _globals['_BASICSERVICEREQUEST']._serialized_start=1895 + _globals['_BASICSERVICEREQUEST']._serialized_end=2072 + _globals['_BASICSERVICERESPONSE']._serialized_start=2075 + _globals['_BASICSERVICERESPONSE']._serialized_end=2230 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2232 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2339 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2341 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2386 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2388 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2429 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2431 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2473 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2476 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2668 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2670 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2721 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2723 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2748 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2750 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2849 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=2851 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=2915 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2917 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=2999 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=3001 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=3058 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3060 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3173 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3175 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3289 + _globals['_MANYMANYMODELREQUEST']._serialized_start=3291 + _globals['_MANYMANYMODELREQUEST']._serialized_end=3390 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=3392 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=3457 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3459 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3507 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3509 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3540 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3542 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3653 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3656 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3898 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3901 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4098 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4101 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4301 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4303 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4352 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4354 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4401 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4403 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4433 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4435 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4559 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4562 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4776 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4779 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=4948 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=4951 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5372 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5374 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5422 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5424 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5477 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5479 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5515 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5517 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5638 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5641 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5901 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5904 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6119 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6122 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6338 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6340 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6394 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6396 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6444 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6446 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6477 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6479 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6590 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6593 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6778 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6781 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=6921 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=6924 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7097 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7099 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7148 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7150 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7257 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7259 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7298 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7300 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7341 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7343 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7388 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7390 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7436 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7438 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7499 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7501 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7542 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7545 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7687 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7689 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7715 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7717 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7818 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7820 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7877 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7880 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8118 + _globals['_UNITTESTMODELREQUEST']._serialized_start=8121 + _globals['_UNITTESTMODELREQUEST']._serialized_end=8314 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=8317 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=8511 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8513 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8555 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8557 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8585 + _globals['_BASICCONTROLLER']._serialized_start=8588 + _globals['_BASICCONTROLLER']._serialized_end=9814 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=9817 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=10154 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10157 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10412 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10415 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10580 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10583 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11264 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11267 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=11936 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=11939 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12681 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12684 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13388 + _globals['_STREAMINCONTROLLER']._serialized_start=13391 + _globals['_STREAMINCONTROLLER']._serialized_end=13645 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13648 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14517 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14520 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15381 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index 72b0f3c3..c11f15c9 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -185,6 +185,8 @@ class BasicListProtoSerializer(proto_serializers.ListProtoSerializer): class BasicProtoListChildSerializer(proto_serializers.ModelProtoSerializer): + some_default_counter = serializers.IntegerField(default=10) + class Meta: model = UnitTestModel proto_class = fakeapp_pb2.BasicProtoListChildResponse diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 9b059892..1d2b158c 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -162,9 +162,9 @@ message BasicParamWithSerializerRequestList { message BasicProtoListChild { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index a2a4f955..c6dc93b6 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -185,17 +185,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } message BasicProtoListChildResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index e8344a8d..d691f0ce 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -95,17 +95,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } message BasicProtoListChildResponse { optional int32 id = 1; - string title = 2; - optional string text = 3; - int32 some_default_counter = 4; + optional int32 some_default_counter = 2; + string title = 3; + optional string text = 4; optional bool is_validated = 5; } diff --git a/test_utils/generateproto.py b/test_utils/generateproto.py index bb73fe14..d0dfbdbf 100644 --- a/test_utils/generateproto.py +++ b/test_utils/generateproto.py @@ -11,7 +11,7 @@ from django_socio_grpc.tests.test_proto_generation import OVERRIDEN_SETTINGS # noqa E402 # INFO - AM - 29/12/2023 - Set this to true if you want to reorder proto order without having to delete the proto file. -override_fields_number = False +override_fields_number = True args = [] opts = {"override_fields_number": override_fields_number} From fa9a3c6f28e5215ac45d4b73b810b8fd89a9fad8 Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 14:59:33 +0100 Subject: [PATCH 06/19] all tests passing miss comments --- django_socio_grpc/mixins.py | 3 +-- django_socio_grpc/protobuf/json_format.py | 25 +------------------ django_socio_grpc/protobuf/proto_classes.py | 10 +++++++- .../fakeapp.proto | 18 ++++++++----- .../tests/test_protobuf_registration.py | 9 ++++--- django_socio_grpc/utils/debug.py | 16 ++++++------ 6 files changed, 37 insertions(+), 44 deletions(-) diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index 57e0aa48..82243e10 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -17,7 +17,6 @@ StrTemplatePlaceholder, ) from .grpc_actions.utils import get_serializer_base_name -from .protobuf.json_format import message_to_dict from .settings import grpc_settings from .utils.constants import DEFAULT_LIST_FIELD_NAME, PARTIAL_UPDATE_FIELD_NAME, REQUEST_SUFFIX @@ -260,7 +259,7 @@ class PartialUpdateMetaClass(serializers.SerializerMetaclass): _partial_update_fields = serializers.ListField(child=serializers.CharField()) but this would not be dynamic if constante change or if we want it to be configurable in settings in the futur This metaclass should inherit from DRF SerializerMetaclass as serializer has it's own metaclass to add _declared_fields attibute - Using PartialUpdateRequest.setattr is not enough as _declared_fields is done in metaclass so all fields should be declared before + Using PartialUpdateRequest.setattr is not enough as _declared_fields is done in metaclass so all fields should be declared before """ def __new__(cls, name, bases, attrs): diff --git a/django_socio_grpc/protobuf/json_format.py b/django_socio_grpc/protobuf/json_format.py index 2f67f273..f58aaf21 100644 --- a/django_socio_grpc/protobuf/json_format.py +++ b/django_socio_grpc/protobuf/json_format.py @@ -1,23 +1,7 @@ -from typing import Type from uuid import UUID from google.protobuf import json_format from google.protobuf.json_format import MessageToDict, ParseDict -from rest_framework import serializers - - -def _is_field_optional(field): - """ - Checks if a field is optional. - - Under the hood, Optional fields are OneOf fields with only one field with the name of the OneOf - prefixed with an underscore. - """ - - if not (co := field.containing_oneof): - return False - - return len(co.fields) == 1 and co.name == f"_{field.name}" def message_to_dict(message, **kwargs): @@ -27,16 +11,9 @@ def message_to_dict(message, **kwargs): Adds None values for optional fields that are not set. """ - # kwargs.setdefault("including_default_value_fields", True) kwargs.setdefault("preserving_proto_field_name", True) - result_dict = MessageToDict(message, **kwargs) - return result_dict - optional_fields = { - field.name: None for field in message.DESCRIPTOR.fields if _is_field_optional(field) - } - - return {**optional_fields, **result_dict} + return MessageToDict(message, **kwargs) def parse_dict(js_dict, message, **kwargs): diff --git a/django_socio_grpc/protobuf/proto_classes.py b/django_socio_grpc/protobuf/proto_classes.py index 2f8f248a..679b1990 100644 --- a/django_socio_grpc/protobuf/proto_classes.py +++ b/django_socio_grpc/protobuf/proto_classes.py @@ -90,7 +90,15 @@ def field_line(self) -> str: @classmethod def _get_cardinality(self, field: serializers.Field): ProtoGeneratorPrintHelper.print("field.default: ", field.default) - if field.allow_null or field.required is False or field.default not in [None, empty]: + """ + INFO - AM - 04/01/2023 + If field can be null -> optional + if field is not required -> optional + if field.default is set (meaning not None or empty) -> optional + + Not dealing with field.allow_blank now as it doesn't seem to be related to OPTIONAl and more about validation and only exist for charfield + """ + if field.allow_null or not field.required or field.default not in [None, empty]: return FieldCardinality.OPTIONAL return FieldCardinality.NONE diff --git a/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto index 6e7fe436..259c937d 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto @@ -38,22 +38,28 @@ message UnitTestModelListWithExtraArgsRequest { } message UnitTestModelPartialUpdateRequest { - int32 id = 1; - string title = 2; - optional string text = 3; + optional int32 id = 1; + optional int32 some_default_counter = 2; + optional bool is_validated = 3; repeated string _partial_update_fields = 4; + string title = 5; + optional string text = 6; } message UnitTestModelRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; + optional int32 some_default_counter = 4; + optional bool is_validated = 5; } message UnitTestModelResponse { - int32 id = 1; + optional int32 id = 1; optional string text = 2; - string title = 3; + optional int32 some_default_counter = 3; + optional bool is_validated = 4; + string title = 5; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_protobuf_registration.py b/django_socio_grpc/tests/test_protobuf_registration.py index 143642df..c00d466d 100644 --- a/django_socio_grpc/tests/test_protobuf_registration.py +++ b/django_socio_grpc/tests/test_protobuf_registration.py @@ -185,7 +185,8 @@ def test_from_field_slug_related_field(self): assert proto_field.name == "slug_test_model" assert proto_field.field_type == "int32" - assert proto_field.cardinality == FieldCardinality.NONE + # INFO - AM - 04/01/2024 - OPTIONAL because slug_test_model can be null in RelatedFieldModel + assert proto_field.cardinality == FieldCardinality.OPTIONAL assert proto_field.comments is None def test_from_field_related_field_source(self): @@ -195,7 +196,8 @@ def test_from_field_related_field_source(self): assert proto_field.name == "pk_related_source_field" assert proto_field.field_type == "string" - assert proto_field.cardinality == FieldCardinality.NONE + # INFO - AM - 04/01/2024 - OPTIONAL because foreign can be null in RelatedFieldModel + assert proto_field.cardinality == FieldCardinality.OPTIONAL assert proto_field.comments is None field = ser.fields["many_related_field"] @@ -260,7 +262,8 @@ def test_from_field_serializer_choice_field(self): assert proto_field.name == "choice_field" assert proto_field.field_type == "int32" - assert proto_field.cardinality == FieldCardinality.NONE + # INFO - AM - 04/01/2024 - OPTIONAL because a default is specified in the model + assert proto_field.cardinality == FieldCardinality.OPTIONAL def test_from_field_default(self): ser = MySerializer() diff --git a/django_socio_grpc/utils/debug.py b/django_socio_grpc/utils/debug.py index 12732d16..9801c188 100644 --- a/django_socio_grpc/utils/debug.py +++ b/django_socio_grpc/utils/debug.py @@ -19,14 +19,14 @@ SUFFIX_TO_DEBUG = "" FIELD_TO_DEBUG = "" -from django_socio_grpc.utils.constants import REQUEST_SUFFIX, RESPONSE_SUFFIX - -ENABLE_PROTO_DEBUG = True -SERVICE_TO_DEBUG = "UnitTestModelService" -ACTION_TO_DEBUG = "Create" -PREFIX_TO_DEBUG = "UnitTestModel" -SUFFIX_TO_DEBUG = REQUEST_SUFFIX -FIELD_TO_DEBUG = "is_validated" +# from django_socio_grpc.utils.constants import REQUEST_SUFFIX, RESPONSE_SUFFIX + +# ENABLE_PROTO_DEBUG = True +# SERVICE_TO_DEBUG = "UnitTestModelService" +# ACTION_TO_DEBUG = "Create" +# PREFIX_TO_DEBUG = "UnitTestModel" +# SUFFIX_TO_DEBUG = REQUEST_SUFFIX +# FIELD_TO_DEBUG = "is_validated" class ProtoGeneratorPrintHelper(metaclass=SingletonMeta): From 7e3898ff4d9a8a95f10863cf67f2b9c88371f4a0 Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 15:44:39 +0100 Subject: [PATCH 07/19] adding tests and fixing field updated even if not specified and add comment --- django_socio_grpc/proto_serializers.py | 16 ++++++++++++---- .../tests/test_sync_model_service.py | 12 ++++++++++++ docs/features/proto-serializers.rst | 2 -- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 5267a040..4dc27533 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -47,8 +47,14 @@ def message_to_data(self, message): def populate_dict_with_none_if_not_required(self, data_dict, message=None): """ - todo + This method allow to populate the data dictionary with None for optional field that allow_null and not send in the request. + It's also allow to deal with partial update correctly. + This is mandatory for having null value received in request as DRF expect to have None value for field that are required. + We can't rely only on required True/False as in DSG if a field is required it will have the default value of it's type (empty string for string type) and not None + + When refactoring serializer to only use message we will be able to determine the default value of the field depending of the same logic followed here """ + # INFO - AM - 04/01/2024 - If we are in a partial serializer with a message we need to have the PARTIAL_UPDATE_FIELD_NAME in the message. If not we raise an exception if self.partial and not hasattr(message, PARTIAL_UPDATE_FIELD_NAME): raise ValidationError( { @@ -60,18 +66,20 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): ) for field in self.fields.values(): - # todo + # INFO - AM - 04/01/2024 - If we are in a partial serializer we need to only have field specified in PARTIAL_UPDATE_FIELD_NAME attribute. Meaning bot deleting field that should not be here and not adding None to allow_null field that are not specified if ( message and self.partial and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME) ): + if field.field_name in data_dict: + del data_dict[field.field_name] continue - # todo + # INFO - AM - 04/01/2024 - if field already existing in the data_dict we do not need to do something else if field.field_name in data_dict: continue - # todo + # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value if field.allow_null or field.default in [None, empty] and field.required is True: data_dict[field.field_name] = None return data_dict diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index df97b088..4b0ae545 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -107,6 +107,18 @@ def test_partial_update(self): self.assertEqual(response.title, "newTitle") self.assertEqual(response.text, old_text) + # Test partial update does not update fields not specified even if passed in request + request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( + id=instance.id, + text="notUpdated", + title="newTitle", + **{PARTIAL_UPDATE_FIELD_NAME: ["title"]} + ) + response = grpc_stub.PartialUpdate(request=request) + + self.assertEqual(response.title, "newTitle") + self.assertEqual(response.text, old_text) + # Test partial update takes into account empty optional fields request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( id=instance.id, **{PARTIAL_UPDATE_FIELD_NAME: ["text"]} diff --git a/docs/features/proto-serializers.rst b/docs/features/proto-serializers.rst index a29f9461..ceb10287 100644 --- a/docs/features/proto-serializers.rst +++ b/docs/features/proto-serializers.rst @@ -348,8 +348,6 @@ To circumvent this problem, DSG introduces function introspection where we are l class ExampleSerializer(proto_serializers.ProtoSerializer): - :TODO: module "serializers" does not exist, please add the correct import - default_method_field = serializers.SerializerMethodField() custom_method_field = serializers.SerializerMethodField(method_name="custom_method") From 2c4e823c4f5d24e6f6fb14058a99f384f7719461 Mon Sep 17 00:00:00 2001 From: Adrien Montagu Date: Thu, 4 Jan 2024 16:36:39 +0100 Subject: [PATCH 08/19] adapt doc and adapt test --- .../tests/test_async_model_service.py | 2 + django_socio_grpc/utils/debug.py | 9 ---- docs/features/proto-serializers.rst | 48 ++++++++++++++----- test_utils/generateproto.py | 2 +- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 208dd100..88672513 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -169,6 +169,8 @@ async def test_optional_field(self): instance = await UnitTestModel.objects.aget(id=response.id) assert instance.text is None + assert instance.some_default_counter == 10 + assert instance.is_validated is False @override_settings(GRPC_FRAMEWORK={"GRPC_ASYNC": True}) diff --git a/django_socio_grpc/utils/debug.py b/django_socio_grpc/utils/debug.py index 9801c188..b3b7ae70 100644 --- a/django_socio_grpc/utils/debug.py +++ b/django_socio_grpc/utils/debug.py @@ -19,15 +19,6 @@ SUFFIX_TO_DEBUG = "" FIELD_TO_DEBUG = "" -# from django_socio_grpc.utils.constants import REQUEST_SUFFIX, RESPONSE_SUFFIX - -# ENABLE_PROTO_DEBUG = True -# SERVICE_TO_DEBUG = "UnitTestModelService" -# ACTION_TO_DEBUG = "Create" -# PREFIX_TO_DEBUG = "UnitTestModel" -# SUFFIX_TO_DEBUG = REQUEST_SUFFIX -# FIELD_TO_DEBUG = "is_validated" - class ProtoGeneratorPrintHelper(metaclass=SingletonMeta): service_name: str = "" diff --git a/docs/features/proto-serializers.rst b/docs/features/proto-serializers.rst index ceb10287..3c393e8a 100644 --- a/docs/features/proto-serializers.rst +++ b/docs/features/proto-serializers.rst @@ -194,31 +194,54 @@ Use Cases .. _proto-serializers-nullable-fields: -=========================== -Nullable fieds (`optional`) -=========================== +============================================================= +Required, Nullable and default values for fields (`optional`) +============================================================= In gRPC, all fields have a default value. For example, if you have a field of type `int32` and you don't set a value, the default value will be `0`. To know if this field was set (so its value is actually `0`) or not, the field needs to be declared as `optional` (see `proto3 `_ documentation). -.. warning:: +To work with this different behavior between REST and gRPC we use the combination of +`required `_, +`allow_null `_ and +`default `_ field parameters to find the adapted behavior. - There is no way to differentiate between a field that was not set and a field that was set to `None`. - Therefore ``{}`` and ``{"field": None}`` will be converted to the same gRPC message. - By default, we decided to interpret no presence of a field as ``None`` to have an intuitive way to use nullable fields which - are extensively used in Django (``null=True``) and DRF (``allow_null=True``) options. - This behavior has an unintended consequence with default values in ``ModelProtoSerializer``, because - the value will be `None` instead of being absent. - There is an `open issue `_ on the subject, with a workaround. There are multiple ways to have proto fields with ``optional``: -- In ``ProtoSerializer``, you can use ``allow_null=True`` in the field kwargs. +- In ``ProtoSerializer``, you can use ``allow_null=True``, ``required=False`` or ``default=`` in the field kwargs. Note that default should not be ``None`` or ``rest_framework.fields.empty``. If default is None just set ``allow_null`` to ``True`` - In ``SerializerMethodField``, you can use the return annotation ``Optional[...]`` or ``... | None`` for Python 3.10+. - In ``ModelProtoSerializer``, model fields with ``null=True`` will be converted to ``optional`` fields. - In ``GRPCAction`` you can set ``cardinality`` to ``optional`` in the `request` or `response` :func:`FieldDict `. + +If you want to use the default value of the model field use: + +.. code-block:: python + + # you can use any serializers field. BooleanField is only an example + is_validated = serializers.BooleanField(required=False) + + +If you want to set ``None`` as field value: + +.. code-block:: python + + # you can use any serializers field. Note that required=False will always be false if allow_null=True or blank=True + some_field = serializers.CharField(allow_null=True, required=False) + +.. warning:: + + Be aware than even if the value in DB will be ``None`` the value that you get in response will follow the same gRPC constraints and will be the default value of the field type if using :ref:`grpc-web without BUF`. + +If you want to set a specific default as field value: + +.. code-block:: python + + # you can use any serializers field. + some_field = serializers.CharField(default="default value") + ============================== Read-Only and Write-Only Props ============================== @@ -227,6 +250,7 @@ Read-Only and Write-Only Props If the setting `SEPARATE_READ_WRITE_MODEL` is `True`, DSG will automatically use `read_only` and `write_only` field kwargs to generate fields only in the request or response message. This is also true for Django fields with specific values (e.g., ``editable=False``). .. warning:: + This setting is deprecated. See :ref:`setting documentation` diff --git a/test_utils/generateproto.py b/test_utils/generateproto.py index d0dfbdbf..bb73fe14 100644 --- a/test_utils/generateproto.py +++ b/test_utils/generateproto.py @@ -11,7 +11,7 @@ from django_socio_grpc.tests.test_proto_generation import OVERRIDEN_SETTINGS # noqa E402 # INFO - AM - 29/12/2023 - Set this to true if you want to reorder proto order without having to delete the proto file. -override_fields_number = True +override_fields_number = False args = [] opts = {"override_fields_number": override_fields_number} From 208131df0f007f2d519b577361a65b693ab1e150 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Mon, 8 Jan 2024 18:10:30 +0100 Subject: [PATCH 09/19] Update django_socio_grpc/mixins.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Léni --- django_socio_grpc/mixins.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/django_socio_grpc/mixins.py b/django_socio_grpc/mixins.py index 82243e10..99ea74e7 100644 --- a/django_socio_grpc/mixins.py +++ b/django_socio_grpc/mixins.py @@ -254,11 +254,11 @@ def _get_partial_update_request(service): class PartialUpdateMetaClass(serializers.SerializerMetaclass): """ - this metaclass just exist so we can set the PARTIAL_UPDATE_FIELD_NAME variable as an attribute name of PartialUpdateRequest. + This metaclass exists so we can set the PARTIAL_UPDATE_FIELD_NAME variable as an attribute name of PartialUpdateRequest. This can be replaced by just declaring in PartialUpdateRequest: _partial_update_fields = serializers.ListField(child=serializers.CharField()) - but this would not be dynamic if constante change or if we want it to be configurable in settings in the futur - This metaclass should inherit from DRF SerializerMetaclass as serializer has it's own metaclass to add _declared_fields attibute + but this would not be dynamic if a constant changes or if we want it to be configurable in settings in the future. + This metaclass should inherit from DRF SerializerMetaclass as serializer has it's own metaclass to add _declared_fields attribute Using PartialUpdateRequest.setattr is not enough as _declared_fields is done in metaclass so all fields should be declared before """ From 37b87dc0cd50915823df57a90b29d8b21382dad0 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Mon, 8 Jan 2024 18:11:56 +0100 Subject: [PATCH 10/19] Update docs/features/proto-serializers.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Léni --- docs/features/proto-serializers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/proto-serializers.rst b/docs/features/proto-serializers.rst index 3c393e8a..b9b11013 100644 --- a/docs/features/proto-serializers.rst +++ b/docs/features/proto-serializers.rst @@ -233,7 +233,7 @@ If you want to set ``None`` as field value: .. warning:: - Be aware than even if the value in DB will be ``None`` the value that you get in response will follow the same gRPC constraints and will be the default value of the field type if using :ref:`grpc-web without BUF`. + In a JS environment, when using :ref:`Google official JS protobuf compiler`, optional fields without presence (when the value has not been set) will always return their default value instead of undefined/null. If you want to set a specific default as field value: From 0218e1aa85af26503daa4bab47b9a093b6efb047 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Mon, 8 Jan 2024 19:47:20 +0100 Subject: [PATCH 11/19] not working --- django_socio_grpc/proto_serializers.py | 28 ++++++++++++------- django_socio_grpc/tests/fakeapp/models.py | 2 +- .../tests/test_async_model_service.py | 14 ++++++++++ .../tests/test_sync_model_service.py | 18 +++++++++++- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 4dc27533..8d8d1187 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -42,10 +42,10 @@ def __init__(self, *args, **kwargs): def message_to_data(self, message): """Protobuf message -> Dict of python primitive datatypes.""" data_dict = message_to_dict(message) - data_dict = self.populate_dict_with_none_if_not_required(data_dict, message) + data_dict = self.populate_dict_with_none_if_not_required(data_dict) return data_dict - def populate_dict_with_none_if_not_required(self, data_dict, message=None): + def populate_dict_with_none_if_not_required(self, data_dict): """ This method allow to populate the data dictionary with None for optional field that allow_null and not send in the request. It's also allow to deal with partial update correctly. @@ -54,8 +54,8 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): When refactoring serializer to only use message we will be able to determine the default value of the field depending of the same logic followed here """ - # INFO - AM - 04/01/2024 - If we are in a partial serializer with a message we need to have the PARTIAL_UPDATE_FIELD_NAME in the message. If not we raise an exception - if self.partial and not hasattr(message, PARTIAL_UPDATE_FIELD_NAME): + # INFO - AM - 04/01/2024 - If we are in a partial serializer with a message we need to have the PARTIAL_UPDATE_FIELD_NAME in the data_dict. If not we raise an exception + if self.partial and not PARTIAL_UPDATE_FIELD_NAME in data_dict: raise ValidationError( { PARTIAL_UPDATE_FIELD_NAME: [ @@ -66,12 +66,10 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): ) for field in self.fields.values(): - # INFO - AM - 04/01/2024 - If we are in a partial serializer we need to only have field specified in PARTIAL_UPDATE_FIELD_NAME attribute. Meaning bot deleting field that should not be here and not adding None to allow_null field that are not specified + # INFO - AM - 04/01/2024 - If we are in a partial serializer we only need to have field specified in PARTIAL_UPDATE_FIELD_NAME attribute in the data. Meaning deleting fields that should not be here and not adding None to allow_null field that are not specified if ( - message - and self.partial - and hasattr(message, PARTIAL_UPDATE_FIELD_NAME) - and field.field_name not in getattr(message, PARTIAL_UPDATE_FIELD_NAME) + self.partial + and field.field_name not in data_dict.get(PARTIAL_UPDATE_FIELD_NAME, {}) ): if field.field_name in data_dict: del data_dict[field.field_name] @@ -80,7 +78,17 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): if field.field_name in data_dict: continue # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value - if field.allow_null or field.default in [None, empty] and field.required is True: + print(field.field_name, field.allow_null, field.default, field.required, "value: ", data_dict.get(field.field_name, "not_set")) + if field.allow_null and field.default not in [None, empty]: + raise ValidationError( + { + field.field_name: [ + f"Field {field.field_name} accept both null and a default value. " + ] + }, + code="both_allow_null_and_default", + ) + if field.allow_null or (field.default in [None, empty] and field.required is True): data_dict[field.field_name] = None return data_dict diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index e9663f07..0281fd50 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -14,7 +14,7 @@ class UnitTestModel(models.Model): id = models.AutoField(primary_key=True) - title = models.CharField(max_length=20) + title = models.CharField(max_length=20, blank=True) text = models.CharField(max_length=100, null=True) some_default_counter = models.IntegerField() is_validated = models.BooleanField(default=False) diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 88672513..1f62d200 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -83,6 +83,20 @@ async def test_async_update(self): self.assertEqual(response.some_default_counter, 10) self.assertEqual(response.is_validated, False) + + async def test_async_update_with_default_value(self): + unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id + grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) + request = fakeapp_pb2.UnitTestModelRequest( + id=unit_id, title="", text="newText", is_validated=False, some_default_counter=0 + ) + response = await grpc_stub.Update(request=request) + + self.assertEqual(response.title, "") + self.assertEqual(response.text, "newText") + self.assertEqual(response.some_default_counter, 0) + self.assertEqual(response.is_validated, False) + async def test_async_destroy(self): unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index 4b0ae545..b261f3e1 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -119,7 +119,23 @@ def test_partial_update(self): self.assertEqual(response.title, "newTitle") self.assertEqual(response.text, old_text) + # Test partial update takes into account None value for allow_null field + request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( + id=instance.id, text=None, **{PARTIAL_UPDATE_FIELD_NAME: ["text"]} + ) + response = grpc_stub.PartialUpdate(request=request) + + self.assertEqual(response.title, "newTitle") + + # https://www.django-rest-framework.org/api-guide/fields/#default + # Note that, without an explicit default, setting this argument to True will imply a default value of null for serialization output, but does not imply a default for input deserialization. + self.assertFalse(response.HasField("text")) + instance.refresh_from_db() + self.assertIsNone(instance.text) + # Test partial update takes into account empty optional fields + instance.text = old_text + instance.save() request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( id=instance.id, **{PARTIAL_UPDATE_FIELD_NAME: ["text"]} ) @@ -127,7 +143,7 @@ def test_partial_update(self): self.assertEqual(response.title, "newTitle") - # Directly getting `text` would return default value, which is empty string + # Note that, without an explicit default, setting this argument to True will imply a default value of null for serialization output, but does not imply a default for input deserialization. self.assertFalse(response.HasField("text")) def test_async_list_custom_action(self): From 1e7054e6f98978b81f2caac80b91fa243f36689a Mon Sep 17 00:00:00 2001 From: AMontagu Date: Wed, 10 Jan 2024 18:44:19 +0100 Subject: [PATCH 12/19] WIP --- django_socio_grpc/proto_serializers.py | 13 +- django_socio_grpc/protobuf/proto_classes.py | 2 +- .../tests/fakeapp/grpc/fakeapp.proto | 15 +- .../tests/fakeapp/grpc/fakeapp_pb2.py | 300 +++++++++--------- django_socio_grpc/tests/fakeapp/models.py | 1 + .../fakeapp.proto | 9 +- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 15 +- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 6 +- .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 9 +- .../tests/test_async_model_service.py | 6 +- django_socio_grpc/tests/test_default_value.py | 117 +++++++ 11 files changed, 320 insertions(+), 173 deletions(-) create mode 100644 django_socio_grpc/tests/test_default_value.py diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 8d8d1187..5f5c8d8c 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -42,10 +42,10 @@ def __init__(self, *args, **kwargs): def message_to_data(self, message): """Protobuf message -> Dict of python primitive datatypes.""" data_dict = message_to_dict(message) - data_dict = self.populate_dict_with_none_if_not_required(data_dict) + data_dict = self.populate_dict_with_none_if_not_required(data_dict, message=message) return data_dict - def populate_dict_with_none_if_not_required(self, data_dict): + def populate_dict_with_none_if_not_required(self, data_dict, message=None): """ This method allow to populate the data dictionary with None for optional field that allow_null and not send in the request. It's also allow to deal with partial update correctly. @@ -53,6 +53,8 @@ def populate_dict_with_none_if_not_required(self, data_dict): We can't rely only on required True/False as in DSG if a field is required it will have the default value of it's type (empty string for string type) and not None When refactoring serializer to only use message we will be able to determine the default value of the field depending of the same logic followed here + + set default value for field except if optional or partial update """ # INFO - AM - 04/01/2024 - If we are in a partial serializer with a message we need to have the PARTIAL_UPDATE_FIELD_NAME in the data_dict. If not we raise an exception if self.partial and not PARTIAL_UPDATE_FIELD_NAME in data_dict: @@ -77,8 +79,15 @@ def populate_dict_with_none_if_not_required(self, data_dict): # INFO - AM - 04/01/2024 - if field already existing in the data_dict we do not need to do something else if field.field_name in data_dict: continue + + if field.required: + print(message.DESCRIPTOR.fields_by_name) + print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) + data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value + continue # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value print(field.field_name, field.allow_null, field.default, field.required, "value: ", data_dict.get(field.field_name, "not_set")) + print(message.HasField(field.field_name), field.field_name in data_dict) if field.allow_null and field.default not in [None, empty]: raise ValidationError( { diff --git a/django_socio_grpc/protobuf/proto_classes.py b/django_socio_grpc/protobuf/proto_classes.py index 679b1990..747f8471 100644 --- a/django_socio_grpc/protobuf/proto_classes.py +++ b/django_socio_grpc/protobuf/proto_classes.py @@ -93,7 +93,7 @@ def _get_cardinality(self, field: serializers.Field): """ INFO - AM - 04/01/2023 If field can be null -> optional - if field is not required -> optional + if field is not required -> optional. Since DRF 3.0 When using model default, only required is set to False. The model default is not set into the field as just passing None will result in model default. https://github.com/encode/django-rest-framework/issues/2683 if field.default is set (meaning not None or empty) -> optional Not dealing with field.allow_blank now as it doesn't seem to be related to OPTIONAl and more about validation and only exist for charfield diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index c6dc93b6..e84e2517 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -186,17 +186,19 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicServiceListResponse { @@ -513,24 +515,27 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - string title = 5; + optional string title = 5; optional string text = 6; + int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 15cec186..7d46b858 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf0\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x12\n\x05title\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04text\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x08\n\x06_titleB\x07\n\x05_textB\x0f\n\r_is_validated\"\xf1\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x12\n\x05title\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04text\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x08\n\x06_titleB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\x97\x02\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x12\n\x05title\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x07 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"\xea\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x12\n\x05title\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"\xeb\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x12\n\x05title\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -52,153 +52,153 @@ _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_start=1273 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_end=1386 _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1389 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1588 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1591 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1791 - _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1793 - _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1892 - _globals['_BASICSERVICEREQUEST']._serialized_start=1895 - _globals['_BASICSERVICEREQUEST']._serialized_end=2072 - _globals['_BASICSERVICERESPONSE']._serialized_start=2075 - _globals['_BASICSERVICERESPONSE']._serialized_end=2230 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2232 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2339 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2341 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2386 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2388 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2429 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2431 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2473 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2476 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2668 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2670 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2721 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2723 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2748 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2750 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2849 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=2851 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=2915 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2917 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=2999 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=3001 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=3058 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3060 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3173 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3175 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3289 - _globals['_MANYMANYMODELREQUEST']._serialized_start=3291 - _globals['_MANYMANYMODELREQUEST']._serialized_end=3390 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=3392 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=3457 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3459 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3507 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3509 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3540 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3542 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3653 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3656 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3898 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3901 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4098 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4101 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4301 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4303 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4352 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4354 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4401 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4403 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4433 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4435 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4559 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4562 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4776 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4779 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=4948 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=4951 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5372 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5374 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5422 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5424 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5477 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5479 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5515 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5517 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5638 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5641 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5901 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5904 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6119 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6122 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6338 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6340 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6394 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6396 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6444 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6446 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6477 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6479 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6590 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6593 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6778 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6781 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=6921 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=6924 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7097 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7099 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7148 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7150 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7257 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7259 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7298 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7300 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7341 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7343 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7388 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7390 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7436 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7438 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7499 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7501 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7542 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7545 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7687 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7689 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7715 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7717 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7818 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7820 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7877 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7880 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8118 - _globals['_UNITTESTMODELREQUEST']._serialized_start=8121 - _globals['_UNITTESTMODELREQUEST']._serialized_end=8314 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=8317 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=8511 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8513 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8555 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8557 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8585 - _globals['_BASICCONTROLLER']._serialized_start=8588 - _globals['_BASICCONTROLLER']._serialized_end=9814 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=9817 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=10154 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10157 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10412 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10415 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10580 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10583 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11264 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11267 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=11936 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=11939 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12681 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12684 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13388 - _globals['_STREAMINCONTROLLER']._serialized_start=13391 - _globals['_STREAMINCONTROLLER']._serialized_end=13645 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13648 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14517 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14520 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15381 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1629 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1632 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1873 + _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1875 + _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1974 + _globals['_BASICSERVICEREQUEST']._serialized_start=1977 + _globals['_BASICSERVICEREQUEST']._serialized_end=2154 + _globals['_BASICSERVICERESPONSE']._serialized_start=2157 + _globals['_BASICSERVICERESPONSE']._serialized_end=2312 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2314 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2421 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2423 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2468 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2470 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2511 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2513 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2555 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2558 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2750 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2752 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2803 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2805 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2830 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2832 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2931 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=2933 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=2997 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2999 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=3081 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=3083 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=3140 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3142 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3255 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3257 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3371 + _globals['_MANYMANYMODELREQUEST']._serialized_start=3373 + _globals['_MANYMANYMODELREQUEST']._serialized_end=3472 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=3474 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=3539 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3541 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3589 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3591 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3622 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3624 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3735 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3738 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3980 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3983 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4180 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4183 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4383 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4385 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4434 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4436 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4483 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4485 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4515 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4517 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4641 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4644 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4858 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4861 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=5030 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=5033 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5454 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5456 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5504 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5506 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5559 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5561 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5597 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5599 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5720 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5723 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5983 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5986 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6201 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6204 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6420 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6422 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6476 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6478 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6526 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6528 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6559 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6561 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6672 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6675 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6860 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6863 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=7003 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=7006 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7179 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7181 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7230 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7232 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7339 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7341 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7380 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7382 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7423 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7425 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7470 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7472 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7518 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7520 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7581 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7583 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7624 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7627 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7769 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7771 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7797 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7799 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7900 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7902 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7959 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7962 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8241 + _globals['_UNITTESTMODELREQUEST']._serialized_start=8244 + _globals['_UNITTESTMODELREQUEST']._serialized_end=8478 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=8481 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=8716 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8718 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8760 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8762 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8790 + _globals['_BASICCONTROLLER']._serialized_start=8793 + _globals['_BASICCONTROLLER']._serialized_end=10019 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=10022 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=10359 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10362 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10617 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10620 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10785 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10788 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11469 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11472 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=12141 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=12144 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12886 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12889 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13593 + _globals['_STREAMINCONTROLLER']._serialized_start=13596 + _globals['_STREAMINCONTROLLER']._serialized_end=13850 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13853 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14722 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14725 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15586 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index 0281fd50..fa6da453 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -18,6 +18,7 @@ class UnitTestModel(models.Model): text = models.CharField(max_length=100, null=True) some_default_counter = models.IntegerField() is_validated = models.BooleanField(default=False) + required_counter = models.IntegerField() class Meta: grpc_messages = { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 1d2b158c..8613fd70 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -163,9 +163,10 @@ message BasicParamWithSerializerRequestList { message BasicProtoListChild { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicProtoListChildList { @@ -408,8 +409,9 @@ message UnitTestModel { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelDestroyRequest { @@ -439,8 +441,9 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - string title = 5; + optional string title = 5; optional string text = 6; + int32 required_counter = 7; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index c6dc93b6..e84e2517 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -186,17 +186,19 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicServiceListResponse { @@ -513,24 +515,27 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - string title = 5; + optional string title = 5; optional string text = 6; + int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index d691f0ce..115efea5 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -96,17 +96,19 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - string title = 3; + optional string title = 3; optional string text = 4; optional bool is_validated = 5; + int32 required_counter = 6; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index 55db0920..8c285a89 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -42,24 +42,27 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - string title = 5; + optional string title = 5; optional string text = 6; + int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - string title = 4; + optional string title = 4; optional string text = 5; + int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 1f62d200..099a0c55 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -40,7 +40,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text, some_default_counter=50, required_counter=5).save() async def test_async_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) @@ -88,13 +88,15 @@ async def test_async_update_with_default_value(self): unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) request = fakeapp_pb2.UnitTestModelRequest( - id=unit_id, title="", text="newText", is_validated=False, some_default_counter=0 + id=unit_id, title="", required_counter=0, text="newText", is_validated=False, some_default_counter=0 ) + # print(request.HasField("title")) response = await grpc_stub.Update(request=request) self.assertEqual(response.title, "") self.assertEqual(response.text, "newText") self.assertEqual(response.some_default_counter, 0) + self.assertEqual(response.required_counter, 0) self.assertEqual(response.is_validated, False) async def test_async_destroy(self): diff --git a/django_socio_grpc/tests/test_default_value.py b/django_socio_grpc/tests/test_default_value.py new file mode 100644 index 00000000..d1dbef31 --- /dev/null +++ b/django_socio_grpc/tests/test_default_value.py @@ -0,0 +1,117 @@ +from typing import List, Optional + +import pytest +from django.db import models +from rest_framework import serializers + +from django_socio_grpc import proto_serializers +from django_socio_grpc.decorators import grpc_action +from django_socio_grpc.protobuf import ProtoComment, ProtoRegistrationError +from django_socio_grpc.protobuf.proto_classes import ( + EmptyMessage, + FieldCardinality, + ProtoField, + ProtoMessage, + RequestProtoMessage, + ResponseProtoMessage, + StructMessage, +) +from django_socio_grpc.services import Service +from django_socio_grpc.tests.fakeapp.models import RelatedFieldModel +from django_socio_grpc.tests.fakeapp.serializers import ( + BasicProtoListChildSerializer, + BasicServiceSerializer, + RelatedFieldModelSerializer, +) + +from django_socio_grpc import generics, mixins + + +class MyDefaultValueModel(models.Model): + string_required = models.CharField(max_length=20) + string_blank = models.CharField(max_length=20, blank=True) + string_nullable = models.CharField(max_length=20, null=True) + string_default = models.CharField(max_length=20, default="default") + string_required_but_serializer_default = models.CharField(max_length=20) + int_required = models.IntegerField() + int_nullable = models.IntegerField(null=True) + int_default = models.IntegerField(default=5) + int_required_but_serializer_default = models.IntegerField() + boolean_required = models.BooleanField() + boolean_default_false = models.BooleanField(default=False) + boolean_default_true = models.BooleanField(default=True) + boolean_required_but_serializer_default = models.IntegerField() + + + +class MyDefaultSerializer(proto_serializers.ModelProtoSerializer): + string_required_but_serializer_default = serializers.CharField(default="default_serializer") + int_required_but_serializer_default = serializers.IntegerField(default=10) + boolean_required_but_serializer_default = serializers.CharField(default=False) + + class Meta: + model = MyDefaultValueModel + fields = "__all__" + + + +class UnitTestModelService(generics.AsyncModelService): + queryset = MyDefaultValueModel.objects.all().order_by("id") + serializer_class = MyDefaultSerializer + + +class TestDefaultValue: + # FROM_FIELD + def test_from_field_string(self): + ser = MyDefaultSerializer() + field = ser.fields["string_required"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "string_required" + assert proto_field.field_type == "string" + assert proto_field.cardinality == FieldCardinality.NONE + + # --------------------------------- + + ser = MyDefaultSerializer() + field = ser.fields["string_blank"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "string_blank" + assert proto_field.field_type == "string" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = MyDefaultSerializer() + field = ser.fields["string_nullable"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "string_nullable" + assert proto_field.field_type == "string" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = MyDefaultSerializer() + field = ser.fields["string_default"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "string_default" + assert proto_field.field_type == "string" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = MyDefaultSerializer() + field = ser.fields["string_required_but_serializer_default"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "string_required_but_serializer_default" + assert proto_field.field_type == "string" + assert proto_field.cardinality == FieldCardinality.OPTIONAL \ No newline at end of file From 04fdedad981a24d67e11b87dbb58307f88b4ca93 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Wed, 10 Jan 2024 19:23:48 +0100 Subject: [PATCH 13/19] refacto tu use separate model --- django_socio_grpc/proto_serializers.py | 10 +- .../generated_protobuf_files_old_way.py | 42 +++ .../tests/fakeapp/grpc/fakeapp.proto | 95 +++++- .../tests/fakeapp/grpc/fakeapp_pb2.py | 316 +++++++++--------- .../tests/fakeapp/grpc/fakeapp_pb2_grpc.py | 226 +++++++++++++ django_socio_grpc/tests/fakeapp/handlers.py | 2 + django_socio_grpc/tests/fakeapp/models.py | 20 +- .../tests/fakeapp/serializers.py | 10 + .../fakeapp/services/default_value_service.py | 8 + .../fakeapp.proto | 9 +- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 95 +++++- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 6 +- .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 9 +- .../tests/test_async_model_service.py | 29 +- django_socio_grpc/tests/test_default_value.py | 190 +++++++---- 15 files changed, 799 insertions(+), 268 deletions(-) create mode 100644 django_socio_grpc/tests/fakeapp/services/default_value_service.py diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 5f5c8d8c..5f3c37d2 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -80,14 +80,14 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): if field.field_name in data_dict: continue - if field.required: - print(message.DESCRIPTOR.fields_by_name) - print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) + if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: + # print(message.DESCRIPTOR.fields_by_name) + # print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value continue # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value - print(field.field_name, field.allow_null, field.default, field.required, "value: ", data_dict.get(field.field_name, "not_set")) - print(message.HasField(field.field_name), field.field_name in data_dict) + # print(field.field_name, field.allow_null, field.default, field.required, "value: ", data_dict.get(field.field_name, "not_set")) + # print(message.HasField(field.field_name), field.field_name in data_dict) if field.allow_null and field.default not in [None, empty]: raise ValidationError( { diff --git a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py index 2d3f9057..15f86afc 100644 --- a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py +++ b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py @@ -145,6 +145,14 @@ rpc Destroy(RecursiveTestModelDestroyRequest) returns (google.protobuf.Empty) {} } +service DefaultValueModelController { + rpc List(DefaultValueModelListRequest) returns (DefaultValueModelListResponse) {} + rpc Create(DefaultValueModel) returns (DefaultValueModel) {} + rpc Retrieve(DefaultValueModelRetrieveRequest) returns (DefaultValueModel) {} + rpc Update(DefaultValueModel) returns (DefaultValueModel) {} + rpc Destroy(DefaultValueModelDestroyRequest) returns (google.protobuf.Empty) {} +} + message UnitTestModel { int32 id = 1; string title = 2; @@ -284,6 +292,40 @@ string uuid = 1; } +message DefaultValueModel { + string id = 1; + string string_required = 2; + string string_blank = 3; + string string_nullable = 4; + string string_default = 5; + string string_required_but_serializer_default = 6; + int32 int_required = 7; + int32 int_nullable = 8; + int32 int_default = 9; + int32 int_required_but_serializer_default = 10; + bool boolean_required = 11; + bool boolean_nullable = 12; + bool boolean_default_false = 13; + bool boolean_default_true = 14; + bool boolean_required_but_serializer_default = 15; +} + +message DefaultValueModelListRequest { +} + +message DefaultValueModelListResponse { + repeated DefaultValueModel results = 1; + int32 count = 2; +} + +message DefaultValueModelRetrieveRequest { + string id = 1; +} + +message DefaultValueModelDestroyRequest { + string id = 1; +} + """ CUSTOM_APP_MODEL_GENERATED = """syntax = "proto3"; diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index e84e2517..0f9fa628 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -20,6 +20,15 @@ service BasicController { rpc TestEmptyMethod(google.protobuf.Empty) returns (google.protobuf.Empty) {} } +service DefaultValueController { + rpc Create(DefaultValueRequest) returns (DefaultValueResponse) {} + rpc Destroy(DefaultValueDestroyRequest) returns (google.protobuf.Empty) {} + rpc List(DefaultValueListRequest) returns (DefaultValueListResponse) {} + rpc PartialUpdate(DefaultValuePartialUpdateRequest) returns (DefaultValueResponse) {} + rpc Retrieve(DefaultValueRetrieveRequest) returns (DefaultValueResponse) {} + rpc Update(DefaultValueRequest) returns (DefaultValueResponse) {} +} + service ExceptionController { rpc APIException(google.protobuf.Empty) returns (google.protobuf.Empty) {} rpc GRPCException(google.protobuf.Empty) returns (google.protobuf.Empty) {} @@ -186,19 +195,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicServiceListResponse { @@ -252,6 +259,77 @@ message CustomRetrieveResponseSpecialFieldsModelResponse { repeated google.protobuf.Struct custom_method_field = 3; } +message DefaultValueDestroyRequest { + int32 id = 1; +} + +message DefaultValueListRequest { +} + +message DefaultValueListResponse { + repeated DefaultValueResponse results = 1; + int32 count = 2; +} + +message DefaultValuePartialUpdateRequest { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + repeated string _partial_update_fields = 5; + string string_required = 6; + optional string string_blank = 7; + optional string string_nullable = 8; + optional string string_default = 9; + int32 int_required = 10; + optional int32 int_nullable = 11; + optional int32 int_default = 12; + bool boolean_required = 13; + optional bool boolean_nullable = 14; + optional bool boolean_default_false = 15; + optional bool boolean_default_true = 16; +} + +message DefaultValueRequest { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + string string_required = 5; + optional string string_blank = 6; + optional string string_nullable = 7; + optional string string_default = 8; + int32 int_required = 9; + optional int32 int_nullable = 10; + optional int32 int_default = 11; + bool boolean_required = 12; + optional bool boolean_nullable = 13; + optional bool boolean_default_false = 14; + optional bool boolean_default_true = 15; +} + +message DefaultValueResponse { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + string string_required = 5; + optional string string_blank = 6; + optional string string_nullable = 7; + optional string string_default = 8; + int32 int_required = 9; + optional int32 int_nullable = 10; + optional int32 int_default = 11; + bool boolean_required = 12; + optional bool boolean_nullable = 13; + optional bool boolean_default_false = 14; + optional bool boolean_default_true = 15; +} + +message DefaultValueRetrieveRequest { + int32 id = 1; +} + message ExceptionStreamRaiseExceptionResponse { string id = 1; } @@ -515,27 +593,24 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional string title = 5; + string title = 5; optional string text = 6; - int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 7d46b858..552fe8c0 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf0\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x12\n\x05title\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04text\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x08\n\x06_titleB\x07\n\x05_textB\x0f\n\r_is_validated\"\xf1\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x12\n\x05title\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04text\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x08\n\x06_titleB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\x97\x02\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x12\n\x05title\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x07 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"\xea\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x12\n\x05title\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"\xeb\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x12\n\x05title\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\x04text\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x10required_counter\x18\x06 \x01(\x05\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x08\n\x06_titleB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd1\x06\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x05 \x03(\t\x12\x17\n\x0fstring_required\x18\x06 \x01(\t\x12\x19\n\x0cstring_blank\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\t \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\n \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0b \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0c \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\r \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x0e \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0f \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x10 \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\xa4\x06\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\xa5\x06\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -52,153 +52,169 @@ _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_start=1273 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_end=1386 _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1389 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1629 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1632 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1873 - _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1875 - _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1974 - _globals['_BASICSERVICEREQUEST']._serialized_start=1977 - _globals['_BASICSERVICEREQUEST']._serialized_end=2154 - _globals['_BASICSERVICERESPONSE']._serialized_start=2157 - _globals['_BASICSERVICERESPONSE']._serialized_end=2312 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2314 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2421 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2423 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2468 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2470 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2511 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2513 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2555 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2558 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2750 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=2752 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=2803 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=2805 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=2830 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=2832 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=2931 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=2933 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=2997 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=2999 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=3081 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=3083 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=3140 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=3142 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=3255 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=3257 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=3371 - _globals['_MANYMANYMODELREQUEST']._serialized_start=3373 - _globals['_MANYMANYMODELREQUEST']._serialized_end=3472 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=3474 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=3539 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=3541 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=3589 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=3591 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=3622 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=3624 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=3735 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=3738 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=3980 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=3983 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=4180 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=4183 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=4383 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=4385 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=4434 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=4436 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=4483 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=4485 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=4515 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=4517 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=4641 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=4644 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=4858 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=4861 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=5030 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=5033 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=5454 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=5456 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=5504 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=5506 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=5559 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=5561 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=5597 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=5599 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=5720 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=5723 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=5983 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=5986 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=6201 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=6204 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=6420 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=6422 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=6476 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=6478 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=6526 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=6528 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=6559 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=6561 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=6672 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=6675 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=6860 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=6863 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=7003 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=7006 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=7179 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=7181 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=7230 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=7232 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=7339 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=7341 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=7380 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=7382 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=7423 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=7425 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=7470 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=7472 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=7518 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7520 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7581 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=7583 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=7624 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=7627 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=7769 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=7771 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=7797 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=7799 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=7900 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=7902 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=7959 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=7962 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=8241 - _globals['_UNITTESTMODELREQUEST']._serialized_start=8244 - _globals['_UNITTESTMODELREQUEST']._serialized_end=8478 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=8481 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=8716 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=8718 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=8760 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=8762 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=8790 - _globals['_BASICCONTROLLER']._serialized_start=8793 - _globals['_BASICCONTROLLER']._serialized_end=10019 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=10022 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=10359 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=10362 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=10617 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=10620 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=10785 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=10788 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=11469 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=11472 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=12141 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=12144 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=12886 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=12889 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=13593 - _globals['_STREAMINCONTROLLER']._serialized_start=13596 - _globals['_STREAMINCONTROLLER']._serialized_end=13850 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=13853 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=14722 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=14725 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=15586 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1588 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1591 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1791 + _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1793 + _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1892 + _globals['_BASICSERVICEREQUEST']._serialized_start=1895 + _globals['_BASICSERVICEREQUEST']._serialized_end=2072 + _globals['_BASICSERVICERESPONSE']._serialized_start=2075 + _globals['_BASICSERVICERESPONSE']._serialized_end=2230 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2232 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2339 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2341 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2386 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2388 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2429 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2431 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2473 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2476 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2668 + _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_start=2670 + _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_end=2710 + _globals['_DEFAULTVALUELISTREQUEST']._serialized_start=2712 + _globals['_DEFAULTVALUELISTREQUEST']._serialized_end=2737 + _globals['_DEFAULTVALUELISTRESPONSE']._serialized_start=2739 + _globals['_DEFAULTVALUELISTRESPONSE']._serialized_end=2838 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_start=2841 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=3690 + _globals['_DEFAULTVALUEREQUEST']._serialized_start=3693 + _globals['_DEFAULTVALUEREQUEST']._serialized_end=4497 + _globals['_DEFAULTVALUERESPONSE']._serialized_start=4500 + _globals['_DEFAULTVALUERESPONSE']._serialized_end=5305 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=5307 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=5348 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=5350 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=5401 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=5403 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=5428 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=5430 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=5529 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=5531 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=5595 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=5597 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=5679 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=5681 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=5738 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=5740 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=5853 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=5855 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=5969 + _globals['_MANYMANYMODELREQUEST']._serialized_start=5971 + _globals['_MANYMANYMODELREQUEST']._serialized_end=6070 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=6072 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=6137 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=6139 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=6187 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=6189 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=6220 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=6222 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=6333 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=6336 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=6578 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=6581 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=6778 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=6781 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=6981 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=6983 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=7032 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=7034 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=7081 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=7083 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=7113 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=7115 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=7239 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=7242 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=7456 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=7459 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=7628 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=7631 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=8052 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=8054 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=8102 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8104 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8157 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=8159 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=8195 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=8197 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=8318 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8321 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=8581 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=8584 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=8799 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=8802 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=9018 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9020 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9074 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=9076 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=9124 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=9126 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=9157 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=9159 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=9270 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=9273 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=9458 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=9461 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=9601 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=9604 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=9777 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=9779 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=9828 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=9830 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=9937 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=9939 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=9978 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=9980 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=10021 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=10023 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=10068 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=10070 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=10116 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10118 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10179 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=10181 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=10222 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=10225 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=10367 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=10369 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=10395 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=10397 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=10498 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10500 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10557 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=10560 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=10798 + _globals['_UNITTESTMODELREQUEST']._serialized_start=10801 + _globals['_UNITTESTMODELREQUEST']._serialized_end=10994 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=10997 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=11191 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=11193 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11235 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11237 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11265 + _globals['_BASICCONTROLLER']._serialized_start=11268 + _globals['_BASICCONTROLLER']._serialized_end=12494 + _globals['_DEFAULTVALUECONTROLLER']._serialized_start=12497 + _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13106 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=13109 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=13446 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13449 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=13704 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=13707 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=13872 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=13875 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=14556 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=14559 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15228 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15231 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=15973 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=15976 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=16680 + _globals['_STREAMINCONTROLLER']._serialized_start=16683 + _globals['_STREAMINCONTROLLER']._serialized_end=16937 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=16940 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=17809 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=17812 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=18673 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2_grpc.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2_grpc.py index 26a626ed..80645e83 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2_grpc.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2_grpc.py @@ -430,6 +430,232 @@ def TestEmptyMethod(request, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) +class DefaultValueControllerStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Create = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/Create', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.SerializeToString, + response_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + ) + self.Destroy = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/Destroy', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueDestroyRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.List = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/List', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListRequest.SerializeToString, + response_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListResponse.FromString, + ) + self.PartialUpdate = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/PartialUpdate', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValuePartialUpdateRequest.SerializeToString, + response_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + ) + self.Retrieve = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/Retrieve', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRetrieveRequest.SerializeToString, + response_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + ) + self.Update = channel.unary_unary( + '/myproject.fakeapp.DefaultValueController/Update', + request_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.SerializeToString, + response_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + ) + + +class DefaultValueControllerServicer(object): + """Missing associated documentation comment in .proto file.""" + + def Create(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 Destroy(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 List(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 PartialUpdate(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 Retrieve(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 Update(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_DefaultValueControllerServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Create': grpc.unary_unary_rpc_method_handler( + servicer.Create, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.FromString, + response_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.SerializeToString, + ), + 'Destroy': grpc.unary_unary_rpc_method_handler( + servicer.Destroy, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueDestroyRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'List': grpc.unary_unary_rpc_method_handler( + servicer.List, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListRequest.FromString, + response_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListResponse.SerializeToString, + ), + 'PartialUpdate': grpc.unary_unary_rpc_method_handler( + servicer.PartialUpdate, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValuePartialUpdateRequest.FromString, + response_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.SerializeToString, + ), + 'Retrieve': grpc.unary_unary_rpc_method_handler( + servicer.Retrieve, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRetrieveRequest.FromString, + response_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.SerializeToString, + ), + 'Update': grpc.unary_unary_rpc_method_handler( + servicer.Update, + request_deserializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.FromString, + response_serializer=django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'myproject.fakeapp.DefaultValueController', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class DefaultValueController(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def Create(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, '/myproject.fakeapp.DefaultValueController/Create', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.SerializeToString, + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Destroy(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, '/myproject.fakeapp.DefaultValueController/Destroy', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueDestroyRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def List(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, '/myproject.fakeapp.DefaultValueController/List', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListRequest.SerializeToString, + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueListResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def PartialUpdate(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, '/myproject.fakeapp.DefaultValueController/PartialUpdate', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValuePartialUpdateRequest.SerializeToString, + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Retrieve(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, '/myproject.fakeapp.DefaultValueController/Retrieve', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRetrieveRequest.SerializeToString, + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Update(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, '/myproject.fakeapp.DefaultValueController/Update', + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueRequest.SerializeToString, + django__socio__grpc_dot_tests_dot_fakeapp_dot_grpc_dot_fakeapp__pb2.DefaultValueResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + class ExceptionControllerStub(object): """Missing associated documentation comment in .proto file.""" diff --git a/django_socio_grpc/tests/fakeapp/handlers.py b/django_socio_grpc/tests/fakeapp/handlers.py index 48a2ce11..5a738eef 100644 --- a/django_socio_grpc/tests/fakeapp/handlers.py +++ b/django_socio_grpc/tests/fakeapp/handlers.py @@ -13,6 +13,7 @@ from fakeapp.services.stream_in_service import StreamInService from fakeapp.services.sync_unit_test_model_service import SyncUnitTestModelService from fakeapp.services.unit_test_model_service import UnitTestModelService +from fakeapp.services.default_value_service import DefaultValueService from django_socio_grpc.services.app_handler_registry import AppHandlerRegistry from django_socio_grpc.tests.fakeapp.services.unit_test_model_with_struct_filter_service import ( @@ -37,6 +38,7 @@ def grpc_handlers(server): app_registry.register(ExceptionService) app_registry.register(RecursiveTestModelService) app_registry.register(UnitTestModelWithStructFilterService) + app_registry.register(DefaultValueService) services = ( diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index fa6da453..fd07a58d 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -14,11 +14,10 @@ class UnitTestModel(models.Model): id = models.AutoField(primary_key=True) - title = models.CharField(max_length=20, blank=True) + title = models.CharField(max_length=20) text = models.CharField(max_length=100, null=True) some_default_counter = models.IntegerField() is_validated = models.BooleanField(default=False) - required_counter = models.IntegerField() class Meta: grpc_messages = { @@ -192,3 +191,20 @@ class RecursiveTestModel(models.Model): parent = models.ForeignKey( "self", blank=True, null=True, on_delete=models.CASCADE, related_name="children" ) + + +class DefaultValueModel(models.Model): + string_required = models.CharField(max_length=20) + string_blank = models.CharField(max_length=20, blank=True) + string_nullable = models.CharField(max_length=20, null=True) + string_default = models.CharField(max_length=20, default="default") + string_required_but_serializer_default = models.CharField(max_length=20) + int_required = models.IntegerField() + int_nullable = models.IntegerField(null=True) + int_default = models.IntegerField(default=5) + int_required_but_serializer_default = models.IntegerField() + boolean_required = models.BooleanField() + boolean_nullable = models.BooleanField(null=True) + boolean_default_false = models.BooleanField(default=False) + boolean_default_true = models.BooleanField(default=True) + boolean_required_but_serializer_default = models.BooleanField() \ No newline at end of file diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index c11f15c9..0e541f1c 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -14,6 +14,7 @@ RelatedFieldModel, SpecialFieldsModel, UnitTestModel, + DefaultValueModel ) @@ -207,3 +208,12 @@ class Meta: # proto_class = fakeapp_pb2.BasicProtoListChildResponse # proto_class_list = fakeapp_pb2.BasicProtoListChildListResponse fields = "__all__" + +class DefaultValueSerializer(proto_serializers.ModelProtoSerializer): + string_required_but_serializer_default = serializers.CharField(default="default_serializer") + int_required_but_serializer_default = serializers.IntegerField(default=10) + boolean_required_but_serializer_default = serializers.BooleanField(default=False) + + class Meta: + model = DefaultValueModel + fields = "__all__" diff --git a/django_socio_grpc/tests/fakeapp/services/default_value_service.py b/django_socio_grpc/tests/fakeapp/services/default_value_service.py new file mode 100644 index 00000000..cfad9c85 --- /dev/null +++ b/django_socio_grpc/tests/fakeapp/services/default_value_service.py @@ -0,0 +1,8 @@ +from fakeapp.models import DefaultValueModel +from fakeapp.serializers import DefaultValueSerializer + +from django_socio_grpc import generics + +class DefaultValueService(generics.AsyncModelService): + queryset = DefaultValueModel.objects.all().order_by("id") + serializer_class = DefaultValueSerializer \ No newline at end of file diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 8613fd70..1d2b158c 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -163,10 +163,9 @@ message BasicParamWithSerializerRequestList { message BasicProtoListChild { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicProtoListChildList { @@ -409,9 +408,8 @@ message UnitTestModel { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelDestroyRequest { @@ -441,9 +439,8 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional string title = 5; + string title = 5; optional string text = 6; - int32 required_counter = 7; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index e84e2517..0f9fa628 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -20,6 +20,15 @@ service BasicController { rpc TestEmptyMethod(google.protobuf.Empty) returns (google.protobuf.Empty) {} } +service DefaultValueController { + rpc Create(DefaultValueRequest) returns (DefaultValueResponse) {} + rpc Destroy(DefaultValueDestroyRequest) returns (google.protobuf.Empty) {} + rpc List(DefaultValueListRequest) returns (DefaultValueListResponse) {} + rpc PartialUpdate(DefaultValuePartialUpdateRequest) returns (DefaultValueResponse) {} + rpc Retrieve(DefaultValueRetrieveRequest) returns (DefaultValueResponse) {} + rpc Update(DefaultValueRequest) returns (DefaultValueResponse) {} +} + service ExceptionController { rpc APIException(google.protobuf.Empty) returns (google.protobuf.Empty) {} rpc GRPCException(google.protobuf.Empty) returns (google.protobuf.Empty) {} @@ -186,19 +195,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicServiceListResponse { @@ -252,6 +259,77 @@ message CustomRetrieveResponseSpecialFieldsModelResponse { repeated google.protobuf.Struct custom_method_field = 3; } +message DefaultValueDestroyRequest { + int32 id = 1; +} + +message DefaultValueListRequest { +} + +message DefaultValueListResponse { + repeated DefaultValueResponse results = 1; + int32 count = 2; +} + +message DefaultValuePartialUpdateRequest { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + repeated string _partial_update_fields = 5; + string string_required = 6; + optional string string_blank = 7; + optional string string_nullable = 8; + optional string string_default = 9; + int32 int_required = 10; + optional int32 int_nullable = 11; + optional int32 int_default = 12; + bool boolean_required = 13; + optional bool boolean_nullable = 14; + optional bool boolean_default_false = 15; + optional bool boolean_default_true = 16; +} + +message DefaultValueRequest { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + string string_required = 5; + optional string string_blank = 6; + optional string string_nullable = 7; + optional string string_default = 8; + int32 int_required = 9; + optional int32 int_nullable = 10; + optional int32 int_default = 11; + bool boolean_required = 12; + optional bool boolean_nullable = 13; + optional bool boolean_default_false = 14; + optional bool boolean_default_true = 15; +} + +message DefaultValueResponse { + optional int32 id = 1; + optional string string_required_but_serializer_default = 2; + optional int32 int_required_but_serializer_default = 3; + optional bool boolean_required_but_serializer_default = 4; + string string_required = 5; + optional string string_blank = 6; + optional string string_nullable = 7; + optional string string_default = 8; + int32 int_required = 9; + optional int32 int_nullable = 10; + optional int32 int_default = 11; + bool boolean_required = 12; + optional bool boolean_nullable = 13; + optional bool boolean_default_false = 14; + optional bool boolean_default_true = 15; +} + +message DefaultValueRetrieveRequest { + int32 id = 1; +} + message ExceptionStreamRaiseExceptionResponse { string id = 1; } @@ -515,27 +593,24 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional string title = 5; + string title = 5; optional string text = 6; - int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index 115efea5..d691f0ce 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -96,19 +96,17 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicProtoListChildResponse { optional int32 id = 1; optional int32 some_default_counter = 2; - optional string title = 3; + string title = 3; optional string text = 4; optional bool is_validated = 5; - int32 required_counter = 6; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index 8c285a89..55db0920 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -42,27 +42,24 @@ message UnitTestModelPartialUpdateRequest { optional int32 some_default_counter = 2; optional bool is_validated = 3; repeated string _partial_update_fields = 4; - optional string title = 5; + string title = 5; optional string text = 6; - int32 required_counter = 7; } message UnitTestModelRequest { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelResponse { optional int32 id = 1; optional int32 some_default_counter = 2; optional bool is_validated = 3; - optional string title = 4; + string title = 4; optional string text = 5; - int32 required_counter = 6; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 099a0c55..a64e0b84 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -40,7 +40,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50, required_counter=5).save() + UnitTestModel(title=title, text=text, some_default_counter=50).save() async def test_async_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) @@ -84,20 +84,19 @@ async def test_async_update(self): self.assertEqual(response.is_validated, False) - async def test_async_update_with_default_value(self): - unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id - grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) - request = fakeapp_pb2.UnitTestModelRequest( - id=unit_id, title="", required_counter=0, text="newText", is_validated=False, some_default_counter=0 - ) - # print(request.HasField("title")) - response = await grpc_stub.Update(request=request) - - self.assertEqual(response.title, "") - self.assertEqual(response.text, "newText") - self.assertEqual(response.some_default_counter, 0) - self.assertEqual(response.required_counter, 0) - self.assertEqual(response.is_validated, False) + # async def test_async_update_with_default_value(self): + # unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id + # grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) + # request = fakeapp_pb2.UnitTestModelRequest( + # id=unit_id, text="newText", is_validated=False, some_default_counter=0 + # ) + # # print(request.HasField("title")) + # response = await grpc_stub.Update(request=request) + + # self.assertEqual(response.title, "") + # self.assertEqual(response.text, "newText") + # self.assertEqual(response.some_default_counter, 0) + # self.assertEqual(response.is_validated, False) async def test_async_destroy(self): unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id diff --git a/django_socio_grpc/tests/test_default_value.py b/django_socio_grpc/tests/test_default_value.py index d1dbef31..e2117323 100644 --- a/django_socio_grpc/tests/test_default_value.py +++ b/django_socio_grpc/tests/test_default_value.py @@ -1,69 +1,23 @@ -from typing import List, Optional - -import pytest -from django.db import models -from rest_framework import serializers - -from django_socio_grpc import proto_serializers -from django_socio_grpc.decorators import grpc_action -from django_socio_grpc.protobuf import ProtoComment, ProtoRegistrationError from django_socio_grpc.protobuf.proto_classes import ( - EmptyMessage, FieldCardinality, ProtoField, - ProtoMessage, - RequestProtoMessage, - ResponseProtoMessage, - StructMessage, -) -from django_socio_grpc.services import Service -from django_socio_grpc.tests.fakeapp.models import RelatedFieldModel -from django_socio_grpc.tests.fakeapp.serializers import ( - BasicProtoListChildSerializer, - BasicServiceSerializer, - RelatedFieldModelSerializer, ) +from fakeapp.serializers import DefaultValueSerializer +from django.test import TestCase, override_settings -from django_socio_grpc import generics, mixins - - -class MyDefaultValueModel(models.Model): - string_required = models.CharField(max_length=20) - string_blank = models.CharField(max_length=20, blank=True) - string_nullable = models.CharField(max_length=20, null=True) - string_default = models.CharField(max_length=20, default="default") - string_required_but_serializer_default = models.CharField(max_length=20) - int_required = models.IntegerField() - int_nullable = models.IntegerField(null=True) - int_default = models.IntegerField(default=5) - int_required_but_serializer_default = models.IntegerField() - boolean_required = models.BooleanField() - boolean_default_false = models.BooleanField(default=False) - boolean_default_true = models.BooleanField(default=True) - boolean_required_but_serializer_default = models.IntegerField() - - - -class MyDefaultSerializer(proto_serializers.ModelProtoSerializer): - string_required_but_serializer_default = serializers.CharField(default="default_serializer") - int_required_but_serializer_default = serializers.IntegerField(default=10) - boolean_required_but_serializer_default = serializers.CharField(default=False) - - class Meta: - model = MyDefaultValueModel - fields = "__all__" - +from .grpc_test_utils.fake_grpc import FakeFullAIOGRPC +from fakeapp.grpc.fakeapp_pb2_grpc import ( + SimpleRelatedFieldModelControllerStub, + add_SimpleRelatedFieldModelControllerServicer_to_server, +) -class UnitTestModelService(generics.AsyncModelService): - queryset = MyDefaultValueModel.objects.all().order_by("id") - serializer_class = MyDefaultSerializer -class TestDefaultValue: +class TestDefaultValueField: # FROM_FIELD def test_from_field_string(self): - ser = MyDefaultSerializer() + ser = DefaultValueSerializer() field = ser.fields["string_required"] proto_field = ProtoField.from_field(field) @@ -74,7 +28,7 @@ def test_from_field_string(self): # --------------------------------- - ser = MyDefaultSerializer() + ser = DefaultValueSerializer() field = ser.fields["string_blank"] proto_field = ProtoField.from_field(field) @@ -85,7 +39,7 @@ def test_from_field_string(self): # --------------------------------- - ser = MyDefaultSerializer() + ser = DefaultValueSerializer() field = ser.fields["string_nullable"] proto_field = ProtoField.from_field(field) @@ -96,7 +50,7 @@ def test_from_field_string(self): # --------------------------------- - ser = MyDefaultSerializer() + ser = DefaultValueSerializer() field = ser.fields["string_default"] proto_field = ProtoField.from_field(field) @@ -107,11 +61,127 @@ def test_from_field_string(self): # --------------------------------- - ser = MyDefaultSerializer() + ser = DefaultValueSerializer() field = ser.fields["string_required_but_serializer_default"] proto_field = ProtoField.from_field(field) assert proto_field.name == "string_required_but_serializer_default" assert proto_field.field_type == "string" - assert proto_field.cardinality == FieldCardinality.OPTIONAL \ No newline at end of file + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + def test_from_field_integer(self): + ser = DefaultValueSerializer() + field = ser.fields["int_required"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "int_required" + assert proto_field.field_type == "int32" + assert proto_field.cardinality == FieldCardinality.NONE + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["int_nullable"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "int_nullable" + assert proto_field.field_type == "int32" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["int_default"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "int_default" + assert proto_field.field_type == "int32" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["int_required_but_serializer_default"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "int_required_but_serializer_default" + assert proto_field.field_type == "int32" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + def test_from_field_boolean(self): + ser = DefaultValueSerializer() + field = ser.fields["boolean_required"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "boolean_required" + assert proto_field.field_type == "bool" + assert proto_field.cardinality == FieldCardinality.NONE + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["boolean_nullable"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "boolean_nullable" + assert proto_field.field_type == "bool" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["boolean_default_true"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "boolean_default_true" + assert proto_field.field_type == "bool" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["boolean_default_false"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "boolean_default_false" + assert proto_field.field_type == "bool" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + # --------------------------------- + + ser = DefaultValueSerializer() + field = ser.fields["boolean_required_but_serializer_default"] + + proto_field = ProtoField.from_field(field) + + assert proto_field.name == "boolean_required_but_serializer_default" + assert proto_field.field_type == "bool" + assert proto_field.cardinality == FieldCardinality.OPTIONAL + + +# @override_settings(GRPC_FRAMEWORK={"GRPC_ASYNC": True}) +# class TestDefaultValueService(TestCase): +# def setUp(self): +# self.fake_grpc = FakeFullAIOGRPC( +# add_SimpleRelatedFieldModelControllerServicer_to_server, DefaultValueService.as_servicer() +# ) + +# self.setup_instance = DefaultValueService(string_required="setUp", string_required_but_serializer_default="setup_serializer", int_required=50, int_required_but_serializer_default="60", boolean_required=True, boolean_required_but_serializer_default=False).save() + +# async def test_retrieve_all_default_value(self): + +# grpc_stub = self.fake_grpc.get_fake_stub(SimpleRelatedFieldModelControllerStub) +# request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=self.setup_instance.id) +# response = await grpc_stub.Retrieve(request=request) + +# self.assertEqual(response.title, "z") +# self.assertEqual(response.text, "abc") \ No newline at end of file From db76c33756ed51cc8003bd10f78b99411563a1c7 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Wed, 10 Jan 2024 19:27:54 +0100 Subject: [PATCH 14/19] WIP test retrieve --- .../tests/fakeapp/serializers.py | 2 ++ django_socio_grpc/tests/test_default_value.py | 30 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index 0e541f1c..ae1371aa 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -216,4 +216,6 @@ class DefaultValueSerializer(proto_serializers.ModelProtoSerializer): class Meta: model = DefaultValueModel + proto_class = fakeapp_pb2.DefaultValueResponse + proto_class_list = fakeapp_pb2.DefaultValueListResponse fields = "__all__" diff --git a/django_socio_grpc/tests/test_default_value.py b/django_socio_grpc/tests/test_default_value.py index e2117323..8f208afd 100644 --- a/django_socio_grpc/tests/test_default_value.py +++ b/django_socio_grpc/tests/test_default_value.py @@ -11,6 +11,9 @@ SimpleRelatedFieldModelControllerStub, add_SimpleRelatedFieldModelControllerServicer_to_server, ) +from fakeapp.services.default_value_service import DefaultValueService +from fakeapp.grpc import fakeapp_pb2 +from fakeapp.models import DefaultValueModel @@ -168,20 +171,21 @@ def test_from_field_boolean(self): assert proto_field.cardinality == FieldCardinality.OPTIONAL -# @override_settings(GRPC_FRAMEWORK={"GRPC_ASYNC": True}) -# class TestDefaultValueService(TestCase): -# def setUp(self): -# self.fake_grpc = FakeFullAIOGRPC( -# add_SimpleRelatedFieldModelControllerServicer_to_server, DefaultValueService.as_servicer() -# ) +@override_settings(GRPC_FRAMEWORK={"GRPC_ASYNC": True}) +class TestDefaultValueService(TestCase): + def setUp(self): + self.fake_grpc = FakeFullAIOGRPC( + add_SimpleRelatedFieldModelControllerServicer_to_server, DefaultValueService.as_servicer() + ) -# self.setup_instance = DefaultValueService(string_required="setUp", string_required_but_serializer_default="setup_serializer", int_required=50, int_required_but_serializer_default="60", boolean_required=True, boolean_required_but_serializer_default=False).save() + self.setup_instance = DefaultValueModel.objects.create(string_required="setUp", string_required_but_serializer_default="setup_serializer", int_required=50, int_required_but_serializer_default="60", boolean_required=True, boolean_required_but_serializer_default=False) -# async def test_retrieve_all_default_value(self): + async def test_retrieve_all_default_value(self): -# grpc_stub = self.fake_grpc.get_fake_stub(SimpleRelatedFieldModelControllerStub) -# request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=self.setup_instance.id) -# response = await grpc_stub.Retrieve(request=request) + grpc_stub = self.fake_grpc.get_fake_stub(SimpleRelatedFieldModelControllerStub) + request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=self.setup_instance.id) + response = await grpc_stub.Retrieve(request=request) -# self.assertEqual(response.title, "z") -# self.assertEqual(response.text, "abc") \ No newline at end of file + self.assertEqual(response.title, "z") + self.assertEqual(response.text, "abc") + assert False \ No newline at end of file From 39739178a5f72c4642f2836ab80509703cf0f764 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Fri, 12 Jan 2024 20:19:33 +0100 Subject: [PATCH 15/19] WIP miss some test and use case --- django_socio_grpc/proto_serializers.py | 104 ++++- .../tests/fakeapp/grpc/fakeapp.proto | 6 + .../tests/fakeapp/grpc/fakeapp_pb2.py | 280 +++++++------- django_socio_grpc/tests/fakeapp/handlers.py | 2 +- django_socio_grpc/tests/fakeapp/models.py | 10 +- .../tests/fakeapp/serializers.py | 7 +- .../fakeapp/services/default_value_service.py | 3 +- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 6 + .../tests/test_async_model_service.py | 1 - django_socio_grpc/tests/test_default_value.py | 365 +++++++++++++++++- .../tests/test_sync_model_service.py | 2 +- docs/features/proto-serializers.rst | 5 + 12 files changed, 603 insertions(+), 188 deletions(-) diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 5f3c37d2..3268399f 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -2,6 +2,7 @@ from asgiref.sync import sync_to_async from django.core.validators import MaxLengthValidator +from django.db.models.fields import NOT_PROVIDED from django.utils.translation import gettext as _ from rest_framework.exceptions import ValidationError from rest_framework.fields import empty @@ -53,11 +54,11 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): We can't rely only on required True/False as in DSG if a field is required it will have the default value of it's type (empty string for string type) and not None When refactoring serializer to only use message we will be able to determine the default value of the field depending of the same logic followed here - + set default value for field except if optional or partial update """ # INFO - AM - 04/01/2024 - If we are in a partial serializer with a message we need to have the PARTIAL_UPDATE_FIELD_NAME in the data_dict. If not we raise an exception - if self.partial and not PARTIAL_UPDATE_FIELD_NAME in data_dict: + if self.partial and PARTIAL_UPDATE_FIELD_NAME not in data_dict: raise ValidationError( { PARTIAL_UPDATE_FIELD_NAME: [ @@ -67,38 +68,101 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): code="missing_partial_message_attribute", ) + print(self.Meta.model.string_null_default_and_blank.field.default) + print(self.Meta.model._meta.pk.name) + print(data_dict) + is_update_process = bool(data_dict.get(self.Meta.model._meta.pk.name, "")) + print("is_update_process ", is_update_process) for field in self.fields.values(): + print(field.field_name) # INFO - AM - 04/01/2024 - If we are in a partial serializer we only need to have field specified in PARTIAL_UPDATE_FIELD_NAME attribute in the data. Meaning deleting fields that should not be here and not adding None to allow_null field that are not specified - if ( - self.partial - and field.field_name not in data_dict.get(PARTIAL_UPDATE_FIELD_NAME, {}) + if self.partial and field.field_name not in data_dict.get( + PARTIAL_UPDATE_FIELD_NAME, {} ): if field.field_name in data_dict: del data_dict[field.field_name] continue # INFO - AM - 04/01/2024 - if field already existing in the data_dict we do not need to do something else if field.field_name in data_dict: + print("in", data_dict[field.field_name], type(data_dict[field.field_name])) continue - if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: - # print(message.DESCRIPTOR.fields_by_name) - # print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) - data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value - continue + if self.partial and field.field_name in data_dict.get( + PARTIAL_UPDATE_FIELD_NAME, {} + ): + if field.allow_null: + data_dict[field.field_name] = None + continue + if field.default not in [None, empty]: + # TODO - AM - 12/01/2024 - is field.default a possible callable here ? + data_dict[field.field_name] = field.default + continue + + data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[ + field.field_name + ].default_value + + print( + field.field_name, + f"{field.allow_null=}", + f"{field.default=}", + f"{field.required=}", + "field name in descriptor: ", + field.field_name in message.DESCRIPTOR.fields_by_name, + ) + # print("value: ", data_dict.get(field.field_name, "not_set")) + # if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: + # # print(message.DESCRIPTOR.fields_by_name) + # # print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) + # data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value + # continue # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value - # print(field.field_name, field.allow_null, field.default, field.required, "value: ", data_dict.get(field.field_name, "not_set")) + # print(message.HasField(field.field_name), field.field_name in data_dict) - if field.allow_null and field.default not in [None, empty]: - raise ValidationError( - { - field.field_name: [ - f"Field {field.field_name} accept both null and a default value. " - ] - }, - code="both_allow_null_and_default", - ) + # if field.allow_null and field.default not in [None, empty]: + # raise ValidationError( + # { + # field.field_name: [ + # f"Field {field.field_name} accept both null and a default value. " + # ] + # }, + # code="both_allow_null_and_default", + # ) + + # string_default field.allow_null=False field.default= field.required=False field name in descriptor: True + + # INFO - AM - 12/01/2024 - if field name is not in data_dict but is required that mean that it's a default value deleted when transforming proto to dict + if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: + data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[ + field.field_name + ].default_value + continue + if field.allow_null or (field.default in [None, empty] and field.required is True): + if is_update_process: + data_dict[field.field_name] = None + continue + + if field.default not in [None, empty]: + data_dict[field.field_name] = None + continue + + if ( + hasattr(self, "Meta") + and hasattr(self.Meta, "model") + and hasattr(self.Meta.model, field.field_name) + ): + deferred_attribute = getattr(self.Meta.model, field.field_name) + if deferred_attribute.field.default != NOT_PROVIDED: + print("icicic ", deferred_attribute.field.default) + data_dict[field.field_name] = deferred_attribute.field.default + continue + data_dict[field.field_name] = None + continue + + # elif field.required and field.field_name in message.DESCRIPTOR.fields_by_name: + # data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value return data_dict def data_to_message(self, data): diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index 0f9fa628..646c091b 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -288,6 +288,8 @@ message DefaultValuePartialUpdateRequest { optional bool boolean_nullable = 14; optional bool boolean_default_false = 15; optional bool boolean_default_true = 16; + optional string string_default_and_blank = 17; + optional string string_null_default_and_blank = 18; } message DefaultValueRequest { @@ -306,6 +308,8 @@ message DefaultValueRequest { optional bool boolean_nullable = 13; optional bool boolean_default_false = 14; optional bool boolean_default_true = 15; + optional string string_default_and_blank = 16; + optional string string_null_default_and_blank = 17; } message DefaultValueResponse { @@ -324,6 +328,8 @@ message DefaultValueResponse { optional bool boolean_nullable = 13; optional bool boolean_default_false = 14; optional bool boolean_default_true = 15; + optional string string_default_and_blank = 16; + optional string string_null_default_and_blank = 17; } message DefaultValueRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 552fe8c0..92702100 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd1\x06\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x05 \x03(\t\x12\x17\n\x0fstring_required\x18\x06 \x01(\t\x12\x19\n\x0cstring_blank\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\t \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\n \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0b \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0c \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\r \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x0e \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0f \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x10 \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\xa4\x06\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\xa5\x06\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xe3\x07\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x05 \x03(\t\x12\x17\n\x0fstring_required\x18\x06 \x01(\t\x12\x19\n\x0cstring_blank\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\t \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\n \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0b \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0c \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\r \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x0e \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0f \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x10 \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x11 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x12 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\"\xb6\x07\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x11 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\"\xb7\x07\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x11 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -78,143 +78,143 @@ _globals['_DEFAULTVALUELISTRESPONSE']._serialized_start=2739 _globals['_DEFAULTVALUELISTRESPONSE']._serialized_end=2838 _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_start=2841 - _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=3690 - _globals['_DEFAULTVALUEREQUEST']._serialized_start=3693 - _globals['_DEFAULTVALUEREQUEST']._serialized_end=4497 - _globals['_DEFAULTVALUERESPONSE']._serialized_start=4500 - _globals['_DEFAULTVALUERESPONSE']._serialized_end=5305 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=5307 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=5348 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=5350 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=5401 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=5403 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=5428 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=5430 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=5529 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=5531 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=5595 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=5597 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=5679 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=5681 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=5738 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=5740 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=5853 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=5855 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=5969 - _globals['_MANYMANYMODELREQUEST']._serialized_start=5971 - _globals['_MANYMANYMODELREQUEST']._serialized_end=6070 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=6072 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=6137 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=6139 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=6187 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=6189 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=6220 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=6222 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=6333 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=6336 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=6578 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=6581 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=6778 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=6781 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=6981 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=6983 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=7032 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=7034 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=7081 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=7083 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=7113 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=7115 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=7239 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=7242 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=7456 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=7459 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=7628 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=7631 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=8052 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=8054 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=8102 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8104 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8157 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=8159 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=8195 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=8197 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=8318 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8321 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=8581 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=8584 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=8799 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=8802 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=9018 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9020 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9074 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=9076 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=9124 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=9126 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=9157 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=9159 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=9270 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=9273 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=9458 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=9461 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=9601 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=9604 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=9777 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=9779 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=9828 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=9830 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=9937 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=9939 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=9978 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=9980 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=10021 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=10023 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=10068 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=10070 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=10116 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10118 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10179 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=10181 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=10222 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=10225 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=10367 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=10369 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=10395 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=10397 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=10498 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10500 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10557 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=10560 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=10798 - _globals['_UNITTESTMODELREQUEST']._serialized_start=10801 - _globals['_UNITTESTMODELREQUEST']._serialized_end=10994 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=10997 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=11191 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=11193 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11235 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11237 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11265 - _globals['_BASICCONTROLLER']._serialized_start=11268 - _globals['_BASICCONTROLLER']._serialized_end=12494 - _globals['_DEFAULTVALUECONTROLLER']._serialized_start=12497 - _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13106 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=13109 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=13446 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13449 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=13704 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=13707 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=13872 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=13875 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=14556 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=14559 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15228 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15231 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=15973 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=15976 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=16680 - _globals['_STREAMINCONTROLLER']._serialized_start=16683 - _globals['_STREAMINCONTROLLER']._serialized_end=16937 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=16940 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=17809 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=17812 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=18673 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=3836 + _globals['_DEFAULTVALUEREQUEST']._serialized_start=3839 + _globals['_DEFAULTVALUEREQUEST']._serialized_end=4789 + _globals['_DEFAULTVALUERESPONSE']._serialized_start=4792 + _globals['_DEFAULTVALUERESPONSE']._serialized_end=5743 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=5745 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=5786 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=5788 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=5839 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=5841 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=5866 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=5868 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=5967 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=5969 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=6033 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=6035 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=6117 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=6119 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=6176 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=6178 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=6291 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=6293 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=6407 + _globals['_MANYMANYMODELREQUEST']._serialized_start=6409 + _globals['_MANYMANYMODELREQUEST']._serialized_end=6508 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=6510 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=6575 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=6577 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=6625 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=6627 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=6658 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=6660 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=6771 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=6774 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=7016 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=7019 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=7216 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=7219 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=7419 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=7421 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=7470 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=7472 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=7519 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=7521 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=7551 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=7553 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=7677 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=7680 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=7894 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=7897 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=8066 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=8069 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=8490 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=8492 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=8540 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8542 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8595 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=8597 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=8633 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=8635 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=8756 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8759 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=9019 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=9022 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=9237 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=9240 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=9456 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9458 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9512 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=9514 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=9562 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=9564 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=9595 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=9597 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=9708 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=9711 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=9896 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=9899 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=10039 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=10042 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=10215 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=10217 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=10266 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=10268 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=10375 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=10377 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=10416 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=10418 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=10459 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=10461 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=10506 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=10508 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=10554 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10556 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10617 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=10619 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=10660 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=10663 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=10805 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=10807 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=10833 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=10835 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=10936 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10938 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10995 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=10998 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=11236 + _globals['_UNITTESTMODELREQUEST']._serialized_start=11239 + _globals['_UNITTESTMODELREQUEST']._serialized_end=11432 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=11435 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=11629 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=11631 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11673 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11675 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11703 + _globals['_BASICCONTROLLER']._serialized_start=11706 + _globals['_BASICCONTROLLER']._serialized_end=12932 + _globals['_DEFAULTVALUECONTROLLER']._serialized_start=12935 + _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13544 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=13547 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=13884 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13887 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14142 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14145 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14310 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14313 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=14994 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=14997 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15666 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15669 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=16411 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=16414 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17118 + _globals['_STREAMINCONTROLLER']._serialized_start=17121 + _globals['_STREAMINCONTROLLER']._serialized_end=17375 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17378 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18247 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18250 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19111 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/handlers.py b/django_socio_grpc/tests/fakeapp/handlers.py index 5a738eef..35b629c0 100644 --- a/django_socio_grpc/tests/fakeapp/handlers.py +++ b/django_socio_grpc/tests/fakeapp/handlers.py @@ -1,4 +1,5 @@ from fakeapp.services.basic_service import BasicService +from fakeapp.services.default_value_service import DefaultValueService from fakeapp.services.exception_service import ExceptionService from fakeapp.services.foreign_model_service import ForeignModelService from fakeapp.services.import_struct_even_in_array_model_service import ( @@ -13,7 +14,6 @@ from fakeapp.services.stream_in_service import StreamInService from fakeapp.services.sync_unit_test_model_service import SyncUnitTestModelService from fakeapp.services.unit_test_model_service import UnitTestModelService -from fakeapp.services.default_value_service import DefaultValueService from django_socio_grpc.services.app_handler_registry import AppHandlerRegistry from django_socio_grpc.tests.fakeapp.services.unit_test_model_with_struct_filter_service import ( diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index fd07a58d..74336438 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -198,7 +198,15 @@ class DefaultValueModel(models.Model): string_blank = models.CharField(max_length=20, blank=True) string_nullable = models.CharField(max_length=20, null=True) string_default = models.CharField(max_length=20, default="default") + string_default_and_blank = models.CharField( + max_length=60, default="default_and_blank", blank=True + ) + string_null_default_and_blank = models.CharField( + max_length=60, default="null_default_and_blank", blank=True, null=True + ) string_required_but_serializer_default = models.CharField(max_length=20) + # TODO model default but overrided by serializer default + # TODO model default and nullable but overrided by serializer default int_required = models.IntegerField() int_nullable = models.IntegerField(null=True) int_default = models.IntegerField(default=5) @@ -207,4 +215,4 @@ class DefaultValueModel(models.Model): boolean_nullable = models.BooleanField(null=True) boolean_default_false = models.BooleanField(default=False) boolean_default_true = models.BooleanField(default=True) - boolean_required_but_serializer_default = models.BooleanField() \ No newline at end of file + boolean_required_but_serializer_default = models.BooleanField() diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index ae1371aa..64125b0c 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -7,6 +7,7 @@ from django_socio_grpc.protobuf import ProtoComment from .models import ( + DefaultValueModel, ForeignModel, ImportStructEvenInArrayModel, ManyManyModel, @@ -14,7 +15,6 @@ RelatedFieldModel, SpecialFieldsModel, UnitTestModel, - DefaultValueModel ) @@ -209,8 +209,11 @@ class Meta: # proto_class_list = fakeapp_pb2.BasicProtoListChildListResponse fields = "__all__" + class DefaultValueSerializer(proto_serializers.ModelProtoSerializer): - string_required_but_serializer_default = serializers.CharField(default="default_serializer") + string_required_but_serializer_default = serializers.CharField( + default="default_serializer" + ) int_required_but_serializer_default = serializers.IntegerField(default=10) boolean_required_but_serializer_default = serializers.BooleanField(default=False) diff --git a/django_socio_grpc/tests/fakeapp/services/default_value_service.py b/django_socio_grpc/tests/fakeapp/services/default_value_service.py index cfad9c85..f2f29abe 100644 --- a/django_socio_grpc/tests/fakeapp/services/default_value_service.py +++ b/django_socio_grpc/tests/fakeapp/services/default_value_service.py @@ -3,6 +3,7 @@ from django_socio_grpc import generics + class DefaultValueService(generics.AsyncModelService): queryset = DefaultValueModel.objects.all().order_by("id") - serializer_class = DefaultValueSerializer \ No newline at end of file + serializer_class = DefaultValueSerializer diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index 0f9fa628..646c091b 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -288,6 +288,8 @@ message DefaultValuePartialUpdateRequest { optional bool boolean_nullable = 14; optional bool boolean_default_false = 15; optional bool boolean_default_true = 16; + optional string string_default_and_blank = 17; + optional string string_null_default_and_blank = 18; } message DefaultValueRequest { @@ -306,6 +308,8 @@ message DefaultValueRequest { optional bool boolean_nullable = 13; optional bool boolean_default_false = 14; optional bool boolean_default_true = 15; + optional string string_default_and_blank = 16; + optional string string_null_default_and_blank = 17; } message DefaultValueResponse { @@ -324,6 +328,8 @@ message DefaultValueResponse { optional bool boolean_nullable = 13; optional bool boolean_default_false = 14; optional bool boolean_default_true = 15; + optional string string_default_and_blank = 16; + optional string string_null_default_and_blank = 17; } message DefaultValueRetrieveRequest { diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index a64e0b84..4fa8a980 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -83,7 +83,6 @@ async def test_async_update(self): self.assertEqual(response.some_default_counter, 10) self.assertEqual(response.is_validated, False) - # async def test_async_update_with_default_value(self): # unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id # grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) diff --git a/django_socio_grpc/tests/test_default_value.py b/django_socio_grpc/tests/test_default_value.py index 8f208afd..71484901 100644 --- a/django_socio_grpc/tests/test_default_value.py +++ b/django_socio_grpc/tests/test_default_value.py @@ -1,20 +1,18 @@ -from django_socio_grpc.protobuf.proto_classes import ( - FieldCardinality, - ProtoField, -) -from fakeapp.serializers import DefaultValueSerializer +import grpc from django.test import TestCase, override_settings - -from .grpc_test_utils.fake_grpc import FakeFullAIOGRPC - +from fakeapp.grpc import fakeapp_pb2 from fakeapp.grpc.fakeapp_pb2_grpc import ( - SimpleRelatedFieldModelControllerStub, - add_SimpleRelatedFieldModelControllerServicer_to_server, + DefaultValueControllerStub, + add_DefaultValueControllerServicer_to_server, ) -from fakeapp.services.default_value_service import DefaultValueService -from fakeapp.grpc import fakeapp_pb2 from fakeapp.models import DefaultValueModel +from fakeapp.serializers import DefaultValueSerializer +from fakeapp.services.default_value_service import DefaultValueService +from django_socio_grpc.protobuf.proto_classes import FieldCardinality, ProtoField +from django_socio_grpc.utils.constants import PARTIAL_UPDATE_FIELD_NAME + +from .grpc_test_utils.fake_grpc import FakeFullAIOGRPC class TestDefaultValueField: @@ -72,7 +70,7 @@ def test_from_field_string(self): assert proto_field.name == "string_required_but_serializer_default" assert proto_field.field_type == "string" assert proto_field.cardinality == FieldCardinality.OPTIONAL - + def test_from_field_integer(self): ser = DefaultValueSerializer() field = ser.fields["int_required"] @@ -175,17 +173,342 @@ def test_from_field_boolean(self): class TestDefaultValueService(TestCase): def setUp(self): self.fake_grpc = FakeFullAIOGRPC( - add_SimpleRelatedFieldModelControllerServicer_to_server, DefaultValueService.as_servicer() + add_DefaultValueControllerServicer_to_server, DefaultValueService.as_servicer() ) - self.setup_instance = DefaultValueModel.objects.create(string_required="setUp", string_required_but_serializer_default="setup_serializer", int_required=50, int_required_but_serializer_default="60", boolean_required=True, boolean_required_but_serializer_default=False) + self.setup_instance = DefaultValueModel.objects.create( + string_required="setUp", + string_required_but_serializer_default="setup_serializer", + int_required=50, + int_required_but_serializer_default=60, + boolean_required=True, + boolean_required_but_serializer_default=False, + ) async def test_retrieve_all_default_value(self): - - grpc_stub = self.fake_grpc.get_fake_stub(SimpleRelatedFieldModelControllerStub) - request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=self.setup_instance.id) + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + request = fakeapp_pb2.DefaultValueRequest(id=self.setup_instance.id) response = await grpc_stub.Retrieve(request=request) - self.assertEqual(response.title, "z") - self.assertEqual(response.text, "abc") - assert False \ No newline at end of file + # STRING ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertTrue(response.HasField("string_blank")) + self.assertFalse(response.HasField("string_nullable")) + self.assertTrue(response.HasField("string_default_and_blank")) + self.assertTrue(response.HasField("string_null_default_and_blank")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.string_required, "setUp") + self.assertEqual(response.string_blank, "") + self.assertEqual(response.string_nullable, "") + self.assertEqual(response.string_default_and_blank, "default_and_blank") + self.assertEqual(response.string_null_default_and_blank, "null_default_and_blank") + self.assertEqual(response.string_default, "default") + self.assertEqual( + response.string_required_but_serializer_default, "setup_serializer" + ) # created in setup not serializer so default value != than value in instance. See create test for testung default serializer value + + # INTEGER ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("int_nullable")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.int_required, 50) + self.assertEqual(response.int_nullable, 0) + self.assertEqual(response.int_default, 5) + self.assertEqual( + response.int_required_but_serializer_default, 60 + ) # created in setup not serializer so default value != than value in instance. See create test for testung default serializer value + + # BOOLEAN ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("boolean_nullable")) + self.assertTrue(response.HasField("boolean_default_false")) + self.assertTrue(response.HasField("boolean_default_true")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.boolean_required, True) + self.assertEqual(response.boolean_nullable, False) + self.assertEqual(response.boolean_default_false, False) + self.assertEqual(response.boolean_default_true, True) + self.assertEqual( + response.boolean_required_but_serializer_default, False + ) # created in setup not serializer so default value != than value in instance. See create test for testung default serializer value + + async def test_create_all_default_value(self): + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + request = fakeapp_pb2.DefaultValueRequest( + string_required="create", int_required=100, boolean_required=True + ) + response = await grpc_stub.Create(request=request) + + # STRING ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertTrue(response.HasField("string_blank")) + self.assertFalse(response.HasField("string_nullable")) + self.assertTrue(response.HasField("string_default_and_blank")) + self.assertTrue(response.HasField("string_null_default_and_blank")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.string_required, "create") + self.assertEqual(response.string_blank, "") + self.assertEqual(response.string_nullable, "") + self.assertEqual(response.string_default_and_blank, "default_and_blank") + self.assertEqual(response.string_null_default_and_blank, "null_default_and_blank") + self.assertEqual(response.string_default, "default") + self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + + # INTEGER ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("int_nullable")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.int_required, 100) + self.assertEqual(response.int_nullable, 0) + self.assertEqual(response.int_default, 5) + self.assertEqual(response.int_required_but_serializer_default, 10) + + # BOOLEAN ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("boolean_nullable")) + self.assertTrue(response.HasField("boolean_default_false")) + self.assertTrue(response.HasField("boolean_default_true")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.boolean_required, True) + self.assertEqual(response.boolean_nullable, False) + self.assertEqual(response.boolean_default_false, False) + self.assertEqual(response.boolean_default_true, True) + self.assertEqual(response.boolean_required_but_serializer_default, False) + + async def test_update_all_default_value(self): + all_setted_instance = await DefaultValueModel.objects.acreate( + string_required="update_required", + string_blank="update_blank", + string_nullable="update_nullable", + string_default="update_default", + string_default_and_blank="update_default_and_blank", + string_null_default_and_blank="update_null_default_and_blank", + string_required_but_serializer_default="update_serializer", + int_required=200, + int_nullable=201, + int_default=202, + int_required_but_serializer_default=60, + boolean_required=True, + boolean_nullable=True, + boolean_default_false=True, + boolean_default_true=False, + boolean_required_but_serializer_default=True, + ) + + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + request = fakeapp_pb2.DefaultValueRequest( + id=all_setted_instance.id, + string_required="update_required2", + string_blank="", + string_default_and_blank="", + int_required=0, + boolean_required=False, + ) + response = await grpc_stub.Update(request=request) + + # STRING ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertTrue(response.HasField("string_blank")) + self.assertFalse(response.HasField("string_nullable")) + self.assertTrue(response.HasField("string_default_and_blank")) + self.assertFalse(response.HasField("string_null_default_and_blank")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.string_required, "update_required2") + self.assertEqual(response.string_blank, "") + self.assertEqual(response.string_nullable, "") + self.assertEqual(response.string_default_and_blank, "") + self.assertEqual(response.string_null_default_and_blank, "") + self.assertEqual( + response.string_default, "update_default" + ) # This field not updated because model default only apply on creation + self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + + await all_setted_instance.arefresh_from_db() + self.assertEqual(all_setted_instance.string_blank, "") + self.assertEqual(all_setted_instance.string_nullable, None) + self.assertEqual(all_setted_instance.string_default_and_blank, "") + self.assertEqual(all_setted_instance.string_null_default_and_blank, None) + + # INTEGER ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("int_nullable")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.int_required, 0) + self.assertEqual(response.int_nullable, 0) + self.assertEqual( + response.int_default, 202 + ) # This field not updated because model default only apply on creation + self.assertEqual(response.int_required_but_serializer_default, 10) + + self.assertEqual(all_setted_instance.int_nullable, None) + + # BOOLEAN ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("boolean_nullable")) + self.assertTrue(response.HasField("boolean_default_false")) + self.assertTrue(response.HasField("boolean_default_true")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual(response.boolean_required, False) + self.assertEqual(response.boolean_nullable, False) + self.assertEqual( + response.boolean_default_false, True + ) # This field not updated because model default only apply on creation + self.assertEqual( + response.boolean_default_true, False + ) # This field not updated because model default only apply on creation + self.assertEqual(response.boolean_required_but_serializer_default, False) + + self.assertEqual(all_setted_instance.boolean_nullable, None) + + async def test_update_string_not_setted_and_blank_not_allowed_raise_error(self): + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + request = fakeapp_pb2.DefaultValueRequest( + id=self.setup_instance.id, + string_required="update_required2", + string_default="", + int_required=0, + boolean_required=False, + ) + + with self.assertRaises(grpc.RpcError) as error: + await grpc_stub.Update(request=request) + + self.assertEqual(error.exception.code(), grpc.StatusCode.INVALID_ARGUMENT) + + self.assertEqual( + '{"string_default": [{"message": "This field may not be blank.", "code": "blank"}]}', + error.exception.details(), + ) + + async def test_partial_update_specifying_optional_but_not_set_them(self): + all_setted_instance = await DefaultValueModel.objects.acreate( + string_required="update_required", + string_blank="update_blank", + string_nullable="update_nullable", + string_default="update_default", + string_default_and_blank="update_default_and_blank", + string_null_default_and_blank="update_null_default_and_blank", + string_required_but_serializer_default="update_serializer", + int_required=200, + int_nullable=201, + int_default=202, + int_required_but_serializer_default=60, + boolean_required=True, + boolean_nullable=True, + boolean_default_false=True, + boolean_default_true=False, + boolean_required_but_serializer_default=True, + ) + + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + + # Notice abscence of "string_default" as it is a required field and default grpc value (empty string) is not valid if blank not True + request = fakeapp_pb2.DefaultValuePartialUpdateRequest( + id=all_setted_instance.id, + **{ + PARTIAL_UPDATE_FIELD_NAME: [ + "string_blank", + "string_nullable", + "string_default_and_blank", + "string_null_default_and_blank", + "string_required_but_serializer_default", + "int_nullable", + "int_default", + "int_required_but_serializer_default", + "boolean_nullable", + "boolean_default_false", + "boolean_default_true", + "boolean_required_but_serializer_default", + ] + } + ) + response = await grpc_stub.PartialUpdate(request=request) + + # STRING ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertTrue(response.HasField("string_blank")) + self.assertFalse(response.HasField("string_nullable")) + self.assertTrue(response.HasField("string_default_and_blank")) + self.assertFalse(response.HasField("string_null_default_and_blank")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual( + response.string_required, "update_required" + ) # Field not updated because not specified in PARTIAL_UPDATE_FIELD_NAME + self.assertEqual(response.string_blank, "") + self.assertEqual(response.string_nullable, "") + self.assertEqual(response.string_default_and_blank, "") + self.assertEqual( + response.string_default, "update_default" + ) # Field not updated because not specified in PARTIAL_UPDATE_FIELD_NAME + self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + + await all_setted_instance.arefresh_from_db() + self.assertEqual(all_setted_instance.string_blank, "") + self.assertEqual(all_setted_instance.string_nullable, None) + self.assertEqual(all_setted_instance.string_default_and_blank, "") + self.assertEqual(all_setted_instance.string_null_default_and_blank, None) + + # INTEGER ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("int_nullable")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual( + response.int_required, 200 + ) # Field not updated because not specified in PARTIAL_UPDATE_FIELD_NAME + self.assertEqual(response.int_nullable, 0) + self.assertEqual( + response.int_default, 0 + ) # This field is updated because the default value (0) is authorized by the serializer + self.assertEqual(response.int_required_but_serializer_default, 10) + + # BOOLEAN ################## + + # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty + self.assertFalse(response.HasField("boolean_nullable")) + self.assertTrue(response.HasField("boolean_default_false")) + self.assertTrue(response.HasField("boolean_default_true")) + + # INFO - AM - 12/01/2024 - check value event if grpc default because we check presence before + self.assertEqual( + response.boolean_required, True + ) # Field not updated because not specified in PARTIAL_UPDATE_FIELD_NAME + self.assertEqual(response.boolean_nullable, False) + self.assertEqual( + response.boolean_default_false, False + ) # This field is set to false because it's the default value of bool in gRPC as not specified + self.assertEqual( + response.boolean_default_true, False + ) # This field is set to false because it's the default value of bool in gRPC as not specified + self.assertEqual(response.boolean_required_but_serializer_default, False) + + async def test_partial_update_choosing_a_required_without_setting_it_raise_error(self): + # string_default + assert False + + async def test_partial_update_choosing_default_grpc_value_for_nullable_field(self): + # set "" for string_null_default_and_blank + # set 0 for int_nullable + # set False for boolean_nullable + assert False diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index b261f3e1..6ce44fe3 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -119,7 +119,7 @@ def test_partial_update(self): self.assertEqual(response.title, "newTitle") self.assertEqual(response.text, old_text) - # Test partial update takes into account None value for allow_null field + # Test partial update takes into account None value for allow_null field request = fakeapp_pb2.UnitTestModelPartialUpdateRequest( id=instance.id, text=None, **{PARTIAL_UPDATE_FIELD_NAME: ["text"]} ) diff --git a/docs/features/proto-serializers.rst b/docs/features/proto-serializers.rst index b9b11013..aa7ab88e 100644 --- a/docs/features/proto-serializers.rst +++ b/docs/features/proto-serializers.rst @@ -242,6 +242,11 @@ If you want to set a specific default as field value: # you can use any serializers field. some_field = serializers.CharField(default="default value") +TODO: +string_default field.allow_null=False field.default= field.required=False field name in descriptor: True + +when not allow_null but not required either with no default in the serializer (meaning default in models only) -> Not updated by default gRPC when using update without specified the field + ============================== Read-Only and Write-Only Props ============================== From 6a75d7a6a22a06134007beb6cffc7e9f393fde44 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Thu, 18 Jan 2024 12:12:46 +0100 Subject: [PATCH 16/19] all tests on default value working --- .../tests/fakeapp/grpc/fakeapp.proto | 86 +++--- .../tests/fakeapp/grpc/fakeapp_pb2.py | 280 +++++++++--------- django_socio_grpc/tests/fakeapp/models.py | 6 +- .../tests/fakeapp/serializers.py | 7 + .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 86 +++--- django_socio_grpc/tests/test_default_value.py | 127 +++++++- test_utils/generateproto.py | 2 +- 7 files changed, 366 insertions(+), 228 deletions(-) diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index 646c091b..4c7f1bab 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -276,20 +276,22 @@ message DefaultValuePartialUpdateRequest { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - repeated string _partial_update_fields = 5; - string string_required = 6; - optional string string_blank = 7; - optional string string_nullable = 8; - optional string string_default = 9; - int32 int_required = 10; - optional int32 int_nullable = 11; - optional int32 int_default = 12; - bool boolean_required = 13; - optional bool boolean_nullable = 14; - optional bool boolean_default_false = 15; - optional bool boolean_default_true = 16; - optional string string_default_and_blank = 17; - optional string string_null_default_and_blank = 18; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + repeated string _partial_update_fields = 7; + string string_required = 8; + optional string string_blank = 9; + optional string string_nullable = 10; + optional string string_default = 11; + optional string string_default_and_blank = 12; + optional string string_null_default_and_blank = 13; + int32 int_required = 14; + optional int32 int_nullable = 15; + optional int32 int_default = 16; + bool boolean_required = 17; + optional bool boolean_nullable = 18; + optional bool boolean_default_false = 19; + optional bool boolean_default_true = 20; } message DefaultValueRequest { @@ -297,19 +299,21 @@ message DefaultValueRequest { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - string string_required = 5; - optional string string_blank = 6; - optional string string_nullable = 7; - optional string string_default = 8; - int32 int_required = 9; - optional int32 int_nullable = 10; - optional int32 int_default = 11; - bool boolean_required = 12; - optional bool boolean_nullable = 13; - optional bool boolean_default_false = 14; - optional bool boolean_default_true = 15; - optional string string_default_and_blank = 16; - optional string string_null_default_and_blank = 17; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + string string_required = 7; + optional string string_blank = 8; + optional string string_nullable = 9; + optional string string_default = 10; + optional string string_default_and_blank = 11; + optional string string_null_default_and_blank = 12; + int32 int_required = 13; + optional int32 int_nullable = 14; + optional int32 int_default = 15; + bool boolean_required = 16; + optional bool boolean_nullable = 17; + optional bool boolean_default_false = 18; + optional bool boolean_default_true = 19; } message DefaultValueResponse { @@ -317,19 +321,21 @@ message DefaultValueResponse { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - string string_required = 5; - optional string string_blank = 6; - optional string string_nullable = 7; - optional string string_default = 8; - int32 int_required = 9; - optional int32 int_nullable = 10; - optional int32 int_default = 11; - bool boolean_required = 12; - optional bool boolean_nullable = 13; - optional bool boolean_default_false = 14; - optional bool boolean_default_true = 15; - optional string string_default_and_blank = 16; - optional string string_null_default_and_blank = 17; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + string string_required = 7; + optional string string_blank = 8; + optional string string_nullable = 9; + optional string string_default = 10; + optional string string_default_and_blank = 11; + optional string string_null_default_and_blank = 12; + int32 int_required = 13; + optional int32 int_nullable = 14; + optional int32 int_default = 15; + bool boolean_required = 16; + optional bool boolean_nullable = 17; + optional bool boolean_default_false = 18; + optional bool boolean_default_true = 19; } message DefaultValueRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 92702100..f3b39fec 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xe3\x07\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x05 \x03(\t\x12\x17\n\x0fstring_required\x18\x06 \x01(\t\x12\x19\n\x0cstring_blank\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\t \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\n \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0b \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0c \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\r \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x0e \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0f \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x10 \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x11 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x12 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\"\xb6\x07\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x11 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\"\xb7\x07\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x05 \x01(\t\x12\x19\n\x0cstring_blank\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x14\n\x0cint_required\x18\t \x01(\x05\x12\x19\n\x0cint_nullable\x18\n \x01(\x05H\x07\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0b \x01(\x05H\x08\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x0c \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\r \x01(\x08H\t\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x0e \x01(\x08H\n\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x0f \x01(\x08H\x0b\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x11 \x01(\tH\r\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_trueB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blank\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\t\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x07 \x03(\t\x12\x17\n\x0fstring_required\x18\x08 \x01(\t\x12\x19\n\x0cstring_blank\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\n \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x0b \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0c \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\r \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\x0e \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0f \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x10 \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x11 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x12 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x13 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x14 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x84\t\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x85\t\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -78,143 +78,143 @@ _globals['_DEFAULTVALUELISTRESPONSE']._serialized_start=2739 _globals['_DEFAULTVALUELISTRESPONSE']._serialized_end=2838 _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_start=2841 - _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=3836 - _globals['_DEFAULTVALUEREQUEST']._serialized_start=3839 - _globals['_DEFAULTVALUEREQUEST']._serialized_end=4789 - _globals['_DEFAULTVALUERESPONSE']._serialized_start=4792 - _globals['_DEFAULTVALUERESPONSE']._serialized_end=5743 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=5745 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=5786 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=5788 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=5839 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=5841 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=5866 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=5868 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=5967 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=5969 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=6033 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=6035 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=6117 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=6119 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=6176 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=6178 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=6291 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=6293 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=6407 - _globals['_MANYMANYMODELREQUEST']._serialized_start=6409 - _globals['_MANYMANYMODELREQUEST']._serialized_end=6508 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=6510 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=6575 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=6577 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=6625 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=6627 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=6658 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=6660 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=6771 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=6774 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=7016 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=7019 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=7216 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=7219 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=7419 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=7421 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=7470 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=7472 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=7519 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=7521 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=7551 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=7553 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=7677 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=7680 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=7894 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=7897 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=8066 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=8069 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=8490 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=8492 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=8540 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8542 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8595 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=8597 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=8633 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=8635 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=8756 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8759 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=9019 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=9022 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=9237 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=9240 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=9456 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9458 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9512 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=9514 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=9562 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=9564 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=9595 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=9597 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=9708 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=9711 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=9896 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=9899 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=10039 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=10042 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=10215 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=10217 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=10266 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=10268 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=10375 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=10377 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=10416 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=10418 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=10459 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=10461 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=10506 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=10508 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=10554 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10556 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10617 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=10619 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=10660 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=10663 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=10805 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=10807 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=10833 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=10835 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=10936 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10938 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=10995 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=10998 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=11236 - _globals['_UNITTESTMODELREQUEST']._serialized_start=11239 - _globals['_UNITTESTMODELREQUEST']._serialized_end=11432 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=11435 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=11629 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=11631 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11673 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11675 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11703 - _globals['_BASICCONTROLLER']._serialized_start=11706 - _globals['_BASICCONTROLLER']._serialized_end=12932 - _globals['_DEFAULTVALUECONTROLLER']._serialized_start=12935 - _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13544 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=13547 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=13884 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13887 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14142 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14145 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14310 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14313 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=14994 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=14997 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15666 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15669 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=16411 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=16414 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17118 - _globals['_STREAMINCONTROLLER']._serialized_start=17121 - _globals['_STREAMINCONTROLLER']._serialized_end=17375 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17378 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18247 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18250 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19111 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=4042 + _globals['_DEFAULTVALUEREQUEST']._serialized_start=4045 + _globals['_DEFAULTVALUEREQUEST']._serialized_end=5201 + _globals['_DEFAULTVALUERESPONSE']._serialized_start=5204 + _globals['_DEFAULTVALUERESPONSE']._serialized_end=6361 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=6363 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=6404 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=6406 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=6457 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=6459 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=6484 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=6486 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=6585 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=6587 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=6651 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=6653 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=6735 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=6737 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=6794 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=6796 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=6909 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=6911 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=7025 + _globals['_MANYMANYMODELREQUEST']._serialized_start=7027 + _globals['_MANYMANYMODELREQUEST']._serialized_end=7126 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=7128 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=7193 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=7195 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=7243 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=7245 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=7276 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=7278 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=7389 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=7392 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=7634 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=7637 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=7834 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=7837 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=8037 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=8039 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=8088 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8090 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8137 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=8139 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=8169 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=8171 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=8295 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8298 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=8512 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=8515 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=8684 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=8687 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=9108 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9110 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9158 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=9160 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=9213 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=9215 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=9251 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=9253 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=9374 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=9377 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=9637 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=9640 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=9855 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=9858 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=10074 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=10076 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=10130 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=10132 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=10180 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=10182 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=10213 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=10215 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=10326 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=10329 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=10514 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=10517 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=10657 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=10660 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=10833 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=10835 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=10884 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=10886 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=10993 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=10995 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=11034 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=11036 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=11077 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=11079 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=11124 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=11126 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=11172 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=11174 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11235 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=11237 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=11278 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=11281 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=11423 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=11425 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=11451 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=11453 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=11554 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=11556 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11613 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=11616 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=11854 + _globals['_UNITTESTMODELREQUEST']._serialized_start=11857 + _globals['_UNITTESTMODELREQUEST']._serialized_end=12050 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=12053 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=12247 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=12249 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=12291 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=12293 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=12321 + _globals['_BASICCONTROLLER']._serialized_start=12324 + _globals['_BASICCONTROLLER']._serialized_end=13550 + _globals['_DEFAULTVALUECONTROLLER']._serialized_start=13553 + _globals['_DEFAULTVALUECONTROLLER']._serialized_end=14162 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=14165 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=14502 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=14505 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14760 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14763 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14928 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14931 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=15612 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=15615 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=16284 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=16287 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=17029 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=17032 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17736 + _globals['_STREAMINCONTROLLER']._serialized_start=17739 + _globals['_STREAMINCONTROLLER']._serialized_end=17993 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17996 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18865 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18868 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19729 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index 74336438..b6f1fb16 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -205,8 +205,10 @@ class DefaultValueModel(models.Model): max_length=60, default="null_default_and_blank", blank=True, null=True ) string_required_but_serializer_default = models.CharField(max_length=20) - # TODO model default but overrided by serializer default - # TODO model default and nullable but overrided by serializer default + string_default_but_serializer_default = models.CharField(max_length=60, default="default") + string_nullable_default_but_serializer_default = models.CharField( + max_length=60, default="default" + ) int_required = models.IntegerField() int_nullable = models.IntegerField(null=True) int_default = models.IntegerField(default=5) diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index 64125b0c..5d800e67 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -217,6 +217,13 @@ class DefaultValueSerializer(proto_serializers.ModelProtoSerializer): int_required_but_serializer_default = serializers.IntegerField(default=10) boolean_required_but_serializer_default = serializers.BooleanField(default=False) + string_default_but_serializer_default = serializers.CharField( + default="default_serializer_override" + ) + string_nullable_default_but_serializer_default = serializers.CharField( + default="default_serializer_override" + ) + class Meta: model = DefaultValueModel proto_class = fakeapp_pb2.DefaultValueResponse diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index 646c091b..4c7f1bab 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -276,20 +276,22 @@ message DefaultValuePartialUpdateRequest { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - repeated string _partial_update_fields = 5; - string string_required = 6; - optional string string_blank = 7; - optional string string_nullable = 8; - optional string string_default = 9; - int32 int_required = 10; - optional int32 int_nullable = 11; - optional int32 int_default = 12; - bool boolean_required = 13; - optional bool boolean_nullable = 14; - optional bool boolean_default_false = 15; - optional bool boolean_default_true = 16; - optional string string_default_and_blank = 17; - optional string string_null_default_and_blank = 18; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + repeated string _partial_update_fields = 7; + string string_required = 8; + optional string string_blank = 9; + optional string string_nullable = 10; + optional string string_default = 11; + optional string string_default_and_blank = 12; + optional string string_null_default_and_blank = 13; + int32 int_required = 14; + optional int32 int_nullable = 15; + optional int32 int_default = 16; + bool boolean_required = 17; + optional bool boolean_nullable = 18; + optional bool boolean_default_false = 19; + optional bool boolean_default_true = 20; } message DefaultValueRequest { @@ -297,19 +299,21 @@ message DefaultValueRequest { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - string string_required = 5; - optional string string_blank = 6; - optional string string_nullable = 7; - optional string string_default = 8; - int32 int_required = 9; - optional int32 int_nullable = 10; - optional int32 int_default = 11; - bool boolean_required = 12; - optional bool boolean_nullable = 13; - optional bool boolean_default_false = 14; - optional bool boolean_default_true = 15; - optional string string_default_and_blank = 16; - optional string string_null_default_and_blank = 17; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + string string_required = 7; + optional string string_blank = 8; + optional string string_nullable = 9; + optional string string_default = 10; + optional string string_default_and_blank = 11; + optional string string_null_default_and_blank = 12; + int32 int_required = 13; + optional int32 int_nullable = 14; + optional int32 int_default = 15; + bool boolean_required = 16; + optional bool boolean_nullable = 17; + optional bool boolean_default_false = 18; + optional bool boolean_default_true = 19; } message DefaultValueResponse { @@ -317,19 +321,21 @@ message DefaultValueResponse { optional string string_required_but_serializer_default = 2; optional int32 int_required_but_serializer_default = 3; optional bool boolean_required_but_serializer_default = 4; - string string_required = 5; - optional string string_blank = 6; - optional string string_nullable = 7; - optional string string_default = 8; - int32 int_required = 9; - optional int32 int_nullable = 10; - optional int32 int_default = 11; - bool boolean_required = 12; - optional bool boolean_nullable = 13; - optional bool boolean_default_false = 14; - optional bool boolean_default_true = 15; - optional string string_default_and_blank = 16; - optional string string_null_default_and_blank = 17; + optional string string_default_but_serializer_default = 5; + optional string string_nullable_default_but_serializer_default = 6; + string string_required = 7; + optional string string_blank = 8; + optional string string_nullable = 9; + optional string string_default = 10; + optional string string_default_and_blank = 11; + optional string string_null_default_and_blank = 12; + int32 int_required = 13; + optional int32 int_nullable = 14; + optional int32 int_default = 15; + bool boolean_required = 16; + optional bool boolean_nullable = 17; + optional bool boolean_default_false = 18; + optional bool boolean_default_true = 19; } message DefaultValueRetrieveRequest { diff --git a/django_socio_grpc/tests/test_default_value.py b/django_socio_grpc/tests/test_default_value.py index 71484901..a6991e9e 100644 --- a/django_socio_grpc/tests/test_default_value.py +++ b/django_socio_grpc/tests/test_default_value.py @@ -207,8 +207,13 @@ async def test_retrieve_all_default_value(self): self.assertEqual(response.string_default, "default") self.assertEqual( response.string_required_but_serializer_default, "setup_serializer" - ) # created in setup not serializer so default value != than value in instance. See create test for testung default serializer value - + ) # created in setup not serializer so default value != than value in instance because required. See create test for testing default serializer value + self.assertEqual( + response.string_default_but_serializer_default, "default" + ) # created in setup not serializer so default value != than value in serializer. See create test for testing default serializer value + self.assertEqual( + response.string_nullable_default_but_serializer_default, "default" + ) # created in setup not serializer so default value != than value in serializer. See create test for testing default serializer value # INTEGER ################## # INFO - AM - 12/01/2024 - check presence / not presence depending if element is None or empty @@ -261,6 +266,13 @@ async def test_create_all_default_value(self): self.assertEqual(response.string_null_default_and_blank, "null_default_and_blank") self.assertEqual(response.string_default, "default") self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + self.assertEqual( + response.string_default_but_serializer_default, "default_serializer_override" + ) + self.assertEqual( + response.string_nullable_default_but_serializer_default, + "default_serializer_override", + ) # INTEGER ################## @@ -296,6 +308,8 @@ async def test_update_all_default_value(self): string_default_and_blank="update_default_and_blank", string_null_default_and_blank="update_null_default_and_blank", string_required_but_serializer_default="update_serializer", + string_default_but_serializer_default="update_serializer_override", + string_nullable_default_but_serializer_default="update_serializer_override", int_required=200, int_nullable=201, int_default=202, @@ -336,6 +350,13 @@ async def test_update_all_default_value(self): response.string_default, "update_default" ) # This field not updated because model default only apply on creation self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + self.assertEqual( + response.string_default_but_serializer_default, "default_serializer_override" + ) + self.assertEqual( + response.string_nullable_default_but_serializer_default, + "default_serializer_override", + ) await all_setted_instance.arefresh_from_db() self.assertEqual(all_setted_instance.string_blank, "") @@ -407,6 +428,8 @@ async def test_partial_update_specifying_optional_but_not_set_them(self): string_default_and_blank="update_default_and_blank", string_null_default_and_blank="update_null_default_and_blank", string_required_but_serializer_default="update_serializer", + string_default_but_serializer_default="update_serializer_override", + string_nullable_default_but_serializer_default="update_serializer_override", int_required=200, int_nullable=201, int_default=202, @@ -430,6 +453,8 @@ async def test_partial_update_specifying_optional_but_not_set_them(self): "string_default_and_blank", "string_null_default_and_blank", "string_required_but_serializer_default", + "string_default_but_serializer_default", + "string_nullable_default_but_serializer_default", "int_nullable", "int_default", "int_required_but_serializer_default", @@ -461,6 +486,13 @@ async def test_partial_update_specifying_optional_but_not_set_them(self): response.string_default, "update_default" ) # Field not updated because not specified in PARTIAL_UPDATE_FIELD_NAME self.assertEqual(response.string_required_but_serializer_default, "default_serializer") + self.assertEqual( + response.string_default_but_serializer_default, "default_serializer_override" + ) + self.assertEqual( + response.string_nullable_default_but_serializer_default, + "default_serializer_override", + ) await all_setted_instance.arefresh_from_db() self.assertEqual(all_setted_instance.string_blank, "") @@ -504,11 +536,96 @@ async def test_partial_update_specifying_optional_but_not_set_them(self): self.assertEqual(response.boolean_required_but_serializer_default, False) async def test_partial_update_choosing_a_required_without_setting_it_raise_error(self): - # string_default - assert False + all_setted_instance = await DefaultValueModel.objects.acreate( + string_required="update_required", + string_blank="update_blank", + string_nullable="update_nullable", + string_default="update_default", + string_default_and_blank="update_default_and_blank", + string_null_default_and_blank="update_null_default_and_blank", + string_required_but_serializer_default="update_serializer", + int_required=200, + int_nullable=201, + int_default=202, + int_required_but_serializer_default=60, + boolean_required=True, + boolean_nullable=True, + boolean_default_false=True, + boolean_default_true=False, + boolean_required_but_serializer_default=True, + ) + + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + + request = fakeapp_pb2.DefaultValuePartialUpdateRequest( + id=all_setted_instance.id, + **{ + PARTIAL_UPDATE_FIELD_NAME: [ + "string_default", + ] + } + ) + + with self.assertRaises(grpc.RpcError) as error: + await grpc_stub.PartialUpdate(request=request) + + self.assertEqual(error.exception.code(), grpc.StatusCode.INVALID_ARGUMENT) + + self.assertEqual( + '{"string_default": [{"message": "This field may not be blank.", "code": "blank"}]}', + error.exception.details(), + ) async def test_partial_update_choosing_default_grpc_value_for_nullable_field(self): # set "" for string_null_default_and_blank # set 0 for int_nullable # set False for boolean_nullable - assert False + all_setted_instance = await DefaultValueModel.objects.acreate( + string_required="update_required", + string_blank="update_blank", + string_nullable="update_nullable", + string_default="update_default", + string_default_and_blank="update_default_and_blank", + string_null_default_and_blank="update_null_default_and_blank", + string_required_but_serializer_default="update_serializer", + int_required=200, + int_nullable=201, + int_default=202, + int_required_but_serializer_default=60, + boolean_required=True, + boolean_nullable=True, + boolean_default_false=True, + boolean_default_true=False, + boolean_required_but_serializer_default=True, + ) + + grpc_stub = self.fake_grpc.get_fake_stub(DefaultValueControllerStub) + + # Notice abscence of "string_default" as it is a required field and default grpc value (empty string) is not valid if blank not True + request = fakeapp_pb2.DefaultValuePartialUpdateRequest( + id=all_setted_instance.id, + string_null_default_and_blank="", + int_nullable=0, + boolean_nullable=False, + **{ + PARTIAL_UPDATE_FIELD_NAME: [ + "string_null_default_and_blank", + "int_nullable", + "boolean_nullable", + ] + } + ) + response = await grpc_stub.PartialUpdate(request=request) + + self.assertTrue(response.HasField("string_null_default_and_blank")) + self.assertTrue(response.HasField("int_nullable")) + self.assertTrue(response.HasField("boolean_nullable")) + + self.assertEqual(response.string_null_default_and_blank, "") + self.assertEqual(response.int_nullable, 0) + self.assertEqual(response.boolean_nullable, False) + + await all_setted_instance.arefresh_from_db() + self.assertEqual(all_setted_instance.string_null_default_and_blank, "") + self.assertEqual(all_setted_instance.int_nullable, 0) + self.assertEqual(all_setted_instance.boolean_nullable, False) diff --git a/test_utils/generateproto.py b/test_utils/generateproto.py index bb73fe14..d0dfbdbf 100644 --- a/test_utils/generateproto.py +++ b/test_utils/generateproto.py @@ -11,7 +11,7 @@ from django_socio_grpc.tests.test_proto_generation import OVERRIDEN_SETTINGS # noqa E402 # INFO - AM - 29/12/2023 - Set this to true if you want to reorder proto order without having to delete the proto file. -override_fields_number = False +override_fields_number = True args = [] opts = {"override_fields_number": override_fields_number} From b90784727d81c5e4f5b1e3843ab1a7b0146504b0 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Thu, 18 Jan 2024 12:24:21 +0100 Subject: [PATCH 17/19] clean up --- django_socio_grpc/proto_serializers.py | 36 -- .../generated_protobuf_files_old_way.py | 36 +- .../tests/fakeapp/grpc/fakeapp.proto | 32 +- .../tests/fakeapp/grpc/fakeapp_pb2.py | 334 +++++++++--------- .../migrations/0013_defaultvaluemodel.py | 37 ++ ...013_unittestmodel_is_validated_and_more.py | 24 -- django_socio_grpc/tests/fakeapp/models.py | 2 - .../tests/fakeapp/serializers.py | 5 - .../fakeapp.proto | 20 +- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 32 +- .../protos/NO_MODEL_GENERATED/fakeapp.proto | 12 +- .../fakeapp.proto | 14 +- .../SIMPLE_MODEL_GENERATED/fakeapp.proto | 20 +- .../tests/test_app_handler_registry.py | 2 +- .../tests/test_async_model_service.py | 30 +- .../tests/test_filtering_metadata.py | 4 +- .../tests/test_pagination_metadata.py | 2 +- .../tests/test_sync_model_service.py | 2 +- test_utils/generateproto.py | 2 +- 19 files changed, 270 insertions(+), 376 deletions(-) create mode 100644 django_socio_grpc/tests/fakeapp/migrations/0013_defaultvaluemodel.py delete mode 100644 django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 3268399f..614549b5 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -68,13 +68,8 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): code="missing_partial_message_attribute", ) - print(self.Meta.model.string_null_default_and_blank.field.default) - print(self.Meta.model._meta.pk.name) - print(data_dict) is_update_process = bool(data_dict.get(self.Meta.model._meta.pk.name, "")) - print("is_update_process ", is_update_process) for field in self.fields.values(): - print(field.field_name) # INFO - AM - 04/01/2024 - If we are in a partial serializer we only need to have field specified in PARTIAL_UPDATE_FIELD_NAME attribute in the data. Meaning deleting fields that should not be here and not adding None to allow_null field that are not specified if self.partial and field.field_name not in data_dict.get( PARTIAL_UPDATE_FIELD_NAME, {} @@ -84,7 +79,6 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): continue # INFO - AM - 04/01/2024 - if field already existing in the data_dict we do not need to do something else if field.field_name in data_dict: - print("in", data_dict[field.field_name], type(data_dict[field.field_name])) continue if self.partial and field.field_name in data_dict.get( @@ -102,35 +96,6 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): field.field_name ].default_value - print( - field.field_name, - f"{field.allow_null=}", - f"{field.default=}", - f"{field.required=}", - "field name in descriptor: ", - field.field_name in message.DESCRIPTOR.fields_by_name, - ) - # print("value: ", data_dict.get(field.field_name, "not_set")) - # if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: - # # print(message.DESCRIPTOR.fields_by_name) - # # print("icicicic ", message.DESCRIPTOR.fields_by_name[field.field_name].default_value) - # data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value - # continue - # INFO - AM - 04/01/2024 - Adding default None value only for optional field that are required and allowing null or having a default value - - # print(message.HasField(field.field_name), field.field_name in data_dict) - # if field.allow_null and field.default not in [None, empty]: - # raise ValidationError( - # { - # field.field_name: [ - # f"Field {field.field_name} accept both null and a default value. " - # ] - # }, - # code="both_allow_null_and_default", - # ) - - # string_default field.allow_null=False field.default= field.required=False field name in descriptor: True - # INFO - AM - 12/01/2024 - if field name is not in data_dict but is required that mean that it's a default value deleted when transforming proto to dict if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[ @@ -154,7 +119,6 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): ): deferred_attribute = getattr(self.Meta.model, field.field_name) if deferred_attribute.field.default != NOT_PROVIDED: - print("icicic ", deferred_attribute.field.default) data_dict[field.field_name] = deferred_attribute.field.default continue diff --git a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py index 15f86afc..045018f7 100644 --- a/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py +++ b/django_socio_grpc/tests/assets/generated_protobuf_files_old_way.py @@ -17,8 +17,6 @@ int32 id = 1; string title = 2; string text = 3; - int32 some_default_counter = 4; - bool is_validated = 5; } message UnitTestModelListRequest { @@ -67,8 +65,6 @@ int32 id = 1; string title = 2; string text = 3; - int32 some_default_counter = 4; - bool is_validated = 5; } message UnitTestModelListRequest { @@ -157,8 +153,6 @@ int32 id = 1; string title = 2; string text = 3; - int32 some_default_counter = 4; - bool is_validated = 5; } message UnitTestModelListRequest { @@ -298,16 +292,20 @@ string string_blank = 3; string string_nullable = 4; string string_default = 5; - string string_required_but_serializer_default = 6; - int32 int_required = 7; - int32 int_nullable = 8; - int32 int_default = 9; - int32 int_required_but_serializer_default = 10; - bool boolean_required = 11; - bool boolean_nullable = 12; - bool boolean_default_false = 13; - bool boolean_default_true = 14; - bool boolean_required_but_serializer_default = 15; + string string_default_and_blank = 6; + string string_null_default_and_blank = 7; + string string_required_but_serializer_default = 8; + string string_default_but_serializer_default = 9; + string string_nullable_default_but_serializer_default = 10; + int32 int_required = 11; + int32 int_nullable = 12; + int32 int_default = 13; + int32 int_required_but_serializer_default = 14; + bool boolean_required = 15; + bool boolean_nullable = 16; + bool boolean_default_false = 17; + bool boolean_default_true = 18; + bool boolean_required_but_serializer_default = 19; } message DefaultValueModelListRequest { @@ -429,8 +427,6 @@ message UnitTestModel { int32 id = 1; string text = 2; - int32 some_default_counter = 3; - bool is_validated = 4; } message UnitTestModelListRequest { @@ -472,9 +468,7 @@ message UnitTestModel { int32 id = 1; string text = 2; - int32 some_default_counter = 3; - bool is_validated = 4; - string title = 5; + string title = 3; } message UnitTestModelListRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index 4c7f1bab..7825cf72 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -194,18 +194,14 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicProtoListChildResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicServiceListResponse { @@ -602,27 +598,21 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - repeated string _partial_update_fields = 4; - string title = 5; - optional string text = 6; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index f3b39fec..9840e8f9 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xc7\x01\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"\xc8\x01\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x07\n\x05_textB\x0f\n\r_is_validated\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\t\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x07 \x03(\t\x12\x17\n\x0fstring_required\x18\x08 \x01(\t\x12\x19\n\x0cstring_blank\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\n \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x0b \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0c \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\r \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\x0e \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0f \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x10 \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x11 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x12 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x13 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x14 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x84\t\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x85\t\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\xee\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\x04text\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc1\x01\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"\xc2\x01\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12!\n\x14some_default_counter\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x19\n\x0cis_validated\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\r\n\x05title\x18\x04 \x01(\t\x12\x11\n\x04text\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x05\n\x03_idB\x17\n\x15_some_default_counterB\x0f\n\r_is_validatedB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"_\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"`\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\t\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x07 \x03(\t\x12\x17\n\x0fstring_required\x18\x08 \x01(\t\x12\x19\n\x0cstring_blank\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\n \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x0b \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0c \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\r \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\x0e \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0f \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x10 \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x11 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x12 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x13 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x14 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x84\t\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x85\t\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\x86\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Y\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Z\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,170 +51,170 @@ _globals['_BASICPROTOLISTCHILDLISTREQUEST']._serialized_end=1271 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_start=1273 _globals['_BASICPROTOLISTCHILDLISTRESPONSE']._serialized_end=1386 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1389 - _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1588 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1591 - _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1791 - _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1793 - _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1892 - _globals['_BASICSERVICEREQUEST']._serialized_start=1895 - _globals['_BASICSERVICEREQUEST']._serialized_end=2072 - _globals['_BASICSERVICERESPONSE']._serialized_start=2075 - _globals['_BASICSERVICERESPONSE']._serialized_end=2230 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2232 - _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2339 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2341 - _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2386 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2388 - _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2429 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2431 - _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2473 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2476 - _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2668 - _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_start=2670 - _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_end=2710 - _globals['_DEFAULTVALUELISTREQUEST']._serialized_start=2712 - _globals['_DEFAULTVALUELISTREQUEST']._serialized_end=2737 - _globals['_DEFAULTVALUELISTRESPONSE']._serialized_start=2739 - _globals['_DEFAULTVALUELISTRESPONSE']._serialized_end=2838 - _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_start=2841 - _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=4042 - _globals['_DEFAULTVALUEREQUEST']._serialized_start=4045 - _globals['_DEFAULTVALUEREQUEST']._serialized_end=5201 - _globals['_DEFAULTVALUERESPONSE']._serialized_start=5204 - _globals['_DEFAULTVALUERESPONSE']._serialized_end=6361 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=6363 - _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=6404 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=6406 - _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=6457 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=6459 - _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=6484 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=6486 - _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=6585 - _globals['_FOREIGNMODELRESPONSE']._serialized_start=6587 - _globals['_FOREIGNMODELRESPONSE']._serialized_end=6651 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=6653 - _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=6735 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=6737 - _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=6794 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=6796 - _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=6909 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=6911 - _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=7025 - _globals['_MANYMANYMODELREQUEST']._serialized_start=7027 - _globals['_MANYMANYMODELREQUEST']._serialized_end=7126 - _globals['_MANYMANYMODELRESPONSE']._serialized_start=7128 - _globals['_MANYMANYMODELRESPONSE']._serialized_end=7193 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=7195 - _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=7243 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=7245 - _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=7276 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=7278 - _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=7389 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=7392 - _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=7634 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=7637 - _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=7834 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=7837 - _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=8037 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=8039 - _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=8088 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8090 - _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=8137 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=8139 - _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=8169 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=8171 - _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=8295 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8298 - _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=8512 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=8515 - _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=8684 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=8687 - _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=9108 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9110 - _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9158 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=9160 - _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=9213 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=9215 - _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=9251 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=9253 - _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=9374 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=9377 - _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=9637 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=9640 - _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=9855 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=9858 - _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=10074 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=10076 - _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=10130 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=10132 - _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=10180 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=10182 - _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=10213 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=10215 - _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=10326 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=10329 - _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=10514 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=10517 - _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=10657 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=10660 - _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=10833 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=10835 - _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=10884 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=10886 - _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=10993 - _globals['_STREAMINSTREAMINREQUEST']._serialized_start=10995 - _globals['_STREAMINSTREAMINREQUEST']._serialized_end=11034 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=11036 - _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=11077 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=11079 - _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=11124 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=11126 - _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=11172 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=11174 - _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11235 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=11237 - _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=11278 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=11281 - _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=11423 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=11425 - _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=11451 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=11453 - _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=11554 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=11556 - _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11613 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=11616 - _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=11854 - _globals['_UNITTESTMODELREQUEST']._serialized_start=11857 - _globals['_UNITTESTMODELREQUEST']._serialized_end=12050 - _globals['_UNITTESTMODELRESPONSE']._serialized_start=12053 - _globals['_UNITTESTMODELRESPONSE']._serialized_end=12247 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=12249 - _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=12291 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=12293 - _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=12321 - _globals['_BASICCONTROLLER']._serialized_start=12324 - _globals['_BASICCONTROLLER']._serialized_end=13550 - _globals['_DEFAULTVALUECONTROLLER']._serialized_start=13553 - _globals['_DEFAULTVALUECONTROLLER']._serialized_end=14162 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=14165 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=14502 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=14505 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14760 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14763 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14928 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14931 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=15612 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=15615 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=16284 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=16287 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=17029 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=17032 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17736 - _globals['_STREAMINCONTROLLER']._serialized_start=17739 - _globals['_STREAMINCONTROLLER']._serialized_end=17993 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17996 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18865 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18868 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19729 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_start=1388 + _globals['_BASICPROTOLISTCHILDREQUEST']._serialized_end=1483 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_start=1485 + _globals['_BASICPROTOLISTCHILDRESPONSE']._serialized_end=1581 + _globals['_BASICSERVICELISTRESPONSE']._serialized_start=1583 + _globals['_BASICSERVICELISTRESPONSE']._serialized_end=1682 + _globals['_BASICSERVICEREQUEST']._serialized_start=1685 + _globals['_BASICSERVICEREQUEST']._serialized_end=1862 + _globals['_BASICSERVICERESPONSE']._serialized_start=1865 + _globals['_BASICSERVICERESPONSE']._serialized_end=2020 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_start=2022 + _globals['_CUSTOMMIXPARAMFORLISTREQUEST']._serialized_end=2129 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_start=2131 + _globals['_CUSTOMMIXPARAMFORREQUEST']._serialized_end=2176 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_start=2178 + _globals['_CUSTOMNAMEFORREQUEST']._serialized_end=2219 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_start=2221 + _globals['_CUSTOMNAMEFORRESPONSE']._serialized_end=2263 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_start=2266 + _globals['_CUSTOMRETRIEVERESPONSESPECIALFIELDSMODELRESPONSE']._serialized_end=2458 + _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_start=2460 + _globals['_DEFAULTVALUEDESTROYREQUEST']._serialized_end=2500 + _globals['_DEFAULTVALUELISTREQUEST']._serialized_start=2502 + _globals['_DEFAULTVALUELISTREQUEST']._serialized_end=2527 + _globals['_DEFAULTVALUELISTRESPONSE']._serialized_start=2529 + _globals['_DEFAULTVALUELISTRESPONSE']._serialized_end=2628 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_start=2631 + _globals['_DEFAULTVALUEPARTIALUPDATEREQUEST']._serialized_end=3832 + _globals['_DEFAULTVALUEREQUEST']._serialized_start=3835 + _globals['_DEFAULTVALUEREQUEST']._serialized_end=4991 + _globals['_DEFAULTVALUERESPONSE']._serialized_start=4994 + _globals['_DEFAULTVALUERESPONSE']._serialized_end=6151 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_start=6153 + _globals['_DEFAULTVALUERETRIEVEREQUEST']._serialized_end=6194 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_start=6196 + _globals['_EXCEPTIONSTREAMRAISEEXCEPTIONRESPONSE']._serialized_end=6247 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_start=6249 + _globals['_FOREIGNMODELLISTREQUEST']._serialized_end=6274 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_start=6276 + _globals['_FOREIGNMODELLISTRESPONSE']._serialized_end=6375 + _globals['_FOREIGNMODELRESPONSE']._serialized_start=6377 + _globals['_FOREIGNMODELRESPONSE']._serialized_end=6441 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_start=6443 + _globals['_FOREIGNMODELRETRIEVECUSTOMRESPONSE']._serialized_end=6525 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_start=6527 + _globals['_FOREIGNMODELRETRIEVECUSTOMRETRIEVEREQUEST']._serialized_end=6584 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_start=6586 + _globals['_IMPORTSTRUCTEVENINARRAYMODELREQUEST']._serialized_end=6699 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_start=6701 + _globals['_IMPORTSTRUCTEVENINARRAYMODELRESPONSE']._serialized_end=6815 + _globals['_MANYMANYMODELREQUEST']._serialized_start=6817 + _globals['_MANYMANYMODELREQUEST']._serialized_end=6916 + _globals['_MANYMANYMODELRESPONSE']._serialized_start=6918 + _globals['_MANYMANYMODELRESPONSE']._serialized_end=6983 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_start=6985 + _globals['_RECURSIVETESTMODELDESTROYREQUEST']._serialized_end=7033 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_start=7035 + _globals['_RECURSIVETESTMODELLISTREQUEST']._serialized_end=7066 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_start=7068 + _globals['_RECURSIVETESTMODELLISTRESPONSE']._serialized_end=7179 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_start=7182 + _globals['_RECURSIVETESTMODELPARTIALUPDATEREQUEST']._serialized_end=7424 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_start=7427 + _globals['_RECURSIVETESTMODELREQUEST']._serialized_end=7624 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_start=7627 + _globals['_RECURSIVETESTMODELRESPONSE']._serialized_end=7827 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_start=7829 + _globals['_RECURSIVETESTMODELRETRIEVEREQUEST']._serialized_end=7878 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_start=7880 + _globals['_RELATEDFIELDMODELDESTROYREQUEST']._serialized_end=7927 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_start=7929 + _globals['_RELATEDFIELDMODELLISTREQUEST']._serialized_end=7959 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_start=7961 + _globals['_RELATEDFIELDMODELLISTRESPONSE']._serialized_end=8085 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=8088 + _globals['_RELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=8302 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_start=8305 + _globals['_RELATEDFIELDMODELREQUEST']._serialized_end=8474 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_start=8477 + _globals['_RELATEDFIELDMODELRESPONSE']._serialized_end=8898 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=8900 + _globals['_RELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=8948 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_start=8950 + _globals['_SIMPLERELATEDFIELDMODELDESTROYREQUEST']._serialized_end=9003 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_start=9005 + _globals['_SIMPLERELATEDFIELDMODELLISTREQUEST']._serialized_end=9041 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_start=9043 + _globals['_SIMPLERELATEDFIELDMODELLISTRESPONSE']._serialized_end=9164 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_start=9167 + _globals['_SIMPLERELATEDFIELDMODELPARTIALUPDATEREQUEST']._serialized_end=9427 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_start=9430 + _globals['_SIMPLERELATEDFIELDMODELREQUEST']._serialized_end=9645 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_start=9648 + _globals['_SIMPLERELATEDFIELDMODELRESPONSE']._serialized_end=9864 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_start=9866 + _globals['_SIMPLERELATEDFIELDMODELRETRIEVEREQUEST']._serialized_end=9920 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_start=9922 + _globals['_SPECIALFIELDSMODELDESTROYREQUEST']._serialized_end=9970 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_start=9972 + _globals['_SPECIALFIELDSMODELLISTREQUEST']._serialized_end=10003 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_start=10005 + _globals['_SPECIALFIELDSMODELLISTRESPONSE']._serialized_end=10116 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_start=10119 + _globals['_SPECIALFIELDSMODELPARTIALUPDATEREQUEST']._serialized_end=10304 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_start=10307 + _globals['_SPECIALFIELDSMODELREQUEST']._serialized_end=10447 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_start=10450 + _globals['_SPECIALFIELDSMODELRESPONSE']._serialized_end=10623 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_start=10625 + _globals['_SPECIALFIELDSMODELRETRIEVEREQUEST']._serialized_end=10674 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_start=10676 + _globals['_STREAMINSTREAMINLISTRESPONSE']._serialized_end=10783 + _globals['_STREAMINSTREAMINREQUEST']._serialized_start=10785 + _globals['_STREAMINSTREAMINREQUEST']._serialized_end=10824 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_start=10826 + _globals['_STREAMINSTREAMINRESPONSE']._serialized_end=10867 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_start=10869 + _globals['_STREAMINSTREAMTOSTREAMREQUEST']._serialized_end=10914 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_start=10916 + _globals['_STREAMINSTREAMTOSTREAMRESPONSE']._serialized_end=10962 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=10964 + _globals['_SYNCUNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11025 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_start=11027 + _globals['_UNITTESTMODELDESTROYREQUEST']._serialized_end=11068 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_start=11071 + _globals['_UNITTESTMODELLISTEXTRAARGSRESPONSE']._serialized_end=11213 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_start=11215 + _globals['_UNITTESTMODELLISTREQUEST']._serialized_end=11241 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_start=11243 + _globals['_UNITTESTMODELLISTRESPONSE']._serialized_end=11344 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_start=11346 + _globals['_UNITTESTMODELLISTWITHEXTRAARGSREQUEST']._serialized_end=11403 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_start=11406 + _globals['_UNITTESTMODELPARTIALUPDATEREQUEST']._serialized_end=11540 + _globals['_UNITTESTMODELREQUEST']._serialized_start=11542 + _globals['_UNITTESTMODELREQUEST']._serialized_end=11631 + _globals['_UNITTESTMODELRESPONSE']._serialized_start=11633 + _globals['_UNITTESTMODELRESPONSE']._serialized_end=11723 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_start=11725 + _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11767 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11769 + _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11797 + _globals['_BASICCONTROLLER']._serialized_start=11800 + _globals['_BASICCONTROLLER']._serialized_end=13026 + _globals['_DEFAULTVALUECONTROLLER']._serialized_start=13029 + _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13638 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=13641 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=13978 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13981 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14236 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14239 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14404 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14407 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=15088 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=15091 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15760 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15763 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=16505 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=16508 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17212 + _globals['_STREAMINCONTROLLER']._serialized_start=17215 + _globals['_STREAMINCONTROLLER']._serialized_end=17469 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17472 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18341 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18344 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19205 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/fakeapp/migrations/0013_defaultvaluemodel.py b/django_socio_grpc/tests/fakeapp/migrations/0013_defaultvaluemodel.py new file mode 100644 index 00000000..d7a34f02 --- /dev/null +++ b/django_socio_grpc/tests/fakeapp/migrations/0013_defaultvaluemodel.py @@ -0,0 +1,37 @@ +# Generated by Django 4.2.8 on 2024-01-18 11:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fakeapp', '0012_recursivetestmodel'), + ] + + operations = [ + migrations.CreateModel( + name='DefaultValueModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('string_required', models.CharField(max_length=20)), + ('string_blank', models.CharField(blank=True, max_length=20)), + ('string_nullable', models.CharField(max_length=20, null=True)), + ('string_default', models.CharField(default='default', max_length=20)), + ('string_default_and_blank', models.CharField(blank=True, default='default_and_blank', max_length=60)), + ('string_null_default_and_blank', models.CharField(blank=True, default='null_default_and_blank', max_length=60, null=True)), + ('string_required_but_serializer_default', models.CharField(max_length=20)), + ('string_default_but_serializer_default', models.CharField(default='default', max_length=60)), + ('string_nullable_default_but_serializer_default', models.CharField(default='default', max_length=60)), + ('int_required', models.IntegerField()), + ('int_nullable', models.IntegerField(null=True)), + ('int_default', models.IntegerField(default=5)), + ('int_required_but_serializer_default', models.IntegerField()), + ('boolean_required', models.BooleanField()), + ('boolean_nullable', models.BooleanField(null=True)), + ('boolean_default_false', models.BooleanField(default=False)), + ('boolean_default_true', models.BooleanField(default=True)), + ('boolean_required_but_serializer_default', models.BooleanField()), + ], + ), + ] diff --git a/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py b/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py deleted file mode 100644 index 42814b30..00000000 --- a/django_socio_grpc/tests/fakeapp/migrations/0013_unittestmodel_is_validated_and_more.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.8 on 2024-01-04 10:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('fakeapp', '0012_recursivetestmodel'), - ] - - operations = [ - migrations.AddField( - model_name='unittestmodel', - name='is_validated', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='unittestmodel', - name='some_default_counter', - field=models.IntegerField(default=50), - preserve_default=False, - ), - ] diff --git a/django_socio_grpc/tests/fakeapp/models.py b/django_socio_grpc/tests/fakeapp/models.py index b6f1fb16..1419ea5e 100644 --- a/django_socio_grpc/tests/fakeapp/models.py +++ b/django_socio_grpc/tests/fakeapp/models.py @@ -16,8 +16,6 @@ class UnitTestModel(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=20) text = models.CharField(max_length=100, null=True) - some_default_counter = models.IntegerField() - is_validated = models.BooleanField(default=False) class Meta: grpc_messages = { diff --git a/django_socio_grpc/tests/fakeapp/serializers.py b/django_socio_grpc/tests/fakeapp/serializers.py index 5d800e67..b55eda30 100644 --- a/django_socio_grpc/tests/fakeapp/serializers.py +++ b/django_socio_grpc/tests/fakeapp/serializers.py @@ -40,9 +40,6 @@ class Meta: class UnitTestModelSerializer(proto_serializers.ModelProtoSerializer): - some_default_counter = serializers.IntegerField(default=10) - is_validated = serializers.BooleanField(required=False) - class Meta: model = UnitTestModel proto_class = fakeapp_pb2.UnitTestModelResponse @@ -186,8 +183,6 @@ class BasicListProtoSerializer(proto_serializers.ListProtoSerializer): class BasicProtoListChildSerializer(proto_serializers.ModelProtoSerializer): - some_default_counter = serializers.IntegerField(default=10) - class Meta: model = UnitTestModel proto_class = fakeapp_pb2.BasicProtoListChildResponse diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 1d2b158c..7bc95210 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -162,10 +162,8 @@ message BasicParamWithSerializerRequestList { message BasicProtoListChild { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicProtoListChildList { @@ -406,10 +404,8 @@ message SyncUnitTestModelListWithExtraArgs { message UnitTestModel { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelDestroyRequest { @@ -436,11 +432,9 @@ message UnitTestModelListWithExtraArgs { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - repeated string _partial_update_fields = 4; - string title = 5; - optional string text = 6; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index 4c7f1bab..7825cf72 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -194,18 +194,14 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicProtoListChildResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicServiceListResponse { @@ -602,27 +598,21 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - repeated string _partial_update_fields = 4; - string title = 5; - optional string text = 6; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto index d691f0ce..37fc3322 100644 --- a/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/NO_MODEL_GENERATED/fakeapp.proto @@ -95,18 +95,14 @@ message BasicProtoListChildListResponse { message BasicProtoListChildRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicProtoListChildResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - string title = 3; - optional string text = 4; - optional bool is_validated = 5; + string title = 2; + optional string text = 3; } message BasicServiceListResponse { diff --git a/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto index 259c937d..9d2d782a 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_APP_MODEL_GENERATED_FROM_OLD_ORDER/fakeapp.proto @@ -39,27 +39,21 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - repeated string _partial_update_fields = 4; - string title = 5; - optional string text = 6; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelRequest { optional int32 id = 1; string title = 2; optional string text = 3; - optional int32 some_default_counter = 4; - optional bool is_validated = 5; } message UnitTestModelResponse { optional int32 id = 1; optional string text = 2; - optional int32 some_default_counter = 3; - optional bool is_validated = 4; - string title = 5; + string title = 3; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto index 55db0920..7fc26a02 100644 --- a/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto +++ b/django_socio_grpc/tests/protos/SIMPLE_MODEL_GENERATED/fakeapp.proto @@ -39,27 +39,21 @@ message UnitTestModelListWithExtraArgsRequest { message UnitTestModelPartialUpdateRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - repeated string _partial_update_fields = 4; - string title = 5; - optional string text = 6; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelRequest { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelResponse { optional int32 id = 1; - optional int32 some_default_counter = 2; - optional bool is_validated = 3; - string title = 4; - optional string text = 5; + string title = 2; + optional string text = 3; } message UnitTestModelRetrieveRequest { diff --git a/django_socio_grpc/tests/test_app_handler_registry.py b/django_socio_grpc/tests/test_app_handler_registry.py index 9eddc114..4c03e06a 100644 --- a/django_socio_grpc/tests/test_app_handler_registry.py +++ b/django_socio_grpc/tests/test_app_handler_registry.py @@ -17,7 +17,7 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text).save() def tearDown(self) -> None: RegistrySingleton.clean_all() diff --git a/django_socio_grpc/tests/test_async_model_service.py b/django_socio_grpc/tests/test_async_model_service.py index 4fa8a980..563cde7d 100644 --- a/django_socio_grpc/tests/test_async_model_service.py +++ b/django_socio_grpc/tests/test_async_model_service.py @@ -40,7 +40,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text).save() async def test_async_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) @@ -50,8 +50,6 @@ async def test_async_create(self): self.assertNotEqual(response.id, None) self.assertEqual(response.title, "fake") self.assertEqual(response.text, "text") - self.assertEqual(response.some_default_counter, 10) - self.assertEqual(response.is_validated, False) self.assertEqual(await sync_to_async(UnitTestModel.objects.count)(), 11) async def test_async_list(self): @@ -80,22 +78,6 @@ async def test_async_update(self): self.assertEqual(response.title, "newTitle") self.assertEqual(response.text, "newText") - self.assertEqual(response.some_default_counter, 10) - self.assertEqual(response.is_validated, False) - - # async def test_async_update_with_default_value(self): - # unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id - # grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) - # request = fakeapp_pb2.UnitTestModelRequest( - # id=unit_id, text="newText", is_validated=False, some_default_counter=0 - # ) - # # print(request.HasField("title")) - # response = await grpc_stub.Update(request=request) - - # self.assertEqual(response.title, "") - # self.assertEqual(response.text, "newText") - # self.assertEqual(response.some_default_counter, 0) - # self.assertEqual(response.is_validated, False) async def test_async_destroy(self): unit_id = (await sync_to_async(UnitTestModel.objects.first)()).id @@ -166,25 +148,15 @@ async def test_optional_field(self): # INFO - AM - 03/01/2023 - text is optional and can be null and is null so it's not send self.assertFalse(response.HasField("text")) - # INFO - AM - 03/01/2023 - some_default_counter is optional but can't be null because it has a default in serializer so it appear in the response - self.assertTrue(response.HasField("some_default_counter")) - # INFO - AM - 03/01/2023 - is_validated is optional but can't be null because it has a default in model so it appear in the response - self.assertTrue(response.HasField("is_validated")) request = fakeapp_pb2.UnitTestModelRetrieveRequest(id=response.id) response = await grpc_stub.Retrieve(request=request) # INFO - AM - 03/01/2023 - text is optional and can be null and is null so it's not send self.assertFalse(response.HasField("text")) - # INFO - AM - 03/01/2023 - some_default_counter is optional but can't be null because it has a default in serializer so it appear in the response - self.assertTrue(response.HasField("some_default_counter")) - # INFO - AM - 03/01/2023 - is_validated is optional but can't be null because it has a default in model so it appear in the response - self.assertTrue(response.HasField("is_validated")) instance = await UnitTestModel.objects.aget(id=response.id) assert instance.text is None - assert instance.some_default_counter == 10 - assert instance.is_validated is False @override_settings(GRPC_FRAMEWORK={"GRPC_ASYNC": True}) diff --git a/django_socio_grpc/tests/test_filtering_metadata.py b/django_socio_grpc/tests/test_filtering_metadata.py index d8900eeb..9f2f9a0f 100644 --- a/django_socio_grpc/tests/test_filtering_metadata.py +++ b/django_socio_grpc/tests/test_filtering_metadata.py @@ -18,9 +18,9 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text).save() - UnitTestModel(title="zzzz", text=text, some_default_counter=50).save() + UnitTestModel(title="zzzz", text=text).save() self.fake_grpc = FakeFullAIOGRPC( add_UnitTestModelControllerServicer_to_server, UnitTestModelService.as_servicer() ) diff --git a/django_socio_grpc/tests/test_pagination_metadata.py b/django_socio_grpc/tests/test_pagination_metadata.py index 952c1289..28b32609 100644 --- a/django_socio_grpc/tests/test_pagination_metadata.py +++ b/django_socio_grpc/tests/test_pagination_metadata.py @@ -32,7 +32,7 @@ def setUp(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text).save() self.fake_grpc = FakeFullAIOGRPC( add_UnitTestModelControllerServicer_to_server, UnitTestModelServiceWithDifferentPagination.as_servicer(), diff --git a/django_socio_grpc/tests/test_sync_model_service.py b/django_socio_grpc/tests/test_sync_model_service.py index 6ce44fe3..cbccd832 100644 --- a/django_socio_grpc/tests/test_sync_model_service.py +++ b/django_socio_grpc/tests/test_sync_model_service.py @@ -33,7 +33,7 @@ def create_instances(self): for idx in range(10): title = "z" * (idx + 1) text = chr(idx + ord("a")) + chr(idx + ord("b")) + chr(idx + ord("c")) - UnitTestModel(title=title, text=text, some_default_counter=50).save() + UnitTestModel(title=title, text=text).save() def test_create(self): grpc_stub = self.fake_grpc.get_fake_stub(UnitTestModelControllerStub) diff --git a/test_utils/generateproto.py b/test_utils/generateproto.py index d0dfbdbf..bb73fe14 100644 --- a/test_utils/generateproto.py +++ b/test_utils/generateproto.py @@ -11,7 +11,7 @@ from django_socio_grpc.tests.test_proto_generation import OVERRIDEN_SETTINGS # noqa E402 # INFO - AM - 29/12/2023 - Set this to true if you want to reorder proto order without having to delete the proto file. -override_fields_number = True +override_fields_number = False args = [] opts = {"override_fields_number": override_fields_number} From b9a6ce5a7cc5c9189e8cef9ec3ef60a008be3728 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Thu, 18 Jan 2024 13:05:38 +0100 Subject: [PATCH 18/19] rework doc --- docs/features/proto-serializers.rst | 39 +++++++++++++---------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/docs/features/proto-serializers.rst b/docs/features/proto-serializers.rst index aa7ab88e..1ff20a21 100644 --- a/docs/features/proto-serializers.rst +++ b/docs/features/proto-serializers.rst @@ -215,37 +215,34 @@ There are multiple ways to have proto fields with ``optional``: - In ``ModelProtoSerializer``, model fields with ``null=True`` will be converted to ``optional`` fields. - In ``GRPCAction`` you can set ``cardinality`` to ``optional`` in the `request` or `response` :func:`FieldDict `. +How the values are choosen by DSG when **values are not set in the message** (this behavior is possible only if field is optional and should be automatic depending of what you specified in your model or serializer but can be customized depending on your need): -If you want to use the default value of the model field use: +- If create or update, and the field has ``required=True``: Set to the default grpc value for the type ("" for string, 0 for int, False for boolean, ...) +- If create or update, and the field has ``required=True`` and a **default in the serializer field** : Set to None -.. code-block:: python - - # you can use any serializers field. BooleanField is only an example - is_validated = serializers.BooleanField(required=False) - - -If you want to set ``None`` as field value: +------ -.. code-block:: python - - # you can use any serializers field. Note that required=False will always be false if allow_null=True or blank=True - some_field = serializers.CharField(allow_null=True, required=False) +- If update, and the field has ``allow_null=True``: Set to None +- If create, and the field has ``allow_null=True`` and the field have a **default in the model**: Set to the model field default +- If create, and the field has ``allow_null=True`` and the field have a **default in the serializer**: Set to serializer field default +- If create, and the field has ``allow_null=True`` and the field haven't a **default in the model or the serializer**: Set to None -.. warning:: +------ - In a JS environment, when using :ref:`Google official JS protobuf compiler`, optional fields without presence (when the value has not been set) will always return their default value instead of undefined/null. +- If partial update, and the field is **not in the list of field to update**: delete the field +- If partial update, and the field is **in the list of field to update** and ``allow_null=True``: Set to None +- If partial update, and the field is **in the list of field to update** and the field have a ``default in the serializer``: Set to serializer field default +- If partial update, and the field is **in the list of field to update** and none of the above option: Set to the default grpc value for the type -If you want to set a specific default as field value: -.. code-block:: python +How the values are choosen by DSG when **values are set to default gRPC values**: - # you can use any serializers field. - some_field = serializers.CharField(default="default value") +- If create or update, and the field has ``required=True``: Use the default grpc value +- Else use same logic than value not set. -TODO: -string_default field.allow_null=False field.default= field.required=False field name in descriptor: True +.. note:: -when not allow_null but not required either with no default in the serializer (meaning default in models only) -> Not updated by default gRPC when using update without specified the field + To see real examples of this behavior please see `Model `_, `Serializer `_ and `Tests `_ ============================== Read-Only and Write-Only Props From 2716fed0b52550d80257cd2bc7dd6703c078c088 Mon Sep 17 00:00:00 2001 From: AMontagu Date: Mon, 11 Mar 2024 17:11:59 +0100 Subject: [PATCH 19/19] allow default to be a callable and review improvement --- django_socio_grpc/proto_serializers.py | 31 ++++---- django_socio_grpc/protobuf/json_format.py | 2 +- .../tests/fakeapp/grpc/fakeapp.proto | 12 ++-- .../tests/fakeapp/grpc/fakeapp_pb2.py | 70 ++++++++++++------- .../fakeapp.proto | 10 +-- .../ALL_APP_GENERATED_SEPARATE/fakeapp.proto | 12 ++-- test_utils/generateproto.py | 30 ++++---- 7 files changed, 94 insertions(+), 73 deletions(-) diff --git a/django_socio_grpc/proto_serializers.py b/django_socio_grpc/proto_serializers.py index 614549b5..5ce04503 100644 --- a/django_socio_grpc/proto_serializers.py +++ b/django_socio_grpc/proto_serializers.py @@ -28,6 +28,13 @@ LIST_PROTO_SERIALIZER_KWARGS = (*LIST_SERIALIZER_KWARGS, LIST_ATTR_MESSAGE_NAME, "message") +def get_default_value(field_default): + if callable(field_default): + return field_default() + else: + return field_default + + class BaseProtoSerializer(BaseSerializer): def __init__(self, *args, **kwargs): message = kwargs.pop("message", None) @@ -68,7 +75,9 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): code="missing_partial_message_attribute", ) - is_update_process = bool(data_dict.get(self.Meta.model._meta.pk.name, "")) + is_update_process = ( + hasattr(self.Meta, "model") and self.Meta.model._meta.pk.name in data_dict + ) for field in self.fields.values(): # INFO - AM - 04/01/2024 - If we are in a partial serializer we only need to have field specified in PARTIAL_UPDATE_FIELD_NAME attribute in the data. Meaning deleting fields that should not be here and not adding None to allow_null field that are not specified if self.partial and field.field_name not in data_dict.get( @@ -81,6 +90,7 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): if field.field_name in data_dict: continue + # INFO - AM - 04/01/2024 - if field is not in the data_dict but in PARTIAL_UPDATE_FIELD_NAME we need to set the default value if existing or raise exception to avoid having default grpc value by mistake if self.partial and field.field_name in data_dict.get( PARTIAL_UPDATE_FIELD_NAME, {} ): @@ -88,21 +98,14 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): data_dict[field.field_name] = None continue if field.default not in [None, empty]: - # TODO - AM - 12/01/2024 - is field.default a possible callable here ? - data_dict[field.field_name] = field.default + data_dict[field.field_name] = get_default_value(field.default) continue + # INFO - AM - 11/03/2024 - Here we set the default value especially for the blank authorized data. We debated about raising a ValidaitonError but prefered this behavior. Can be changed if it create issue with users data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[ field.field_name ].default_value - # INFO - AM - 12/01/2024 - if field name is not in data_dict but is required that mean that it's a default value deleted when transforming proto to dict - if field.required and field.field_name in message.DESCRIPTOR.fields_by_name: - data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[ - field.field_name - ].default_value - continue - if field.allow_null or (field.default in [None, empty] and field.required is True): if is_update_process: data_dict[field.field_name] = None @@ -119,14 +122,12 @@ def populate_dict_with_none_if_not_required(self, data_dict, message=None): ): deferred_attribute = getattr(self.Meta.model, field.field_name) if deferred_attribute.field.default != NOT_PROVIDED: - data_dict[field.field_name] = deferred_attribute.field.default + data_dict[field.field_name] = get_default_value( + deferred_attribute.field.default + ) continue data_dict[field.field_name] = None - continue - - # elif field.required and field.field_name in message.DESCRIPTOR.fields_by_name: - # data_dict[field.field_name] = message.DESCRIPTOR.fields_by_name[field.field_name].default_value return data_dict def data_to_message(self, data): diff --git a/django_socio_grpc/protobuf/json_format.py b/django_socio_grpc/protobuf/json_format.py index f58aaf21..535c7714 100644 --- a/django_socio_grpc/protobuf/json_format.py +++ b/django_socio_grpc/protobuf/json_format.py @@ -10,7 +10,7 @@ def message_to_dict(message, **kwargs): Uses the default `google.protobuf.json_format.MessageToDict` function. Adds None values for optional fields that are not set. """ - + kwargs.setdefault("including_default_value_fields", True) kwargs.setdefault("preserving_proto_field_name", True) return MessageToDict(message, **kwargs) diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto index 7825cf72..52c137d0 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto @@ -642,20 +642,20 @@ message UnitTestModelWithStructFilterListResponse { } message UnitTestModelWithStructFilterPartialUpdateRequest { - int32 id = 1; - string title = 2; - optional string text = 3; - repeated string _partial_update_fields = 4; + optional int32 id = 1; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelWithStructFilterRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; } message UnitTestModelWithStructFilterResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; } diff --git a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py index 9840e8f9..787fc967 100644 --- a/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py +++ b/django_socio_grpc/tests/fakeapp/grpc/fakeapp_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"_\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"`\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\t\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x07 \x03(\t\x12\x17\n\x0fstring_required\x18\x08 \x01(\t\x12\x19\n\x0cstring_blank\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\n \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x0b \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0c \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\r \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\x0e \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0f \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x10 \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x11 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x12 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x13 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x14 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x84\t\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x85\t\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\x86\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Y\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Z\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2django_socio_grpc/tests/fakeapp/grpc/fakeapp.proto\x12\x11myproject.fakeapp\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"k\n\x1c\x42\x61seProtoExampleListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.BaseProtoExampleResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"X\n\x17\x42\x61seProtoExampleRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"Y\n\x18\x42\x61seProtoExampleResponse\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x1a\n\x12number_of_elements\x18\x02 \x01(\x05\x12\x13\n\x0bis_archived\x18\x03 \x01(\x08\"1\n\x1c\x42\x61sicFetchDataForUserRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"/\n\x1f\x42\x61sicFetchTranslatedKeyResponse\x12\x0c\n\x04text\x18\x01 \x01(\t\"#\n\x14\x42\x61sicListIdsResponse\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"%\n\x15\x42\x61sicListNameResponse\x12\x0c\n\x04name\x18\x01 \x03(\t\"e\n\x19\x42\x61sicMixParamListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.BasicMixParamResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"*\n\x15\x42\x61sicMixParamResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"b\n\'BasicMixParamWithSerializerListResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.google.protobuf.Struct\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"y\n#BasicParamWithSerializerListRequest\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.BasicParamWithSerializerRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xbd\x01\n\x1f\x42\x61sicParamWithSerializerRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"o\n\x1e\x42\x61sicProtoListChildListRequest\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.BasicProtoListChildRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"q\n\x1f\x42\x61sicProtoListChildListResponse\x12?\n\x07results\x18\x01 \x03(\x0b\x32..myproject.fakeapp.BasicProtoListChildResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"_\n\x1a\x42\x61sicProtoListChildRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"`\n\x1b\x42\x61sicProtoListChildResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"c\n\x18\x42\x61sicServiceListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.BasicServiceResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\x01\n\x13\x42\x61sicServiceRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\ruser_password\x18\x03 \x01(\t\x12\x15\n\rbytes_example\x18\x04 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x05 \x03(\x0b\x32\x17.google.protobuf.Struct\"\x9b\x01\n\x14\x42\x61sicServiceResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\x12*\n\tuser_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x15\n\rbytes_example\x18\x03 \x01(\x0c\x12-\n\x0clist_of_dict\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\"k\n\x1c\x43ustomMixParamForListRequest\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.CustomMixParamForRequest\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"-\n\x18\x43ustomMixParamForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\")\n\x14\x43ustomNameForRequest\x12\x11\n\tuser_name\x18\x01 \x01(\t\"*\n\x15\x43ustomNameForResponse\x12\x11\n\tuser_name\x18\x01 \x01(\t\"\xc0\x01\n0CustomRetrieveResponseSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x64\x65\x66\x61ult_method_field\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x34\n\x13\x63ustom_method_field\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuidB\x17\n\x15_default_method_field\"(\n\x1a\x44\x65\x66\x61ultValueDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x19\n\x17\x44\x65\x66\x61ultValueListRequest\"c\n\x18\x44\x65\x66\x61ultValueListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.DefaultValueResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb1\t\n DefaultValuePartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x07 \x03(\t\x12\x17\n\x0fstring_required\x18\x08 \x01(\t\x12\x19\n\x0cstring_blank\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\n \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\x0b \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0c \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\r \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\x0e \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0f \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x10 \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x11 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x12 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x13 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x14 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x84\t\n\x13\x44\x65\x66\x61ultValueRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\"\x85\t\n\x14\x44\x65\x66\x61ultValueResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x33\n&string_required_but_serializer_default\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x30\n#int_required_but_serializer_default\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x34\n\'boolean_required_but_serializer_default\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\x32\n%string_default_but_serializer_default\x18\x05 \x01(\tH\x04\x88\x01\x01\x12;\n.string_nullable_default_but_serializer_default\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x17\n\x0fstring_required\x18\x07 \x01(\t\x12\x19\n\x0cstring_blank\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0fstring_nullable\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1b\n\x0estring_default\x18\n \x01(\tH\x08\x88\x01\x01\x12%\n\x18string_default_and_blank\x18\x0b \x01(\tH\t\x88\x01\x01\x12*\n\x1dstring_null_default_and_blank\x18\x0c \x01(\tH\n\x88\x01\x01\x12\x14\n\x0cint_required\x18\r \x01(\x05\x12\x19\n\x0cint_nullable\x18\x0e \x01(\x05H\x0b\x88\x01\x01\x12\x18\n\x0bint_default\x18\x0f \x01(\x05H\x0c\x88\x01\x01\x12\x18\n\x10\x62oolean_required\x18\x10 \x01(\x08\x12\x1d\n\x10\x62oolean_nullable\x18\x11 \x01(\x08H\r\x88\x01\x01\x12\"\n\x15\x62oolean_default_false\x18\x12 \x01(\x08H\x0e\x88\x01\x01\x12!\n\x14\x62oolean_default_true\x18\x13 \x01(\x08H\x0f\x88\x01\x01\x42\x05\n\x03_idB)\n\'_string_required_but_serializer_defaultB&\n$_int_required_but_serializer_defaultB*\n(_boolean_required_but_serializer_defaultB(\n&_string_default_but_serializer_defaultB1\n/_string_nullable_default_but_serializer_defaultB\x0f\n\r_string_blankB\x12\n\x10_string_nullableB\x11\n\x0f_string_defaultB\x1b\n\x19_string_default_and_blankB \n\x1e_string_null_default_and_blankB\x0f\n\r_int_nullableB\x0e\n\x0c_int_defaultB\x13\n\x11_boolean_nullableB\x18\n\x16_boolean_default_falseB\x17\n\x15_boolean_default_true\")\n\x1b\x44\x65\x66\x61ultValueRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"3\n%ExceptionStreamRaiseExceptionResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x19\n\x17\x46oreignModelListRequest\"c\n\x18\x46oreignModelListResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\'.myproject.fakeapp.ForeignModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"@\n\x14\x46oreignModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"R\n\"ForeignModelRetrieveCustomResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x06\x63ustom\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_custom\"9\n)ForeignModelRetrieveCustomRetrieveRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"q\n#ImportStructEvenInArrayModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"r\n$ImportStructEvenInArrayModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12.\n\rthis_is_crazy\x18\x02 \x03(\x0b\x32\x17.google.protobuf.StructB\x07\n\x05_uuid\"c\n\x14ManyManyModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12!\n\x19test_write_only_on_nested\x18\x03 \x01(\tB\x07\n\x05_uuid\"A\n\x15ManyManyModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04name\x18\x02 \x01(\tB\x07\n\x05_uuid\"0\n RecursiveTestModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dRecursiveTestModelListRequest\"o\n\x1eRecursiveTestModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xf2\x01\n&RecursiveTestModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x41\n\x06parent\x18\x03 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x04 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc5\x01\n\x19RecursiveTestModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x41\n\x06parent\x18\x02 \x01(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestH\x01\x88\x01\x01\x12>\n\x08\x63hildren\x18\x03 \x03(\x0b\x32,.myproject.fakeapp.RecursiveTestModelRequestB\x07\n\x05_uuidB\t\n\x07_parent\"\xc8\x01\n\x1aRecursiveTestModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x42\n\x06parent\x18\x02 \x01(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseH\x01\x88\x01\x01\x12?\n\x08\x63hildren\x18\x03 \x03(\x0b\x32-.myproject.fakeapp.RecursiveTestModelResponseB\x07\n\x05_uuidB\t\n\x07_parent\"1\n!RecursiveTestModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"/\n\x1fRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1e\n\x1cRelatedFieldModelListRequest\"|\n\x1dRelatedFieldModelListResponse\x12L\n\x16list_custom_field_name\x18\x01 \x03(\x0b\x32,.myproject.fakeapp.RelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xd6\x01\n%RelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1e\n\x16_partial_update_fields\x18\x04 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x05 \x03(\tB\x07\n\x05_uuid\"\xa9\x01\n\x18RelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\tmany_many\x18\x02 \x03(\x0b\x32\'.myproject.fakeapp.ManyManyModelRequest\x12\x19\n\x11\x63ustom_field_name\x18\x03 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\x04 \x03(\tB\x07\n\x05_uuid\"\xa5\x03\n\x19RelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12=\n\x07\x66oreign\x18\x02 \x01(\x0b\x32\'.myproject.fakeapp.ForeignModelResponseH\x01\x88\x01\x01\x12;\n\tmany_many\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.ManyManyModelResponse\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x17slug_reverse_test_model\x18\x05 \x03(\x08\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12%\n\x18proto_slug_related_field\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x19\n\x11\x63ustom_field_name\x18\x08 \x01(\t\x12\x1a\n\x12many_many_foreigns\x18\t \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_modelB\x1b\n\x19_proto_slug_related_field\"0\n RelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"5\n%SimpleRelatedFieldModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"$\n\"SimpleRelatedFieldModelListRequest\"y\n#SimpleRelatedFieldModelListResponse\x12\x43\n\x07results\x18\x01 \x03(\x0b\x32\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x84\x02\n+SimpleRelatedFieldModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x14\n\x07\x66oreign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x05 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x06 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x07 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd7\x01\n\x1eSimpleRelatedFieldModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"\xd8\x01\n\x1fSimpleRelatedFieldModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x66oreign\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fslug_test_model\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\tmany_many\x18\x04 \x03(\t\x12\x16\n\x0eslug_many_many\x18\x05 \x03(\t\x12\x1a\n\x12many_many_foreigns\x18\x06 \x03(\tB\x07\n\x05_uuidB\n\n\x08_foreignB\x12\n\x10_slug_test_model\"6\n&SimpleRelatedFieldModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"0\n SpecialFieldsModelDestroyRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"\x1f\n\x1dSpecialFieldsModelListRequest\"o\n\x1eSpecialFieldsModelListResponse\x12>\n\x07results\x18\x01 \x03(\x0b\x32-.myproject.fakeapp.SpecialFieldsModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\xb9\x01\n&SpecialFieldsModelPartialUpdateRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\x30\n\nmeta_datas\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x04 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\x8c\x01\n\x19SpecialFieldsModelRequest\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x42\x07\n\x05_uuidB\r\n\x0b_meta_datas\"\xad\x01\n\x1aSpecialFieldsModelResponse\x12\x11\n\x04uuid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x30\n\nmeta_datas\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\nlist_datas\x18\x03 \x03(\x05\x12\x13\n\x06\x62inary\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_uuidB\r\n\x0b_meta_datasB\t\n\x07_binary\"1\n!SpecialFieldsModelRetrieveRequest\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"k\n\x1cStreamInStreamInListResponse\x12<\n\x07results\x18\x01 \x03(\x0b\x32+.myproject.fakeapp.StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\'\n\x17StreamInStreamInRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\x18StreamInStreamInResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"-\n\x1dStreamInStreamToStreamRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\".\n\x1eStreamInStreamToStreamResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"=\n)SyncUnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\")\n\x1bUnitTestModelDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x8e\x01\n\"UnitTestModelListExtraArgsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x1e\n\x16query_fetched_datetime\x18\x02 \x01(\t\x12\x39\n\x07results\x18\x03 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\"\x1a\n\x18UnitTestModelListRequest\"e\n\x19UnitTestModelListResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.myproject.fakeapp.UnitTestModelResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"9\n%UnitTestModelListWithExtraArgsRequest\x12\x10\n\x08\x61rchived\x18\x01 \x01(\x08\"\x86\x01\n!UnitTestModelPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Y\n\x14UnitTestModelRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"Z\n\x15UnitTestModelResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"*\n\x1cUnitTestModelRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\x1c\n\x1aUnitTestModelStreamRequest\"9\n+UnitTestModelWithStructFilterDestroyRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"\xb5\x01\n3UnitTestModelWithStructFilterEmptyWithFilterRequest\x12.\n\x08_filters\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x31\n\x0b_pagination\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x0b\n\tX_filtersB\x0e\n\x0cX_pagination\"\xaa\x01\n(UnitTestModelWithStructFilterListRequest\x12.\n\x08_filters\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x31\n\x0b_pagination\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x0b\n\tX_filtersB\x0e\n\x0cX_pagination\"\x85\x01\n)UnitTestModelWithStructFilterListResponse\x12I\n\x07results\x18\x01 \x03(\x0b\x32\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x96\x01\n1UnitTestModelWithStructFilterPartialUpdateRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1e\n\x16_partial_update_fields\x18\x02 \x03(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x11\n\x04text\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"i\n$UnitTestModelWithStructFilterRequest\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\"j\n%UnitTestModelWithStructFilterResponse\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\r\n\x05title\x18\x02 \x01(\t\x12\x11\n\x04text\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_text\":\n,UnitTestModelWithStructFilterRetrieveRequest\x12\n\n\x02id\x18\x01 \x01(\x05\",\n*UnitTestModelWithStructFilterStreamRequest2\xca\t\n\x0f\x42\x61sicController\x12t\n\tBasicList\x12\x31.myproject.fakeapp.BasicProtoListChildListRequest\x1a\x32.myproject.fakeapp.BasicProtoListChildListResponse\"\x00\x12[\n\x06\x43reate\x12&.myproject.fakeapp.BasicServiceRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12n\n\x10\x46\x65tchDataForUser\x12/.myproject.fakeapp.BasicFetchDataForUserRequest\x1a\'.myproject.fakeapp.BasicServiceResponse\"\x00\x12\x62\n\x12\x46\x65tchTranslatedKey\x12\x16.google.protobuf.Empty\x1a\x32.myproject.fakeapp.BasicFetchTranslatedKeyResponse\"\x00\x12T\n\x0bGetMultiple\x12\x16.google.protobuf.Empty\x1a+.myproject.fakeapp.BasicServiceListResponse\"\x00\x12L\n\x07ListIds\x12\x16.google.protobuf.Empty\x1a\'.myproject.fakeapp.BasicListIdsResponse\"\x00\x12N\n\x08ListName\x12\x16.google.protobuf.Empty\x1a(.myproject.fakeapp.BasicListNameResponse\"\x00\x12k\n\x08MixParam\x12/.myproject.fakeapp.CustomMixParamForListRequest\x1a,.myproject.fakeapp.BasicMixParamListResponse\"\x00\x12\x8e\x01\n\x16MixParamWithSerializer\x12\x36.myproject.fakeapp.BasicParamWithSerializerListRequest\x1a:.myproject.fakeapp.BasicMixParamWithSerializerListResponse\"\x00\x12_\n\x08MyMethod\x12\'.myproject.fakeapp.CustomNameForRequest\x1a(.myproject.fakeapp.CustomNameForResponse\"\x00\x12x\n\x17TestBaseProtoSerializer\x12*.myproject.fakeapp.BaseProtoExampleRequest\x1a/.myproject.fakeapp.BaseProtoExampleListResponse\"\x00\x12\x43\n\x0fTestEmptyMethod\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xe1\x04\n\x16\x44\x65\x66\x61ultValueController\x12[\n\x06\x43reate\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12R\n\x07\x44\x65stroy\x12-.myproject.fakeapp.DefaultValueDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x04List\x12*.myproject.fakeapp.DefaultValueListRequest\x1a+.myproject.fakeapp.DefaultValueListResponse\"\x00\x12o\n\rPartialUpdate\x12\x33.myproject.fakeapp.DefaultValuePartialUpdateRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12\x65\n\x08Retrieve\x12..myproject.fakeapp.DefaultValueRetrieveRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x12[\n\x06Update\x12&.myproject.fakeapp.DefaultValueRequest\x1a\'.myproject.fakeapp.DefaultValueResponse\"\x00\x32\xd1\x02\n\x13\x45xceptionController\x12@\n\x0c\x41PIException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\rGRPCException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x14StreamRaiseException\x12\x16.google.protobuf.Empty\x1a\x38.myproject.fakeapp.ExceptionStreamRaiseExceptionResponse\"\x00\x30\x01\x12G\n\x13UnaryRaiseException\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x32\xff\x01\n\x16\x46oreignModelController\x12\x61\n\x04List\x12*.myproject.fakeapp.ForeignModelListRequest\x1a+.myproject.fakeapp.ForeignModelListResponse\"\x00\x12\x81\x01\n\x08Retrieve\x12<.myproject.fakeapp.ForeignModelRetrieveCustomRetrieveRequest\x1a\x35.myproject.fakeapp.ForeignModelRetrieveCustomResponse\"\x00\x32\xa5\x01\n&ImportStructEvenInArrayModelController\x12{\n\x06\x43reate\x12\x36.myproject.fakeapp.ImportStructEvenInArrayModelRequest\x1a\x37.myproject.fakeapp.ImportStructEvenInArrayModelResponse\"\x00\x32\xa9\x05\n\x1cRecursiveTestModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.RecursiveTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.RecursiveTestModelListRequest\x1a\x31.myproject.fakeapp.RecursiveTestModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.RecursiveTestModelPartialUpdateRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12q\n\x08Retrieve\x12\x34.myproject.fakeapp.RecursiveTestModelRetrieveRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.RecursiveTestModelRequest\x1a-.myproject.fakeapp.RecursiveTestModelResponse\"\x00\x32\x9d\x05\n\x1bRelatedFieldModelController\x12\x65\n\x06\x43reate\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12W\n\x07\x44\x65stroy\x12\x32.myproject.fakeapp.RelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12k\n\x04List\x12/.myproject.fakeapp.RelatedFieldModelListRequest\x1a\x30.myproject.fakeapp.RelatedFieldModelListResponse\"\x00\x12y\n\rPartialUpdate\x12\x38.myproject.fakeapp.RelatedFieldModelPartialUpdateRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12o\n\x08Retrieve\x12\x33.myproject.fakeapp.RelatedFieldModelRetrieveRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x12\x65\n\x06Update\x12+.myproject.fakeapp.RelatedFieldModelRequest\x1a,.myproject.fakeapp.RelatedFieldModelResponse\"\x00\x32\xe6\x05\n!SimpleRelatedFieldModelController\x12q\n\x06\x43reate\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12]\n\x07\x44\x65stroy\x12\x38.myproject.fakeapp.SimpleRelatedFieldModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12w\n\x04List\x12\x35.myproject.fakeapp.SimpleRelatedFieldModelListRequest\x1a\x36.myproject.fakeapp.SimpleRelatedFieldModelListResponse\"\x00\x12\x85\x01\n\rPartialUpdate\x12>.myproject.fakeapp.SimpleRelatedFieldModelPartialUpdateRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12{\n\x08Retrieve\x12\x39.myproject.fakeapp.SimpleRelatedFieldModelRetrieveRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x12q\n\x06Update\x12\x31.myproject.fakeapp.SimpleRelatedFieldModelRequest\x1a\x32.myproject.fakeapp.SimpleRelatedFieldModelResponse\"\x00\x32\xc0\x05\n\x1cSpecialFieldsModelController\x12g\n\x06\x43reate\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12X\n\x07\x44\x65stroy\x12\x33.myproject.fakeapp.SpecialFieldsModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x04List\x12\x30.myproject.fakeapp.SpecialFieldsModelListRequest\x1a\x31.myproject.fakeapp.SpecialFieldsModelListResponse\"\x00\x12{\n\rPartialUpdate\x12\x39.myproject.fakeapp.SpecialFieldsModelPartialUpdateRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12\x34.myproject.fakeapp.SpecialFieldsModelRetrieveRequest\x1a\x43.myproject.fakeapp.CustomRetrieveResponseSpecialFieldsModelResponse\"\x00\x12g\n\x06Update\x12,.myproject.fakeapp.SpecialFieldsModelRequest\x1a-.myproject.fakeapp.SpecialFieldsModelResponse\"\x00\x32\xfe\x01\n\x12StreamInController\x12k\n\x08StreamIn\x12*.myproject.fakeapp.StreamInStreamInRequest\x1a/.myproject.fakeapp.StreamInStreamInListResponse\"\x00(\x01\x12{\n\x0eStreamToStream\x12\x30.myproject.fakeapp.StreamInStreamToStreamRequest\x1a\x31.myproject.fakeapp.StreamInStreamToStreamResponse\"\x00(\x01\x30\x01\x32\xe5\x06\n\x1bSyncUnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x8a\x01\n\x11ListWithExtraArgs\x12<.myproject.fakeapp.SyncUnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xdd\x06\n\x17UnitTestModelController\x12]\n\x06\x43reate\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12S\n\x07\x44\x65stroy\x12..myproject.fakeapp.UnitTestModelDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x04List\x12+.myproject.fakeapp.UnitTestModelListRequest\x1a,.myproject.fakeapp.UnitTestModelListResponse\"\x00\x12\x86\x01\n\x11ListWithExtraArgs\x12\x38.myproject.fakeapp.UnitTestModelListWithExtraArgsRequest\x1a\x35.myproject.fakeapp.UnitTestModelListExtraArgsResponse\"\x00\x12q\n\rPartialUpdate\x12\x34.myproject.fakeapp.UnitTestModelPartialUpdateRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12g\n\x08Retrieve\x12/.myproject.fakeapp.UnitTestModelRetrieveRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x12\x65\n\x06Stream\x12-.myproject.fakeapp.UnitTestModelStreamRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x30\x01\x12]\n\x06Update\x12\'.myproject.fakeapp.UnitTestModelRequest\x1a(.myproject.fakeapp.UnitTestModelResponse\"\x00\x32\xad\x08\n\'UnitTestModelWithStructFilterController\x12}\n\x06\x43reate\x12\x37.myproject.fakeapp.UnitTestModelWithStructFilterRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x63\n\x07\x44\x65stroy\x12>.myproject.fakeapp.UnitTestModelWithStructFilterDestroyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12s\n\x0f\x45mptyWithFilter\x12\x46.myproject.fakeapp.UnitTestModelWithStructFilterEmptyWithFilterRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x83\x01\n\x04List\x12;.myproject.fakeapp.UnitTestModelWithStructFilterListRequest\x1a<.myproject.fakeapp.UnitTestModelWithStructFilterListResponse\"\x00\x12\x91\x01\n\rPartialUpdate\x12\x44.myproject.fakeapp.UnitTestModelWithStructFilterPartialUpdateRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x87\x01\n\x08Retrieve\x12?.myproject.fakeapp.UnitTestModelWithStructFilterRetrieveRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x12\x85\x01\n\x06Stream\x12=.myproject.fakeapp.UnitTestModelWithStructFilterStreamRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x30\x01\x12}\n\x06Update\x12\x37.myproject.fakeapp.UnitTestModelWithStructFilterRequest\x1a\x38.myproject.fakeapp.UnitTestModelWithStructFilterResponse\"\x00\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -193,28 +193,48 @@ _globals['_UNITTESTMODELRETRIEVEREQUEST']._serialized_end=11767 _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_start=11769 _globals['_UNITTESTMODELSTREAMREQUEST']._serialized_end=11797 - _globals['_BASICCONTROLLER']._serialized_start=11800 - _globals['_BASICCONTROLLER']._serialized_end=13026 - _globals['_DEFAULTVALUECONTROLLER']._serialized_start=13029 - _globals['_DEFAULTVALUECONTROLLER']._serialized_end=13638 - _globals['_EXCEPTIONCONTROLLER']._serialized_start=13641 - _globals['_EXCEPTIONCONTROLLER']._serialized_end=13978 - _globals['_FOREIGNMODELCONTROLLER']._serialized_start=13981 - _globals['_FOREIGNMODELCONTROLLER']._serialized_end=14236 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=14239 - _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=14404 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=14407 - _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=15088 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=15091 - _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=15760 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=15763 - _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=16505 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=16508 - _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=17212 - _globals['_STREAMINCONTROLLER']._serialized_start=17215 - _globals['_STREAMINCONTROLLER']._serialized_end=17469 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=17472 - _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=18341 - _globals['_UNITTESTMODELCONTROLLER']._serialized_start=18344 - _globals['_UNITTESTMODELCONTROLLER']._serialized_end=19205 + _globals['_UNITTESTMODELWITHSTRUCTFILTERDESTROYREQUEST']._serialized_start=11799 + _globals['_UNITTESTMODELWITHSTRUCTFILTERDESTROYREQUEST']._serialized_end=11856 + _globals['_UNITTESTMODELWITHSTRUCTFILTEREMPTYWITHFILTERREQUEST']._serialized_start=11859 + _globals['_UNITTESTMODELWITHSTRUCTFILTEREMPTYWITHFILTERREQUEST']._serialized_end=12040 + _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTREQUEST']._serialized_start=12043 + _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTREQUEST']._serialized_end=12213 + _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTRESPONSE']._serialized_start=12216 + _globals['_UNITTESTMODELWITHSTRUCTFILTERLISTRESPONSE']._serialized_end=12349 + _globals['_UNITTESTMODELWITHSTRUCTFILTERPARTIALUPDATEREQUEST']._serialized_start=12352 + _globals['_UNITTESTMODELWITHSTRUCTFILTERPARTIALUPDATEREQUEST']._serialized_end=12502 + _globals['_UNITTESTMODELWITHSTRUCTFILTERREQUEST']._serialized_start=12504 + _globals['_UNITTESTMODELWITHSTRUCTFILTERREQUEST']._serialized_end=12609 + _globals['_UNITTESTMODELWITHSTRUCTFILTERRESPONSE']._serialized_start=12611 + _globals['_UNITTESTMODELWITHSTRUCTFILTERRESPONSE']._serialized_end=12717 + _globals['_UNITTESTMODELWITHSTRUCTFILTERRETRIEVEREQUEST']._serialized_start=12719 + _globals['_UNITTESTMODELWITHSTRUCTFILTERRETRIEVEREQUEST']._serialized_end=12777 + _globals['_UNITTESTMODELWITHSTRUCTFILTERSTREAMREQUEST']._serialized_start=12779 + _globals['_UNITTESTMODELWITHSTRUCTFILTERSTREAMREQUEST']._serialized_end=12823 + _globals['_BASICCONTROLLER']._serialized_start=12826 + _globals['_BASICCONTROLLER']._serialized_end=14052 + _globals['_DEFAULTVALUECONTROLLER']._serialized_start=14055 + _globals['_DEFAULTVALUECONTROLLER']._serialized_end=14664 + _globals['_EXCEPTIONCONTROLLER']._serialized_start=14667 + _globals['_EXCEPTIONCONTROLLER']._serialized_end=15004 + _globals['_FOREIGNMODELCONTROLLER']._serialized_start=15007 + _globals['_FOREIGNMODELCONTROLLER']._serialized_end=15262 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_start=15265 + _globals['_IMPORTSTRUCTEVENINARRAYMODELCONTROLLER']._serialized_end=15430 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_start=15433 + _globals['_RECURSIVETESTMODELCONTROLLER']._serialized_end=16114 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_start=16117 + _globals['_RELATEDFIELDMODELCONTROLLER']._serialized_end=16786 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_start=16789 + _globals['_SIMPLERELATEDFIELDMODELCONTROLLER']._serialized_end=17531 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_start=17534 + _globals['_SPECIALFIELDSMODELCONTROLLER']._serialized_end=18238 + _globals['_STREAMINCONTROLLER']._serialized_start=18241 + _globals['_STREAMINCONTROLLER']._serialized_end=18495 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_start=18498 + _globals['_SYNCUNITTESTMODELCONTROLLER']._serialized_end=19367 + _globals['_UNITTESTMODELCONTROLLER']._serialized_start=19370 + _globals['_UNITTESTMODELCONTROLLER']._serialized_end=20231 + _globals['_UNITTESTMODELWITHSTRUCTFILTERCONTROLLER']._serialized_start=20234 + _globals['_UNITTESTMODELWITHSTRUCTFILTERCONTROLLER']._serialized_end=21303 # @@protoc_insertion_point(module_scope) diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto index 7bc95210..648c296b 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_NO_SEPARATE/fakeapp.proto @@ -445,7 +445,7 @@ message UnitTestModelStreamRequest { } message UnitTestModelWithStructFilter { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; } @@ -465,10 +465,10 @@ message UnitTestModelWithStructFilterList { } message UnitTestModelWithStructFilterPartialUpdateRequest { - int32 id = 1; - string title = 2; - optional string text = 3; - repeated string _partial_update_fields = 4; + optional int32 id = 1; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelWithStructFilterRetrieveRequest { diff --git a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto index 7825cf72..52c137d0 100644 --- a/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto +++ b/django_socio_grpc/tests/protos/ALL_APP_GENERATED_SEPARATE/fakeapp.proto @@ -642,20 +642,20 @@ message UnitTestModelWithStructFilterListResponse { } message UnitTestModelWithStructFilterPartialUpdateRequest { - int32 id = 1; - string title = 2; - optional string text = 3; - repeated string _partial_update_fields = 4; + optional int32 id = 1; + repeated string _partial_update_fields = 2; + string title = 3; + optional string text = 4; } message UnitTestModelWithStructFilterRequest { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; } message UnitTestModelWithStructFilterResponse { - int32 id = 1; + optional int32 id = 1; string title = 2; optional string text = 3; } diff --git a/test_utils/generateproto.py b/test_utils/generateproto.py index bb73fe14..b7e9a46b 100644 --- a/test_utils/generateproto.py +++ b/test_utils/generateproto.py @@ -18,18 +18,18 @@ call_command("generateproto", *args, **opts) # INFO - AM - 29/12/2023 - This for loop is used to generate proto file used in proto tests to avoid changing them by hand -# for name, grpc_settings in OVERRIDEN_SETTINGS.items(): -# RegistrySingleton.clean_all() -# settings = {} -# if grpc_settings: -# settings = { -# "GRPC_FRAMEWORK": grpc_settings, -# } -# with override_settings(**settings): -# call_command( -# "generateproto", -# no_generate_pb2=True, -# directory=f"./django_socio_grpc/tests/protos/{name}", -# project="myproject", -# override_fields_number=override_fields_number, -# ) +for name, grpc_settings in OVERRIDEN_SETTINGS.items(): + RegistrySingleton.clean_all() + settings = {} + if grpc_settings: + settings = { + "GRPC_FRAMEWORK": grpc_settings, + } + with override_settings(**settings): + call_command( + "generateproto", + no_generate_pb2=True, + directory=f"./django_socio_grpc/tests/protos/{name}", + project="myproject", + override_fields_number=override_fields_number, + )