code: def _queue_models(self, models, context):
          
          model_queue = []
          number_remaining_models = len(models)
          # Max number of cycles allowed before we call it an infinite loop.
          MAX_CYCLES = number_remaining_models
          allowed_cycles = MAX_CYCLES
  
          while number_remaining_models > 0:
              previous_number_remaining_models = number_remaining_models
  
              model = models.pop(0)
  
              # If the model is ready to be processed, add it to the list
              if check_dependencies(model, model_queue, context["__avaliable_models"]):
                  model_class = ModelCode(model=model, context=context, stdout=self.stdout, stderr=self.stderr, options=self.options)
                  model_queue.append(model_class)
  
              # Otherwise put the model back at the end of the list
              else:
                  models.append(model)
  
              # Check for infinite loops.
              # This means there is a cyclic foreign key structure
              # That cannot be resolved by re-ordering
              number_remaining_models = len(models)
              if number_remaining_models == previous_number_remaining_models:
                  allowed_cycles -= 1
                  if allowed_cycles <= 0:
                      # Add the remaining models, but do not remove them from the model list
                      missing_models = [ModelCode(model=m, context=context, stdout=self.stdout, stderr=self.stderr, options=self.options) for m in models]
                      model_queue += missing_models
                      # Replace the models with the model class objects
                      # (sure, this is a little bit of hackery)
                      models[:] = missing_models
                      break
              else:
                  allowed_cycles = MAX_CYCLES
  
          return model_queue
docs: Work an an appropriate ordering for the models.
          This isn't essential, but makes the script look nicer because
          more instances can be defined on their first try.