summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2015-05-31 10:57:53 +0100
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2015-05-31 10:57:53 +0100
commit9246fa6d26ca655c02ae37bbfc389d9f34dfba16 (patch)
tree4cfb1c34c94b83783ef9c5c27c56b9e178779df2
parent0b5270eab393fad20faa7a6a9720af18c97b1773 (diff)
downloadfactory-boy-9246fa6d26ca655c02ae37bbfc389d9f34dfba16.tar
factory-boy-9246fa6d26ca655c02ae37bbfc389d9f34dfba16.tar.gz
Improve ORM layer import paths (Closes #186).
You may now use the following code: import factory factory.alchemy.SQLAlchemyModelFactory factory.django.DjangoModelFactory factory.mongoengine.MongoEngineFactory
-rw-r--r--docs/changelog.rst2
-rw-r--r--docs/orms.rst31
-rw-r--r--factory/__init__.py12
-rw-r--r--factory/alchemy.py1
4 files changed, 41 insertions, 5 deletions
diff --git a/docs/changelog.rst b/docs/changelog.rst
index c871ce8..eea38c5 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -14,6 +14,8 @@ ChangeLog
- :class:`factory.Iterator` no longer begins iteration of its argument at import time,
thus allowing to pass in a lazy iterator such as a Django queryset
(i.e ``factory.Iterator(models.MyThingy.objects.all())``).
+ - Simplify imports for ORM layers, now available through a simple ``factory`` import,
+ at ``factory.alchemy.SQLAlchemyModelFactory`` / ``factory.django.DjangoModelFactory`` / ``factory.mongoengine.MongoEngineFactory``.
*Bugfix:*
diff --git a/docs/orms.rst b/docs/orms.rst
index bbe91e6..26390b5 100644
--- a/docs/orms.rst
+++ b/docs/orms.rst
@@ -273,6 +273,34 @@ factory_boy supports `MongoEngine`_-style models, through the :class:`MongoEngin
This feature makes it possible to use :class:`~factory.SubFactory` to create embedded document.
+A minimalist example:
+
+.. code-block:: python
+
+ import mongoengine
+
+ class Address(mongoengine.EmbeddedDocument):
+ street = mongoengine.StringField()
+
+ class Person(mongoengine.Document):
+ name = mongoengine.StringField()
+ address = mongoengine.EmbeddedDocumentField(Address)
+
+ import factory
+
+ class AddressFactory(factory.mongoengine.MongoEngineFactory):
+ class Meta:
+ model = Address
+
+ street = factory.Sequence(lambda n: 'street%d' % n)
+
+ class PersonFactory(factory.mongoengine.MongoEngineFactory):
+ class Meta:
+ model = Person
+
+ name = factory.Sequence(lambda n: 'name%d' % n)
+ address = factory.SubFactory(AddressFactory)
+
SQLAlchemy
----------
@@ -327,8 +355,9 @@ A (very) simple example:
Base.metadata.create_all(engine)
+ import factory
- class UserFactory(SQLAlchemyModelFactory):
+ class UserFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = User
sqlalchemy_session = session # the SQLAlchemy session object
diff --git a/factory/__init__.py b/factory/__init__.py
index 80eb6a8..843cf99 100644
--- a/factory/__init__.py
+++ b/factory/__init__.py
@@ -40,9 +40,6 @@ from .base import (
use_strategy,
)
-# Backward compatibility; this should be removed soon.
-from .mogo import MogoFactory
-from .django import DjangoModelFactory
from .faker import Faker
from .declarations import (
@@ -84,3 +81,12 @@ from .helpers import (
post_generation,
)
+# Backward compatibility; this should be removed soon.
+from . import alchemy
+from . import django
+from . import mogo
+from . import mongoengine
+
+MogoFactory = mogo.MogoFactory
+DjangoModelFactory = django.DjangoModelFactory
+
diff --git a/factory/alchemy.py b/factory/alchemy.py
index 6408393..20da6cf 100644
--- a/factory/alchemy.py
+++ b/factory/alchemy.py
@@ -19,7 +19,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
from __future__ import unicode_literals
-from sqlalchemy.sql.functions import max
from . import base