Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/google/protobuf/reflection.py: 62%

13 statements  

« prev     ^ index     » next       coverage.py v7.2.2, created at 2023-03-26 06:25 +0000

1# Protocol Buffers - Google's data interchange format 

2# Copyright 2008 Google Inc. All rights reserved. 

3# https://developers.google.com/protocol-buffers/ 

4# 

5# Redistribution and use in source and binary forms, with or without 

6# modification, are permitted provided that the following conditions are 

7# met: 

8# 

9# * Redistributions of source code must retain the above copyright 

10# notice, this list of conditions and the following disclaimer. 

11# * Redistributions in binary form must reproduce the above 

12# copyright notice, this list of conditions and the following disclaimer 

13# in the documentation and/or other materials provided with the 

14# distribution. 

15# * Neither the name of Google Inc. nor the names of its 

16# contributors may be used to endorse or promote products derived from 

17# this software without specific prior written permission. 

18# 

19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 

20# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 

21# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 

22# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 

23# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 

24# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 

25# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 

26# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 

27# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 

28# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 

29# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

30 

31# This code is meant to work on Python 2.4 and above only. 

32 

33"""Contains a metaclass and helper functions used to create 

34protocol message classes from Descriptor objects at runtime. 

35 

36Recall that a metaclass is the "type" of a class. 

37(A class is to a metaclass what an instance is to a class.) 

38 

39In this case, we use the GeneratedProtocolMessageType metaclass 

40to inject all the useful functionality into the classes 

41output by the protocol compiler at compile-time. 

42 

43The upshot of all this is that the real implementation 

44details for ALL pure-Python protocol buffers are *here in 

45this file*. 

46""" 

47 

48__author__ = 'robinson@google.com (Will Robinson)' 

49 

50 

51from google.protobuf import message_factory 

52from google.protobuf import symbol_database 

53 

54# The type of all Message classes. 

55# Part of the public interface, but normally only used by message factories. 

56GeneratedProtocolMessageType = message_factory._GENERATED_PROTOCOL_MESSAGE_TYPE 

57 

58MESSAGE_CLASS_CACHE = {} 

59 

60 

61# Deprecated. Please NEVER use reflection.ParseMessage(). 

62def ParseMessage(descriptor, byte_str): 

63 """Generate a new Message instance from this Descriptor and a byte string. 

64 

65 DEPRECATED: ParseMessage is deprecated because it is using MakeClass(). 

66 Please use MessageFactory.GetPrototype() instead. 

67 

68 Args: 

69 descriptor: Protobuf Descriptor object 

70 byte_str: Serialized protocol buffer byte string 

71 

72 Returns: 

73 Newly created protobuf Message object. 

74 """ 

75 result_class = MakeClass(descriptor) 

76 new_msg = result_class() 

77 new_msg.ParseFromString(byte_str) 

78 return new_msg 

79 

80 

81# Deprecated. Please NEVER use reflection.MakeClass(). 

82def MakeClass(descriptor): 

83 """Construct a class object for a protobuf described by descriptor. 

84 

85 DEPRECATED: use MessageFactory.GetPrototype() instead. 

86 

87 Args: 

88 descriptor: A descriptor.Descriptor object describing the protobuf. 

89 Returns: 

90 The Message class object described by the descriptor. 

91 """ 

92 # Original implementation leads to duplicate message classes, which won't play 

93 # well with extensions. Message factory info is also missing. 

94 # Redirect to message_factory. 

95 return message_factory.GetMessageClass(descriptor)