Skip to content

Commit 163a14b

Browse files
committed
Add mdstore methods to extract mdui uiinfo subelements
Signed-off-by: Ivan Kanakarakis <[email protected]>
1 parent e449679 commit 163a14b

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

src/saml2/mdstore.py

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@
5353
ns=NS_MDATTR, tag=EntityAttributes.c_tag
5454
),
5555
"mdui_uiinfo": "{ns}&{tag}".format(ns=NS_MDUI, tag=UIInfo.c_tag),
56+
"mdui_uiinfo_display_name": "{ns}&{tag}".format(ns=NS_MDUI, tag=DisplayName.c_tag),
57+
"mdui_uiinfo_description": "{ns}&{tag}".format(ns=NS_MDUI, tag=Description.c_tag),
58+
"mdui_uiinfo_information_url": "{ns}&{tag}".format(
59+
ns=NS_MDUI, tag=InformationURL.c_tag
60+
),
61+
"mdui_uiinfo_privacy_statement_url": "{ns}&{tag}".format(
62+
ns=NS_MDUI, tag=PrivacyStatementURL.c_tag
63+
),
64+
"mdui_uiinfo_logo": "{ns}&{tag}".format(ns=NS_MDUI, tag=Logo.c_tag),
5665
}
5766

5867
ENTITY_CATEGORY = "http://macedir.org/entity-category"
@@ -1290,6 +1299,105 @@ def mdui_uiinfo(self, entity_id):
12901299
uiinfos = list(self._mdui_uiinfo(entity_id))
12911300
return uiinfos
12921301

1302+
def _mdui_uiinfo_i18n_elements(self, entity_id, langpref, element_hint, lookup):
1303+
uiinfos = self._mdui_uiinfo(entity_id)
1304+
elements = lookup(uiinfos, element_hint)
1305+
lang_elements = (
1306+
element
1307+
for element in elements
1308+
if element.get("lang") == langpref
1309+
)
1310+
values = (
1311+
value
1312+
for element in lang_elements
1313+
for value in [element.get("text")]
1314+
)
1315+
return values
1316+
1317+
def _mdui_uiinfo_lookup_elements_by_cls(self, uiinfos, element_cls):
1318+
elements = (
1319+
element
1320+
for uiinfo in uiinfos
1321+
for element_key, elements in uiinfo.items()
1322+
if element_key != "__class__"
1323+
for element in elements
1324+
if element.get("__class__") == element_cls
1325+
)
1326+
return elements
1327+
1328+
def _mdui_uiinfo_lookup_elements_by_key(self, uiinfos, element_key):
1329+
elements = (
1330+
element
1331+
for uiinfo in uiinfos
1332+
for elements in [uiinfo.get(element_key, [])]
1333+
for element in elements
1334+
)
1335+
return elements
1336+
1337+
def mdui_uiinfo_i18n_element_cls(self, entity_id, langpref, element_cls):
1338+
values = self._mdui_uiinfo_i18n_elements(
1339+
entity_id, langpref, element_cls, self._mdui_uiinfo_lookup_elements_by_cls
1340+
)
1341+
return values
1342+
1343+
def mdui_uiinfo_i18n_element_key(self, entity_id, langpref, element_key):
1344+
values = self._mdui_uiinfo_i18n_elements(
1345+
entity_id, langpref, element_key, self._mdui_uiinfo_lookup_elements_by_key
1346+
)
1347+
return values
1348+
1349+
def _mdui_uiinfo_display_name(self, entity_id, langpref="en"):
1350+
cls = classnames["mdui_uiinfo_display_name"]
1351+
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
1352+
return values
1353+
1354+
def mdui_uiinfo_display_name(self, entity_id, langpref="en"):
1355+
values = list(self._mdui_uiinfo_display_name(entity_id, langpref))
1356+
return values
1357+
1358+
def _mdui_uiinfo_description(self, entity_id, langpref="en"):
1359+
cls = classnames["mdui_uiinfo_description"]
1360+
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
1361+
return values
1362+
1363+
def mdui_uiinfo_description(self, entity_id, langpref="en"):
1364+
values = list(self._mdui_uiinfo_description(entity_id, langpref))
1365+
return values
1366+
1367+
def _mdui_uiinfo_information_url(self, entity_id, langpref="en"):
1368+
cls = classnames["mdui_uiinfo_information_url"]
1369+
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
1370+
return values
1371+
1372+
def mdui_uiinfo_information_url(self, entity_id, langpref="en"):
1373+
values = list(self._mdui_uiinfo_information_url(entity_id, langpref))
1374+
return values
1375+
1376+
def _mdui_uiinfo_privacy_statement_url(self, entity_id, langpref="en"):
1377+
cls = classnames["mdui_uiinfo_privacy_statement_url"]
1378+
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
1379+
return values
1380+
1381+
def mdui_uiinfo_privacy_statement_url(self, entity_id, langpref="en"):
1382+
values = list(self._mdui_uiinfo_privacy_statement_url(entity_id, langpref))
1383+
return values
1384+
1385+
def _mdui_uiinfo_logo(self, entity_id, width, height):
1386+
uiinfos = self._mdui_uiinfo(entity_id)
1387+
cls = classnames["mdui_uiinfo_logo"]
1388+
elements = self._mdui_uiinfo_lookup_elements_by_cls(uiinfos, cls)
1389+
values = (
1390+
element
1391+
for element in elements
1392+
if width is None or element.get("width") == width
1393+
if height is None or element.get("height") == height
1394+
)
1395+
return values
1396+
1397+
def mdui_uiinfo_logo(self, entity_id, width=None, height=None):
1398+
values = list(self._mdui_uiinfo_logo(entity_id, width, height))
1399+
return values
1400+
12931401
def bindings(self, entity_id, typ, service):
12941402
for _md in self.metadata.values():
12951403
if entity_id in _md.items():

0 commit comments

Comments
 (0)