model-bakery 1.15.0__py3-none-any.whl → 1.17.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of model-bakery might be problematic. Click here for more details.

model_bakery/__about__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.15.0"
1
+ __version__ = "1.17.0"
model_bakery/baker.py CHANGED
@@ -8,6 +8,7 @@ from typing import (
8
8
  Iterator,
9
9
  List,
10
10
  Optional,
11
+ Set,
11
12
  Type,
12
13
  Union,
13
14
  cast,
@@ -412,12 +413,10 @@ class Baker(Generic[M]):
412
413
  params.update(attrs)
413
414
  return self._make(**params)
414
415
 
415
- def get_fields(self) -> List[Any]:
416
- return [
417
- f
418
- for f in self.model._meta.get_fields()
419
- if f not in self.model._meta.related_objects
420
- ]
416
+ def get_fields(self) -> Set[Any]:
417
+ return set(self.model._meta.get_fields()) - set(
418
+ self.model._meta.related_objects
419
+ )
421
420
 
422
421
  def _make( # noqa: C901
423
422
  self,
@@ -499,17 +498,30 @@ class Baker(Generic[M]):
499
498
  self, attrs: Dict[str, Any], _commit, _save_kwargs, _from_manager
500
499
  ) -> M:
501
500
  one_to_many_keys = {}
501
+ auto_now_keys = {}
502
+
502
503
  for k in tuple(attrs.keys()):
503
504
  field = getattr(self.model, k, None)
505
+
506
+ if not field:
507
+ continue
508
+
504
509
  if isinstance(field, ForeignRelatedObjectsDescriptor):
505
510
  one_to_many_keys[k] = attrs.pop(k)
506
511
 
512
+ if hasattr(field, "field") and (
513
+ getattr(field.field, "auto_now_add", False)
514
+ or getattr(field.field, "auto_now", False)
515
+ ):
516
+ auto_now_keys[k] = attrs[k]
517
+
507
518
  instance = self.model(**attrs)
508
519
  # m2m only works for persisted instances
509
520
  if _commit:
510
521
  instance.save(**_save_kwargs)
511
522
  self._handle_one_to_many(instance, one_to_many_keys)
512
523
  self._handle_m2m(instance)
524
+ self._handle_auto_now(instance, auto_now_keys)
513
525
 
514
526
  if _from_manager:
515
527
  # Fetch the instance using the given Manager, e.g.
@@ -610,6 +622,12 @@ class Baker(Generic[M]):
610
622
 
611
623
  return False
612
624
 
625
+ def _handle_auto_now(self, instance: Model, attrs: Dict[str, Any]):
626
+ if not attrs:
627
+ return
628
+
629
+ instance.__class__.objects.filter(pk=instance.pk).update(**attrs)
630
+
613
631
  def _handle_one_to_many(self, instance: Model, attrs: Dict[str, Any]):
614
632
  for key, values in attrs.items():
615
633
  manager = getattr(instance, key)
@@ -112,9 +112,7 @@ def gen_time() -> time:
112
112
 
113
113
 
114
114
  def gen_string(max_length: int) -> str:
115
- return str(
116
- "".join(baker_random.choice(string.ascii_letters) for _ in range(max_length))
117
- )
115
+ return "".join(baker_random.choice(string.ascii_letters) for _ in range(max_length))
118
116
 
119
117
 
120
118
  def _gen_string_get_max_length(field: Field) -> Tuple[str, int]:
@@ -129,7 +127,7 @@ gen_string.required = [_gen_string_get_max_length] # type: ignore[attr-defined]
129
127
 
130
128
  def gen_slug(max_length: int) -> str:
131
129
  valid_chars = string.ascii_letters + string.digits + "_-"
132
- return str("".join(baker_random.choice(valid_chars) for _ in range(max_length)))
130
+ return "".join(baker_random.choice(valid_chars) for _ in range(max_length))
133
131
 
134
132
 
135
133
  gen_slug.required = ["max_length"] # type: ignore[attr-defined]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: model-bakery
3
- Version: 1.15.0
3
+ Version: 1.17.0
4
4
  Summary: Smart object creation facility for Django.
5
5
  Project-URL: Homepage, https://github.com/model-bakers/model_bakery
6
6
  Author-email: berin <bernardoxhc@gmail.com>, amureki <amureki@hey.com>
@@ -25,8 +25,12 @@ Classifier: Programming Language :: Python :: 3.12
25
25
  Classifier: Topic :: Software Development
26
26
  Requires-Python: >=3.8
27
27
  Requires-Dist: django>=3.2
28
+ Provides-Extra: docs
29
+ Requires-Dist: sphinx; extra == 'docs'
30
+ Requires-Dist: sphinx-rtd-theme; extra == 'docs'
28
31
  Provides-Extra: test
29
32
  Requires-Dist: black; extra == 'test'
33
+ Requires-Dist: coverage; extra == 'test'
30
34
  Requires-Dist: mypy; extra == 'test'
31
35
  Requires-Dist: pillow; extra == 'test'
32
36
  Requires-Dist: pytest; extra == 'test'
@@ -36,6 +40,11 @@ Description-Content-Type: text/markdown
36
40
 
37
41
  # Model Bakery: Smart fixtures for better tests
38
42
 
43
+ [![Build](https://img.shields.io/github/actions/workflow/status/model-bakers/model_bakery/ci.yml?branch=main)](https://github.com/model-bakers/model_bakery/actions?workflow=Tests)
44
+ [![Coverage](https://img.shields.io/badge/Coverage-97%25-success)](https://github.com/model-bakers/model_bakery/actions?workflow=Tests)
45
+ [![Latest PyPI version](https://img.shields.io/pypi/v/model_bakery.svg)](https://pypi.python.org/pypi/model_bakery/)
46
+ [![Documentation Status](https://readthedocs.org/projects/model-bakery/badge/?version=latest)](https://model-bakery.readthedocs.io/en/latest/?badge=latest)
47
+
39
48
  *Model Bakery* offers you a smart way to create fixtures for testing in
40
49
  Django.
41
50
  With a simple and powerful API you can create many objects with a single
@@ -43,14 +52,10 @@ line of code.
43
52
 
44
53
  Model Bakery is a rename of the legacy [Model Mommy project](https://pypi.org/project/model_mommy/).
45
54
 
46
- ![Tests](https://github.com/model-bakers/model_bakery/workflows/Tests/badge.svg)
47
- [![Latest PyPI version](https://img.shields.io/pypi/v/model_bakery.svg)](https://pypi.python.org/pypi/model_bakery/)
48
- [![Documentation Status](https://readthedocs.org/projects/model-bakery/badge/?version=latest)](https://model-bakery.readthedocs.io/en/latest/?badge=latest)
49
-
50
55
  ## Install
51
56
 
52
57
  ```bash
53
- pip install model_bakery
58
+ pip install model-bakery
54
59
  ```
55
60
 
56
61
  ## Usage and Info
@@ -61,6 +66,8 @@ pip install model_bakery
61
66
 
62
67
  # models.py
63
68
 
69
+ from django.db import models
70
+
64
71
  class Customer(models.Model):
65
72
  enjoy_jards_macale = models.BooleanField()
66
73
  name = models.CharField(max_length=30)
@@ -1,18 +1,18 @@
1
- model_bakery/__about__.py,sha256=m3KwqTPSyglvdkL8ZVtCe-iTXn6P8Bz06hxbY0iqJkk,23
1
+ model_bakery/__about__.py,sha256=BVr0oLjmHWJS0DsUE-HOjf8hMNndB1Nh8X6y77zSq8s,23
2
2
  model_bakery/__init__.py,sha256=yY0xZUrr_mskBm07iF-MFBEiXzOuKrlMwpKWkXZs8v0,31
3
3
  model_bakery/_types.py,sha256=P0iKC5-Cnh3lyzyZs1mlCfOW31zbEZpxqWCuYonucKo,130
4
- model_bakery/baker.py,sha256=cCtnH3cg_veS4VXaPeYvShBk8VpZsGltCMV4n3Bwl7E,27511
4
+ model_bakery/baker.py,sha256=mZBIalLwIVIkgUOBftFENz7_SCujhCaN3y_jbaPHSq8,28035
5
5
  model_bakery/exceptions.py,sha256=q1oBZvfxL7HAD-F9aWgiYs4P4rz-hJ5TjeX7gcb3Q0I,333
6
6
  model_bakery/generators.py,sha256=IkYFBTwSVwa_wwPnZRiVR1vHqUfjWqmyPGCl10RElB0,6467
7
7
  model_bakery/gis.py,sha256=eTNOfT98_ncLAb4KmOYJhE-3ALU2_pQbUpWPTolFZJI,1028
8
8
  model_bakery/mock_file.txt,sha256=CO5zPS6Uydk48ZRnGcRKVEYKd2YjaUMa9QOgF5gGMCo,10
9
9
  model_bakery/mock_img.jpeg,sha256=iF2ybgAVtDvl48-8VKdv_QFHKfnqeOaeGwR6ZLexJkY,1916
10
10
  model_bakery/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- model_bakery/random_gen.py,sha256=ZDtUwEEd735ot2V0HeVb8oX3_0QOwdmKAdBpl0bt7oI,9797
11
+ model_bakery/random_gen.py,sha256=SexyzpuAe5FKXIofXloCmJ3tL4S5WJ9cVowB8sMHXP8,9773
12
12
  model_bakery/recipe.py,sha256=miruAnulPVL4N7Q3tXRfRV95MUvbpZZ3A5M7afv-2O8,8411
13
13
  model_bakery/timezone.py,sha256=rd-KGVHqJoHdHKBgENPMBTRqqxgKE91CM9C0f9nS90M,325
14
14
  model_bakery/utils.py,sha256=fw4ewtwkJ6wZ9PbDzBGvODX7CV81ozy2_6JAQmITmX4,4581
15
- model_bakery-1.15.0.dist-info/METADATA,sha256=6t1Rx86N3V4MxZ97k5pr7Ub-hqZvwWtMan94V7T_5tM,3896
16
- model_bakery-1.15.0.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
17
- model_bakery-1.15.0.dist-info/licenses/LICENSE,sha256=kCwHls7z8Y7NyZCmdnV1qLSdLrQ8bHrXLji5HOasgUc,611
18
- model_bakery-1.15.0.dist-info/RECORD,,
15
+ model_bakery-1.17.0.dist-info/METADATA,sha256=q3pWgLVXrodr1osb_HUIJSoBTuDsQHSDQ4CzTQrwmpE,4311
16
+ model_bakery-1.17.0.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
17
+ model_bakery-1.17.0.dist-info/licenses/LICENSE,sha256=kCwHls7z8Y7NyZCmdnV1qLSdLrQ8bHrXLji5HOasgUc,611
18
+ model_bakery-1.17.0.dist-info/RECORD,,