Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
 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'
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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))
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
    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))
Ejemplo n.º 9
0
    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))
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
0
 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'
Ejemplo n.º 15
0
 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))
Ejemplo n.º 18
0
 def test_x(self):
     if django_greater_than('1.8'):
         instance = self.ddf.new(ModelForUUID)
         self.assertTrue(isinstance(instance.uuid, uuid.UUID))
Ejemplo n.º 19
0
    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):
Ejemplo n.º 20
0
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)
Ejemplo n.º 21
0
    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))