Esempio n. 1
0
def get_all_links(main_object):
    """
    Get all objects that are linked but
    not dependent to the specified object.
    """
    links = SortedDict()
    fields = get_links(main_object.__class__)
    if fields :
        for name, field in fields.items() :
            link = getattr(cast_object_to_leaf_class(main_object), name)
            objects = [cast_object_to_leaf_class(k) for k in link.all()]
            if objects :
                links[field['class'].__name__] = objects 
    return links
Esempio n. 2
0
def get_all_dependencies(main_object, all_dependencies=None, level=0, starting_point=True, recursive=True):
    """
    Get recursively all objects which life
    cycle is depending on the specified object.
    """
    
    if starting_point :
        all_dependencies = list() 
    
    fields = get_dependencies(main_object.__class__)

    for name, field in fields.items() :
        lst = list()
        cast = cast_object_to_leaf_class(main_object)
        if (field['type'] != 'reverse_o2o'):
            link = getattr(cast, name)
            all = link.all()
            lst.extend(list([cast_object_to_leaf_class(k) for k in all]))
        else :
            try :
                link = getattr(cast, name)
                lst.append(link)
            except :
                pass  
        
        objects = [(k.__class__.__name__, k, field['is_required'], 20 * level) for k in lst] 
        
        if recursive and not field['type'] in ['m2m', 'reverse_m2m'] :
            for item in objects :
                all_dependencies.append(item)
                child_object = cast_object_to_leaf_class(item[1])
                cls = child_object.__class__
                get_all_dependencies(child_object, all_dependencies, level + 1, starting_point=False)  
        else :
            all_dependencies.extend(objects)
    
    if starting_point == True :
        return all_dependencies