[Python-modules-commits] [python-model-mommy] 01/03: New upstream version 1.4.0
Edward Betts
edward at moszumanska.debian.org
Thu Oct 5 09:41:34 UTC 2017
This is an automated email from the git hooks/post-receive script.
edward pushed a commit to annotated tag debian/1.4.0-1
in repository python-model-mommy.
commit d76869163b995c6f3b2409b3b123dd7819880387
Author: Edward Betts <edward at 4angle.com>
Date: Thu Oct 5 09:58:44 2017 +0100
New upstream version 1.4.0
---
PKG-INFO | 22 ++++++-----------
README.rst | 14 ++++-------
model_mommy.egg-info/PKG-INFO | 22 ++++++-----------
model_mommy.egg-info/requires.txt | 2 +-
model_mommy/__init__.py | 2 +-
model_mommy/generators.py | 3 ++-
model_mommy/mommy.py | 52 +++++++++++++++++++--------------------
model_mommy/random_gen.py | 10 ++++----
model_mommy/recipe.py | 2 +-
model_mommy/timezone.py | 3 +--
model_mommy/utils.py | 6 +----
requirements.txt | 2 +-
setup.py | 9 +++----
tox.ini | 12 ++++-----
14 files changed, 68 insertions(+), 93 deletions(-)
diff --git a/PKG-INFO b/PKG-INFO
index c0e6fa9..03ddec3 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: model_mommy
-Version: 1.3.2
+Version: 1.4.0
Summary: Smart object creation facility for Django.
Home-page: http://github.com/vandersonmota/model_mommy
Author: vandersonmota
@@ -16,15 +16,11 @@ Description: ============================================
.. image:: https://travis-ci.org/vandersonmota/model_mommy.png?branch=master
:target: https://travis-ci.org/vandersonmota/model_mommy
:alt: Test Status
-
- .. image:: https://pypip.in/v/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
+
+ .. image:: https://badge.fury.io/py/model_mommy.svg
+ :target: https://badge.fury.io/py/model_mommy
:alt: Latest PyPI version
- .. image:: https://pypip.in/d/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
- :alt: Number of PyPI downloads
-
.. image:: https://img.shields.io/gratipay/vandersonmota.svg?style=social&label=Donate
:target: https://www.gratipay.com/vandersonmota
@@ -45,8 +41,8 @@ Description: ============================================
Maintainers
===========
- * [Vanderson Mota (creator)](https://github.com/vandersonmota/)
- * [Bernardo Fontes](https://github.com/berinhard/)
+ * Vanderson Mota (creator) - https://github.com/vandersonmota/
+ * Bernardo Fontes - https://github.com/berinhard/
Keywords: django testing factory python
Platform: UNKNOWN
@@ -56,9 +52,7 @@ Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.2
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
diff --git a/README.rst b/README.rst
index 1746807..a5cad12 100644
--- a/README.rst
+++ b/README.rst
@@ -8,15 +8,11 @@ With a simple and powerful API you can create many objects with a single line of
.. image:: https://travis-ci.org/vandersonmota/model_mommy.png?branch=master
:target: https://travis-ci.org/vandersonmota/model_mommy
:alt: Test Status
-
-.. image:: https://pypip.in/v/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
+
+.. image:: https://badge.fury.io/py/model_mommy.svg
+ :target: https://badge.fury.io/py/model_mommy
:alt: Latest PyPI version
-.. image:: https://pypip.in/d/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
- :alt: Number of PyPI downloads
-
.. image:: https://img.shields.io/gratipay/vandersonmota.svg?style=social&label=Donate
:target: https://www.gratipay.com/vandersonmota
@@ -37,5 +33,5 @@ Usage and Info
Maintainers
===========
-* [Vanderson Mota (creator)](https://github.com/vandersonmota/)
-* [Bernardo Fontes](https://github.com/berinhard/)
+* Vanderson Mota (creator) - https://github.com/vandersonmota/
+* Bernardo Fontes - https://github.com/berinhard/
diff --git a/model_mommy.egg-info/PKG-INFO b/model_mommy.egg-info/PKG-INFO
index 3583b84..e380df7 100644
--- a/model_mommy.egg-info/PKG-INFO
+++ b/model_mommy.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: model-mommy
-Version: 1.3.2
+Version: 1.4.0
Summary: Smart object creation facility for Django.
Home-page: http://github.com/vandersonmota/model_mommy
Author: vandersonmota
@@ -16,15 +16,11 @@ Description: ============================================
.. image:: https://travis-ci.org/vandersonmota/model_mommy.png?branch=master
:target: https://travis-ci.org/vandersonmota/model_mommy
:alt: Test Status
-
- .. image:: https://pypip.in/v/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
+
+ .. image:: https://badge.fury.io/py/model_mommy.svg
+ :target: https://badge.fury.io/py/model_mommy
:alt: Latest PyPI version
- .. image:: https://pypip.in/d/model_mommy/badge.png
- :target: https://crate.io/packages/model_mommy/
- :alt: Number of PyPI downloads
-
.. image:: https://img.shields.io/gratipay/vandersonmota.svg?style=social&label=Donate
:target: https://www.gratipay.com/vandersonmota
@@ -45,8 +41,8 @@ Description: ============================================
Maintainers
===========
- * [Vanderson Mota (creator)](https://github.com/vandersonmota/)
- * [Bernardo Fontes](https://github.com/berinhard/)
+ * Vanderson Mota (creator) - https://github.com/vandersonmota/
+ * Bernardo Fontes - https://github.com/berinhard/
Keywords: django testing factory python
Platform: UNKNOWN
@@ -56,9 +52,7 @@ Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.2
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
diff --git a/model_mommy.egg-info/requires.txt b/model_mommy.egg-info/requires.txt
index 1329207..9b536f6 100644
--- a/model_mommy.egg-info/requires.txt
+++ b/model_mommy.egg-info/requires.txt
@@ -1,2 +1,2 @@
-Django
+django>=1.8.0,<1.12
six
diff --git a/model_mommy/__init__.py b/model_mommy/__init__.py
index 2d9550f..43affa1 100644
--- a/model_mommy/__init__.py
+++ b/model_mommy/__init__.py
@@ -1,5 +1,5 @@
#coding:utf-8
-__version__ = '1.3.2'
+__version__ = '1.4.0'
__title__ = 'model_mommy'
__author__ = 'Vanderson Mota'
__license__ = 'Apache 2.0'
diff --git a/model_mommy/generators.py b/model_mommy/generators.py
index 095246b..f1fb0b3 100644
--- a/model_mommy/generators.py
+++ b/model_mommy/generators.py
@@ -5,7 +5,7 @@ from django.db.models import (
IntegerField, SmallIntegerField, PositiveIntegerField,
PositiveSmallIntegerField, BooleanField, DecimalField,
FloatField, FileField, ImageField, IPAddressField,
- ForeignKey, ManyToManyField, OneToOneField)
+ ForeignKey, ManyToManyField, OneToOneField, NullBooleanField)
from model_mommy.utils import import_if_str
@@ -56,6 +56,7 @@ default_mapping = {
ManyToManyField: random_gen.gen_m2m,
BooleanField: random_gen.gen_boolean,
+ NullBooleanField: random_gen.gen_null_boolean,
IntegerField: random_gen.gen_integer,
BigIntegerField: random_gen.gen_integer,
SmallIntegerField: random_gen.gen_integer,
diff --git a/model_mommy/mommy.py b/model_mommy/mommy.py
index 0862590..d146036 100644
--- a/model_mommy/mommy.py
+++ b/model_mommy/mommy.py
@@ -5,16 +5,12 @@ import django
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
-if django.VERSION >= (1, 7):
- from django.apps import apps
- get_model = apps.get_model
- from django.contrib.contenttypes.fields import GenericRelation
-else:
- from django.db.models.loading import get_model, cache
- from django.contrib.contenttypes.generic import GenericRelation
+from django.apps import apps
+get_model = apps.get_model
+from django.contrib.contenttypes.fields import GenericRelation
from django.db.models.base import ModelBase
-from django.db.models import ForeignKey, ManyToManyField, OneToOneField, Field, AutoField, BooleanField
+from django.db.models import ForeignKey, ManyToManyField, OneToOneField, Field, AutoField, BooleanField, FileField
if django.VERSION >= (1, 9):
from django.db.models.fields.related import ReverseManyToOneDescriptor as ForeignRelatedObjectsDescriptor
else:
@@ -41,14 +37,14 @@ def _valid_quantity(quantity):
return quantity is not None and (not isinstance(quantity, int) or quantity < 1)
-def make(model, _quantity=None, make_m2m=False, _save_kwargs=None, **attrs):
+def make(model, _quantity=None, make_m2m=False, _save_kwargs=None, _create_files=False, **attrs):
"""
Creates a persisted instance from a given model its associated models.
It fill the fields with random values or you can specify
which fields you want to define its values by yourself.
"""
_save_kwargs = _save_kwargs or {}
- mommy = Mommy.create(model, make_m2m=make_m2m)
+ mommy = Mommy.create(model, make_m2m=make_m2m, create_files=_create_files)
if _valid_quantity(_quantity):
raise InvalidQuantityException
@@ -106,8 +102,7 @@ class ModelFinder(object):
model = get_model(app_label, model_name)
else:
model = self.get_model_by_name(name)
- except LookupError: # Django 1.7.0a1 throws an exception
- # Lower djangos just fail silently
+ except LookupError:
model = None
if not model:
@@ -140,10 +135,7 @@ class ModelFinder(object):
unique_models = {}
ambiguous_models = []
- if django.VERSION >= (1, 7):
- all_models = apps.all_models
- else:
- all_models = cache.app_models
+ all_models = apps.all_models
for app_model in all_models.values():
for name, model in app_model.items():
@@ -199,15 +191,16 @@ class Mommy(object):
finder = ModelFinder()
@classmethod
- def create(cls, model, make_m2m=False):
+ def create(cls, model, make_m2m=False, create_files=False):
"""
Factory which creates the mommy class defined by the MOMMY_CUSTOM_CLASS setting
"""
mommy_class = _custom_mommy_class() or cls
- return mommy_class(model, make_m2m)
+ return mommy_class(model, make_m2m, create_files)
- def __init__(self, model, make_m2m=False):
+ def __init__(self, model, make_m2m=False, create_files=False):
self.make_m2m = make_m2m
+ self.create_files = create_files
self.m2m_dict = {}
self.iterator_attrs = {}
self.model_attrs = {}
@@ -243,10 +236,7 @@ class Mommy(object):
return self.model._meta.fields + self.model._meta.many_to_many
def get_related(self):
- if django.VERSION[:2] <= (1, 7):
- return self.model._meta.get_all_related_objects()
- else:
- return [r for r in self.model._meta.related_objects if not r.many_to_many]
+ return [r for r in self.model._meta.related_objects if not r.many_to_many]
def _make(self, commit=True, commit_related=True, _save_kwargs=None, **attrs):
_save_kwargs = _save_kwargs or {}
@@ -326,8 +316,11 @@ class Mommy(object):
else:
field.fill_optional = field.name in self.fill_in_optional
+ if isinstance(field, FileField) and not self.create_files:
+ return True
+
# Skip links to parent so parent is not created twice.
- if isinstance(field, OneToOneField) and field.rel.parent_link:
+ if isinstance(field, OneToOneField) and self._remote_field(field).parent_link:
return True
if isinstance(field, (AutoField, GenericRelation, OrderWrt)):
@@ -371,6 +364,11 @@ class Mommy(object):
}
make(through_model, **base_kwargs)
+ def _remote_field(self, field):
+ if django.VERSION >= (1, 9):
+ return field.remote_field
+ return field.rel
+
def generate_value(self, field, commit=True):
'''
Calls the generator associated with a field passing all required args.
@@ -389,12 +387,12 @@ class Mommy(object):
generator = self.attr_mapping[field.name]
elif getattr(field, 'choices'):
generator = random_gen.gen_from_choices(field.choices)
- elif isinstance(field, ForeignKey) and issubclass(field.rel.to, ContentType):
+ elif isinstance(field, ForeignKey) and issubclass(self._remote_field(field).to, ContentType):
generator = self.type_mapping[ContentType]
- elif field.__class__ in self.type_mapping:
- generator = self.type_mapping[field.__class__]
elif generators.get(field.__class__):
generator = generators.get(field.__class__)
+ elif field.__class__ in self.type_mapping:
+ generator = self.type_mapping[field.__class__]
else:
raise TypeError('%s is not supported by mommy.' % field.__class__)
diff --git a/model_mommy/random_gen.py b/model_mommy/random_gen.py
index 6cb7c0a..8ba1a19 100644
--- a/model_mommy/random_gen.py
+++ b/model_mommy/random_gen.py
@@ -15,7 +15,6 @@ import warnings
from decimal import Decimal
from os.path import abspath, join, dirname
from random import randint, choice, random
-from django import VERSION
from django.core.files.base import ContentFile
from django.core.exceptions import ValidationError
import six
@@ -35,10 +34,7 @@ MAX_LENGTH = 300
MAX_INT = 10000
def get_content_file(content, name):
- if VERSION < (1, 4):
- return ContentFile(content)
- else:
- return ContentFile(content, name=name)
+ return ContentFile(content, name=name)
def gen_file_field():
name = 'mock_file.txt'
@@ -125,6 +121,10 @@ def gen_boolean():
return choice((True, False))
+def gen_null_boolean():
+ return choice((True, False, None))
+
+
def gen_url():
return str('http://www.%s.com/' % gen_string(30))
diff --git a/model_mommy/recipe.py b/model_mommy/recipe.py
index 5bf5d74..eec9b56 100644
--- a/model_mommy/recipe.py
+++ b/model_mommy/recipe.py
@@ -45,7 +45,7 @@ class Recipe(object):
m = finder.get_model(self.model)
else:
m = self.model
- if m.objects.count() == 0 or k not in self._iterator_backups:
+ if k not in self._iterator_backups or m.objects.count() == 0:
self._iterator_backups[k] = itertools.tee(self._iterator_backups.get(k, [v])[0])
mapping[k] = self._iterator_backups[k][1]
elif isinstance(v, RecipeForeignKey):
diff --git a/model_mommy/timezone.py b/model_mommy/timezone.py
index 337c227..9451ce8 100644
--- a/model_mommy/timezone.py
+++ b/model_mommy/timezone.py
@@ -5,7 +5,6 @@ https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/
'''
from datetime import datetime
-from django import VERSION
from django.conf import settings
try:
@@ -20,7 +19,7 @@ def smart_datetime(*args):
def tz_aware(d):
value = d
- if VERSION >= (1, 4) and settings.USE_TZ:
+ if settings.USE_TZ:
value = d.replace(tzinfo=utc)
return value
diff --git a/model_mommy/utils.py b/model_mommy/utils.py
index 15587ac..33ff5da 100644
--- a/model_mommy/utils.py
+++ b/model_mommy/utils.py
@@ -1,9 +1,5 @@
# -*- coding: utf-8 -*-
-import django
-if django.VERSION >= (1, 7):
- import importlib
-else:
- from django.utils import importlib
+import importlib
from six import string_types
diff --git a/requirements.txt b/requirements.txt
index 1329207..9b536f6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,2 @@
-Django
+django>=1.8.0,<1.12
six
diff --git a/setup.py b/setup.py
old mode 100644
new mode 100755
index cb00523..fb58989
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,8 @@ setuptools.setup(
include_package_data=True, # declarations in MANIFEST.in
install_requires=open(join(dirname(__file__), 'requirements.txt')).readlines(),
tests_require=[
- 'django',
+
+ 'django>=1.8,<1.12',
'pil',
'tox',
'mock'
@@ -31,11 +32,9 @@ setuptools.setup(
'Operating System :: OS Independent',
'Topic :: Software Development',
'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.2',
- 'Programming Language :: Python :: 3.3',
- 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
],
)
diff --git a/tox.ini b/tox.ini
index 7405d71..e685b64 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,25 +1,23 @@
[tox]
-envlist = {py27}-django{16,17,18,19,110}-{postgresql,sqlite}, {py26}-django{16}, py34-django{16,17}-{postgresql,sqlite}, {py35,py34}-django{18,19,110}-{postgresql,sqlite}
+envlist = {py27,py35,py36}-django{18,19,110,111}-{postgresql,sqlite}
[testenv]
setenv=
PYTHONPATH = {toxinidir}
basepython =
- py26: python2.6
py27: python2.7
py35: python3.5
- py34: python3.4
+ py36: python3.6
deps =
py26: Pillow>=2.3.1,<4.0.0
py{27,34,35}: Pillow>=2.3.1
mock==1.0.1
six>=1.3.0
django-test-without-migrations
- django16: Django>=1.6,<1.7
- django17: Django>=1.7,<1.8
django18: Django>=1.8,<1.9
- django19: Django>=1.9,>1.10
- django110: Django==1.10
+ django19: Django>=1.9,<1.10
+ django110: Django>=1.10,<1.11
+ django111: Django>=1.11,<1.12
postgresql: psycopg2
commands=
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-model-mommy.git
More information about the Python-modules-commits
mailing list