def test_new_fill_formatted_strings_fields_with_basic_values(self): instance = self.ddf.new(ModelWithFieldsWithCustomValidation) self.assertTrue(isinstance(instance.email, six.text_type)) self.assertTrue(isinstance(instance.url, six.text_type)) self.assertTrue(isinstance(instance.ip, six.text_type)) if django_greater_than('1.4'): self.assertTrue(isinstance(instance.ipv6, six.text_type))
def test_new_fill_formatted_strings_fields_with_basic_values(self): instance = self.ddf.new(ModelWithFieldsWithCustomValidation) self.assertTrue(isinstance(instance.email, six.text_type)) self.assertTrue(isinstance(instance.url, six.text_type)) self.assertTrue(isinstance(instance.ip, six.text_type)) if django_greater_than('1.4'): self.assertTrue(isinstance(instance.ipv6, six.text_type))
class ModelWithFieldsWithCustomValidation(models.Model): email = models.EmailField(null=True, unique=True) url = models.URLField(null=True, unique=True) ip = models.IPAddressField(null=True, unique=False) if django_greater_than('1.4'): ipv6 = models.GenericIPAddressField(null=True, unique=False) class Meta: verbose_name = 'Custom validation'
def test_geodjango_fields(self): if django_greater_than('1.7'): instance = self.ddf.new(ModelForGeoDjango) self.assertTrue(isinstance(instance.geometry, GEOSGeometry), msg=str(type(instance.geometry))) self.assertTrue(isinstance(instance.point, Point)) self.assertTrue(isinstance(instance.line_string, LineString)) self.assertTrue(isinstance(instance.polygon, Polygon)) self.assertTrue(isinstance(instance.multi_point, MultiPoint)) self.assertTrue(isinstance(instance.multi_line_string, MultiLineString)) self.assertTrue(isinstance(instance.multi_polygon, MultiPolygon)) self.assertTrue(isinstance(instance.geometry_collection, GeometryCollection))
def test_json_field_not_registered_must_raise_an_unsupported_field_exception(self): # jsonfield requires Django 1.4+ if django_greater_than('1.4'): try: from jsonfield import JSONCharField, JSONField instance = self.ddf.new(ModelForPlugins1) self.assertEquals(True, False, msg='JSON fields must not be supported by default') except ImportError: pass except UnsupportedFieldError as e: pass
def test_geodjango_fields(self): if django_greater_than('1.7'): instance = self.ddf.new(ModelForGeoDjango) self.assertTrue(isinstance(instance.geometry, GEOSGeometry), msg=str(type(instance.geometry))) self.assertTrue(isinstance(instance.point, Point)) self.assertTrue(isinstance(instance.line_string, LineString)) self.assertTrue(isinstance(instance.polygon, Polygon)) self.assertTrue(isinstance(instance.multi_point, MultiPoint)) self.assertTrue(isinstance(instance.multi_line_string, MultiLineString)) self.assertTrue(isinstance(instance.multi_polygon, MultiPolygon)) self.assertTrue(isinstance(instance.geometry_collection, GeometryCollection))
def test_json_field_not_registered_must_raise_an_unsupported_field_exception(self): # jsonfield requires Django 1.4+ if django_greater_than('1.4'): try: from jsonfield import JSONCharField, JSONField instance = self.ddf.new(ModelForPlugins1) self.assertEquals(True, False, msg='JSON fields must not be supported by default') except ImportError: pass except UnsupportedFieldError as e: pass
def test_new_fill_binary_fields_with_basic_data(self): if django_greater_than('1.6'): value = b'\x00\x46\xFE' instance = self.ddf.new(ModelWithBinary, binary=value) self.assertEqual(bytes(instance.binary), bytes(value)) instance = self.ddf.get(ModelWithBinary) if six.PY3: self.assertTrue(isinstance(instance.binary, six.binary_type), msg=type(instance.binary)) else: self.assertTrue(isinstance(instance.binary, (six.binary_type, str, unicode)), msg=type(instance.binary))
def test_new_fill_binary_fields_with_basic_data(self): if django_greater_than('1.6'): value = b'\x00\x46\xFE' instance = self.ddf.new(ModelWithBinary, binary=value) self.assertEqual(bytes(instance.binary), bytes(value)) instance = self.ddf.get(ModelWithBinary) if six.PY3: self.assertTrue(isinstance(instance.binary, six.binary_type), msg=type(instance.binary)) else: self.assertTrue(isinstance(instance.binary, (six.binary_type, str, unicode)), msg=type(instance.binary))
def new(self, model_class, shelve=False, named_shelve=None, persist_dependencies=True, **kwargs): """ Create an instance filled with data without persist it. 1) validate all kwargs match Model.fields. 2) validate model is a model.Model class. 3) Iterate model fields: for each field, fill it with data. :shelve: the current configuration will be stored in the DDF library. It can be True or a string (named shelve). :named_shelve: restore configuration saved in DDF library with a name. :persist_dependencies: tell if internal dependencies will be saved in the database or not. """ from django_dynamic_fixture.global_settings import DDF_IGNORE_FIELDS if self.debug_mode: LOGGER.debug('>>> [%s] Generating instance.' % get_unique_model_name(model_class)) configuration = self._configure_params(model_class, shelve, named_shelve, **kwargs) instance = model_class() if not is_model_class(instance): raise InvalidModelError(get_unique_model_name(model_class)) for field in get_fields_from_model(model_class): if is_key_field(field) and 'id' not in configuration: continue if field.name in self.ignore_fields: continue if field.name in DDF_IGNORE_FIELDS and field.name not in configuration: continue if django_greater_than('1.8'): model_name = model_class._meta.model_name else: model_name = model_class._meta.module_name if ("%s.%s.%s" % (model_class._meta.app_label, model_name, field.name) in DDF_IGNORE_FIELDS and field.name not in configuration): continue self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration) number_of_pending_fields = len(self.pending_fields) # For Copier fixtures: dealing with pending fields that need to receive values of another fields. i = 0 while self.pending_fields != []: field_name = self.pending_fields.pop(0) field = get_field_by_name_or_raise(model_class, field_name) self.set_data_for_a_field(model_class, instance, field, persist_dependencies=persist_dependencies, **configuration) i += 1 if i > 2 * number_of_pending_fields: # dealing with infinite loop too. raise InvalidConfigurationError(get_unique_field_name(field), 'Cyclic dependency of Copiers.') if self.debug_mode: LOGGER.debug('<<< [%s] Instance created.' % get_unique_model_name(model_class)) return instance
def test_new_fill_json_field_with_data_generated_by_plugins(self): # jsonfield requires Django 1.4+ if django_greater_than('1.4'): try: import json from jsonfield import JSONCharField, JSONField data_fixture.plugins = django.conf.settings.DDF_FIELD_FIXTURES try: instance = self.ddf.new(ModelForPlugins1) self.assertTrue(isinstance(instance.json_field1, str), msg=type(instance.json_field1)) self.assertTrue(isinstance(instance.json_field2, str), msg=type(instance.json_field2)) self.assertTrue(isinstance(json.loads(instance.json_field1), dict)) self.assertTrue(isinstance(json.loads(instance.json_field2), list)) self.assertEquals(instance.json_field1, '{"some random value": "c"}') self.assertEquals(instance.json_field2, '[1, 2, 3]') finally: data_fixture.plugins = {} except ImportError: pass
def test_new_fill_json_field_with_data_generated_by_plugins(self): # jsonfield requires Django 1.4+ if django_greater_than('1.4'): try: import json from jsonfield import JSONCharField, JSONField data_fixture.plugins = django.conf.settings.DDF_FIELD_FIXTURES try: instance = self.ddf.new(ModelForPlugins1) self.assertTrue(isinstance(instance.json_field1, str), msg=type(instance.json_field1)) self.assertTrue(isinstance(instance.json_field2, str), msg=type(instance.json_field2)) self.assertTrue(isinstance(json.loads(instance.json_field1), dict)) self.assertTrue(isinstance(json.loads(instance.json_field2), list)) self.assertEquals(instance.json_field1, '{"some random value": "c"}') self.assertEquals(instance.json_field2, '[1, 2, 3]') finally: data_fixture.plugins = {} except ImportError: pass
class GeoDjangoDataFixture(BaseDataFixture, GeoDjangoDataFixture): pass class BaseDataFixtureTestCase(TestCase): def setUp(self): self.fixture = BaseDataFixture() def test_uuid(self): if django_greater_than('1.8'): self.assertTrue( isinstance(self.fixture.generate_data(models.UUIDField()), uuid.UUID)) if django_greater_than('1.7') and settings.DDF_TEST_GEODJANGO: class GeoDjangoDataFixtureTestCase(TestCase): def setUp(self): self.fixture = GeoDjangoDataFixture() def test_geometryfield_config(self): self.assertTrue( isinstance( self.fixture.generate_data(geomodels.GeometryField()), GEOSGeometry)) def test_pointfield_config(self): self.assertTrue( isinstance(self.fixture.generate_data(geomodels.PointField()), Point))
class Meta: verbose_name = 'Booleans' app_label = 'django_dynamic_fixture' class ModelWithDateTimes(models.Model): date = models.DateField(null=True, unique=True) datetime = models.DateTimeField(null=True, unique=True) time = models.TimeField(null=True, unique=True) class Meta: verbose_name = 'DateTimes' app_label = 'django_dynamic_fixture' if django_greater_than('1.6'): class ModelWithBinary(models.Model): binary = models.BinaryField() class Meta: app_label = 'django_dynamic_fixture' class ModelWithFieldsWithCustomValidation(models.Model): email = models.EmailField(null=True, unique=True) url = models.URLField(null=True, unique=True) ip = models.IPAddressField(null=True, unique=False) if django_greater_than('1.4'): ipv6 = models.GenericIPAddressField(null=True, unique=False) class Meta: verbose_name = 'Custom validation' app_label = 'django_dynamic_fixture'
def test_x(self): if django_greater_than('1.8'): instance = self.ddf.new(ModelForUUID) self.assertTrue(isinstance(instance.uuid, uuid.UUID))
def test_formatted_strings(self): self.assertTrue(isinstance(self.fixture.generate_data(models.EmailField(max_length=100)), six.text_type)) self.assertTrue(isinstance(self.fixture.generate_data(models.URLField(max_length=100)), six.text_type)) self.assertTrue(isinstance(self.fixture.generate_data(models.IPAddressField(max_length=100)), six.text_type)) if django_greater_than('1.4'): self.assertTrue(isinstance(self.fixture.generate_data(models.GenericIPAddressField(max_length=100)), six.text_type))
def test_uuid(self): if django_greater_than('1.8'): self.assertTrue( isinstance(self.fixture.generate_data(models.UUIDField()), uuid.UUID))
def test_x(self): if django_greater_than('1.8'): instance = self.ddf.new(ModelForUUID) self.assertTrue(isinstance(instance.uuid, uuid.UUID))
nullboolean = models.NullBooleanField() class Meta: verbose_name = 'Booleans' class ModelWithDateTimes(models.Model): date = models.DateField(null=True, unique=True) datetime = models.DateTimeField(null=True, unique=True) time = models.TimeField(null=True, unique=True) class Meta: verbose_name = 'DateTimes' if django_greater_than('1.6'): class ModelWithBinary(models.Model): binary = models.BinaryField() class ModelWithFieldsWithCustomValidation(models.Model): email = models.EmailField(null=True, unique=True) url = models.URLField(null=True, unique=True) ip = models.IPAddressField(null=True, unique=False) if django_greater_than('1.4'): ipv6 = models.GenericIPAddressField(null=True, unique=False) class Meta: verbose_name = 'Custom validation' class ModelWithFileFields(models.Model):
from django.apps import apps from django_dynamic_fixture.ddf import DynamicFixture, Copier, DDFLibrary, \ set_pre_save_receiver, set_post_save_receiver from django_dynamic_fixture.django_helper import print_field_values, django_greater_than from django_dynamic_fixture.fixture_algorithms.sequential_fixture import SequentialDataFixture, \ StaticSequentialDataFixture from django_dynamic_fixture.global_settings import DDF_DEFAULT_DATA_FIXTURE, DDF_FILL_NULLABLE_FIELDS, DDF_FK_MIN_DEPTH, \ DDF_IGNORE_FIELDS, DDF_VALIDATE_MODELS, \ DDF_DEBUG_MODE, DDF_FIELD_FIXTURES from django_dynamic_fixture.script_ddf_checkings import ddf_check_models __version__ = '3.0.3' if not django_greater_than('1.10'): warnings.warn("DDF supports oficially only Django 1.11 or higher.", DeprecationWarning) LOOKUP_SEP = '__' def look_up_alias(ddf_as_f=True, **kwargs): """ Example of parameters: a__b__c=1 => {a: {b: {c: 1}}} """ field_dict = {} params_to_be_skipped = [] for alias, value in kwargs.items(): parts = alias.split(LOOKUP_SEP)
class Meta: verbose_name = 'Booleans' app_label = 'django_dynamic_fixture' class ModelWithDateTimes(models.Model): date = models.DateField(null=True, unique=True) datetime = models.DateTimeField(null=True, unique=True) time = models.TimeField(null=True, unique=True) class Meta: verbose_name = 'DateTimes' app_label = 'django_dynamic_fixture' if django_greater_than('1.6'): class ModelWithBinary(models.Model): binary = models.BinaryField() class Meta: app_label = 'django_dynamic_fixture' class ModelWithFieldsWithCustomValidation(models.Model): email = models.EmailField(null=True, unique=True) url = models.URLField(null=True, unique=True) ip = models.IPAddressField(null=True, unique=False) if django_greater_than('1.4'): ipv6 = models.GenericIPAddressField(null=True, unique=False)
def test_uuid(self): if django_greater_than('1.8'): self.assertTrue(isinstance(self.fixture.generate_data(models.UUIDField()), uuid.UUID))