2016-03-23 16 views
-1

Ich schreibe Tests für model_mommy, sehr nützliche gefälschte Objekte für Django. Ich möchte einen schnellen Weg, um das Skript autark zu machen, und es muss nur Tests für Ihre benutzerdefinierten Apps in Ihrem Django-Projekt schreiben. Im Moment kann es Tests finden und schreiben für alle Apps, die Sie verwenden, wie auth und tagging, die Sie nicht geschrieben haben. Sie können das Skript verwenden, wenn Sie Mommy verwenden (oder für den Mixer ändern, sollte es auch funktionieren). Was ist ein reibungsloser Weg ohne eine unordentliche os.walk zu finden, welche Apps sind eigentlich meins? Dankeunterscheiden zwischen benutzerdefinierten und 3rd Party/Inzucht-Apps; django

https://gist.github.com/codyc4321/81cbb25f99f2af709c03

+0

ist das wirklich unklar? Ich möchte zwischen benutzerdefinierten und 3rd-Party-Apps unterscheiden, hoffentlich direkt innerhalb der "django.apps.apps" -Funktion. das scheint überhaupt nicht unklar zu sein – codyc4321

Antwort

0
class ModelRunner(object): 

    def __init__(self, starting_path): 
     self.start_path = starting_path 

    @property 
    def model_files(self): 
     model_files = [] 
     for root, dirs, files in os.walk(self.start_path): 
      for f in files: 
       if self.is_regular_models_file(f): 
        filename = os.path.join(root, f) 
        model_files.append(filename) 
      for d in dirs: 
       if self.is_models_dir(d): 
        model_files.extend(self.get_models_files_from_models_folder(os.path.join(root, d))) 
     return model_files 

    def get_models_files_from_models_folder(self, filepath): 
     for root, _, files in os.walk(filepath): 
      model_files = [] 
      for f in files: 
       if f not in ['__init__.py'] and '.pyc' not in f: 
        filename = os.path.join(root, f) 
        model_files.append(filename) 
      return model_files 

    @property 
    def apps(self): 
     apps = [] 
     for f in self.model_files: 
      apps.append(self.get_app_name_from_file(f)) 
     return apps 

    def get_app_name_from_file(self, filepath): 

     def find_models_dir(path): 
      head, name = os.path.split(path) 
      return path if name == 'models' else find_models_dir(head) 

     if self.is_regular_models_file(filepath): 
      head, _ = os.path.split(filepath) 
      _, app_name = os.path.split(head) 
      return app_name 
     else: 
      return find_models_dir(filepath) 

    def is_regular_models_file(self, filepath): 
     return get_filename(filepath) == 'models.py' 

    def is_models_dir(self, filepath): 
     return get_filename(filepath) == 'models'