def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} model = self.model name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): formatters[field_name] = self.build_relation(field, field.rel.to) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): formatters[field_name] = self.build_relation( field, field.rel.to) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
def guess_field_formatters(self, faker, formatters=None): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object :param formatters: this is 'customFieldFormatters' - optional dict with field as key and callable as value :type formatters: dict or None """ if not formatters: formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if field.primary_key: continue # If user provides dict with data in 'seeder.add_entity(Model, num, data)', no reason to guess format. # Also user can provide field which is not covered in FieldTypeGuesser and 'raise AttributeError(field)' # will not be raised. if field_name in formatters: continue if field.get_default(): formatters[field_name] = field.get_default() continue if isinstance(field, OneToOneField): existing = set() formatters[field_name] = self.build_one_relation( field, field.related_model, existing) continue if isinstance(field, ForeignKey): formatters[field_name] = self.build_relation( field, field.related_model) continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue for field in self.model._meta.many_to_many: self.many_relations[field.name] = self.build_many_relation( field, field.related_model) return formatters
class NameGuesserTestCase(TestCase): def setUp(self): self.instance = NameGuesser(fake) def test_guess_format_timezone(self): test_names = ('something_at', 'something_At', 'gameUpdated_At', 'game_created_at') with django_setting('USE_TZ', True): for name in test_names: value = self.instance.guess_format(name)(datetime.now()) self.assertTrue(timezone.is_aware(value)) with django_setting('USE_TZ', False): for name in test_names: value = self.instance.guess_format(name)(datetime.now()) self.assertFalse(timezone.is_aware(value))
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if field.get_default(): formatters[field_name] = field.get_default() continue if isinstance(field, OneToOneField): existing = set() formatters[field_name] = self.build_one_relation(field, field.related_model, existing) continue if isinstance(field, ForeignKey): formatters[field_name] = self.build_relation(field, field.related_model) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue for field in self.model._meta.many_to_many: self.many_relations[field.name] = self.build_many_relation(field, field.related_model) return formatters
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} model = self.model name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): related_model = field.rel.to def build_relation(inserted): if related_model in inserted and inserted[related_model]: pk = random.choice(inserted[related_model]) return related_model.objects.get(pk=pk) else: message = 'Field {} cannot be null'.format(field) raise SeederException(message) formatters[field_name] = build_relation continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
def setUp(self): self.instance = NameGuesser(fake)