Skip to content

Commit 99e731c

Browse files
committed
add md sources info to discojson
1 parent 796cac3 commit 99e731c

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/pyff/builtins.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ def _discojson(req: Plumbing.Request, *opts):
977977
if req.t is None:
978978
raise PipeException("Your pipeline is missing a select statement.")
979979

980-
res = discojson_t(req.t, icon_store=req.md.icon_store)
980+
res = discojson_t(req.t, req.md.rm, icon_store=req.md.icon_store)
981981
res.sort(key=operator.itemgetter('title'))
982982

983983
return json.dumps(res)

src/pyff/resource.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import os
99
import traceback
10-
from collections import deque
10+
from collections import deque, defaultdict
1111
from datetime import datetime
1212
from enum import Enum
1313
from threading import Condition, Lock
@@ -239,6 +239,7 @@ def __init__(self, url: Optional[str], opts: ResourceOpts):
239239
self.last_parser: Optional['PyffParser'] = None # importing PyffParser in this module causes a loop
240240
self._infos: Deque[ResourceInfo] = deque(maxlen=config.info_buffer_size)
241241
self.children: Deque[Resource] = deque()
242+
self.md_sources: Optional[dict] = None
242243
self._setup()
243244

244245
def _setup(self):
@@ -491,3 +492,15 @@ def parse(self, getter: Callable[[str], Response]) -> Deque[Resource]:
491492
info.state = ResourceLoadState.Ready
492493

493494
return self.children
495+
496+
def global_md_sources(self):
497+
from pyff.samlmd import SAMLParserInfo
498+
499+
md_sources = defaultdict(list)
500+
for r in self.walk():
501+
if r.url:
502+
for info in r._infos:
503+
if isinstance(info.parser_info, SAMLParserInfo):
504+
for entity_id in info.parser_info.entities:
505+
md_sources[entity_id].append(r.url)
506+
return md_sources

src/pyff/samlmd.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ def entity_scopes(e):
793793
return [s.text for s in elt]
794794

795795

796-
def discojson(e, langs=None, fallback_to_favicon=False, icon_store=None):
796+
def discojson(e, sources=None, langs=None, fallback_to_favicon=False, icon_store=None):
797797
if e is None:
798798
return dict()
799799

@@ -819,6 +819,9 @@ def discojson(e, langs=None, fallback_to_favicon=False, icon_store=None):
819819
if cats is not None:
820820
d['entity_categories'] = cats
821821

822+
if sources is not None:
823+
d['md_sources'] = sources
824+
822825
eattr = entity_attribute_dict(e)
823826
if 'idp' in eattr[ATTRS['role']]:
824827
d['type'] = 'idp'
@@ -858,8 +861,15 @@ def discojson(e, langs=None, fallback_to_favicon=False, icon_store=None):
858861
return d
859862

860863

861-
def discojson_t(t, icon_store=None):
862-
return [discojson(en, icon_store=icon_store) for en in iter_entities(t)]
864+
def discojson_t(t, resource, icon_store=None):
865+
md_sources = resource.global_md_sources()
866+
entities = []
867+
for en in iter_entities(t):
868+
entity_id = en.attrib['entityID']
869+
sources = md_sources[entity_id]
870+
entity = discojson(en, sources=sources, icon_store=icon_store)
871+
entities.append(entity)
872+
return entities
863873

864874

865875
def fetch_mdjson(urls):
@@ -884,7 +894,7 @@ def fetch_mdjson(urls):
884894

885895
ot = entitiesdescriptor(entities, 'extra-sources')
886896

887-
entities_json_list = discojson_t(ot)
897+
entities_json_list = discojson_t(ot, resource)
888898

889899
entities_json = {}
890900
for e in entities_json_list:

0 commit comments

Comments
 (0)