From 29fb109b6f5ab013d6c3a3239627e63717b5ede2 Mon Sep 17 00:00:00 2001 From: Bastiaan Welmers Date: Thu, 21 May 2020 18:05:08 +0200 Subject: [PATCH] Helper function to improve code --- tests/videodinges/factories.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/videodinges/factories.py b/tests/videodinges/factories.py index a87cafb..93059d2 100644 --- a/tests/videodinges/factories.py +++ b/tests/videodinges/factories.py @@ -11,7 +11,7 @@ T = TypeVar('T', bound=django.db.models.Model) def create(model: Type[T], **kwargs) -> T: if model is models.Video: - return models.Video.objects.create(**{**dict(title='Title', slug='slug', description='Description'), **kwargs}) + return _create_with_defaults(models.Video, kwargs, title='Title', slug='slug', description='Description') if model is models.Transcoding: video = create(models.Video, title='Title', slug='slug', description='Description') \ @@ -25,12 +25,19 @@ def create(model: Type[T], **kwargs) -> T: # only URL if no upload for they are multually exclusive defaults['url'] = 'https://some_url' - return models.Transcoding.objects.create(**{**defaults, **kwargs}) + return _create_with_defaults(models.Transcoding, kwargs, **defaults) if model is models.Upload: file = SimpleUploadedFile('some_file.txt', b'some contents') \ if 'file' not in kwargs else None - return models.Upload.objects.create(**{**dict(file=file), **kwargs}) + return _create_with_defaults(models.Upload, kwargs, file=file) -# TODO fix annoying dict notation to something more gentle. +def _create_with_defaults(model: Type[T], kwargs: dict, **defaults) -> T: + """ + Return created django model instance. + :param model: django model to create + :param kwargs: keyword arguments to fill the model + :param defaults: default keyword arguments to use when not mentioned in kwargs + """ + return model.objects.create(**{**defaults, **kwargs})