Ejemplo n.º 1
0
    def test_detect_model_dir(self):
        
        # Make sure we can detect all of our valid model dirs
        # Note: the problem model has an sdml definition, so we're testing python and sdml here
        for model_dir in CORE_DIRS:
            dir_path = os.path.join(settings.CORE_DATAMODEL_DIRS[0], model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        for model_dir in TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)
            
        # Make sure we can detect an invalid dir
        for model_dir in INVALID_TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertFalse(valid_p)
            self.assertEqual(module_name, None)
            self.assertEqual(ext, None)
Ejemplo n.º 2
0
 def setUp(self):
     super(DataModelLoaderUnitTests, self).setUp()
     self.core_loader = IndivoDataModelLoader(
         settings.CORE_DATAMODEL_DIRS[0])
     self.test_dir = os.path.join(settings.APP_HOME,
                                  'indivo/tests/data_models/test')
     self.test_loader = IndivoDataModelLoader(self.test_dir)
Ejemplo n.º 3
0
    def test_detect_model_dir(self):

        # Make sure we can detect all of our valid model dirs
        # Note: the problem model has an sdml definition, so we're testing python and sdml here
        for model_dir in CORE_DIRS:
            dir_path = os.path.join(settings.CORE_DATAMODEL_DIRS[0], model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        for model_dir in TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        # Make sure we can detect an invalid dir
        for model_dir in INVALID_TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertFalse(valid_p)
            self.assertEqual(module_name, None)
            self.assertEqual(ext, None)
Ejemplo n.º 4
0
 def unload_model_dir(self, dirpath):
     """ Unload data models that have been loaded from a directory."""
     loader = IndivoDataModelLoader(dirpath)
     models = [
         model_class
         for model_name, model_class in loader.discover_data_models()
     ]
     self.unload_models(models)
Ejemplo n.º 5
0
 def load_model_dir(self, dirpath):
     """ Load data models from a directory (like we do when running Indivo normally). """
     loader = IndivoDataModelLoader(dirpath)
     models = [
         model_class
         for model_name, model_class in loader.discover_data_models()
     ]
     self.load_models(models)
     return models
Ejemplo n.º 6
0
    def load_models(self, models):
        """ Do the heavy lifting for loading data models.
        
        Registers the models, then migrates the DB to support them.

        """

        loader = IndivoDataModelLoader('')
        for m in models:

            # Register the model in indivo.models
            loader.add_model_to_module(m.__name__, m, self.TEST_MODEL_MODULE)

            # Migrate the database to contain the model
            db.start_transaction()
            try:
                self.create_db_model(m)
            except Exception, e:
                db.rollback_transaction()
            else:
                db.commit_transaction()
Ejemplo n.º 7
0
 def unload_model_dir(self, dirpath):
     """ Unload data models that have been loaded from a directory."""
     loader = IndivoDataModelLoader(dirpath)
     models = [model_class for model_name, model_class in loader.discover_data_models()]
     self.unload_models(models)
Ejemplo n.º 8
0
 def load_model_dir(self, dirpath):
     """ Load data models from a directory (like we do when running Indivo normally). """
     loader = IndivoDataModelLoader(dirpath)
     models = [model_class for model_name, model_class in loader.discover_data_models()]
     self.load_models(models)
     return models
Ejemplo n.º 9
0
 def setUp(self):
     super(DataModelLoaderUnitTests, self).setUp()
     self.test_dir = os.path.join(settings.APP_HOME, 'indivo/tests/data_models/test')
     self.test_loader = IndivoDataModelLoader(self.test_dir)
Ejemplo n.º 10
0
class DataModelLoaderUnitTests(InternalTests):
    def setUp(self):
        super(DataModelLoaderUnitTests, self).setUp()
        self.test_dir = os.path.join(settings.APP_HOME, 'indivo/tests/data_models/test')
        self.test_loader = IndivoDataModelLoader(self.test_dir)

    def tearDown(self):
        super(DataModelLoaderUnitTests,self).tearDown()

    def test_import_data_models(self):
        
        # get the core modules, and make sure we imported them all
        self.assertModuleContains(TEST_MODULE, CORE_MODELS)

        # get the test modules, and make sure we imported them all
        self.test_loader.import_data_models(TEST_MODULE)
        self.assertModuleContains(TEST_MODULE, TEST_MODELS)

        # make sure the serializers were loaded correctly
        for model_name  in TEST_MODELS:
            model_cls = getattr(TEST_MODULE, model_name, None)
            rdf_ser = getattr(model_cls, 'to_rdf', None)
            self.assertTrue(rdf_ser)

            # Dummy input to the serializers, which produce dummy output
            rdf_output = rdf_ser(model_cls.objects.none(), 0, Record())
            self.assertTrue(rdf_output.startswith(model_name))
        

        def _find_indivo_validator(validators, validator_class):
            for v in validators:
                if isinstance(v, validator_class):
                    return v

        # make sure the field validators were loaded correctly

        # validator on TestMed.name should accept 'med1', 'med2', or None
        test_med_class = getattr(TEST_MODULE, 'TestMed')
        field = test_med_class._meta.get_field('name')
        validator = _find_indivo_validator(field.validators, ValueInSetValidator)
        self.assertNotRaises(ValidationError, validator, 'med1')
        self.assertNotRaises(ValidationError, validator, 'med2')
        self.assertNotRaises(ValidationError, validator, None)
        self.assertRaises(ValidationError, validator, 'med3')

        # validator on TestFill.supply_days should accept 30
        test_med_class = getattr(TEST_MODULE, 'TestFill')
        field = test_med_class._meta.get_field('supply_days')
        validator = _find_indivo_validator(field.validators, ExactValueValidator)
        self.assertNotRaises(ValidationError, validator, 30)
        self.assertRaises(ValidationError, validator, 29)
        self.assertRaises(ValidationError, validator, '30')
        self.assertRaises(ValidationError, validator, None)

    def test_detect_model_dir(self):
        
        # Make sure we can detect all of our valid model dirs
        # Note: the problem model has an sdml definition, so we're testing python and sdml here
        for model_dir in CORE_DIRS:
            dir_path = os.path.join(settings.CORE_DATAMODEL_DIRS[0], model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        for model_dir in TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)
            
        # Make sure we can detect an invalid dir
        for model_dir in INVALID_TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(dir_path)
            self.assertFalse(valid_p)
            self.assertEqual(module_name, None)
            self.assertEqual(ext, None)

    def test_discover_data_models(self):
        
        # Make sure we got all the test datamodels, and they are all Fact subclasses
        test_models = dict([(name, cls) for name, cls in self.test_loader.discover_data_models()])
        self.assertEqual(set(test_models.keys()), set(TEST_MODELS))
        for cls in test_models.values():
            self.assertTrue(issubclass(cls, Fact))

    def assertModuleContains(self, module, member_list):
        self.assertNotRaises(ImportError, __import__, module, fromlist=member_list)
Ejemplo n.º 11
0
class DataModelLoaderUnitTests(InternalTests):
    def setUp(self):
        super(DataModelLoaderUnitTests, self).setUp()
        self.core_loader = IndivoDataModelLoader(
            settings.CORE_DATAMODEL_DIRS[0])
        self.test_dir = os.path.join(settings.APP_HOME,
                                     'indivo/tests/data_models/test')
        self.test_loader = IndivoDataModelLoader(self.test_dir)

    def test_import_data_models(self):

        # get the core modules, and make sure we imported them all
        self.core_loader.import_data_models(TEST_MODULE)
        self.assertModuleContains(TEST_MODULE, CORE_MODELS)

        # get the test modules, and make sure we imported them all
        self.test_loader.import_data_models(TEST_MODULE)
        self.assertModuleContains(TEST_MODULE, TEST_MODELS)

        # make sure the serializers were loaded correctly
        for model_name in TEST_MODELS:
            model_cls = getattr(TEST_MODULE, model_name, None)
            rdf_ser = getattr(model_cls, 'to_rdf', None)
            self.assertTrue(rdf_ser)

            # Dummy input to the serializers, which produce dummy output
            rdf_output = rdf_ser(model_cls.objects.none(), 0, Record())
            self.assertTrue(rdf_output.startswith(model_name))

        def _find_indivo_validator(validators, validator_class):
            for v in validators:
                if isinstance(v, validator_class):
                    return v

        # make sure the field validators were loaded correctly

        # validator on TestMed.name should accept 'med1', 'med2', or None
        test_med_class = getattr(TEST_MODULE, 'TestMed')
        field = test_med_class._meta.get_field('name')
        validator = _find_indivo_validator(field.validators,
                                           ValueInSetValidator)
        self.assertNotRaises(ValidationError, validator, 'med1')
        self.assertNotRaises(ValidationError, validator, 'med2')
        self.assertNotRaises(ValidationError, validator, None)
        self.assertRaises(ValidationError, validator, 'med3')

        # validator on TestFill.supply_days should accept 30
        test_med_class = getattr(TEST_MODULE, 'TestFill')
        field = test_med_class._meta.get_field('supply_days')
        validator = _find_indivo_validator(field.validators,
                                           ExactValueValidator)
        self.assertNotRaises(ValidationError, validator, 30)
        self.assertRaises(ValidationError, validator, 29)
        self.assertRaises(ValidationError, validator, '30')
        self.assertRaises(ValidationError, validator, None)

    def test_detect_model_dir(self):

        # Make sure we can detect all of our valid model dirs
        # Note: the problem model has an sdml definition, so we're testing python and sdml here
        for model_dir in CORE_DIRS:
            dir_path = os.path.join(settings.CORE_DATAMODEL_DIRS[0], model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        for model_dir in TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertTrue(valid_p)
            self.assertEqual(module_name, MODULE_NAME)
            self.assertTrue(ext in MODULE_EXTENSIONS)

        # Make sure we can detect an invalid dir
        for model_dir in INVALID_TEST_DIRS:
            dir_path = os.path.join(self.test_dir, model_dir)
            valid_p, module_name, ext = IndivoDataModelLoader.detect_model_dir(
                dir_path)
            self.assertFalse(valid_p)
            self.assertEqual(module_name, None)
            self.assertEqual(ext, None)

    def test_discover_data_models(self):

        # Make sure we got all the core datamodels, and they are all Fact subclasses
        core_models = dict([
            (name, cls)
            for name, cls in self.core_loader.discover_data_models()
        ])
        self.assertEqual(set(core_models.keys()), set(CORE_MODELS))
        for cls in core_models.values():
            self.assertTrue(issubclass(cls, Fact))

        # Make sure we got all the test datamodels, and they are all Fact subclasses
        test_models = dict([
            (name, cls)
            for name, cls in self.test_loader.discover_data_models()
        ])
        self.assertEqual(set(test_models.keys()), set(TEST_MODELS))
        for cls in test_models.values():
            self.assertTrue(issubclass(cls, Fact))

    def assertModuleContains(self, module, member_list):
        self.assertNotRaises(ImportError,
                             __import__,
                             module,
                             fromlist=member_list)