def _match_attr_name(attr, ava): try: friendly_name = attr["friendly_name"] except KeyError: friendly_name = get_local_name(acs, attr["name"], attr["name_format"]) _fn = _match(friendly_name, ava) if not _fn: # In the unlikely case that someone has provided us with URIs as attribute names _fn = _match(attr["name"], ava) return _fn
def post_entity_categories(maps, sp_entity_id=None, mds=None, required=None): restrictions = {} required_friendly_names = [ d.get('friendly_name') or get_local_name( acs=self.acs, attr=d['name'], name_format=d['name_format']) for d in (required or []) ] required = [ friendly_name.lower() for friendly_name in required_friendly_names ] if mds: ecs = mds.entity_categories(sp_entity_id) for ec_map in maps: for key, (atlist, only_required) in ec_map.items(): if key == "": # always released attrs = atlist elif isinstance(key, tuple): if only_required: attrs = [a for a in atlist if a in required] else: attrs = atlist for _key in key: if _key not in ecs: attrs = [] break elif key in ecs: if only_required: attrs = [a for a in atlist if a in required] else: attrs = atlist else: attrs = [] for attr in attrs: restrictions[attr] = None else: restrictions[''] = None return restrictions
def _match_attr_name(attr, ava): local_name = None for a in ['name_format', 'friendly_name']: _val = attr.get(a) if _val: if a == 'name_format': local_name = get_local_name(acs, attr['name'], _val) else: local_name = _val break if local_name: _fn = _match(local_name, ava) else: _fn = None if not _fn: # In the unlikely case that someone has provided us with # URIs as attribute names _fn = _match(attr["name"], ava) return _fn
def filter_on_attributes(ava, required=None, optional=None, acs=None, fail_on_unfulfilled_requirements=True): """ Filter :param ava: An attribute value assertion as a dictionary :param required: list of RequestedAttribute instances defined to be required :param optional: list of RequestedAttribute instances defined to be optional :param fail_on_unfulfilled_requirements: If required attributes are missing fail or fail not depending on this parameter. :return: The modified attribute value assertion """ res = {} if required is None: required = [] nform = "friendly_name" for attr in required: try: _name = attr[nform] except KeyError: if nform == "friendly_name": _name = get_local_name(acs, attr["name"], attr["name_format"]) else: continue _fn = _match(_name, ava) if not _fn: # In the unlikely case that someone has provided us # with URIs as attribute names _fn = _match(attr["name"], ava) if _fn: try: values = [av["text"] for av in attr["attribute_value"]] except KeyError: values = [] res[_fn] = _filter_values(ava[_fn], values, True) continue elif fail_on_unfulfilled_requirements: desc = "Required attribute missing: '%s' (%s)" % (attr["name"], _name) raise MissingValue(desc) if optional is None: optional = [] for attr in optional: for nform in ["friendly_name", "name"]: if nform in attr: _fn = _match(attr[nform], ava) if _fn: try: values = [av["text"] for av in attr["attribute_value"]] except KeyError: values = [] try: res[_fn].extend(_filter_values(ava[_fn], values)) except KeyError: res[_fn] = _filter_values(ava[_fn], values) return res