Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
        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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
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