def test_search_ts(self, client: HiroClient): from arago.hiro.backend.six.search import Hiro6SearchModel search = Hiro6SearchModel(client) with search.index(rf'+ogit\/_type:"{OgitEntity.OGIT_TIME_SERIES.id}"' r' -\/DataName:"Time 99 percentile"') as res: yield from res pass
def test_graph_model_2(self, client: HiroClient): from arago.hiro.backend.six.search import Hiro6SearchModel search = Hiro6SearchModel(client) res = search.graph(VertexId('ogit/Node'), 'outE()', result_type=Edge) assert isinstance(res, Generator) i = next(res) assert isinstance(i, Edge) pass
def test_index_model(self, client: HiroClient): from arago.hiro.backend.six.search import Hiro6SearchModel search = Hiro6SearchModel(client) res = search.index(r'+ogit\/_id="ogit/Node"') assert isinstance(res, Generator) i = next(res) assert isinstance(i, Vertex) pass
def test_search_blob(self, client: HiroClient): from arago.hiro.backend.six.search import Hiro6SearchModel search = Hiro6SearchModel(client) res = search.index(rf'+ogit\/_type:"{OgitEntity.OGIT_ATTACHMENT.id}"' r' -ogit\/_creator:"*****@*****.**"' r' -ogit\/_creator:"*****@*****.**"' r' -ogit\/_creator:"*****@*****.**"') import pprint for vertex in res: pprint.pprint(vertex.to_dict()) pass
def __init__(self, client: 'HiroRestBaseClient') -> None: super().__init__(client) version = client.root.model.version if version == Version.HIRO_5: raise NotImplementedError() elif version == Version.HIRO_6: from arago.hiro.backend.six.search import Hiro6SearchModel as ImplSearchModel elif version == Version.HIRO_7: raise NotImplementedError() # from arago.hiro.backend.seven.search import Hiro7SearchModel as ImplSearchModel else: raise RuntimeError('Unreachable') self.__client = ImplSearchModel(client)
class SearchModel(AbcSearchModel): __client: Final['AbcSearchModel'] def __init__(self, client: 'HiroRestBaseClient') -> None: super().__init__(client) version = client.root.model.version if version == Version.HIRO_5: raise NotImplementedError() elif version == Version.HIRO_6: from arago.hiro.backend.six.search import Hiro6SearchModel as ImplSearchModel elif version == Version.HIRO_7: raise NotImplementedError() # from arago.hiro.backend.seven.search import Hiro7SearchModel as ImplSearchModel else: raise RuntimeError('Unreachable') self.__client = ImplSearchModel(client) def connected( self, vertex_id: VERTEX_ID_T, edge_type: EDGE_TYPE_T, direction: Optional[Literal['in', 'out', 'both']] = None, fields: Optional[Iterable[ATTRIBUTE_T]] = None, vertex_types: Optional[Iterable[VERTEX_TYPE_T]] = None, offset: Optional[int] = None, limit: Optional[int] = None) -> Generator[VERTEX_T_co, None, None]: return self.__client.connected(vertex_id, edge_type, direction, fields, vertex_types, offset, limit) def external_id( self, external_id: VERTEX_XID_T, fields: Optional[Iterable[ATTRIBUTE_T]] = None, order: Optional[Order] = None ) -> Generator[VERTEX_T_co, None, None]: return self.__client.external_id(external_id, fields, order) def get_by_ids( self, *vertex_ids: VERTEX_ID_T, fields: Optional[Iterable[ATTRIBUTE_T]] = None, order: Optional[Order] = None ) -> Generator[VERTEX_T_co, None, None]: return self.__client.get_by_ids(*vertex_ids, fields=fields, order=order) def index( self, query: str, fields: Optional[Iterable[ATTRIBUTE_T]] = None, order: Optional[Order] = None, offset: Optional[int] = None, limit: Optional[int] = None) -> Generator[VERTEX_T_co, None, None]: # https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-query-string-query.html#query-string-syntax # search search for vertices # usage: hiro [<general options>] vertex search [<specific options>] # [<attr:value> [<attr:value> ...]] # Options # -c,--count retrieve only count of matching nodes # --fields <arg> comma separated list of field names to show in # result # -l,--list retrieve only ids (or some specific fields) of # matching nodes # --limit <arg> limit size of result set # --offset <arg> skip first <offset> results # -Q,--query <arg> enter (ready to use) vertex query. To be used # if query is more complex than ANDed # <attr:value> pairs # --show-list-meta If a vertex attribute is a list value show it # as list even if only one element is contained # (default: show one-element list as scalar) return self.__client.index(query, fields, order, offset, limit) def graph(self, root: Union[VERTEX_ID_T, VERTEX_XID_T_co], query: str, fields: Optional[Iterable[ATTRIBUTE_T]] = None, order: Optional[Order] = None, offset: Optional[int] = None, limit: Optional[int] = None, result_type: Type[T] = Vertex) -> Generator[T, None, None]: # count: Optional[bool] = None, # list_meta: Optional[bool] = None, # include_deleted: Optional[bool] = None # https://github.com/spmallette/GremlinDocs # graph more graph operations # query run gremlin query # usage: hiro [<general options>] graph query [<specific options>] # Options # -Q,--query <arg> gremlin query # -R,--root <arg> start node (root) for gremlin # --show-list-meta If a vertex attribute is a list value show it # as list even if only one element is contained # (default: show one-element list as scalar) return self.__client.graph(root, query, fields, order, offset, limit, result_type)