Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9345910
D8448.id30457.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
101 KB
Subscribers
None
D8448.id30457.diff
View Options
diff --git a/Makefile.local b/Makefile.local
--- a/Makefile.local
+++ b/Makefile.local
@@ -10,7 +10,7 @@
mvn -f $(POM_PATH) $*
protoc:
- python3 -m grpc_tools.protoc -I. --python_out=. --mypy_out=. --grpc_python_out=. swh/graph/rpc/*.proto
+ python3 -m grpc_tools.protoc -I. --python_out=. --mypy_out=. --grpc_python_out=. swh/graph/grpc/*.proto
clean-java: java-clean
diff --git a/mypy.ini b/mypy.ini
--- a/mypy.ini
+++ b/mypy.ini
@@ -2,7 +2,7 @@
namespace_packages = True
warn_unused_ignores = True
exclude = (?x)(
- ^swh/graph/rpc
+ ^swh/graph/grpc
)
diff --git a/pyproject.toml b/pyproject.toml
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,7 +2,7 @@
target-version = ['py37']
extend-exclude = '''
/(
- | swh/graph/rpc
+ | swh/graph/grpc
)/
'''
diff --git a/setup.cfg b/setup.cfg
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,4 +6,4 @@
select = C,E,F,W,B950
ignore = E203,E231,E501,W503
max-line-length = 88
-extend_exclude = swh/graph/rpc
+extend_exclude = swh/graph/grpc
diff --git a/swh/graph/rpc/swhgraph.proto b/swh/graph/grpc/swhgraph.proto
rename from swh/graph/rpc/swhgraph.proto
rename to swh/graph/grpc/swhgraph.proto
diff --git a/swh/graph/grpc/swhgraph_pb2.py b/swh/graph/grpc/swhgraph_pb2.py
new file mode 100644
--- /dev/null
+++ b/swh/graph/grpc/swhgraph_pb2.py
@@ -0,0 +1,196 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: swh/graph/grpc/swhgraph.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dswh/graph/grpc/swhgraph.proto\x12\tswh.graph\x1a google/protobuf/field_mask.proto\"W\n\x0eGetNodeRequest\x12\r\n\x05swhid\x18\x01 \x01(\t\x12-\n\x04mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x42\x07\n\x05_mask\"\xd8\x02\n\x10TraversalRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12,\n\tdirection\x18\x02 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x12\n\x05\x65\x64ges\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tmax_edges\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\tmin_depth\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12\x16\n\tmax_depth\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12\x30\n\x0creturn_nodes\x18\x07 \x01(\x0b\x32\x15.swh.graph.NodeFilterH\x04\x88\x01\x01\x12-\n\x04mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x42\x08\n\x06_edgesB\x0c\n\n_max_edgesB\x0c\n\n_min_depthB\x0c\n\n_max_depthB\x0f\n\r_return_nodesB\x07\n\x05_mask\"\x97\x02\n\x11\x46indPathToRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12%\n\x06target\x18\x02 \x01(\x0b\x32\x15.swh.graph.NodeFilter\x12,\n\tdirection\x18\x03 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x12\n\x05\x65\x64ges\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tmax_edges\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\tmax_depth\x18\x06 \x01(\x03H\x02\x88\x01\x01\x12-\n\x04mask\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x03\x88\x01\x01\x42\x08\n\x06_edgesB\x0c\n\n_max_edgesB\x0c\n\n_max_depthB\x07\n\x05_mask\"\x81\x03\n\x16\x46indPathBetweenRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12\x0b\n\x03\x64st\x18\x02 \x03(\t\x12,\n\tdirection\x18\x03 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x39\n\x11\x64irection_reverse\x18\x04 \x01(\x0e\x32\x19.swh.graph.GraphDirectionH\x00\x88\x01\x01\x12\x12\n\x05\x65\x64ges\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\redges_reverse\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x16\n\tmax_edges\x18\x07 \x01(\x03H\x03\x88\x01\x01\x12\x16\n\tmax_depth\x18\x08 \x01(\x03H\x04\x88\x01\x01\x12-\n\x04mask\x18\t \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x42\x14\n\x12_direction_reverseB\x08\n\x06_edgesB\x10\n\x0e_edges_reverseB\x0c\n\n_max_edgesB\x0c\n\n_max_depthB\x07\n\x05_mask\"\xb2\x01\n\nNodeFilter\x12\x12\n\x05types\x18\x01 \x01(\tH\x00\x88\x01\x01\x12%\n\x18min_traversal_successors\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12%\n\x18max_traversal_successors\x18\x03 \x01(\x03H\x02\x88\x01\x01\x42\x08\n\x06_typesB\x1b\n\x19_min_traversal_successorsB\x1b\n\x19_max_traversal_successors\"\x92\x02\n\x04Node\x12\r\n\x05swhid\x18\x01 \x01(\t\x12\'\n\tsuccessor\x18\x02 \x03(\x0b\x32\x14.swh.graph.Successor\x12\x1b\n\x0enum_successors\x18\t \x01(\x03H\x01\x88\x01\x01\x12%\n\x03\x63nt\x18\x03 \x01(\x0b\x32\x16.swh.graph.ContentDataH\x00\x12&\n\x03rev\x18\x05 \x01(\x0b\x32\x17.swh.graph.RevisionDataH\x00\x12%\n\x03rel\x18\x06 \x01(\x0b\x32\x16.swh.graph.ReleaseDataH\x00\x12$\n\x03ori\x18\x08 \x01(\x0b\x32\x15.swh.graph.OriginDataH\x00\x42\x06\n\x04\x64\x61taB\x11\n\x0f_num_successors\"U\n\x04Path\x12\x1d\n\x04node\x18\x01 \x03(\x0b\x32\x0f.swh.graph.Node\x12\x1b\n\x0emidpoint_index\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\x11\n\x0f_midpoint_index\"N\n\tSuccessor\x12\x12\n\x05swhid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12#\n\x05label\x18\x02 \x03(\x0b\x32\x14.swh.graph.EdgeLabelB\x08\n\x06_swhid\"U\n\x0b\x43ontentData\x12\x13\n\x06length\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x17\n\nis_skipped\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\t\n\x07_lengthB\r\n\x0b_is_skipped\"\xc6\x02\n\x0cRevisionData\x12\x13\n\x06\x61uthor\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x18\n\x0b\x61uthor_date\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12\x61uthor_date_offset\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tcommitter\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\x1b\n\x0e\x63ommitter_date\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12\"\n\x15\x63ommitter_date_offset\x18\x06 \x01(\x05H\x05\x88\x01\x01\x12\x14\n\x07message\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x42\t\n\x07_authorB\x0e\n\x0c_author_dateB\x15\n\x13_author_date_offsetB\x0c\n\n_committerB\x11\n\x0f_committer_dateB\x18\n\x16_committer_date_offsetB\n\n\x08_message\"\xcd\x01\n\x0bReleaseData\x12\x13\n\x06\x61uthor\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x18\n\x0b\x61uthor_date\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12\x61uthor_date_offset\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x11\n\x04name\x18\x04 \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07message\x18\x05 \x01(\x0cH\x04\x88\x01\x01\x42\t\n\x07_authorB\x0e\n\x0c_author_dateB\x15\n\x13_author_date_offsetB\x07\n\x05_nameB\n\n\x08_message\"&\n\nOriginData\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\"-\n\tEdgeLabel\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x12\n\npermission\x18\x02 \x01(\x05\"\x1e\n\rCountResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\"\x0e\n\x0cStatsRequest\"\x9b\x02\n\rStatsResponse\x12\x11\n\tnum_nodes\x18\x01 \x01(\x03\x12\x11\n\tnum_edges\x18\x02 \x01(\x03\x12\x19\n\x11\x63ompression_ratio\x18\x03 \x01(\x01\x12\x15\n\rbits_per_node\x18\x04 \x01(\x01\x12\x15\n\rbits_per_edge\x18\x05 \x01(\x01\x12\x14\n\x0c\x61vg_locality\x18\x06 \x01(\x01\x12\x14\n\x0cindegree_min\x18\x07 \x01(\x03\x12\x14\n\x0cindegree_max\x18\x08 \x01(\x03\x12\x14\n\x0cindegree_avg\x18\t \x01(\x01\x12\x15\n\routdegree_min\x18\n \x01(\x03\x12\x15\n\routdegree_max\x18\x0b \x01(\x03\x12\x15\n\routdegree_avg\x18\x0c \x01(\x01*+\n\x0eGraphDirection\x12\x0b\n\x07\x46ORWARD\x10\x00\x12\x0c\n\x08\x42\x41\x43KWARD\x10\x01\x32\xcf\x03\n\x10TraversalService\x12\x35\n\x07GetNode\x12\x19.swh.graph.GetNodeRequest\x1a\x0f.swh.graph.Node\x12:\n\x08Traverse\x12\x1b.swh.graph.TraversalRequest\x1a\x0f.swh.graph.Node0\x01\x12;\n\nFindPathTo\x12\x1c.swh.graph.FindPathToRequest\x1a\x0f.swh.graph.Path\x12\x45\n\x0f\x46indPathBetween\x12!.swh.graph.FindPathBetweenRequest\x1a\x0f.swh.graph.Path\x12\x43\n\nCountNodes\x12\x1b.swh.graph.TraversalRequest\x1a\x18.swh.graph.CountResponse\x12\x43\n\nCountEdges\x12\x1b.swh.graph.TraversalRequest\x1a\x18.swh.graph.CountResponse\x12:\n\x05Stats\x12\x17.swh.graph.StatsRequest\x1a\x18.swh.graph.StatsResponseB0\n\x1eorg.softwareheritage.graph.rpcB\x0cGraphServiceP\x01\x62\x06proto3')
+
+_GRAPHDIRECTION = DESCRIPTOR.enum_types_by_name['GraphDirection']
+GraphDirection = enum_type_wrapper.EnumTypeWrapper(_GRAPHDIRECTION)
+FORWARD = 0
+BACKWARD = 1
+
+
+_GETNODEREQUEST = DESCRIPTOR.message_types_by_name['GetNodeRequest']
+_TRAVERSALREQUEST = DESCRIPTOR.message_types_by_name['TraversalRequest']
+_FINDPATHTOREQUEST = DESCRIPTOR.message_types_by_name['FindPathToRequest']
+_FINDPATHBETWEENREQUEST = DESCRIPTOR.message_types_by_name['FindPathBetweenRequest']
+_NODEFILTER = DESCRIPTOR.message_types_by_name['NodeFilter']
+_NODE = DESCRIPTOR.message_types_by_name['Node']
+_PATH = DESCRIPTOR.message_types_by_name['Path']
+_SUCCESSOR = DESCRIPTOR.message_types_by_name['Successor']
+_CONTENTDATA = DESCRIPTOR.message_types_by_name['ContentData']
+_REVISIONDATA = DESCRIPTOR.message_types_by_name['RevisionData']
+_RELEASEDATA = DESCRIPTOR.message_types_by_name['ReleaseData']
+_ORIGINDATA = DESCRIPTOR.message_types_by_name['OriginData']
+_EDGELABEL = DESCRIPTOR.message_types_by_name['EdgeLabel']
+_COUNTRESPONSE = DESCRIPTOR.message_types_by_name['CountResponse']
+_STATSREQUEST = DESCRIPTOR.message_types_by_name['StatsRequest']
+_STATSRESPONSE = DESCRIPTOR.message_types_by_name['StatsResponse']
+GetNodeRequest = _reflection.GeneratedProtocolMessageType('GetNodeRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _GETNODEREQUEST,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.GetNodeRequest)
+ })
+_sym_db.RegisterMessage(GetNodeRequest)
+
+TraversalRequest = _reflection.GeneratedProtocolMessageType('TraversalRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _TRAVERSALREQUEST,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.TraversalRequest)
+ })
+_sym_db.RegisterMessage(TraversalRequest)
+
+FindPathToRequest = _reflection.GeneratedProtocolMessageType('FindPathToRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _FINDPATHTOREQUEST,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.FindPathToRequest)
+ })
+_sym_db.RegisterMessage(FindPathToRequest)
+
+FindPathBetweenRequest = _reflection.GeneratedProtocolMessageType('FindPathBetweenRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _FINDPATHBETWEENREQUEST,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.FindPathBetweenRequest)
+ })
+_sym_db.RegisterMessage(FindPathBetweenRequest)
+
+NodeFilter = _reflection.GeneratedProtocolMessageType('NodeFilter', (_message.Message,), {
+ 'DESCRIPTOR' : _NODEFILTER,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.NodeFilter)
+ })
+_sym_db.RegisterMessage(NodeFilter)
+
+Node = _reflection.GeneratedProtocolMessageType('Node', (_message.Message,), {
+ 'DESCRIPTOR' : _NODE,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.Node)
+ })
+_sym_db.RegisterMessage(Node)
+
+Path = _reflection.GeneratedProtocolMessageType('Path', (_message.Message,), {
+ 'DESCRIPTOR' : _PATH,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.Path)
+ })
+_sym_db.RegisterMessage(Path)
+
+Successor = _reflection.GeneratedProtocolMessageType('Successor', (_message.Message,), {
+ 'DESCRIPTOR' : _SUCCESSOR,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.Successor)
+ })
+_sym_db.RegisterMessage(Successor)
+
+ContentData = _reflection.GeneratedProtocolMessageType('ContentData', (_message.Message,), {
+ 'DESCRIPTOR' : _CONTENTDATA,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.ContentData)
+ })
+_sym_db.RegisterMessage(ContentData)
+
+RevisionData = _reflection.GeneratedProtocolMessageType('RevisionData', (_message.Message,), {
+ 'DESCRIPTOR' : _REVISIONDATA,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.RevisionData)
+ })
+_sym_db.RegisterMessage(RevisionData)
+
+ReleaseData = _reflection.GeneratedProtocolMessageType('ReleaseData', (_message.Message,), {
+ 'DESCRIPTOR' : _RELEASEDATA,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.ReleaseData)
+ })
+_sym_db.RegisterMessage(ReleaseData)
+
+OriginData = _reflection.GeneratedProtocolMessageType('OriginData', (_message.Message,), {
+ 'DESCRIPTOR' : _ORIGINDATA,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.OriginData)
+ })
+_sym_db.RegisterMessage(OriginData)
+
+EdgeLabel = _reflection.GeneratedProtocolMessageType('EdgeLabel', (_message.Message,), {
+ 'DESCRIPTOR' : _EDGELABEL,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.EdgeLabel)
+ })
+_sym_db.RegisterMessage(EdgeLabel)
+
+CountResponse = _reflection.GeneratedProtocolMessageType('CountResponse', (_message.Message,), {
+ 'DESCRIPTOR' : _COUNTRESPONSE,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.CountResponse)
+ })
+_sym_db.RegisterMessage(CountResponse)
+
+StatsRequest = _reflection.GeneratedProtocolMessageType('StatsRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _STATSREQUEST,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.StatsRequest)
+ })
+_sym_db.RegisterMessage(StatsRequest)
+
+StatsResponse = _reflection.GeneratedProtocolMessageType('StatsResponse', (_message.Message,), {
+ 'DESCRIPTOR' : _STATSRESPONSE,
+ '__module__' : 'swh.graph.grpc.swhgraph_pb2'
+ # @@protoc_insertion_point(class_scope:swh.graph.StatsResponse)
+ })
+_sym_db.RegisterMessage(StatsResponse)
+
+_TRAVERSALSERVICE = DESCRIPTOR.services_by_name['TraversalService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\036org.softwareheritage.graph.rpcB\014GraphServiceP\001'
+ _GRAPHDIRECTION._serialized_start=2854
+ _GRAPHDIRECTION._serialized_end=2897
+ _GETNODEREQUEST._serialized_start=78
+ _GETNODEREQUEST._serialized_end=165
+ _TRAVERSALREQUEST._serialized_start=168
+ _TRAVERSALREQUEST._serialized_end=512
+ _FINDPATHTOREQUEST._serialized_start=515
+ _FINDPATHTOREQUEST._serialized_end=794
+ _FINDPATHBETWEENREQUEST._serialized_start=797
+ _FINDPATHBETWEENREQUEST._serialized_end=1182
+ _NODEFILTER._serialized_start=1185
+ _NODEFILTER._serialized_end=1363
+ _NODE._serialized_start=1366
+ _NODE._serialized_end=1640
+ _PATH._serialized_start=1642
+ _PATH._serialized_end=1727
+ _SUCCESSOR._serialized_start=1729
+ _SUCCESSOR._serialized_end=1807
+ _CONTENTDATA._serialized_start=1809
+ _CONTENTDATA._serialized_end=1894
+ _REVISIONDATA._serialized_start=1897
+ _REVISIONDATA._serialized_end=2223
+ _RELEASEDATA._serialized_start=2226
+ _RELEASEDATA._serialized_end=2431
+ _ORIGINDATA._serialized_start=2433
+ _ORIGINDATA._serialized_end=2471
+ _EDGELABEL._serialized_start=2473
+ _EDGELABEL._serialized_end=2518
+ _COUNTRESPONSE._serialized_start=2520
+ _COUNTRESPONSE._serialized_end=2550
+ _STATSREQUEST._serialized_start=2552
+ _STATSREQUEST._serialized_end=2566
+ _STATSRESPONSE._serialized_start=2569
+ _STATSRESPONSE._serialized_end=2852
+ _TRAVERSALSERVICE._serialized_start=2900
+ _TRAVERSALSERVICE._serialized_end=3363
+# @@protoc_insertion_point(module_scope)
diff --git a/swh/graph/rpc/swhgraph_pb2.pyi b/swh/graph/grpc/swhgraph_pb2.pyi
rename from swh/graph/rpc/swhgraph_pb2.pyi
rename to swh/graph/grpc/swhgraph_pb2.pyi
--- a/swh/graph/rpc/swhgraph_pb2.pyi
+++ b/swh/graph/grpc/swhgraph_pb2.pyi
@@ -3,69 +3,75 @@
isort:skip_file
"""
import builtins
+import collections.abc
import google.protobuf.descriptor
import google.protobuf.field_mask_pb2
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
+import sys
import typing
-import typing_extensions
+
+if sys.version_info >= (3, 10):
+ import typing as typing_extensions
+else:
+ import typing_extensions
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
class _GraphDirection:
- ValueType = typing.NewType('ValueType', builtins.int)
+ ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType
-class _GraphDirectionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_GraphDirection.ValueType], builtins.type):
+
+class _GraphDirectionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_GraphDirection.ValueType], builtins.type): # noqa: F821
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
FORWARD: _GraphDirection.ValueType # 0
"""Forward DAG: ori -> snp -> rel -> rev -> dir -> cnt"""
-
BACKWARD: _GraphDirection.ValueType # 1
"""Transposed DAG: cnt -> dir -> rev -> rel -> snp -> ori"""
class GraphDirection(_GraphDirection, metaclass=_GraphDirectionEnumTypeWrapper):
"""Direction of the graph"""
- pass
FORWARD: GraphDirection.ValueType # 0
"""Forward DAG: ori -> snp -> rel -> rev -> dir -> cnt"""
-
BACKWARD: GraphDirection.ValueType # 1
"""Transposed DAG: cnt -> dir -> rev -> rel -> snp -> ori"""
-
global___GraphDirection = GraphDirection
-
class GetNodeRequest(google.protobuf.message.Message):
"""Describe a node to return"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SWHID_FIELD_NUMBER: builtins.int
MASK_FIELD_NUMBER: builtins.int
- swhid: typing.Text
+ swhid: builtins.str
"""SWHID of the node to return"""
-
@property
def mask(self) -> google.protobuf.field_mask_pb2.FieldMask:
"""FieldMask of which fields are to be returned (e.g., "swhid,cnt.length").
By default, all fields are returned.
"""
- pass
- def __init__(self,
+ def __init__(
+ self,
*,
- swhid: typing.Text = ...,
- mask: typing.Optional[google.protobuf.field_mask_pb2.FieldMask] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_mask",b"_mask","mask",b"mask"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_mask",b"_mask","mask",b"mask","swhid",b"swhid"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask",b"_mask"]) -> typing.Optional[typing_extensions.Literal["mask"]]: ...
+ swhid: builtins.str = ...,
+ mask: google.protobuf.field_mask_pb2.FieldMask | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_mask", b"_mask", "mask", b"mask"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_mask", b"_mask", "mask", b"mask", "swhid", b"swhid"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask", b"_mask"]) -> typing_extensions.Literal["mask"] | None: ...
+
global___GetNodeRequest = GetNodeRequest
class TraversalRequest(google.protobuf.message.Message):
"""TraversalRequest describes how a breadth-first traversal should be
performed, and what should be returned to the client.
"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SRC_FIELD_NUMBER: builtins.int
DIRECTION_FIELD_NUMBER: builtins.int
EDGES_FIELD_NUMBER: builtins.int
@@ -75,69 +81,63 @@
RETURN_NODES_FIELD_NUMBER: builtins.int
MASK_FIELD_NUMBER: builtins.int
@property
- def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
+ def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
"""Set of source nodes (SWHIDs)"""
- pass
direction: global___GraphDirection.ValueType
"""Direction of the graph to traverse. Defaults to FORWARD."""
-
- edges: typing.Text
+ edges: builtins.str
"""Edge restriction string (e.g. "rev:dir,dir:cnt").
Defaults to "*" (all).
"""
-
max_edges: builtins.int
"""Maximum number of edges accessed in the traversal, after which it stops.
Defaults to infinite.
"""
-
min_depth: builtins.int
"""Do not return nodes with a depth lower than this number.
By default, all depths are returned.
"""
-
max_depth: builtins.int
"""Maximum depth of the traversal, after which it stops.
Defaults to infinite.
"""
-
@property
def return_nodes(self) -> global___NodeFilter:
"""Filter which nodes will be sent to the stream. By default, all nodes are
returned.
"""
- pass
@property
def mask(self) -> google.protobuf.field_mask_pb2.FieldMask:
"""FieldMask of which fields are to be returned (e.g., "swhid,cnt.length").
By default, all fields are returned.
"""
- pass
- def __init__(self,
+ def __init__(
+ self,
*,
- src: typing.Optional[typing.Iterable[typing.Text]] = ...,
+ src: collections.abc.Iterable[builtins.str] | None = ...,
direction: global___GraphDirection.ValueType = ...,
- edges: typing.Optional[typing.Text] = ...,
- max_edges: typing.Optional[builtins.int] = ...,
- min_depth: typing.Optional[builtins.int] = ...,
- max_depth: typing.Optional[builtins.int] = ...,
- return_nodes: typing.Optional[global___NodeFilter] = ...,
- mask: typing.Optional[google.protobuf.field_mask_pb2.FieldMask] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_edges",b"_edges","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","_min_depth",b"_min_depth","_return_nodes",b"_return_nodes","edges",b"edges","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges","min_depth",b"min_depth","return_nodes",b"return_nodes"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_edges",b"_edges","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","_min_depth",b"_min_depth","_return_nodes",b"_return_nodes","direction",b"direction","edges",b"edges","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges","min_depth",b"min_depth","return_nodes",b"return_nodes","src",b"src"]) -> None: ...
+ edges: builtins.str | None = ...,
+ max_edges: builtins.int | None = ...,
+ min_depth: builtins.int | None = ...,
+ max_depth: builtins.int | None = ...,
+ return_nodes: global___NodeFilter | None = ...,
+ mask: google.protobuf.field_mask_pb2.FieldMask | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_edges", b"_edges", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "_min_depth", b"_min_depth", "_return_nodes", b"_return_nodes", "edges", b"edges", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges", "min_depth", b"min_depth", "return_nodes", b"return_nodes"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_edges", b"_edges", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "_min_depth", b"_min_depth", "_return_nodes", b"_return_nodes", "direction", b"direction", "edges", b"edges", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges", "min_depth", b"min_depth", "return_nodes", b"return_nodes", "src", b"src"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges",b"_edges"]) -> typing.Optional[typing_extensions.Literal["edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges", b"_edges"]) -> typing_extensions.Literal["edges"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask",b"_mask"]) -> typing.Optional[typing_extensions.Literal["mask"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask", b"_mask"]) -> typing_extensions.Literal["mask"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth",b"_max_depth"]) -> typing.Optional[typing_extensions.Literal["max_depth"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth", b"_max_depth"]) -> typing_extensions.Literal["max_depth"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges",b"_max_edges"]) -> typing.Optional[typing_extensions.Literal["max_edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges", b"_max_edges"]) -> typing_extensions.Literal["max_edges"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_min_depth",b"_min_depth"]) -> typing.Optional[typing_extensions.Literal["min_depth"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_min_depth", b"_min_depth"]) -> typing_extensions.Literal["min_depth"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_return_nodes",b"_return_nodes"]) -> typing.Optional[typing_extensions.Literal["return_nodes"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_return_nodes", b"_return_nodes"]) -> typing_extensions.Literal["return_nodes"] | None: ...
+
global___TraversalRequest = TraversalRequest
class FindPathToRequest(google.protobuf.message.Message):
@@ -145,7 +145,9 @@
set of nodes and a given target criteria, as well as what should be returned
in the path.
"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SRC_FIELD_NUMBER: builtins.int
TARGET_FIELD_NUMBER: builtins.int
DIRECTION_FIELD_NUMBER: builtins.int
@@ -154,57 +156,52 @@
MAX_DEPTH_FIELD_NUMBER: builtins.int
MASK_FIELD_NUMBER: builtins.int
@property
- def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
+ def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
"""Set of source nodes (SWHIDs)"""
- pass
@property
def target(self) -> global___NodeFilter:
"""Target criteria, i.e., what constitutes a valid path destination."""
- pass
direction: global___GraphDirection.ValueType
"""Direction of the graph to traverse. Defaults to FORWARD."""
-
- edges: typing.Text
+ edges: builtins.str
"""Edge restriction string (e.g. "rev:dir,dir:cnt").
Defaults to "*" (all).
"""
-
max_edges: builtins.int
"""Maximum number of edges accessed in the traversal, after which it stops.
Defaults to infinite.
"""
-
max_depth: builtins.int
"""Maximum depth of the traversal, after which it stops.
Defaults to infinite.
"""
-
@property
def mask(self) -> google.protobuf.field_mask_pb2.FieldMask:
"""FieldMask of which fields are to be returned (e.g., "swhid,cnt.length").
By default, all fields are returned.
"""
- pass
- def __init__(self,
+ def __init__(
+ self,
*,
- src: typing.Optional[typing.Iterable[typing.Text]] = ...,
- target: typing.Optional[global___NodeFilter] = ...,
+ src: collections.abc.Iterable[builtins.str] | None = ...,
+ target: global___NodeFilter | None = ...,
direction: global___GraphDirection.ValueType = ...,
- edges: typing.Optional[typing.Text] = ...,
- max_edges: typing.Optional[builtins.int] = ...,
- max_depth: typing.Optional[builtins.int] = ...,
- mask: typing.Optional[google.protobuf.field_mask_pb2.FieldMask] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_edges",b"_edges","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","edges",b"edges","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges","target",b"target"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_edges",b"_edges","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","direction",b"direction","edges",b"edges","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges","src",b"src","target",b"target"]) -> None: ...
+ edges: builtins.str | None = ...,
+ max_edges: builtins.int | None = ...,
+ max_depth: builtins.int | None = ...,
+ mask: google.protobuf.field_mask_pb2.FieldMask | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_edges", b"_edges", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "edges", b"edges", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges", "target", b"target"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_edges", b"_edges", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "direction", b"direction", "edges", b"edges", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges", "src", b"src", "target", b"target"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges",b"_edges"]) -> typing.Optional[typing_extensions.Literal["edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges", b"_edges"]) -> typing_extensions.Literal["edges"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask",b"_mask"]) -> typing.Optional[typing_extensions.Literal["mask"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask", b"_mask"]) -> typing_extensions.Literal["mask"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth",b"_max_depth"]) -> typing.Optional[typing_extensions.Literal["max_depth"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth", b"_max_depth"]) -> typing_extensions.Literal["max_depth"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges",b"_max_edges"]) -> typing.Optional[typing_extensions.Literal["max_edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges", b"_max_edges"]) -> typing_extensions.Literal["max_edges"] | None: ...
+
global___FindPathToRequest = FindPathToRequest
class FindPathBetweenRequest(google.protobuf.message.Message):
@@ -212,7 +209,9 @@
set of source nodes and a set of destination nodes. It works by performing a
bidirectional breadth-first traversal from both sets at the same time.
"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SRC_FIELD_NUMBER: builtins.int
DST_FIELD_NUMBER: builtins.int
DIRECTION_FIELD_NUMBER: builtins.int
@@ -223,31 +222,26 @@
MAX_DEPTH_FIELD_NUMBER: builtins.int
MASK_FIELD_NUMBER: builtins.int
@property
- def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
+ def src(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
"""Set of source nodes (SWHIDs)"""
- pass
@property
- def dst(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
+ def dst(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
"""Set of destination nodes (SWHIDs)"""
- pass
direction: global___GraphDirection.ValueType
"""Direction of the graph to traverse from the source set. Defaults to
FORWARD.
"""
-
direction_reverse: global___GraphDirection.ValueType
"""Direction of the graph to traverse from the destination set. Defaults to
the opposite of `direction`. If direction and direction_reverse are
identical, it will find the first common successor of both sets in the
given direction.
"""
-
- edges: typing.Text
+ edges: builtins.str
"""Edge restriction string for the traversal from the source set.
(e.g. "rev:dir,dir:cnt"). Defaults to "*" (all).
"""
-
- edges_reverse: typing.Text
+ edges_reverse: builtins.str
"""Edge restriction string for the reverse traversal from the destination
set.
If not specified:
@@ -256,91 +250,92 @@
- If direction != direction_reverse, defaults to the reverse of `edges`
(e.g. "rev:dir" becomes "dir:rev").
"""
-
max_edges: builtins.int
"""Maximum number of edges accessed in the traversal, after which it stops.
Defaults to infinite.
"""
-
max_depth: builtins.int
"""Maximum depth of the traversal, after which it stops.
Defaults to infinite.
"""
-
@property
def mask(self) -> google.protobuf.field_mask_pb2.FieldMask:
"""FieldMask of which fields are to be returned (e.g., "swhid,cnt.length").
By default, all fields are returned.
"""
- pass
- def __init__(self,
+ def __init__(
+ self,
*,
- src: typing.Optional[typing.Iterable[typing.Text]] = ...,
- dst: typing.Optional[typing.Iterable[typing.Text]] = ...,
+ src: collections.abc.Iterable[builtins.str] | None = ...,
+ dst: collections.abc.Iterable[builtins.str] | None = ...,
direction: global___GraphDirection.ValueType = ...,
- direction_reverse: typing.Optional[global___GraphDirection.ValueType] = ...,
- edges: typing.Optional[typing.Text] = ...,
- edges_reverse: typing.Optional[typing.Text] = ...,
- max_edges: typing.Optional[builtins.int] = ...,
- max_depth: typing.Optional[builtins.int] = ...,
- mask: typing.Optional[google.protobuf.field_mask_pb2.FieldMask] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_direction_reverse",b"_direction_reverse","_edges",b"_edges","_edges_reverse",b"_edges_reverse","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","direction_reverse",b"direction_reverse","edges",b"edges","edges_reverse",b"edges_reverse","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_direction_reverse",b"_direction_reverse","_edges",b"_edges","_edges_reverse",b"_edges_reverse","_mask",b"_mask","_max_depth",b"_max_depth","_max_edges",b"_max_edges","direction",b"direction","direction_reverse",b"direction_reverse","dst",b"dst","edges",b"edges","edges_reverse",b"edges_reverse","mask",b"mask","max_depth",b"max_depth","max_edges",b"max_edges","src",b"src"]) -> None: ...
+ direction_reverse: global___GraphDirection.ValueType | None = ...,
+ edges: builtins.str | None = ...,
+ edges_reverse: builtins.str | None = ...,
+ max_edges: builtins.int | None = ...,
+ max_depth: builtins.int | None = ...,
+ mask: google.protobuf.field_mask_pb2.FieldMask | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_direction_reverse", b"_direction_reverse", "_edges", b"_edges", "_edges_reverse", b"_edges_reverse", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "direction_reverse", b"direction_reverse", "edges", b"edges", "edges_reverse", b"edges_reverse", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_direction_reverse", b"_direction_reverse", "_edges", b"_edges", "_edges_reverse", b"_edges_reverse", "_mask", b"_mask", "_max_depth", b"_max_depth", "_max_edges", b"_max_edges", "direction", b"direction", "direction_reverse", b"direction_reverse", "dst", b"dst", "edges", b"edges", "edges_reverse", b"edges_reverse", "mask", b"mask", "max_depth", b"max_depth", "max_edges", b"max_edges", "src", b"src"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_direction_reverse",b"_direction_reverse"]) -> typing.Optional[typing_extensions.Literal["direction_reverse"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_direction_reverse", b"_direction_reverse"]) -> typing_extensions.Literal["direction_reverse"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges",b"_edges"]) -> typing.Optional[typing_extensions.Literal["edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges", b"_edges"]) -> typing_extensions.Literal["edges"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges_reverse",b"_edges_reverse"]) -> typing.Optional[typing_extensions.Literal["edges_reverse"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_edges_reverse", b"_edges_reverse"]) -> typing_extensions.Literal["edges_reverse"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask",b"_mask"]) -> typing.Optional[typing_extensions.Literal["mask"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_mask", b"_mask"]) -> typing_extensions.Literal["mask"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth",b"_max_depth"]) -> typing.Optional[typing_extensions.Literal["max_depth"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_depth", b"_max_depth"]) -> typing_extensions.Literal["max_depth"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges",b"_max_edges"]) -> typing.Optional[typing_extensions.Literal["max_edges"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_edges", b"_max_edges"]) -> typing_extensions.Literal["max_edges"] | None: ...
+
global___FindPathBetweenRequest = FindPathBetweenRequest
class NodeFilter(google.protobuf.message.Message):
"""Represents various criteria that make a given node "valid". A node is
only valid if all the subcriteria present in this message are fulfilled.
"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
TYPES_FIELD_NUMBER: builtins.int
MIN_TRAVERSAL_SUCCESSORS_FIELD_NUMBER: builtins.int
MAX_TRAVERSAL_SUCCESSORS_FIELD_NUMBER: builtins.int
- types: typing.Text
+ types: builtins.str
"""Node restriction string. (e.g. "dir,cnt,rev"). Defaults to "*" (all)."""
-
min_traversal_successors: builtins.int
"""Minimum number of successors encountered *during the traversal*.
Default: no constraint
"""
-
max_traversal_successors: builtins.int
"""Maximum number of successors encountered *during the traversal*.
Default: no constraint
"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- types: typing.Optional[typing.Text] = ...,
- min_traversal_successors: typing.Optional[builtins.int] = ...,
- max_traversal_successors: typing.Optional[builtins.int] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_max_traversal_successors",b"_max_traversal_successors","_min_traversal_successors",b"_min_traversal_successors","_types",b"_types","max_traversal_successors",b"max_traversal_successors","min_traversal_successors",b"min_traversal_successors","types",b"types"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_max_traversal_successors",b"_max_traversal_successors","_min_traversal_successors",b"_min_traversal_successors","_types",b"_types","max_traversal_successors",b"max_traversal_successors","min_traversal_successors",b"min_traversal_successors","types",b"types"]) -> None: ...
+ types: builtins.str | None = ...,
+ min_traversal_successors: builtins.int | None = ...,
+ max_traversal_successors: builtins.int | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_max_traversal_successors", b"_max_traversal_successors", "_min_traversal_successors", b"_min_traversal_successors", "_types", b"_types", "max_traversal_successors", b"max_traversal_successors", "min_traversal_successors", b"min_traversal_successors", "types", b"types"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_max_traversal_successors", b"_max_traversal_successors", "_min_traversal_successors", b"_min_traversal_successors", "_types", b"_types", "max_traversal_successors", b"max_traversal_successors", "min_traversal_successors", b"min_traversal_successors", "types", b"types"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_traversal_successors",b"_max_traversal_successors"]) -> typing.Optional[typing_extensions.Literal["max_traversal_successors"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_max_traversal_successors", b"_max_traversal_successors"]) -> typing_extensions.Literal["max_traversal_successors"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_min_traversal_successors",b"_min_traversal_successors"]) -> typing.Optional[typing_extensions.Literal["min_traversal_successors"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_min_traversal_successors", b"_min_traversal_successors"]) -> typing_extensions.Literal["min_traversal_successors"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_types",b"_types"]) -> typing.Optional[typing_extensions.Literal["types"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_types", b"_types"]) -> typing_extensions.Literal["types"] | None: ...
+
global___NodeFilter = NodeFilter
class Node(google.protobuf.message.Message):
"""Represents a node in the graph."""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SWHID_FIELD_NUMBER: builtins.int
SUCCESSOR_FIELD_NUMBER: builtins.int
NUM_SUCCESSORS_FIELD_NUMBER: builtins.int
@@ -348,16 +343,13 @@
REV_FIELD_NUMBER: builtins.int
REL_FIELD_NUMBER: builtins.int
ORI_FIELD_NUMBER: builtins.int
- swhid: typing.Text
+ swhid: builtins.str
"""The SWHID of the graph node."""
-
@property
def successor(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Successor]:
"""List of relevant successors of this node."""
- pass
num_successors: builtins.int
"""Number of relevant successors."""
-
@property
def cnt(self) -> global___ContentData: ...
@property
@@ -366,33 +358,36 @@
def rel(self) -> global___ReleaseData: ...
@property
def ori(self) -> global___OriginData: ...
- def __init__(self,
+ def __init__(
+ self,
*,
- swhid: typing.Text = ...,
- successor: typing.Optional[typing.Iterable[global___Successor]] = ...,
- num_successors: typing.Optional[builtins.int] = ...,
- cnt: typing.Optional[global___ContentData] = ...,
- rev: typing.Optional[global___RevisionData] = ...,
- rel: typing.Optional[global___ReleaseData] = ...,
- ori: typing.Optional[global___OriginData] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_num_successors",b"_num_successors","cnt",b"cnt","data",b"data","num_successors",b"num_successors","ori",b"ori","rel",b"rel","rev",b"rev"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_num_successors",b"_num_successors","cnt",b"cnt","data",b"data","num_successors",b"num_successors","ori",b"ori","rel",b"rel","rev",b"rev","successor",b"successor","swhid",b"swhid"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_num_successors",b"_num_successors"]) -> typing.Optional[typing_extensions.Literal["num_successors"]]: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["data",b"data"]) -> typing.Optional[typing_extensions.Literal["cnt","rev","rel","ori"]]: ...
+ swhid: builtins.str = ...,
+ successor: collections.abc.Iterable[global___Successor] | None = ...,
+ num_successors: builtins.int | None = ...,
+ cnt: global___ContentData | None = ...,
+ rev: global___RevisionData | None = ...,
+ rel: global___ReleaseData | None = ...,
+ ori: global___OriginData | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_num_successors", b"_num_successors", "cnt", b"cnt", "data", b"data", "num_successors", b"num_successors", "ori", b"ori", "rel", b"rel", "rev", b"rev"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_num_successors", b"_num_successors", "cnt", b"cnt", "data", b"data", "num_successors", b"num_successors", "ori", b"ori", "rel", b"rel", "rev", b"rev", "successor", b"successor", "swhid", b"swhid"]) -> None: ...
+ @typing.overload
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_num_successors", b"_num_successors"]) -> typing_extensions.Literal["num_successors"] | None: ...
+ @typing.overload
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["data", b"data"]) -> typing_extensions.Literal["cnt", "rev", "rel", "ori"] | None: ...
+
global___Node = Node
class Path(google.protobuf.message.Message):
"""Represents a path in the graph."""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
NODE_FIELD_NUMBER: builtins.int
MIDPOINT_INDEX_FIELD_NUMBER: builtins.int
@property
def node(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Node]:
"""List of nodes in the path, from source to destination"""
- pass
midpoint_index: builtins.int
"""Index of the "midpoint" of the path. For paths obtained with
bidirectional search queries, this is the node that joined the two
@@ -400,66 +395,73 @@
performing a FindPathBetween search with two backward graphs, this will
be the index of the common ancestor in the path.
"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- node: typing.Optional[typing.Iterable[global___Node]] = ...,
- midpoint_index: typing.Optional[builtins.int] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_midpoint_index",b"_midpoint_index","midpoint_index",b"midpoint_index"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_midpoint_index",b"_midpoint_index","midpoint_index",b"midpoint_index","node",b"node"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_midpoint_index",b"_midpoint_index"]) -> typing.Optional[typing_extensions.Literal["midpoint_index"]]: ...
+ node: collections.abc.Iterable[global___Node] | None = ...,
+ midpoint_index: builtins.int | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_midpoint_index", b"_midpoint_index", "midpoint_index", b"midpoint_index"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_midpoint_index", b"_midpoint_index", "midpoint_index", b"midpoint_index", "node", b"node"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_midpoint_index", b"_midpoint_index"]) -> typing_extensions.Literal["midpoint_index"] | None: ...
+
global___Path = Path
class Successor(google.protobuf.message.Message):
"""Represents a successor of a given node."""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
SWHID_FIELD_NUMBER: builtins.int
LABEL_FIELD_NUMBER: builtins.int
- swhid: typing.Text
+ swhid: builtins.str
"""The SWHID of the successor"""
-
@property
def label(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___EdgeLabel]:
"""A list of edge labels for the given edge"""
- pass
- def __init__(self,
+ def __init__(
+ self,
*,
- swhid: typing.Optional[typing.Text] = ...,
- label: typing.Optional[typing.Iterable[global___EdgeLabel]] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_swhid",b"_swhid","swhid",b"swhid"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_swhid",b"_swhid","label",b"label","swhid",b"swhid"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_swhid",b"_swhid"]) -> typing.Optional[typing_extensions.Literal["swhid"]]: ...
+ swhid: builtins.str | None = ...,
+ label: collections.abc.Iterable[global___EdgeLabel] | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_swhid", b"_swhid", "swhid", b"swhid"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_swhid", b"_swhid", "label", b"label", "swhid", b"swhid"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_swhid", b"_swhid"]) -> typing_extensions.Literal["swhid"] | None: ...
+
global___Successor = Successor
class ContentData(google.protobuf.message.Message):
"""Content node properties"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
LENGTH_FIELD_NUMBER: builtins.int
IS_SKIPPED_FIELD_NUMBER: builtins.int
length: builtins.int
"""Length of the blob, in bytes"""
-
is_skipped: builtins.bool
"""Whether the content was skipped during ingestion."""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- length: typing.Optional[builtins.int] = ...,
- is_skipped: typing.Optional[builtins.bool] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_is_skipped",b"_is_skipped","_length",b"_length","is_skipped",b"is_skipped","length",b"length"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_is_skipped",b"_is_skipped","_length",b"_length","is_skipped",b"is_skipped","length",b"length"]) -> None: ...
+ length: builtins.int | None = ...,
+ is_skipped: builtins.bool | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_is_skipped", b"_is_skipped", "_length", b"_length", "is_skipped", b"is_skipped", "length", b"length"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_is_skipped", b"_is_skipped", "_length", b"_length", "is_skipped", b"is_skipped", "length", b"length"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_is_skipped",b"_is_skipped"]) -> typing.Optional[typing_extensions.Literal["is_skipped"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_is_skipped", b"_is_skipped"]) -> typing_extensions.Literal["is_skipped"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_length",b"_length"]) -> typing.Optional[typing_extensions.Literal["length"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_length", b"_length"]) -> typing_extensions.Literal["length"] | None: ...
+
global___ContentData = ContentData
class RevisionData(google.protobuf.message.Message):
"""Revision node properties"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
AUTHOR_FIELD_NUMBER: builtins.int
AUTHOR_DATE_FIELD_NUMBER: builtins.int
AUTHOR_DATE_OFFSET_FIELD_NUMBER: builtins.int
@@ -469,56 +471,53 @@
MESSAGE_FIELD_NUMBER: builtins.int
author: builtins.int
"""Revision author ID (anonymized)"""
-
author_date: builtins.int
"""UNIX timestamp of the revision date (UTC)"""
-
author_date_offset: builtins.int
"""Timezone of the revision author date as an offset from UTC"""
-
committer: builtins.int
"""Revision committer ID (anonymized)"""
-
committer_date: builtins.int
"""UNIX timestamp of the revision committer date (UTC)"""
-
committer_date_offset: builtins.int
"""Timezone of the revision committer date as an offset from UTC"""
-
message: builtins.bytes
"""Revision message"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- author: typing.Optional[builtins.int] = ...,
- author_date: typing.Optional[builtins.int] = ...,
- author_date_offset: typing.Optional[builtins.int] = ...,
- committer: typing.Optional[builtins.int] = ...,
- committer_date: typing.Optional[builtins.int] = ...,
- committer_date_offset: typing.Optional[builtins.int] = ...,
- message: typing.Optional[builtins.bytes] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_author",b"_author","_author_date",b"_author_date","_author_date_offset",b"_author_date_offset","_committer",b"_committer","_committer_date",b"_committer_date","_committer_date_offset",b"_committer_date_offset","_message",b"_message","author",b"author","author_date",b"author_date","author_date_offset",b"author_date_offset","committer",b"committer","committer_date",b"committer_date","committer_date_offset",b"committer_date_offset","message",b"message"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_author",b"_author","_author_date",b"_author_date","_author_date_offset",b"_author_date_offset","_committer",b"_committer","_committer_date",b"_committer_date","_committer_date_offset",b"_committer_date_offset","_message",b"_message","author",b"author","author_date",b"author_date","author_date_offset",b"author_date_offset","committer",b"committer","committer_date",b"committer_date","committer_date_offset",b"committer_date_offset","message",b"message"]) -> None: ...
+ author: builtins.int | None = ...,
+ author_date: builtins.int | None = ...,
+ author_date_offset: builtins.int | None = ...,
+ committer: builtins.int | None = ...,
+ committer_date: builtins.int | None = ...,
+ committer_date_offset: builtins.int | None = ...,
+ message: builtins.bytes | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_author", b"_author", "_author_date", b"_author_date", "_author_date_offset", b"_author_date_offset", "_committer", b"_committer", "_committer_date", b"_committer_date", "_committer_date_offset", b"_committer_date_offset", "_message", b"_message", "author", b"author", "author_date", b"author_date", "author_date_offset", b"author_date_offset", "committer", b"committer", "committer_date", b"committer_date", "committer_date_offset", b"committer_date_offset", "message", b"message"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_author", b"_author", "_author_date", b"_author_date", "_author_date_offset", b"_author_date_offset", "_committer", b"_committer", "_committer_date", b"_committer_date", "_committer_date_offset", b"_committer_date_offset", "_message", b"_message", "author", b"author", "author_date", b"author_date", "author_date_offset", b"author_date_offset", "committer", b"committer", "committer_date", b"committer_date", "committer_date_offset", b"committer_date_offset", "message", b"message"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author",b"_author"]) -> typing.Optional[typing_extensions.Literal["author"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author", b"_author"]) -> typing_extensions.Literal["author"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date",b"_author_date"]) -> typing.Optional[typing_extensions.Literal["author_date"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date", b"_author_date"]) -> typing_extensions.Literal["author_date"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date_offset",b"_author_date_offset"]) -> typing.Optional[typing_extensions.Literal["author_date_offset"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date_offset", b"_author_date_offset"]) -> typing_extensions.Literal["author_date_offset"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer",b"_committer"]) -> typing.Optional[typing_extensions.Literal["committer"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer", b"_committer"]) -> typing_extensions.Literal["committer"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer_date",b"_committer_date"]) -> typing.Optional[typing_extensions.Literal["committer_date"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer_date", b"_committer_date"]) -> typing_extensions.Literal["committer_date"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer_date_offset",b"_committer_date_offset"]) -> typing.Optional[typing_extensions.Literal["committer_date_offset"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_committer_date_offset", b"_committer_date_offset"]) -> typing_extensions.Literal["committer_date_offset"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_message",b"_message"]) -> typing.Optional[typing_extensions.Literal["message"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_message", b"_message"]) -> typing_extensions.Literal["message"] | None: ...
+
global___RevisionData = RevisionData
class ReleaseData(google.protobuf.message.Message):
"""Release node properties"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
AUTHOR_FIELD_NUMBER: builtins.int
AUTHOR_DATE_FIELD_NUMBER: builtins.int
AUTHOR_DATE_OFFSET_FIELD_NUMBER: builtins.int
@@ -526,94 +525,102 @@
MESSAGE_FIELD_NUMBER: builtins.int
author: builtins.int
"""Release author ID (anonymized)"""
-
author_date: builtins.int
"""UNIX timestamp of the release date (UTC)"""
-
author_date_offset: builtins.int
"""Timezone of the release author date as an offset from UTC"""
-
name: builtins.bytes
"""Release name"""
-
message: builtins.bytes
"""Release message"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- author: typing.Optional[builtins.int] = ...,
- author_date: typing.Optional[builtins.int] = ...,
- author_date_offset: typing.Optional[builtins.int] = ...,
- name: typing.Optional[builtins.bytes] = ...,
- message: typing.Optional[builtins.bytes] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_author",b"_author","_author_date",b"_author_date","_author_date_offset",b"_author_date_offset","_message",b"_message","_name",b"_name","author",b"author","author_date",b"author_date","author_date_offset",b"author_date_offset","message",b"message","name",b"name"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_author",b"_author","_author_date",b"_author_date","_author_date_offset",b"_author_date_offset","_message",b"_message","_name",b"_name","author",b"author","author_date",b"author_date","author_date_offset",b"author_date_offset","message",b"message","name",b"name"]) -> None: ...
+ author: builtins.int | None = ...,
+ author_date: builtins.int | None = ...,
+ author_date_offset: builtins.int | None = ...,
+ name: builtins.bytes | None = ...,
+ message: builtins.bytes | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_author", b"_author", "_author_date", b"_author_date", "_author_date_offset", b"_author_date_offset", "_message", b"_message", "_name", b"_name", "author", b"author", "author_date", b"author_date", "author_date_offset", b"author_date_offset", "message", b"message", "name", b"name"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_author", b"_author", "_author_date", b"_author_date", "_author_date_offset", b"_author_date_offset", "_message", b"_message", "_name", b"_name", "author", b"author", "author_date", b"author_date", "author_date_offset", b"author_date_offset", "message", b"message", "name", b"name"]) -> None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author",b"_author"]) -> typing.Optional[typing_extensions.Literal["author"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author", b"_author"]) -> typing_extensions.Literal["author"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date",b"_author_date"]) -> typing.Optional[typing_extensions.Literal["author_date"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date", b"_author_date"]) -> typing_extensions.Literal["author_date"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date_offset",b"_author_date_offset"]) -> typing.Optional[typing_extensions.Literal["author_date_offset"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_author_date_offset", b"_author_date_offset"]) -> typing_extensions.Literal["author_date_offset"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_message",b"_message"]) -> typing.Optional[typing_extensions.Literal["message"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_message", b"_message"]) -> typing_extensions.Literal["message"] | None: ...
@typing.overload
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_name",b"_name"]) -> typing.Optional[typing_extensions.Literal["name"]]: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_name", b"_name"]) -> typing_extensions.Literal["name"] | None: ...
+
global___ReleaseData = ReleaseData
class OriginData(google.protobuf.message.Message):
"""Origin node properties"""
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
URL_FIELD_NUMBER: builtins.int
- url: typing.Text
+ url: builtins.str
"""URL of the origin"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
- url: typing.Optional[typing.Text] = ...,
- ) -> None: ...
- def HasField(self, field_name: typing_extensions.Literal["_url",b"_url","url",b"url"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing_extensions.Literal["_url",b"_url","url",b"url"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions.Literal["_url",b"_url"]) -> typing.Optional[typing_extensions.Literal["url"]]: ...
+ url: builtins.str | None = ...,
+ ) -> None: ...
+ def HasField(self, field_name: typing_extensions.Literal["_url", b"_url", "url", b"url"]) -> builtins.bool: ...
+ def ClearField(self, field_name: typing_extensions.Literal["_url", b"_url", "url", b"url"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_url", b"_url"]) -> typing_extensions.Literal["url"] | None: ...
+
global___OriginData = OriginData
class EdgeLabel(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
NAME_FIELD_NUMBER: builtins.int
PERMISSION_FIELD_NUMBER: builtins.int
name: builtins.bytes
"""Directory entry name for directories, branch name for snapshots"""
-
permission: builtins.int
"""Entry permission (only set for directories)."""
-
- def __init__(self,
+ def __init__(
+ self,
*,
name: builtins.bytes = ...,
permission: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing_extensions.Literal["name",b"name","permission",b"permission"]) -> None: ...
+ ) -> None: ...
+ def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "permission", b"permission"]) -> None: ...
+
global___EdgeLabel = EdgeLabel
class CountResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
COUNT_FIELD_NUMBER: builtins.int
count: builtins.int
- def __init__(self,
+ def __init__(
+ self,
*,
count: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing_extensions.Literal["count",b"count"]) -> None: ...
+ ) -> None: ...
+ def ClearField(self, field_name: typing_extensions.Literal["count", b"count"]) -> None: ...
+
global___CountResponse = CountResponse
class StatsRequest(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
- def __init__(self,
- ) -> None: ...
+
+ def __init__(
+ self,
+ ) -> None: ...
+
global___StatsRequest = StatsRequest
class StatsResponse(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
+
NUM_NODES_FIELD_NUMBER: builtins.int
NUM_EDGES_FIELD_NUMBER: builtins.int
COMPRESSION_RATIO_FIELD_NUMBER: builtins.int
@@ -628,45 +635,35 @@
OUTDEGREE_AVG_FIELD_NUMBER: builtins.int
num_nodes: builtins.int
"""Number of nodes in the graph"""
-
num_edges: builtins.int
"""Number of edges in the graph"""
-
compression_ratio: builtins.float
"""Ratio between the graph size and the information-theoretical lower
bound
"""
-
bits_per_node: builtins.float
"""Number of bits per node (overall graph size in bits divided by the
number of nodes)
"""
-
bits_per_edge: builtins.float
"""Number of bits per edge (overall graph size in bits divided by the
number of arcs).
"""
-
avg_locality: builtins.float
indegree_min: builtins.int
"""Smallest indegree"""
-
indegree_max: builtins.int
"""Largest indegree"""
-
indegree_avg: builtins.float
"""Average indegree"""
-
outdegree_min: builtins.int
"""Smallest outdegree"""
-
outdegree_max: builtins.int
"""Largest outdegree"""
-
outdegree_avg: builtins.float
"""Average outdegree"""
-
- def __init__(self,
+ def __init__(
+ self,
*,
num_nodes: builtins.int = ...,
num_edges: builtins.int = ...,
@@ -680,6 +677,7 @@
outdegree_min: builtins.int = ...,
outdegree_max: builtins.int = ...,
outdegree_avg: builtins.float = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing_extensions.Literal["avg_locality",b"avg_locality","bits_per_edge",b"bits_per_edge","bits_per_node",b"bits_per_node","compression_ratio",b"compression_ratio","indegree_avg",b"indegree_avg","indegree_max",b"indegree_max","indegree_min",b"indegree_min","num_edges",b"num_edges","num_nodes",b"num_nodes","outdegree_avg",b"outdegree_avg","outdegree_max",b"outdegree_max","outdegree_min",b"outdegree_min"]) -> None: ...
+ ) -> None: ...
+ def ClearField(self, field_name: typing_extensions.Literal["avg_locality", b"avg_locality", "bits_per_edge", b"bits_per_edge", "bits_per_node", b"bits_per_node", "compression_ratio", b"compression_ratio", "indegree_avg", b"indegree_avg", "indegree_max", b"indegree_max", "indegree_min", b"indegree_min", "num_edges", b"num_edges", "num_nodes", b"num_nodes", "outdegree_avg", b"outdegree_avg", "outdegree_max", b"outdegree_max", "outdegree_min", b"outdegree_min"]) -> None: ...
+
global___StatsResponse = StatsResponse
diff --git a/swh/graph/rpc/swhgraph_pb2_grpc.py b/swh/graph/grpc/swhgraph_pb2_grpc.py
rename from swh/graph/rpc/swhgraph_pb2_grpc.py
rename to swh/graph/grpc/swhgraph_pb2_grpc.py
--- a/swh/graph/rpc/swhgraph_pb2_grpc.py
+++ b/swh/graph/grpc/swhgraph_pb2_grpc.py
@@ -2,7 +2,7 @@
"""Client and server classes corresponding to protobuf-defined services."""
import grpc
-from swh.graph.rpc import swhgraph_pb2 as swh_dot_graph_dot_rpc_dot_swhgraph__pb2
+from swh.graph.grpc import swhgraph_pb2 as swh_dot_graph_dot_grpc_dot_swhgraph__pb2
class TraversalServiceStub(object):
@@ -17,38 +17,38 @@
"""
self.GetNode = channel.unary_unary(
'/swh.graph.TraversalService/GetNode',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.GetNodeRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.GetNodeRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.FromString,
)
self.Traverse = channel.unary_stream(
'/swh.graph.TraversalService/Traverse',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.FromString,
)
self.FindPathTo = channel.unary_unary(
'/swh.graph.TraversalService/FindPathTo',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathToRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathToRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.FromString,
)
self.FindPathBetween = channel.unary_unary(
'/swh.graph.TraversalService/FindPathBetween',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathBetweenRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathBetweenRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.FromString,
)
self.CountNodes = channel.unary_unary(
'/swh.graph.TraversalService/CountNodes',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.FromString,
)
self.CountEdges = channel.unary_unary(
'/swh.graph.TraversalService/CountEdges',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.FromString,
)
self.Stats = channel.unary_unary(
'/swh.graph.TraversalService/Stats',
- request_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsRequest.SerializeToString,
- response_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsResponse.FromString,
+ request_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsRequest.SerializeToString,
+ response_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsResponse.FromString,
)
@@ -139,38 +139,38 @@
rpc_method_handlers = {
'GetNode': grpc.unary_unary_rpc_method_handler(
servicer.GetNode,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.GetNodeRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.GetNodeRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.SerializeToString,
),
'Traverse': grpc.unary_stream_rpc_method_handler(
servicer.Traverse,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.SerializeToString,
),
'FindPathTo': grpc.unary_unary_rpc_method_handler(
servicer.FindPathTo,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathToRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathToRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.SerializeToString,
),
'FindPathBetween': grpc.unary_unary_rpc_method_handler(
servicer.FindPathBetween,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathBetweenRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathBetweenRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.SerializeToString,
),
'CountNodes': grpc.unary_unary_rpc_method_handler(
servicer.CountNodes,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.SerializeToString,
),
'CountEdges': grpc.unary_unary_rpc_method_handler(
servicer.CountEdges,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.SerializeToString,
),
'Stats': grpc.unary_unary_rpc_method_handler(
servicer.Stats,
- request_deserializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsRequest.FromString,
- response_serializer=swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsResponse.SerializeToString,
+ request_deserializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsRequest.FromString,
+ response_serializer=swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsResponse.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
@@ -195,8 +195,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/GetNode',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.GetNodeRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.GetNodeRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -212,8 +212,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_stream(request, target, '/swh.graph.TraversalService/Traverse',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Node.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Node.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -229,8 +229,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/FindPathTo',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathToRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathToRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -246,8 +246,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/FindPathBetween',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.FindPathBetweenRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.Path.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.FindPathBetweenRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.Path.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -263,8 +263,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/CountNodes',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -280,8 +280,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/CountEdges',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.CountResponse.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.TraversalRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.CountResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -297,7 +297,7 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/swh.graph.TraversalService/Stats',
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsRequest.SerializeToString,
- swh_dot_graph_dot_rpc_dot_swhgraph__pb2.StatsResponse.FromString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsRequest.SerializeToString,
+ swh_dot_graph_dot_grpc_dot_swhgraph__pb2.StatsResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/swh/graph/rpc_server.py b/swh/graph/grpc_server.py
rename from swh/graph/rpc_server.py
rename to swh/graph/grpc_server.py
--- a/swh/graph/rpc_server.py
+++ b/swh/graph/grpc_server.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 The Software Heritage developers
+# Copyright (C) 2021-2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -17,29 +17,30 @@
from swh.graph.config import check_config
-def spawn_java_rpc_server(config, port=None):
+def spawn_java_grpc_server(**config):
+ port = config.pop("port", None)
if port is None:
port = aiohttp.test_utils.unused_port()
- config = check_config(config or {})
+ config = check_config(config)
cmd = [
"java",
- "-cp",
+ "--class-path",
config["classpath"],
*config["java_tool_options"].split(),
"org.softwareheritage.graph.rpc.GraphServer",
"--port",
str(port),
- str(config["graph"]["path"]),
+ str(config["path"]),
]
print(cmd)
# XXX: shlex.join() is in 3.8
# logging.info("Starting RPC server: %s", shlex.join(cmd))
- logging.info("Starting RPC server: %s", " ".join(shlex.quote(x) for x in cmd))
+ logging.info("Starting GRPC server: %s", " ".join(shlex.quote(x) for x in cmd))
server = subprocess.Popen(cmd)
return server, port
-def stop_java_rpc_server(server: subprocess.Popen, timeout: int = 15):
+def stop_java_grpc_server(server: subprocess.Popen, timeout: int = 15):
server.terminate()
try:
server.wait(timeout=timeout)
diff --git a/swh/graph/http_server.py b/swh/graph/http_server.py
--- a/swh/graph/http_server.py
+++ b/swh/graph/http_server.py
@@ -9,6 +9,7 @@
"""
import json
+import logging
import os
from typing import Optional
@@ -20,14 +21,14 @@
from swh.core.api.asynchronous import RPCServerApp
from swh.core.config import read as config_read
-from swh.graph.rpc.swhgraph_pb2 import (
+from swh.graph.grpc.swhgraph_pb2 import (
GetNodeRequest,
NodeFilter,
StatsRequest,
TraversalRequest,
)
-from swh.graph.rpc.swhgraph_pb2_grpc import TraversalServiceStub
-from swh.graph.rpc_server import spawn_java_rpc_server, stop_java_rpc_server
+from swh.graph.grpc.swhgraph_pb2_grpc import TraversalServiceStub
+from swh.graph.grpc_server import spawn_java_grpc_server, stop_java_grpc_server
from swh.model.swhids import EXTENDED_SWHID_TYPES
try:
@@ -40,6 +41,8 @@
# maximum number of retries for random walks
RANDOM_RETRIES = 10 # TODO make this configurable via rpc-serve configuration
+logger = logging.getLogger(__name__)
+
async def _aiorpcerror_middleware(app, handler):
async def middleware_handler(request):
@@ -76,7 +79,7 @@
async def _stop(app):
await app["channel"].__aexit__(None, None, None)
if app.get("local_server"):
- stop_java_rpc_server(app["local_server"])
+ stop_java_grpc_server(app["local_server"])
async def index(request):
@@ -332,13 +335,60 @@
pass
-def make_app(config=None, rpc_url=None, spawn_rpc_port=50091, **kwargs):
- app = GraphServerApp(**kwargs)
+def make_app(config=None):
+ """Create an aiohttp server for the HTTP RPC frontend to the swh-graph API.
- if rpc_url is None:
- app["local_server"], port = spawn_java_rpc_server(config, port=spawn_rpc_port)
- rpc_url = f"localhost:{port}"
+ It may either connect to an existing grpc server (cls="remote") or spawn a
+ local grpc server (cls="local").
+
+ `config` is expected to be a dict like::
+
+ graph:
+ cls: "local"
+ grpc_server:
+ port: 50091
+ rpc_server:
+ debug: true
+
+ or::
+
+ graph:
+ cls: "remote"
+ url: "localhost:50091"
+ rpc_server:
+ debug: true
+ See:
+
+ - `rpc_server.py` for more details of the content of the
+ grpc_server section,
+
+ - the `GraphServerApp` class for more details of the content of the
+ rpc_server section.
+
+ """
+ if config is None:
+ config = {}
+ if "graph" not in config:
+ logger.info(
+ "Missing 'graph' configuration; default to a locally spawn"
+ "grpc server listening on 0.0.0.0:50091"
+ )
+ cfg = {"cls": "local", "grpc_server": {"port": 50091}}
+ else:
+ cfg = config["graph"].copy()
+ cls = cfg.pop("cls")
+ grpc_cfg = cfg.pop("grpc_server", {})
+ app = GraphServerApp(**cfg.get("rpc_server", {}))
+ if cls == "remote":
+ if "url" not in cfg:
+ raise KeyError("Missing 'url' configuration entry in the [graph] section")
+ rpc_url = cfg["url"]
+ elif cls == "local":
+ app["local_server"], port = spawn_java_grpc_server(**grpc_cfg)
+ rpc_url = f"localhost:{port}"
+ else:
+ raise ValueError(f"Unknown swh.graph class cls={cls}")
app.add_routes(
[
aiohttp.web.get("/", index),
diff --git a/swh/graph/pytest_plugin.py b/swh/graph/pytest_plugin.py
--- a/swh/graph/pytest_plugin.py
+++ b/swh/graph/pytest_plugin.py
@@ -3,6 +3,7 @@
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
+import logging
import multiprocessing
from pathlib import Path
import subprocess
@@ -11,14 +12,17 @@
import grpc
import pytest
+from swh.graph.grpc.swhgraph_pb2_grpc import TraversalServiceStub
from swh.graph.http_client import RemoteGraphClient
from swh.graph.http_naive_client import NaiveClient
-from swh.graph.rpc.swhgraph_pb2_grpc import TraversalServiceStub
SWH_GRAPH_TESTS_ROOT = Path(__file__).parents[0] / "tests"
TEST_GRAPH_PATH = SWH_GRAPH_TESTS_ROOT / "dataset/compressed/example"
+logger = logging.getLogger(__name__)
+
+
class GraphServerProcess(multiprocessing.Process):
def __init__(self, *args, **kwargs):
self.q = multiprocessing.Queue()
@@ -29,9 +33,15 @@
from swh.graph.http_server import make_app
try:
- config = {"graph": {"path": TEST_GRAPH_PATH}}
+ config = {
+ "graph": {
+ "cls": "local",
+ "grpc_server": {"path": TEST_GRAPH_PATH},
+ "rpc_server": {"debug": True},
+ }
+ }
with loop_context() as loop:
- app = make_app(config=config, debug=True, spawn_rpc_port=None)
+ app = make_app(config=config)
client = TestClient(TestServer(app), loop=loop)
loop.run_until_complete(client.start_server())
url = client.make_url("/graph/")
@@ -44,6 +54,7 @@
)
loop.run_forever()
except Exception as e:
+ logger.exception(e)
self.q.put(e)
def start(self, *args, **kwargs):
diff --git a/swh/graph/rpc/swhgraph_pb2.py b/swh/graph/rpc/swhgraph_pb2.py
deleted file mode 100644
--- a/swh/graph/rpc/swhgraph_pb2.py
+++ /dev/null
@@ -1,196 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: swh/graph/rpc/swhgraph.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1cswh/graph/rpc/swhgraph.proto\x12\tswh.graph\x1a google/protobuf/field_mask.proto\"W\n\x0eGetNodeRequest\x12\r\n\x05swhid\x18\x01 \x01(\t\x12-\n\x04mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x00\x88\x01\x01\x42\x07\n\x05_mask\"\xd8\x02\n\x10TraversalRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12,\n\tdirection\x18\x02 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x12\n\x05\x65\x64ges\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tmax_edges\x18\x04 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\tmin_depth\x18\x05 \x01(\x03H\x02\x88\x01\x01\x12\x16\n\tmax_depth\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12\x30\n\x0creturn_nodes\x18\x07 \x01(\x0b\x32\x15.swh.graph.NodeFilterH\x04\x88\x01\x01\x12-\n\x04mask\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x42\x08\n\x06_edgesB\x0c\n\n_max_edgesB\x0c\n\n_min_depthB\x0c\n\n_max_depthB\x0f\n\r_return_nodesB\x07\n\x05_mask\"\x97\x02\n\x11\x46indPathToRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12%\n\x06target\x18\x02 \x01(\x0b\x32\x15.swh.graph.NodeFilter\x12,\n\tdirection\x18\x03 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x12\n\x05\x65\x64ges\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tmax_edges\x18\x05 \x01(\x03H\x01\x88\x01\x01\x12\x16\n\tmax_depth\x18\x06 \x01(\x03H\x02\x88\x01\x01\x12-\n\x04mask\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x03\x88\x01\x01\x42\x08\n\x06_edgesB\x0c\n\n_max_edgesB\x0c\n\n_max_depthB\x07\n\x05_mask\"\x81\x03\n\x16\x46indPathBetweenRequest\x12\x0b\n\x03src\x18\x01 \x03(\t\x12\x0b\n\x03\x64st\x18\x02 \x03(\t\x12,\n\tdirection\x18\x03 \x01(\x0e\x32\x19.swh.graph.GraphDirection\x12\x39\n\x11\x64irection_reverse\x18\x04 \x01(\x0e\x32\x19.swh.graph.GraphDirectionH\x00\x88\x01\x01\x12\x12\n\x05\x65\x64ges\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\redges_reverse\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x16\n\tmax_edges\x18\x07 \x01(\x03H\x03\x88\x01\x01\x12\x16\n\tmax_depth\x18\x08 \x01(\x03H\x04\x88\x01\x01\x12-\n\x04mask\x18\t \x01(\x0b\x32\x1a.google.protobuf.FieldMaskH\x05\x88\x01\x01\x42\x14\n\x12_direction_reverseB\x08\n\x06_edgesB\x10\n\x0e_edges_reverseB\x0c\n\n_max_edgesB\x0c\n\n_max_depthB\x07\n\x05_mask\"\xb2\x01\n\nNodeFilter\x12\x12\n\x05types\x18\x01 \x01(\tH\x00\x88\x01\x01\x12%\n\x18min_traversal_successors\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12%\n\x18max_traversal_successors\x18\x03 \x01(\x03H\x02\x88\x01\x01\x42\x08\n\x06_typesB\x1b\n\x19_min_traversal_successorsB\x1b\n\x19_max_traversal_successors\"\x92\x02\n\x04Node\x12\r\n\x05swhid\x18\x01 \x01(\t\x12\'\n\tsuccessor\x18\x02 \x03(\x0b\x32\x14.swh.graph.Successor\x12\x1b\n\x0enum_successors\x18\t \x01(\x03H\x01\x88\x01\x01\x12%\n\x03\x63nt\x18\x03 \x01(\x0b\x32\x16.swh.graph.ContentDataH\x00\x12&\n\x03rev\x18\x05 \x01(\x0b\x32\x17.swh.graph.RevisionDataH\x00\x12%\n\x03rel\x18\x06 \x01(\x0b\x32\x16.swh.graph.ReleaseDataH\x00\x12$\n\x03ori\x18\x08 \x01(\x0b\x32\x15.swh.graph.OriginDataH\x00\x42\x06\n\x04\x64\x61taB\x11\n\x0f_num_successors\"U\n\x04Path\x12\x1d\n\x04node\x18\x01 \x03(\x0b\x32\x0f.swh.graph.Node\x12\x1b\n\x0emidpoint_index\x18\x02 \x01(\x05H\x00\x88\x01\x01\x42\x11\n\x0f_midpoint_index\"N\n\tSuccessor\x12\x12\n\x05swhid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12#\n\x05label\x18\x02 \x03(\x0b\x32\x14.swh.graph.EdgeLabelB\x08\n\x06_swhid\"U\n\x0b\x43ontentData\x12\x13\n\x06length\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x17\n\nis_skipped\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\t\n\x07_lengthB\r\n\x0b_is_skipped\"\xc6\x02\n\x0cRevisionData\x12\x13\n\x06\x61uthor\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x18\n\x0b\x61uthor_date\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12\x61uthor_date_offset\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tcommitter\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\x1b\n\x0e\x63ommitter_date\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12\"\n\x15\x63ommitter_date_offset\x18\x06 \x01(\x05H\x05\x88\x01\x01\x12\x14\n\x07message\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x42\t\n\x07_authorB\x0e\n\x0c_author_dateB\x15\n\x13_author_date_offsetB\x0c\n\n_committerB\x11\n\x0f_committer_dateB\x18\n\x16_committer_date_offsetB\n\n\x08_message\"\xcd\x01\n\x0bReleaseData\x12\x13\n\x06\x61uthor\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x18\n\x0b\x61uthor_date\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12\x61uthor_date_offset\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x11\n\x04name\x18\x04 \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07message\x18\x05 \x01(\x0cH\x04\x88\x01\x01\x42\t\n\x07_authorB\x0e\n\x0c_author_dateB\x15\n\x13_author_date_offsetB\x07\n\x05_nameB\n\n\x08_message\"&\n\nOriginData\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\"-\n\tEdgeLabel\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x12\n\npermission\x18\x02 \x01(\x05\"\x1e\n\rCountResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x03\"\x0e\n\x0cStatsRequest\"\x9b\x02\n\rStatsResponse\x12\x11\n\tnum_nodes\x18\x01 \x01(\x03\x12\x11\n\tnum_edges\x18\x02 \x01(\x03\x12\x19\n\x11\x63ompression_ratio\x18\x03 \x01(\x01\x12\x15\n\rbits_per_node\x18\x04 \x01(\x01\x12\x15\n\rbits_per_edge\x18\x05 \x01(\x01\x12\x14\n\x0c\x61vg_locality\x18\x06 \x01(\x01\x12\x14\n\x0cindegree_min\x18\x07 \x01(\x03\x12\x14\n\x0cindegree_max\x18\x08 \x01(\x03\x12\x14\n\x0cindegree_avg\x18\t \x01(\x01\x12\x15\n\routdegree_min\x18\n \x01(\x03\x12\x15\n\routdegree_max\x18\x0b \x01(\x03\x12\x15\n\routdegree_avg\x18\x0c \x01(\x01*+\n\x0eGraphDirection\x12\x0b\n\x07\x46ORWARD\x10\x00\x12\x0c\n\x08\x42\x41\x43KWARD\x10\x01\x32\xcf\x03\n\x10TraversalService\x12\x35\n\x07GetNode\x12\x19.swh.graph.GetNodeRequest\x1a\x0f.swh.graph.Node\x12:\n\x08Traverse\x12\x1b.swh.graph.TraversalRequest\x1a\x0f.swh.graph.Node0\x01\x12;\n\nFindPathTo\x12\x1c.swh.graph.FindPathToRequest\x1a\x0f.swh.graph.Path\x12\x45\n\x0f\x46indPathBetween\x12!.swh.graph.FindPathBetweenRequest\x1a\x0f.swh.graph.Path\x12\x43\n\nCountNodes\x12\x1b.swh.graph.TraversalRequest\x1a\x18.swh.graph.CountResponse\x12\x43\n\nCountEdges\x12\x1b.swh.graph.TraversalRequest\x1a\x18.swh.graph.CountResponse\x12:\n\x05Stats\x12\x17.swh.graph.StatsRequest\x1a\x18.swh.graph.StatsResponseB0\n\x1eorg.softwareheritage.graph.rpcB\x0cGraphServiceP\x01\x62\x06proto3')
-
-_GRAPHDIRECTION = DESCRIPTOR.enum_types_by_name['GraphDirection']
-GraphDirection = enum_type_wrapper.EnumTypeWrapper(_GRAPHDIRECTION)
-FORWARD = 0
-BACKWARD = 1
-
-
-_GETNODEREQUEST = DESCRIPTOR.message_types_by_name['GetNodeRequest']
-_TRAVERSALREQUEST = DESCRIPTOR.message_types_by_name['TraversalRequest']
-_FINDPATHTOREQUEST = DESCRIPTOR.message_types_by_name['FindPathToRequest']
-_FINDPATHBETWEENREQUEST = DESCRIPTOR.message_types_by_name['FindPathBetweenRequest']
-_NODEFILTER = DESCRIPTOR.message_types_by_name['NodeFilter']
-_NODE = DESCRIPTOR.message_types_by_name['Node']
-_PATH = DESCRIPTOR.message_types_by_name['Path']
-_SUCCESSOR = DESCRIPTOR.message_types_by_name['Successor']
-_CONTENTDATA = DESCRIPTOR.message_types_by_name['ContentData']
-_REVISIONDATA = DESCRIPTOR.message_types_by_name['RevisionData']
-_RELEASEDATA = DESCRIPTOR.message_types_by_name['ReleaseData']
-_ORIGINDATA = DESCRIPTOR.message_types_by_name['OriginData']
-_EDGELABEL = DESCRIPTOR.message_types_by_name['EdgeLabel']
-_COUNTRESPONSE = DESCRIPTOR.message_types_by_name['CountResponse']
-_STATSREQUEST = DESCRIPTOR.message_types_by_name['StatsRequest']
-_STATSRESPONSE = DESCRIPTOR.message_types_by_name['StatsResponse']
-GetNodeRequest = _reflection.GeneratedProtocolMessageType('GetNodeRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETNODEREQUEST,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.GetNodeRequest)
- })
-_sym_db.RegisterMessage(GetNodeRequest)
-
-TraversalRequest = _reflection.GeneratedProtocolMessageType('TraversalRequest', (_message.Message,), {
- 'DESCRIPTOR' : _TRAVERSALREQUEST,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.TraversalRequest)
- })
-_sym_db.RegisterMessage(TraversalRequest)
-
-FindPathToRequest = _reflection.GeneratedProtocolMessageType('FindPathToRequest', (_message.Message,), {
- 'DESCRIPTOR' : _FINDPATHTOREQUEST,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.FindPathToRequest)
- })
-_sym_db.RegisterMessage(FindPathToRequest)
-
-FindPathBetweenRequest = _reflection.GeneratedProtocolMessageType('FindPathBetweenRequest', (_message.Message,), {
- 'DESCRIPTOR' : _FINDPATHBETWEENREQUEST,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.FindPathBetweenRequest)
- })
-_sym_db.RegisterMessage(FindPathBetweenRequest)
-
-NodeFilter = _reflection.GeneratedProtocolMessageType('NodeFilter', (_message.Message,), {
- 'DESCRIPTOR' : _NODEFILTER,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.NodeFilter)
- })
-_sym_db.RegisterMessage(NodeFilter)
-
-Node = _reflection.GeneratedProtocolMessageType('Node', (_message.Message,), {
- 'DESCRIPTOR' : _NODE,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.Node)
- })
-_sym_db.RegisterMessage(Node)
-
-Path = _reflection.GeneratedProtocolMessageType('Path', (_message.Message,), {
- 'DESCRIPTOR' : _PATH,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.Path)
- })
-_sym_db.RegisterMessage(Path)
-
-Successor = _reflection.GeneratedProtocolMessageType('Successor', (_message.Message,), {
- 'DESCRIPTOR' : _SUCCESSOR,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.Successor)
- })
-_sym_db.RegisterMessage(Successor)
-
-ContentData = _reflection.GeneratedProtocolMessageType('ContentData', (_message.Message,), {
- 'DESCRIPTOR' : _CONTENTDATA,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.ContentData)
- })
-_sym_db.RegisterMessage(ContentData)
-
-RevisionData = _reflection.GeneratedProtocolMessageType('RevisionData', (_message.Message,), {
- 'DESCRIPTOR' : _REVISIONDATA,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.RevisionData)
- })
-_sym_db.RegisterMessage(RevisionData)
-
-ReleaseData = _reflection.GeneratedProtocolMessageType('ReleaseData', (_message.Message,), {
- 'DESCRIPTOR' : _RELEASEDATA,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.ReleaseData)
- })
-_sym_db.RegisterMessage(ReleaseData)
-
-OriginData = _reflection.GeneratedProtocolMessageType('OriginData', (_message.Message,), {
- 'DESCRIPTOR' : _ORIGINDATA,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.OriginData)
- })
-_sym_db.RegisterMessage(OriginData)
-
-EdgeLabel = _reflection.GeneratedProtocolMessageType('EdgeLabel', (_message.Message,), {
- 'DESCRIPTOR' : _EDGELABEL,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.EdgeLabel)
- })
-_sym_db.RegisterMessage(EdgeLabel)
-
-CountResponse = _reflection.GeneratedProtocolMessageType('CountResponse', (_message.Message,), {
- 'DESCRIPTOR' : _COUNTRESPONSE,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.CountResponse)
- })
-_sym_db.RegisterMessage(CountResponse)
-
-StatsRequest = _reflection.GeneratedProtocolMessageType('StatsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _STATSREQUEST,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.StatsRequest)
- })
-_sym_db.RegisterMessage(StatsRequest)
-
-StatsResponse = _reflection.GeneratedProtocolMessageType('StatsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _STATSRESPONSE,
- '__module__' : 'swh.graph.rpc.swhgraph_pb2'
- # @@protoc_insertion_point(class_scope:swh.graph.StatsResponse)
- })
-_sym_db.RegisterMessage(StatsResponse)
-
-_TRAVERSALSERVICE = DESCRIPTOR.services_by_name['TraversalService']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
- DESCRIPTOR._options = None
- DESCRIPTOR._serialized_options = b'\n\036org.softwareheritage.graph.rpcB\014GraphServiceP\001'
- _GRAPHDIRECTION._serialized_start=2853
- _GRAPHDIRECTION._serialized_end=2896
- _GETNODEREQUEST._serialized_start=77
- _GETNODEREQUEST._serialized_end=164
- _TRAVERSALREQUEST._serialized_start=167
- _TRAVERSALREQUEST._serialized_end=511
- _FINDPATHTOREQUEST._serialized_start=514
- _FINDPATHTOREQUEST._serialized_end=793
- _FINDPATHBETWEENREQUEST._serialized_start=796
- _FINDPATHBETWEENREQUEST._serialized_end=1181
- _NODEFILTER._serialized_start=1184
- _NODEFILTER._serialized_end=1362
- _NODE._serialized_start=1365
- _NODE._serialized_end=1639
- _PATH._serialized_start=1641
- _PATH._serialized_end=1726
- _SUCCESSOR._serialized_start=1728
- _SUCCESSOR._serialized_end=1806
- _CONTENTDATA._serialized_start=1808
- _CONTENTDATA._serialized_end=1893
- _REVISIONDATA._serialized_start=1896
- _REVISIONDATA._serialized_end=2222
- _RELEASEDATA._serialized_start=2225
- _RELEASEDATA._serialized_end=2430
- _ORIGINDATA._serialized_start=2432
- _ORIGINDATA._serialized_end=2470
- _EDGELABEL._serialized_start=2472
- _EDGELABEL._serialized_end=2517
- _COUNTRESPONSE._serialized_start=2519
- _COUNTRESPONSE._serialized_end=2549
- _STATSREQUEST._serialized_start=2551
- _STATSREQUEST._serialized_end=2565
- _STATSRESPONSE._serialized_start=2568
- _STATSRESPONSE._serialized_end=2851
- _TRAVERSALSERVICE._serialized_start=2899
- _TRAVERSALSERVICE._serialized_end=3362
-# @@protoc_insertion_point(module_scope)
diff --git a/swh/graph/tests/test_grpc.py b/swh/graph/tests/test_grpc.py
--- a/swh/graph/tests/test_grpc.py
+++ b/swh/graph/tests/test_grpc.py
@@ -7,7 +7,7 @@
from google.protobuf.field_mask_pb2 import FieldMask
-from swh.graph.rpc.swhgraph_pb2 import (
+from swh.graph.grpc.swhgraph_pb2 import (
GraphDirection,
NodeFilter,
StatsRequest,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 3, 3:35 PM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3222907
Attached To
D8448: Reorganize configuration of the http server building
Event Timeline
Log In to Comment