Example #1
0
def test_extract_manytomany_values(data_fixture):
    row_handler = RowHandler()

    class TemporaryModel1(models.Model):
        class Meta:
            app_label = 'test'

    class TemporaryModel2(models.Model):
        field_1 = models.CharField()
        field_2 = models.ManyToManyField(TemporaryModel1)

        class Meta:
            app_label = 'test'

    values = {
        'field_1': 'Value 1',
        'field_2': ['Value 2']
    }

    values, manytomany_values = row_handler.extract_manytomany_values(
        values, TemporaryModel2
    )

    assert len(values.keys()) == 1
    assert 'field_1' in values
    assert len(manytomany_values.keys()) == 1
    assert 'field_2' in manytomany_values
Example #2
0
    def handle(self, *args, **options):
        table_id = options["table_id"]
        limit = options["limit"]
        fake = Faker()
        row_handler = RowHandler()
        cache = {}

        try:
            table = Table.objects.get(pk=table_id)
        except Table.DoesNotExist:
            self.stdout.write(
                self.style.ERROR(f"The table with id {table_id} was not "
                                 f"found."))
            sys.exit(1)

        if "add_columns" in options and options["add_columns"]:
            self.create_a_column_for_every_type(table)

        model = table.get_model()

        # Find out what the highest order is because we want to append the new rows.
        order = ceil(
            model.objects.aggregate(max=Max("order")).get("max")
            or Decimal("0"))

        for i in range(0, limit):
            # Based on the random_value function we have for each type we can
            # build a dict with a random value for each field.
            values = {
                f"field_{field_id}":
                field_object["type"].random_value(field_object["field"], fake,
                                                  cache)
                for field_id, field_object in model._field_objects.items()
            }

            values, manytomany_values = row_handler.extract_manytomany_values(
                values, model)
            order += Decimal("1")
            values["order"] = order

            # Insert the row with the randomly created values.
            instance = model.objects.create(**values)

            # Changes the set of the manytomany values.
            for field_name, value in manytomany_values.items():
                if value and len(value) > 0:
                    getattr(instance, field_name).set(value)

        self.stdout.write(
            self.style.SUCCESS(f"{limit} rows have been inserted."))
Example #3
0
    def handle(self, *args, **options):
        table_id = options['table_id']
        limit = options['limit']
        fake = Faker()
        row_handler = RowHandler()
        cache = {}

        try:
            table = Table.objects.get(pk=table_id)
        except Table.DoesNotExist:
            self.stdout.write(
                self.style.ERROR(f"The table with id {table_id} was not "
                                 f"found."))
            sys.exit(1)

        model = table.get_model()

        for i in range(0, limit):
            # Based on the random_value function we have for each type we can
            # build a dict with a random value for each field.
            values = {
                f'field_{field_id}':
                field_object['type'].random_value(field_object['field'], fake,
                                                  cache)
                for field_id, field_object in model._field_objects.items()
            }

            values, manytomany_values = row_handler.extract_manytomany_values(
                values, model)

            # Insert the row with the randomly created values.
            instance = model.objects.create(**values)

            # Changes the set of the manytomany values.
            for field_name, value in manytomany_values.items():
                if value and len(value) > 0:
                    getattr(instance, field_name).set(value)

        self.stdout.write(
            self.style.SUCCESS(f"{limit} rows have been inserted."))
Example #4
0
def test_extract_manytomany_values(data_fixture):
    row_handler = RowHandler()

    class TemporaryModel1(models.Model):
        class Meta:
            app_label = "test"

    class TemporaryModel2(models.Model):
        field_1 = models.CharField()
        field_2 = models.ManyToManyField(TemporaryModel1)

        class Meta:
            app_label = "test"

    values = {"field_1": "Value 1", "field_2": ["Value 2"]}

    values, manytomany_values = row_handler.extract_manytomany_values(
        values, TemporaryModel2)

    assert len(values.keys()) == 1
    assert "field_1" in values
    assert len(manytomany_values.keys()) == 1
    assert "field_2" in manytomany_values