Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python

class P(object):
   
def __init__(self, pkg, requires):
       
self.requires = requires
       
self.pkg      = pkg
       
self.Required = 0

   
def __str__(self):
       
return self.pkg

   
def __repr__(self):
       
return self.__str__()

   
def Require(self, pkg):
       
if str(pkg) in self.requires:
           
return True
       
return False


objs
= []
# The proper dependancy order is:
# e f b g d c a
objs
.append(P('a', ['b', 'c', 'd']))
objs
.append(P('b', ['f']))
objs
.append(P('c', ['d', 'e']))
objs
.append(P('d', ['g']))
objs
.append(P('e', []))
objs
.append(P('f', ['e']))
objs
.append(P('g', []))

print(objs)
changes
= True
iters  
= 0
while changes:
    changes
= False
   
if iters >= 5000:
       
print('Poor man\'s circular dependancy detection triggered!')
       
break
   
else:
        iters
+= 1
   
for a in range(0, len(objs)):
       
for b in range(0, len(objs)):
           
if objs[b].Require(objs[a]):
               
if b < a:
                    objs
.insert(a, objs.pop(b))
                    changes
= True
                   
break
       
if changes:
           
break
   
if not changes:
       
break
print(objs)

History