Exemplo n.º 1
0
def get_archivers_for_attributes(attrs=[], archs='archiving/es/*'):
    """
    This method returns matching archivers for a list of attributes
    in simplename format (no tango host).
    
    It applies AttributeFilters as defined in Tango DB (sorted)
    """
    if isString(attrs):
        attrs = ft.find_attributes(attrs)
    else:
        attrs = attrs or get_schema_attributes('*')

    devattrs = fn.dicts.defaultdict(set)
    [devattrs[a.rsplit('/', 1)[0]].add(a) for a in attrs]

    if isSequence(archs): archs = '(%s)' % ')|('.join(archs)
    filters = get_archivers_filters(archs)
    r = devattrs.keys()
    archattrs = {}

    for i, k in enumerate(filters):
        v = filters[k]  # k is the archiver name
        k = fn.tango.parse_tango_model(k, fqdn=True).fullname
        if 'DEFAULT' in v:
            df = k
        else:
            #filtersmart(list,regexp): returns a clsearch on the list
            m = fn.filtersmart(r, v)
            currattrs = set(fn.join(*[devattrs[d] for d in m]))
            if len(currattrs):
                print(k, len(currattrs),
                      sorted(set(i.split('/')[-2] for i in m)))
                archattrs[k] = currattrs
                print('\n')
            r = [a for a in r if a not in m]

        if i == len(filters) - 1:
            k = df
            m = r
            currattrs = fn.join(*[devattrs[d] for d in m])
            if len(currattrs):
                print(k, len(currattrs),
                      sorted(set(i.split('/')[-2] for i in m)))
                archattrs[k] = currattrs

    return archattrs
Exemplo n.º 2
0
def get_archivers_for_attributes(attrs=[],archs='archiving/es/*'):
    """
    This method returns matching archivers for a list of attributes
    in simplename format (no tango host).
    
    It applies AttributeFilters as defined in Tango DB (sorted)
    """
    if isString(attrs):
        attrs = ft.find_attributes(attrs)
    else:
        attrs = attrs or get_schema_attributes('*')
    
    devattrs = fn.dicts.defaultdict(set)
    [devattrs[a.rsplit('/',1)[0]].add(a) for a in attrs];    

    if isSequence(archs): archs = '(%s)'%')|('.join(archs)
    filters = get_archivers_filters(archs)
    r = devattrs.keys()
    archattrs = {}
    
    for i,k in enumerate(filters):
        v = filters[k]
        k = fn.tango.parse_tango_model(k, fqdn = True).fullname
        if 'DEFAULT' in v:
            df = k
        else:
            m = fn.filtersmart(r,v)
            currattrs = set(fn.join(*[devattrs[d] for d in m]))
            if len(currattrs):
                print(k,len(currattrs),sorted(set(i.split('/')[-2] for i in m)))
                archattrs[k] = currattrs
                print('\n')
            r = [a for a in r if a not in m]
            
        if i == len(filters)-1:
            k = df
            m = r
            currattrs = fn.join(*[devattrs[d] for d in m])
            if len(currattrs):
                print(k,len(currattrs),sorted(set(i.split('/')[-2] for i in m)))
                archattrs[k] = currattrs
            
    return archattrs