Skip to content

Commit 39aef2c

Browse files
committed
Improve mdstore methods that extract mdui uiinfo subelements
- Do not raise KeyError if entity-id is wrong - Keep only the generator form; as more perfomant and generic - Generalize internal searchers Signed-off-by: Ivan Kanakarakis <[email protected]>
1 parent 25e9dc3 commit 39aef2c

File tree

1 file changed

+40
-59
lines changed

1 file changed

+40
-59
lines changed

src/saml2/mdstore.py

Lines changed: 40 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,10 +1272,35 @@ def entity_attributes(self, entity_id):
12721272
"attribute_value"]]
12731273
return res
12741274

1275-
def _mdui_uiinfo(self, entity_id):
1275+
def _lookup_elements_by_cls(self, root, cls):
1276+
elements = (
1277+
element
1278+
for uiinfo in root
1279+
for element_key, elements in uiinfo.items()
1280+
if element_key != "__class__"
1281+
for element in elements
1282+
if element.get("__class__") == cls
1283+
)
1284+
return elements
1285+
1286+
def _lookup_elements_by_key(self, root, key):
1287+
elements = (
1288+
element
1289+
for uiinfo in root
1290+
for elements in [uiinfo.get(key, [])]
1291+
for element in elements
1292+
)
1293+
return elements
1294+
1295+
def mdui_uiinfo(self, entity_id):
1296+
try:
1297+
data = self[entity_id]
1298+
except KeyError:
1299+
data = {}
1300+
12761301
descriptor_names = (
12771302
item
1278-
for item in self[entity_id].keys()
1303+
for item in data.keys()
12791304
if item.endswith("_descriptor")
12801305
)
12811306
descriptors = (
@@ -1295,12 +1320,8 @@ def _mdui_uiinfo(self, entity_id):
12951320
)
12961321
return uiinfos
12971322

1298-
def mdui_uiinfo(self, entity_id):
1299-
uiinfos = list(self._mdui_uiinfo(entity_id))
1300-
return uiinfos
1301-
1302-
def _mdui_uiinfo_i18n_elements(self, entity_id, langpref, element_hint, lookup):
1303-
uiinfos = self._mdui_uiinfo(entity_id)
1323+
def _mdui_uiinfo_i18n_elements_lookup(self, entity_id, langpref, element_hint, lookup):
1324+
uiinfos = self.mdui_uiinfo(entity_id)
13041325
elements = lookup(uiinfos, element_hint)
13051326
lang_elements = (
13061327
element
@@ -1314,78 +1335,42 @@ def _mdui_uiinfo_i18n_elements(self, entity_id, langpref, element_hint, lookup):
13141335
)
13151336
return values
13161337

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-
13371338
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
1339+
values = self._mdui_uiinfo_i18n_elements_lookup(
1340+
entity_id, langpref, element_cls, self._lookup_elements_by_cls
13401341
)
13411342
return values
13421343

13431344
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
1345+
values = self._mdui_uiinfo_i18n_elements_lookup(
1346+
entity_id, langpref, element_key, self._lookup_elements_by_key
13461347
)
13471348
return values
13481349

1349-
def _mdui_uiinfo_display_name(self, entity_id, langpref=None):
1350+
def mdui_uiinfo_display_name(self, entity_id, langpref=None):
13501351
cls = classnames["mdui_uiinfo_display_name"]
13511352
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
13521353
return values
13531354

1354-
def mdui_uiinfo_display_name(self, entity_id, langpref=None):
1355-
values = list(self._mdui_uiinfo_display_name(entity_id, langpref))
1356-
return values
1357-
1358-
def _mdui_uiinfo_description(self, entity_id, langpref=None):
1355+
def mdui_uiinfo_description(self, entity_id, langpref=None):
13591356
cls = classnames["mdui_uiinfo_description"]
13601357
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
13611358
return values
13621359

1363-
def mdui_uiinfo_description(self, entity_id, langpref=None):
1364-
values = list(self._mdui_uiinfo_description(entity_id, langpref))
1365-
return values
1366-
1367-
def _mdui_uiinfo_information_url(self, entity_id, langpref=None):
1360+
def mdui_uiinfo_information_url(self, entity_id, langpref=None):
13681361
cls = classnames["mdui_uiinfo_information_url"]
13691362
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
13701363
return values
13711364

1372-
def mdui_uiinfo_information_url(self, entity_id, langpref=None):
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=None):
1365+
def mdui_uiinfo_privacy_statement_url(self, entity_id, langpref=None):
13771366
cls = classnames["mdui_uiinfo_privacy_statement_url"]
13781367
values = self.mdui_uiinfo_i18n_element_cls(entity_id, langpref, cls)
13791368
return values
13801369

1381-
def mdui_uiinfo_privacy_statement_url(self, entity_id, langpref=None):
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)
1370+
def mdui_uiinfo_logo(self, entity_id, width=None, height=None):
1371+
uiinfos = self.mdui_uiinfo(entity_id)
13871372
cls = classnames["mdui_uiinfo_logo"]
1388-
elements = self._mdui_uiinfo_lookup_elements_by_cls(uiinfos, cls)
1373+
elements = self._lookup_elements_by_cls(uiinfos, cls)
13891374
values = (
13901375
element
13911376
for element in elements
@@ -1394,10 +1379,6 @@ def _mdui_uiinfo_logo(self, entity_id, width, height):
13941379
)
13951380
return values
13961381

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-
14011382
def bindings(self, entity_id, typ, service):
14021383
for _md in self.metadata.values():
14031384
if entity_id in _md.items():

0 commit comments

Comments
 (0)