1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
U
£ý°dâã@sTdZddlmZddlmZddlmZGdd„dejƒZee ¡dZ    dd    „Zd
S) aSA database of Python protocol buffer generated symbols.
 
SymbolDatabase is the MessageFactory for messages generated at compile time,
and makes it easy to create new instances of a registered type, given only the
type's protocol buffer symbol name.
 
Example usage::
 
  db = symbol_database.SymbolDatabase()
 
  # Register symbols of interest, from one or multiple files.
  db.RegisterFileDescriptor(my_proto_pb2.DESCRIPTOR)
  db.RegisterMessage(my_proto_pb2.MyMessage)
  db.RegisterEnumDescriptor(my_proto_pb2.MyEnum.DESCRIPTOR)
 
  # The database can be used as a MessageFactory, to generate types based on
  # their name:
  types = db.GetMessages(['my_proto.proto'])
  my_message_instance = types['MyMessage']()
 
  # The database's underlying descriptor pool can be queried, so it's not
  # necessary to know a type's filename to be able to generate it:
  filename = db.pool.FindFileContainingSymbol('MyMessage')
  my_message_instance = db.GetMessages([filename])['MyMessage']()
 
  # This functionality is also provided directly via a convenience method:
  my_message_instance = db.GetSymbol('MyMessage')()
é)Úapi_implementation)Údescriptor_pool)Úmessage_factoryc@sHeZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dS)ÚSymbolDatabasez'A database of Python generated symbols.cCs|j}||j|<| |¡|S)a@Registers the given message type in the local database.
 
    Calls to GetSymbol() and GetMessages() will return messages registered here.
 
    Args:
      message: A :class:`google.protobuf.message.Message` subclass (or
        instance); its descriptor will be registered.
 
    Returns:
      The provided message.
    )Z
DESCRIPTORÚ_classesÚRegisterMessageDescriptor)ÚselfÚmessageÚdesc©r úVd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\google/protobuf/symbol_database.pyÚRegisterMessageEs 
 
zSymbolDatabase.RegisterMessagecCst ¡dkr|j |¡dS)z“Registers the given message descriptor in the local database.
 
    Args:
      message_descriptor (Descriptor): the message descriptor to add.
    ÚpythonN)rÚTypeÚpoolZ_AddDescriptor)rZmessage_descriptorr r r rWs z(SymbolDatabase.RegisterMessageDescriptorcCst ¡dkr|j |¡|S)zÐRegisters the given enum descriptor in the local database.
 
    Args:
      enum_descriptor (EnumDescriptor): The enum descriptor to register.
 
    Returns:
      EnumDescriptor: The provided descriptor.
    r)rrrZ_AddEnumDescriptor)rZenum_descriptorr r r ÚRegisterEnumDescriptoras      z%SymbolDatabase.RegisterEnumDescriptorcCst ¡dkr|j |¡dS)z§Registers the given service descriptor in the local database.
 
    Args:
      service_descriptor (ServiceDescriptor): the service descriptor to
        register.
    rN)rrrZ_AddServiceDescriptor)rZservice_descriptorr r r ÚRegisterServiceDescriptoros z(SymbolDatabase.RegisterServiceDescriptorcCst ¡dkr|j |¡dS)z“Registers the given file descriptor in the local database.
 
    Args:
      file_descriptor (FileDescriptor): The file descriptor to register.
    rN)rrrZ_InternalAddFileDescriptor)rZfile_descriptorr r r ÚRegisterFileDescriptorzs z%SymbolDatabase.RegisterFileDescriptorcCs|j|j |¡S)awTries to find a symbol in the local database.
 
    Currently, this method only returns message.Message instances, however, if
    may be extended in future to support other symbol types.
 
    Args:
      symbol (str): a protocol buffer symbol.
 
    Returns:
      A Python class corresponding to the symbol.
 
    Raises:
      KeyError: if the symbol could not be found.
    )rrZFindMessageTypeByName)rÚsymbolr r r Ú    GetSymbol„szSymbolDatabase.GetSymbolc sr‡fdd„‰i}|D]X}|j |¡}|j ¡D]<}ˆ|ƒD].}z|j|||j<Wq:tk
rfYq:Xq:q.q|S)aGets all registered messages from a specified file.
 
    Only messages already created and registered will be returned; (this is the
    case for imported _pb2 modules)
    But unlike MessageFactory, this version also returns already defined nested
    messages, but does not register any message extensions.
 
    Args:
      files (list[str]): The file names to extract messages from.
 
    Returns:
      A dictionary mapping proto names to the message classes.
 
    Raises:
      KeyError: if a file could not be found.
    c3s*|V|jD]}ˆ|ƒD]
}|Vqq dS)zCWalk a message Descriptor and recursively yields all message names.N)Z nested_types)r
Úmsg_descZ nested_desc©Ú_GetAllMessagesr r r©s
 z3SymbolDatabase.GetMessages.<locals>._GetAllMessages)rZFindFileByNameZmessage_types_by_nameÚvaluesrZ    full_nameÚKeyError)rÚfilesÚresultÚ    file_nameZ    file_descrr
r rr Ú GetMessages–s    zSymbolDatabase.GetMessagesN) Ú__name__Ú
__module__Ú __qualname__Ú__doc__r rrrrrrr r r r rBs
 
r)rcCstS)z#Returns the default SymbolDatabase.)Ú_DEFAULTr r r r ÚDefaultÀsr$N)
r"Zgoogle.protobuf.internalrZgoogle.protobufrrZMessageFactoryrr$r#r r r r Ú<module>s    {