forked from MirrorHub/synapse
Collect up all the "instances" lists of individual AS protocol results into one combined answer to the client
This commit is contained in:
parent
023143f9ae
commit
2f267ee160
1 changed files with 29 additions and 1 deletions
|
@ -179,9 +179,37 @@ class ApplicationServicesHandler(object):
|
||||||
def get_3pe_protocols(self):
|
def get_3pe_protocols(self):
|
||||||
services = yield self.store.get_app_services()
|
services = yield self.store.get_app_services()
|
||||||
protocols = {}
|
protocols = {}
|
||||||
|
|
||||||
|
# Collect up all the individual protocol responses out of the ASes
|
||||||
for s in services:
|
for s in services:
|
||||||
for p in s.protocols:
|
for p in s.protocols:
|
||||||
protocols[p] = yield self.appservice_api.get_3pe_protocol(s, p)
|
info = yield self.appservice_api.get_3pe_protocol(s, p)
|
||||||
|
|
||||||
|
# Ignore any result that doesn't contain an "instances" list
|
||||||
|
if "instances" not in info:
|
||||||
|
continue
|
||||||
|
if not isinstance(info["instances"], list):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if p not in protocols:
|
||||||
|
protocols[p] = []
|
||||||
|
protocols[p].append(info)
|
||||||
|
|
||||||
|
def _merge_instances(infos):
|
||||||
|
if len(infos) == 0:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
# Merge the 'instances' lists of multiple results, but just take
|
||||||
|
# the other fields from the first as they ought to be identical
|
||||||
|
combined = dict(infos[0])
|
||||||
|
|
||||||
|
for info in infos[1:]:
|
||||||
|
combined["instances"].extend(info["instances"])
|
||||||
|
|
||||||
|
return combined
|
||||||
|
|
||||||
|
for p in protocols.keys():
|
||||||
|
protocols[p] = _merge_instances(protocols[p])
|
||||||
|
|
||||||
defer.returnValue(protocols)
|
defer.returnValue(protocols)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue