def sort_tables(tables, skip_fn=None, extra_dependencies=None):
 tables = list(tables)
 tuples = []
 if (extra_dependencies is not None):
  tuples.extend(extra_dependencies)
 def visit_foreign_key(fkey):
  if fkey.use_alter:
   return
  elif (skip_fn and skip_fn(fkey)):
   return
  parent_table = fkey.column.table
  if (parent_table in tables):
   child_table = fkey.parent.table
   if (parent_table is not child_table):
    tuples.append((parent_table, child_table))
 for table in tables:
  traverse(table, {'schema_visitor': True}, {'foreign_key': visit_foreign_key})
  tuples.extend(([parent, table] for parent in table._extra_dependencies))
 return list(topological.sort(tuples, tables))

def sort_tables ( tables , skip_fn = None , extra_dependencies = None ) : tables = list ( tables ) tuples = [ ] if ( extra_dependencies is not None ) : tuples . extend ( extra_dependencies ) def visit_foreign_key ( fkey ) : if fkey . use_alter : return elif ( skip_fn and skip_fn ( fkey ) ) : return parent_table = fkey . column . table if ( parent_table in tables ) : child_table = fkey . parent . table if ( parent_table is not child_table ) : tuples . append ( ( parent_table , child_table ) ) for table in tables : traverse ( table , { 'schema_visitor' : True } , { 'foreign_key' : visit_foreign_key } ) tuples . extend ( ( [ parent , table ] for parent in table . _extra_dependencies ) ) return list ( topological . sort ( tuples , tables ) )
sort a collection of table objects in order of their foreign-key dependency .