plugin pubsub cache: implement psCacheSearch
rel 361
This commit is contained in:
parent
247a5f1ea8
commit
d2ae4a124a
1 changed files with 44 additions and 1 deletions
|
|
@ -119,6 +119,14 @@ class PubsubCache:
|
|||
method=self._reset,
|
||||
async_=True,
|
||||
)
|
||||
host.bridge.addMethod(
|
||||
"psCacheSearch",
|
||||
".plugin",
|
||||
"s",
|
||||
out_sign="s",
|
||||
method=self._search,
|
||||
async_=True,
|
||||
)
|
||||
|
||||
def registerAnalyser(self, analyser: dict) -> None:
|
||||
"""Register a new pubsub node analyser
|
||||
|
|
@ -774,5 +782,40 @@ class PubsubCache:
|
|||
"""
|
||||
await self.host.memory.storage.deletePubsubNode(None, None, None)
|
||||
|
||||
def _reset(self) -> None:
|
||||
def _reset(self) -> defer.Deferred:
|
||||
return defer.ensureDeferred(self.reset())
|
||||
|
||||
async def search(self, query: dict) -> List[PubsubItem]:
|
||||
"""Search pubsub items in cache"""
|
||||
return await self.host.memory.storage.searchPubsubItems(query)
|
||||
|
||||
async def serialisableSearch(self, query: dict) -> List[dict]:
|
||||
"""Search pubsub items in cache and returns parsed data
|
||||
|
||||
The returned data can be serialised.
|
||||
|
||||
"pubsub_service" and "pubsub_name" will be added to each data (both as strings)
|
||||
"""
|
||||
items = await self.search(query)
|
||||
ret = []
|
||||
for item in items:
|
||||
parsed = item.parsed
|
||||
parsed["pubsub_service"] = item.node.service.full()
|
||||
parsed["pubsub_node"] = item.node.name
|
||||
if query.get("with_payload"):
|
||||
parsed["item_payload"] = item.data.toXml()
|
||||
parsed["node_profile"] = self.host.memory.storage.getProfileById(
|
||||
item.node.profile_id
|
||||
)
|
||||
|
||||
ret.append(parsed)
|
||||
return ret
|
||||
|
||||
def _search(self, query: str) -> defer.Deferred:
|
||||
query = data_format.deserialise(query)
|
||||
services = query.get("services")
|
||||
if services:
|
||||
query["services"] = [jid.JID(s) for s in services]
|
||||
d = defer.ensureDeferred(self.serialisableSearch(query))
|
||||
d.addCallback(data_format.serialise)
|
||||
return d
|
||||
|
|
|
|||
Loading…
Reference in a new issue