示例#1
0
    def path(self, path, saltenv=None, path_type=None):
        '''
        Relative salt path is the base path that all paths rely on.  Any
        conversions from formats that are not relative will happen here.

        :param path:
        :param saltenv:
        :param path_type:
        '''
        if isinstance(path, list):
            return [self.path(p, saltenv) for p in path]

        path_type = path_type or self.path_type(path, saltenv)

        # XXX: Grabs 1st entry.  Maybe need more logic
        if path_type in ['toppath']:
            tops = self.files(saltenv=saltenv, toppath=path)
            try:
                topinfo = next(iter(tops))
                relpath = matcher.getter('relpath', topinfo)
                return relpath(topinfo)

            except StopIteration:
                return ''

        return super(TopUtils, self).path(path, saltenv, path_type=path_type)
示例#2
0
    def include_links(self, tops):
        includes = []
        try:
            top = next(iter(tops))
            saltenv = matcher.getter('saltenv', top)
            abspath = matcher.getter('abspath', top)

        except StopIteration:
            return includes

        for topinfo in tops:
            if os.path.islink(abspath(topinfo)):
                realpath = os.path.realpath(abspath(topinfo))
                includes.extend(
                    self.files(
                        saltenv=saltenv(topinfo),
                        abspath=realpath
                    )
                )

        return includes
    def add_field_item(group_list, info):
        '''
        Field value to add.  Will be added to dictionary[key]
        as its value.

        Parameters
        ----------
        group_list
        info
        '''
        field_key = matcher.getter(field, info)
        value = field_key(info)
        if value not in group_list:
            group_list.append(value)
        return group_list
    def add_field_item(group_list, info):
        '''
        Field value to add.  Will be added to dictionary[key]
        as its value.

        Parameters
        ----------
        group_list
        info
        '''
        field_key = matcher.getter(field, info)
        value = field_key(info)
        if value not in group_list:
            group_list.append(value)
        return group_list
def flatten(key, sequence):
    '''
    Flattens (reduces) sequence by key. Returns a list.

    Parameters
    ----------
    key:
        sequence key of data to flatten

    sequence:
        list of objects

    Example
    -------

    >>> data = [
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/init.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/test.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'all',
    ...      'relpath': 'demo/demo.sls',
    ...      'is_pillar': True}
    ... ]

    >>> flatten('relpath', data)

    ['test/init.sls', 'test/test.sls', 'demo/demo.sls']
    '''
    if not sequence:
        return []

    try:
        # Mapping
        return sorted(chain.from_iterable(sequence.values()))
    except AttributeError:
        # Sequence
        getter = matcher.getter(key, *sequence)
        return sorted(
            imap(lambda s: getter(s), sequence)
        )  # pylint: disable=W0108
def flatten(key, sequence):
    '''
    Flattens (reduces) sequence by key. Returns a list.

    Parameters
    ----------
    key:
        sequence key of data to flatten

    sequence:
        list of objects

    Example
    -------

    >>> data = [
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/init.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/test.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'all',
    ...      'relpath': 'demo/demo.sls',
    ...      'is_pillar': True}
    ... ]

    >>> flatten('relpath', data)

    ['test/init.sls', 'test/test.sls', 'demo/demo.sls']
    '''
    if not sequence:
        return []

    try:
        # Mapping
        return sorted(chain.from_iterable(sequence.values()))
    except AttributeError:
        # Sequence
        getter = matcher.getter(key, *sequence)
        return sorted(imap(lambda s: getter(s), sequence))  # pylint: disable=W0108
 def get(element, key):
     return matcher.getter(key, element)(element)
def reduceby(key, field, sequence):
    '''
    Groups sequence by group key and reduces (only contains) values from
    the field key. Returns a dictionary.

    Parameters
    ----------
    key:
        sequence key to use to group data

    field:
        sequence key used to populate group data

    sequence:
        list of objects

    Example
    -------

    >>> data = [
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/init.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/test.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'all',
    ...      'relpath': 'demo/demo.sls',
    ...      'is_pillar': True}
    ... ]

    >>> reduceby('saltenv', 'relpath', data)

    {'all': ['demo/demo.sls'], 'base': ['test/init.sls', 'test/test.sls']}
    '''
    def add_field_item(group_list, info):
        '''
        Field value to add.  Will be added to dictionary[key]
        as its value.

        Parameters
        ----------
        group_list
        info
        '''
        field_key = matcher.getter(field, info)
        value = field_key(info)
        if value not in group_list:
            group_list.append(value)
        return group_list

    odict = OrderedDict()

    if not sequence:
        return odict

    getter = matcher.getter(key, *sequence)
    for item in sequence:
        key = getter(item)
        if key not in odict:
            odict[key] = list()
        odict[key] = add_field_item(odict[key], item)
    return odict
 def get(element, key):
     return matcher.getter(key, element)(element)
def reduceby(key, field, sequence):
    '''
    Groups sequence by group key and reduces (only contains) values from
    the field key. Returns a dictionary.

    Parameters
    ----------
    key:
        sequence key to use to group data

    field:
        sequence key used to populate group data

    sequence:
        list of objects

    Example
    -------

    >>> data = [
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/init.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'base',
    ...      'relpath': 'test/test.sls',
    ...      'is_pillar': True},
    ...     {'saltenv': 'all',
    ...      'relpath': 'demo/demo.sls',
    ...      'is_pillar': True}
    ... ]

    >>> reduceby('saltenv', 'relpath', data)

    {'all': ['demo/demo.sls'], 'base': ['test/init.sls', 'test/test.sls']}
    '''

    def add_field_item(group_list, info):
        '''
        Field value to add.  Will be added to dictionary[key]
        as its value.

        Parameters
        ----------
        group_list
        info
        '''
        field_key = matcher.getter(field, info)
        value = field_key(info)
        if value not in group_list:
            group_list.append(value)
        return group_list

    odict = OrderedDict()

    if not sequence:
        return odict

    getter = matcher.getter(key, *sequence)
    for item in sequence:
        key = getter(item)
        if key not in odict:
            odict[key] = list()
        odict[key] = add_field_item(odict[key], item)
    return odict