Merge remote-tracking branch 'origin/pr/319'

This commit is contained in:
Ross Lawley 2013-05-20 08:10:37 +00:00
commit e402157b4d
3 changed files with 44 additions and 1 deletions

View File

@ -25,7 +25,7 @@ that much better:
* flosch * flosch
* Deepak Thukral * Deepak Thukral
* Colin Howe * Colin Howe
* Wilson Júnior * Wilson Júnior (https://github.com/wpjunior)
* Alistair Roche * Alistair Roche
* Dan Crosta * Dan Crosta
* Viktor Kerkez * Viktor Kerkez

View File

@ -1442,6 +1442,17 @@ class SequenceField(BaseField):
upsert=True) upsert=True)
return self.value_decorator(counter['next']) return self.value_decorator(counter['next'])
def get_next_value(self):
sequence_name = self.get_sequence_name()
sequence_id = "%s.%s" % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_name]
data = collection.find_one({"_id": sequence_id})
if data:
return self.value_decorator(data['next']+1)
return self.value_decorator(1)
def get_sequence_name(self): def get_sequence_name(self):
if self.sequence_name: if self.sequence_name:
return self.sequence_name return self.sequence_name

View File

@ -1898,6 +1898,38 @@ class FieldTest(unittest.TestCase):
c = self.db['mongoengine.counters'].find_one({'_id': 'person.id'}) c = self.db['mongoengine.counters'].find_one({'_id': 'person.id'})
self.assertEqual(c['next'], 1000) self.assertEqual(c['next'], 1000)
def test_sequence_field_get_next_value(self):
class Person(Document):
id = SequenceField(primary_key=True)
name = StringField()
self.db['mongoengine.counters'].drop()
Person.drop_collection()
for x in xrange(10):
Person(name="Person %s" % x).save()
self.assertEqual(Person.id.get_next_value(), 11)
self.db['mongoengine.counters'].drop()
self.assertEqual(Person.id.get_next_value(), 1)
class Person(Document):
id = SequenceField(primary_key=True, value_decorator=str)
name = StringField()
self.db['mongoengine.counters'].drop()
Person.drop_collection()
for x in xrange(10):
Person(name="Person %s" % x).save()
self.assertEqual(Person.id.get_next_value(), '11')
self.db['mongoengine.counters'].drop()
self.assertEqual(Person.id.get_next_value(), '1')
def test_sequence_field_sequence_name(self): def test_sequence_field_sequence_name(self):
class Person(Document): class Person(Document):
id = SequenceField(primary_key=True, sequence_name='jelly') id = SequenceField(primary_key=True, sequence_name='jelly')