summaryrefslogtreecommitdiff
path: root/factory
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2014-11-16 22:34:29 +0100
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2014-11-16 22:34:29 +0100
commit13d310fa14f4e4b9a559f8b7887f2a2492357013 (patch)
tree4ce6820ef321dceb9b6e1e687534b622e335f444 /factory
parent827af8f13a1b768a75264874c73cc0e620177262 (diff)
downloadfactory-boy-13d310fa14f4e4b9a559f8b7887f2a2492357013.tar
factory-boy-13d310fa14f4e4b9a559f8b7887f2a2492357013.tar.gz
Remove automagic pk-based sequence setup
Related to issues #78, #92, #103, #111, #153, #170 The default value of all sequences is now 0; the automagic ``_setup_next_sequence`` behavior of Django/SQLAlchemy has been removed. This feature's only goal was to allow the following scenario: 1. Run a Python script that uses MyFactory.create() a couple of times (with a unique field based on the sequence counter) 2. Run the same Python script a second time Without the magical ``_setup_next_sequence``, the Sequence counter would be set to 0 at the beginning of each script run, so both runs would generate objects with the same values for the unique field ; thus conflicting and crashing. The above behavior having only a very limited use and bringing various issues (hitting the database on ``build()``, problems with non-integer or composite primary key columns, ...), it has been removed. It could still be emulated through custom ``_setup_next_sequence`` methods, or by calling ``MyFactory.reset_sequence()``.
Diffstat (limited to 'factory')
-rw-r--r--factory/alchemy.py12
-rw-r--r--factory/django.py15
2 files changed, 0 insertions, 27 deletions
diff --git a/factory/alchemy.py b/factory/alchemy.py
index 3c91411..2cd28bb 100644
--- a/factory/alchemy.py
+++ b/factory/alchemy.py
@@ -44,18 +44,6 @@ class SQLAlchemyModelFactory(base.Factory):
})
@classmethod
- def _setup_next_sequence(cls, *args, **kwargs):
- """Compute the next available PK, based on the 'pk' database field."""
- session = cls._meta.sqlalchemy_session
- model = cls._meta.model
- pk = getattr(model, model.__mapper__.primary_key[0].name)
- max_pk = session.query(max(pk)).one()[0]
- if isinstance(max_pk, int):
- return max_pk + 1 if max_pk else 1
- else:
- return 1
-
- @classmethod
def _create(cls, model_class, *args, **kwargs):
"""Create an instance of the model, and save it to the database."""
session = cls._meta.sqlalchemy_session
diff --git a/factory/django.py b/factory/django.py
index 2b6c463..c58a6e2 100644
--- a/factory/django.py
+++ b/factory/django.py
@@ -110,21 +110,6 @@ class DjangoModelFactory(base.Factory):
return model_class.objects
@classmethod
- def _setup_next_sequence(cls):
- """Compute the next available PK, based on the 'pk' database field."""
-
- model = cls._get_model_class() # pylint: disable=E1101
- manager = cls._get_manager(model)
-
- try:
- return 1 + manager.values_list('pk', flat=True
- ).order_by('-pk')[0]
- except (IndexError, TypeError):
- # IndexError: No instance exist yet
- # TypeError: pk isn't an integer type
- return 1
-
- @classmethod
def _get_or_create(cls, model_class, *args, **kwargs):
"""Create an instance of the model through objects.get_or_create."""
manager = cls._get_manager(model_class)