| OLD | NEW |
| 1 # Protocol Buffers - Google's data interchange format | 1 # Protocol Buffers - Google's data interchange format |
| 2 # Copyright 2008 Google Inc. All rights reserved. | 2 # Copyright 2008 Google Inc. All rights reserved. |
| 3 # https://developers.google.com/protocol-buffers/ | 3 # https://developers.google.com/protocol-buffers/ |
| 4 # | 4 # |
| 5 # Redistribution and use in source and binary forms, with or without | 5 # Redistribution and use in source and binary forms, with or without |
| 6 # modification, are permitted provided that the following conditions are | 6 # modification, are permitted provided that the following conditions are |
| 7 # met: | 7 # met: |
| 8 # | 8 # |
| 9 # * Redistributions of source code must retain the above copyright | 9 # * Redistributions of source code must retain the above copyright |
| 10 # notice, this list of conditions and the following disclaimer. | 10 # notice, this list of conditions and the following disclaimer. |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 if file_proto.package: | 387 if file_proto.package: |
| 388 desc_proto_prefix = _PrefixWithDot(file_proto.package) | 388 desc_proto_prefix = _PrefixWithDot(file_proto.package) |
| 389 else: | 389 else: |
| 390 desc_proto_prefix = '' | 390 desc_proto_prefix = '' |
| 391 | 391 |
| 392 for desc_proto in file_proto.message_type: | 392 for desc_proto in file_proto.message_type: |
| 393 desc = self._GetTypeFromScope( | 393 desc = self._GetTypeFromScope( |
| 394 desc_proto_prefix, desc_proto.name, scope) | 394 desc_proto_prefix, desc_proto.name, scope) |
| 395 file_descriptor.message_types_by_name[desc_proto.name] = desc | 395 file_descriptor.message_types_by_name[desc_proto.name] = desc |
| 396 | 396 |
| 397 for index, service_proto in enumerate(file_proto.service): |
| 398 file_descriptor.services_by_name[service_proto.name] = ( |
| 399 self._MakeServiceDescriptor(service_proto, index, scope, |
| 400 file_proto.package, file_descriptor)) |
| 401 |
| 397 self.Add(file_proto) | 402 self.Add(file_proto) |
| 398 self._file_descriptors[file_proto.name] = file_descriptor | 403 self._file_descriptors[file_proto.name] = file_descriptor |
| 399 | 404 |
| 400 return self._file_descriptors[file_proto.name] | 405 return self._file_descriptors[file_proto.name] |
| 401 | 406 |
| 402 def _ConvertMessageDescriptor(self, desc_proto, package=None, file_desc=None, | 407 def _ConvertMessageDescriptor(self, desc_proto, package=None, file_desc=None, |
| 403 scope=None, syntax=None): | 408 scope=None, syntax=None): |
| 404 """Adds the proto to the pool in the specified package. | 409 """Adds the proto to the pool in the specified package. |
| 405 | 410 |
| 406 Args: | 411 Args: |
| (...skipping 27 matching lines...) Expand all Loading... |
| 434 self._ConvertEnumDescriptor(enum, desc_name, file_desc, None, scope) | 439 self._ConvertEnumDescriptor(enum, desc_name, file_desc, None, scope) |
| 435 for enum in desc_proto.enum_type] | 440 for enum in desc_proto.enum_type] |
| 436 fields = [self._MakeFieldDescriptor(field, desc_name, index) | 441 fields = [self._MakeFieldDescriptor(field, desc_name, index) |
| 437 for index, field in enumerate(desc_proto.field)] | 442 for index, field in enumerate(desc_proto.field)] |
| 438 extensions = [ | 443 extensions = [ |
| 439 self._MakeFieldDescriptor(extension, desc_name, index, | 444 self._MakeFieldDescriptor(extension, desc_name, index, |
| 440 is_extension=True) | 445 is_extension=True) |
| 441 for index, extension in enumerate(desc_proto.extension)] | 446 for index, extension in enumerate(desc_proto.extension)] |
| 442 oneofs = [ | 447 oneofs = [ |
| 443 descriptor.OneofDescriptor(desc.name, '.'.join((desc_name, desc.name)), | 448 descriptor.OneofDescriptor(desc.name, '.'.join((desc_name, desc.name)), |
| 444 index, None, []) | 449 index, None, [], desc.options) |
| 445 for index, desc in enumerate(desc_proto.oneof_decl)] | 450 for index, desc in enumerate(desc_proto.oneof_decl)] |
| 446 extension_ranges = [(r.start, r.end) for r in desc_proto.extension_range] | 451 extension_ranges = [(r.start, r.end) for r in desc_proto.extension_range] |
| 447 if extension_ranges: | 452 if extension_ranges: |
| 448 is_extendable = True | 453 is_extendable = True |
| 449 else: | 454 else: |
| 450 is_extendable = False | 455 is_extendable = False |
| 451 desc = descriptor.Descriptor( | 456 desc = descriptor.Descriptor( |
| 452 name=desc_proto.name, | 457 name=desc_proto.name, |
| 453 full_name=desc_name, | 458 full_name=desc_name, |
| 454 filename=file_name, | 459 filename=file_name, |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 An initialized EnumValueDescriptor object. | 677 An initialized EnumValueDescriptor object. |
| 673 """ | 678 """ |
| 674 | 679 |
| 675 return descriptor.EnumValueDescriptor( | 680 return descriptor.EnumValueDescriptor( |
| 676 name=value_proto.name, | 681 name=value_proto.name, |
| 677 index=index, | 682 index=index, |
| 678 number=value_proto.number, | 683 number=value_proto.number, |
| 679 options=value_proto.options, | 684 options=value_proto.options, |
| 680 type=None) | 685 type=None) |
| 681 | 686 |
| 687 def _MakeServiceDescriptor(self, service_proto, service_index, scope, |
| 688 package, file_desc): |
| 689 """Make a protobuf ServiceDescriptor given a ServiceDescriptorProto. |
| 690 |
| 691 Args: |
| 692 service_proto: The descriptor_pb2.ServiceDescriptorProto protobuf message. |
| 693 service_index: The index of the service in the File. |
| 694 scope: Dict mapping short and full symbols to message and enum types. |
| 695 package: Optional package name for the new message EnumDescriptor. |
| 696 file_desc: The file containing the service descriptor. |
| 697 |
| 698 Returns: |
| 699 The added descriptor. |
| 700 """ |
| 701 |
| 702 if package: |
| 703 service_name = '.'.join((package, service_proto.name)) |
| 704 else: |
| 705 service_name = service_proto.name |
| 706 |
| 707 methods = [self._MakeMethodDescriptor(method_proto, service_name, package, |
| 708 scope, index) |
| 709 for index, method_proto in enumerate(service_proto.method)] |
| 710 desc = descriptor.ServiceDescriptor(name=service_proto.name, |
| 711 full_name=service_name, |
| 712 index=service_index, |
| 713 methods=methods, |
| 714 options=service_proto.options, |
| 715 file=file_desc) |
| 716 return desc |
| 717 |
| 718 def _MakeMethodDescriptor(self, method_proto, service_name, package, scope, |
| 719 index): |
| 720 """Creates a method descriptor from a MethodDescriptorProto. |
| 721 |
| 722 Args: |
| 723 method_proto: The proto describing the method. |
| 724 service_name: The name of the containing service. |
| 725 package: Optional package name to look up for types. |
| 726 scope: Scope containing available types. |
| 727 index: Index of the method in the service. |
| 728 |
| 729 Returns: |
| 730 An initialized MethodDescriptor object. |
| 731 """ |
| 732 full_name = '.'.join((service_name, method_proto.name)) |
| 733 input_type = self._GetTypeFromScope( |
| 734 package, method_proto.input_type, scope) |
| 735 output_type = self._GetTypeFromScope( |
| 736 package, method_proto.output_type, scope) |
| 737 return descriptor.MethodDescriptor(name=method_proto.name, |
| 738 full_name=full_name, |
| 739 index=index, |
| 740 containing_service=None, |
| 741 input_type=input_type, |
| 742 output_type=output_type, |
| 743 options=method_proto.options) |
| 744 |
| 682 def _ExtractSymbols(self, descriptors): | 745 def _ExtractSymbols(self, descriptors): |
| 683 """Pulls out all the symbols from descriptor protos. | 746 """Pulls out all the symbols from descriptor protos. |
| 684 | 747 |
| 685 Args: | 748 Args: |
| 686 descriptors: The messages to extract descriptors from. | 749 descriptors: The messages to extract descriptors from. |
| 687 Yields: | 750 Yields: |
| 688 A two element tuple of the type name and descriptor object. | 751 A two element tuple of the type name and descriptor object. |
| 689 """ | 752 """ |
| 690 | 753 |
| 691 for desc in descriptors: | 754 for desc in descriptors: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 # TODO(amauryfa): This pool could be constructed from Python code, when we | 805 # TODO(amauryfa): This pool could be constructed from Python code, when we |
| 743 # support a flag like 'use_cpp_generated_pool=True'. | 806 # support a flag like 'use_cpp_generated_pool=True'. |
| 744 # pylint: disable=protected-access | 807 # pylint: disable=protected-access |
| 745 _DEFAULT = descriptor._message.default_pool | 808 _DEFAULT = descriptor._message.default_pool |
| 746 else: | 809 else: |
| 747 _DEFAULT = DescriptorPool() | 810 _DEFAULT = DescriptorPool() |
| 748 | 811 |
| 749 | 812 |
| 750 def Default(): | 813 def Default(): |
| 751 return _DEFAULT | 814 return _DEFAULT |
| OLD | NEW |