Exemple #1
0
    def test_value_property_getter_and_setter_works_with_enum_field(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        enum_field = Field(name="Car Type",
                           field_type=Field.ENUM_FIELD,
                           risk_type=risk_type)
        enum_field.save()

        option_sedan = OptionValue.objects.create(value="Sedan")
        option_suv = OptionValue.objects.create(value="SUV")
        option_hatchback = OptionValue.objects.create(value="Hatchback")

        enum_field.options.add(option_suv)
        enum_field.options.add(option_sedan)
        enum_field.options.add(option_hatchback)

        risk = Risk.objects.create(risk_type=risk_type)
        field_value = FieldValue(field=enum_field, risk=risk)
        field_value.value = option_sedan

        self.assertEqual(field_value.value_option, option_sedan)

        field_value.save()

        self.assertEqual(field_value.value, field_value.value_option)
 def create_fields(self, entity, fields):
     for k, v in fields.items():
         field_type = self.MAP_TYPES[v[0]]
         field = Field(entity=entity, name=k, field_type=field_type)
         if field_type == self.MAP_TYPES['string']:
             field.precision = 200
         yield field
    def handle(self, *args, **options):

        user_list = create_user()
        field_list = []
        field_type = ["date", "string"]
        for i in range(100):
            choice = random.choice(field_type)
            f1 = Field(field_type=choice, field_name=f"choice_{i}")
            f1.save()
            field_list.append(f1)

        for i in range(2000000):
            rand_user = random.randrange(0, 9999)
            u = user_list[rand_user]
            rand_field = random.randrange(0, 99)
            field = field_list[rand_field]
            field_data = []
            if field.field_type == "date":
                rand_hour = random.randrange(0, 23)
                rand_minute = random.randrange(0, 59)
                today = datetime.now().date()
                if i > 1000000:
                    today = datetime.now().date() + timedelta(days=1)
                random_date = datetime(today.year, today.month, today.day,
                                       rand_hour, rand_minute)
                field_value = FieldValue(field=field,
                                         date_value=random_date,
                                         user=u)
                field_data.append(field_value)
            else:
                field_value = FieldValue(field=field,
                                         string_value=f"string_{i}",
                                         user=u)
                field_data.append(field_value)
        FieldValue.objects.bulk_create(field_data)

        date_fields = Field.objects.filter(field_type="date")[20:]
        date_len = len(date_fields)
        for i in range(date_len):
            if len(date_fields) == 0:
                break
            rand_hour = random.randrange(0, 11)
            rand_minute = random.randrange(0, 59)
            period = random.choice(["am", "pm"])
            offset_type = random.choice(
                ["on_days", "days_before", "days_after"])
            date_offset = 0
            if offset_type != "on_days":
                date_offset = random.randrange(0, 5)
            trigger = Trigger(
                field=date_fields[i],
                time=f"{rand_hour}:{rand_minute}",
                period=period,
                offset_type=offset_type,
                date_offset=date_offset,
            )
            trigger.save()
Exemple #4
0
    def test_string_representation(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        field = Field(name="Name",
                      description="Name of car",
                      field_type=Field.TEXT_FIELD,
                      risk_type=risk_type)
        field.save()

        self.assertEqual(field.__str__(), field.name)
    def handle(self, *args, **kwargs):
        csv_filename = kwargs["csv_filename"]
        table = rows.import_from_csv(
            csv_filename, force_types={"options": rows.fields.JSONField})
        expected_field_names = set(
            "dataset_slug description frontend_filter has_choices "
            "link_template order null name options obfuscate show "
            "show_on_frontend table_name title type version_name".split())
        if set(table.field_names) != expected_field_names:
            raise ValueError("Field names didn't match")

        with transaction.atomic():
            fields_to_add = []
            for row in table:
                # First pass: get objects from database: won't add Field here,
                # since if there are errors, the script will raise exception inside
                # this first `for`.
                row = row._asdict()
                row["version_name"] = str(row["version_name"])
                row["dataset"] = Dataset.objects.get(
                    slug=row.pop("dataset_slug"))
                row["version"] = Version.objects.get(
                    dataset=row["dataset"], name=row.pop("version_name"))
                row["table"] = Table.with_hidden.get(
                    dataset=row["dataset"],
                    version=row["version"],
                    name=row.pop("table_name"),
                )
                existing_field = Field.objects.filter(
                    dataset=row["dataset"],
                    version=row["version"],
                    table=row["table"],
                    name=row["name"],
                )
                if not existing_field.exists():
                    action = "created"
                    field = Field(**row)
                else:
                    action = "updated"
                    field = existing_field.first()
                    for key, value in row.items():
                        if key in ("dataset", "version", "table"):
                            continue
                        setattr(field, key, value)
                fields_to_add.append((action, field))

            for action, field in fields_to_add:
                print(f"{action}: {field}")
                field.save()
Exemple #6
0
    def test_string_representation(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        risk = Risk.objects.create(risk_type=risk_type)

        field = Field(name="Name",
                      description="Name of car",
                      field_type=Field.TEXT_FIELD,
                      risk_type=risk_type)
        field.save()

        field_value = FieldValue(field=field, risk=risk, value_text="Honda")
        field_value.save()

        self.assertEqual(field_value.__str__(), field_value.value_text)
Exemple #7
0
    def test_value_property_getter_and_setter_works_with_date_field(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        date_field = Field(name="Purchase Date",
                           field_type=Field.DATE_FIELD,
                           risk_type=risk_type)
        date_field.save()

        risk = Risk.objects.create(risk_type=risk_type)
        field_value = FieldValue(field=date_field, risk=risk)
        field_value.value = timezone.now().date()

        self.assertEqual(field_value.value_date, timezone.now().date())

        field_value.save()

        self.assertEqual(field_value.value, field_value.value_date)
Exemple #8
0
    def test_value_property_getter_and_setter_works_with_number_field(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        number_field = Field(name="Model No.",
                             description="Model serial no.",
                             field_type=Field.NUMBER_FIELD,
                             risk_type=risk_type)
        number_field.save()

        risk = Risk.objects.create(risk_type=risk_type)

        field_value = FieldValue(field=number_field, risk=risk)
        field_value.value = 12345

        self.assertEqual(field_value.value_number, 12345)

        field_value.save()

        self.assertEqual(field_value.value, field_value.value_number)
Exemple #9
0
    def test_value_property_getter_and_setter_works_with_text_field(self):
        risk_type = RiskType(name="Car", description="Risk template for car")
        risk_type.save()

        text_field = Field(name="Name",
                           description="Name of car",
                           field_type=Field.TEXT_FIELD,
                           risk_type=risk_type)
        text_field.save()

        risk = Risk.objects.create(risk_type=risk_type)

        field_value = FieldValue(field=text_field, risk=risk)
        field_value.value = "Honda"

        self.assertEqual(field_value.value_text, "Honda")

        field_value.save()

        self.assertEqual(field_value.value, field_value.value_text)
Exemple #10
0
    def handle(self, *args, **kwargs):
        csv_filename = kwargs["csv_filename"]
        table = rows.import_from_csv(
            csv_filename, force_types={"options": rows.fields.JSONField})
        expected_fieldset = set(
            "dataset_slug description frontend_filter has_choices "
            "link_template order null name options obfuscate show "
            "show_on_frontend table_name title type version_name searchable".
            split())
        fieldset = set(table.field_names)
        if fieldset != expected_fieldset:
            raise ValueError(
                f"Field names didn't match ({fieldset - expected_fieldset} / {expected_fieldset - fieldset})"
            )

        with transaction.atomic():
            fields_to_save, tables_created = [], []
            for row in table:
                # First pass: get objects from database: won't add Field here,
                # since if there are errors, the script will raise exception inside
                # this first `for`.
                row = row._asdict()
                row["version_name"] = str(row["version_name"])
                row["dataset"], _ = Dataset.objects.get_or_create(
                    slug=row.pop("dataset_slug"), defaults={"show": True})
                row["version"], _ = Version.objects.get_or_create(
                    dataset=row["dataset"],
                    name=row.pop("version_name"),
                    defaults={
                        "collected_at": timezone.now(),
                        "order": 1
                    },
                )
                row["table"], table_created = Table.with_hidden.get_or_create(
                    dataset=row["dataset"],
                    version=row["version"],
                    name=row.pop("table_name"),
                    defaults={
                        "default": False,
                        "ordering": ["id"],
                        "search_fields": []
                    },
                )
                existing_field = Field.objects.filter(
                    dataset=row["dataset"],
                    version=row["version"],
                    table=row["table"],
                    name=row["name"],
                )
                if not existing_field.exists():
                    action = "created"
                    field = Field(**row)
                else:
                    action = "updated"
                    field = existing_field.first()
                    for key, value in row.items():
                        if key in ("dataset", "version", "table"):
                            continue
                        setattr(field, key, value)
                fields_to_save.append((action, field))
                if table_created:
                    tables_created.append(row["table"])

            for table in tables_created:
                table.search_fields = [
                    field.name for action, field in fields_to_save
                    if field.table == table and field.type in (
                        "text", "string") and field.searchable
                ]
                table.save()

            for action, field in fields_to_save:
                print(f"{action}: {field}")
                field.save()