Page MenuHomeSoftware Heritage

D8448.id30457.diff
No OneTemporary

D8448.id30457.diff

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

Mime Type
text/plain
Expires
Thu, Jul 3, 3:35 PM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3222907

Event Timeline