funkwhale/api/funkwhale_api/factories.py

66 wiersze
1.6 KiB
Python
Czysty Zwykły widok Historia

2019-03-12 13:15:58 +00:00
import uuid
import factory
import persisting_theory
2019-04-11 08:17:10 +00:00
from django.conf import settings
2019-03-12 13:15:58 +00:00
from faker.providers import internet as internet_provider
class FactoriesRegistry(persisting_theory.Registry):
2018-06-09 13:36:16 +00:00
look_into = "factories"
def prepare_name(self, data, name=None):
return name or data._meta.model._meta.label
registry = FactoriesRegistry()
def ManyToManyFromList(field_name):
"""
To automate the pattern described in
http://factoryboy.readthedocs.io/en/latest/recipes.html#simple-many-to-many-relationship
"""
@factory.post_generation
def inner(self, create, extracted, **kwargs):
if not create:
return
if extracted:
field = getattr(self, field_name)
field.add(*extracted)
return inner
2019-01-04 13:36:08 +00:00
class NoUpdateOnCreate:
"""
Factory boy calls save after the initial create. In most case, this
is not needed, so we disable this behaviour
"""
@classmethod
def _after_postgeneration(cls, instance, create, results=None):
return
2019-03-12 13:15:58 +00:00
class FunkwhaleProvider(internet_provider.Provider):
"""
Our own faker data generator, since built-in ones are sometimes
not random enough
"""
2019-04-11 08:17:10 +00:00
def federation_url(self, prefix="", local=False):
2019-03-12 13:15:58 +00:00
def path_generator():
return "{}/{}".format(prefix, uuid.uuid4())
2019-04-11 08:17:10 +00:00
domain = settings.FEDERATION_HOSTNAME if local else self.domain_name()
2019-03-12 13:15:58 +00:00
protocol = "https"
path = path_generator()
return "{}://{}/{}".format(protocol, domain, path)
factory.Faker.add_provider(FunkwhaleProvider)