Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def make_fabric(self, column, field_name=None, fake=False, kwargs=None): # noqa
""" Make values fabric for column.
:param column: SqlAlchemy column
:param field_name: Field name
:param fake: Force fake data
:return function:
"""
kwargs = {} if kwargs is None else kwargs
if isinstance(column, RelationshipProperty):
return partial(type(self)(
column.mapper.class_, mixer=self.__mixer, fake=self.__fake, factory=self.__factory
).blend, **kwargs)
ftype = type(column.type)
# augmented types created with TypeDecorator
# don't directly inherit from the base types
if TypeDecorator in ftype.__bases__:
ftype = ftype.impl
stype = self.__factory.cls_to_simple(ftype)
if stype is str:
fab = super(TypeMixer, self).make_fabric(
stype, field_name=field_name, fake=fake, kwargs=kwargs)
return lambda: fab()[:column.type.length]
""" Make a fabric for field.
:param field: A mixer field
:param fname: Field name
:param fake: Force fake data
:return function:
"""
kwargs = {} if kwargs is None else kwargs
fcls = type(field)
stype = self.__factory.cls_to_simple(fcls)
if fcls is models.CommaSeparatedIntegerField:
return partial(
faker.random_sample, range(0, field.max_length), length=field.max_length)
if field and field.choices:
try:
choices, _ = list(zip(*field.choices))
return partial(faker.random_element, choices)
except ValueError:
pass
if stype in (str, t.Text):
fab = super(TypeMixer, self).make_fabric(
fcls, field_name=fname, fake=fake, kwargs=kwargs)
return lambda: fab()[:field.max_length]
if stype is decimal.Decimal:
kwargs['left_digits'] = field.max_digits - field.decimal_places