@@ -490,7 +490,7 @@ def _gen_index_name(self, keys):
490490 """
491491 return u"_" .join ([u"%s_%s" % item for item in keys ])
492492
493- def create_index (self , key_or_list , unique = False , ttl = 300 ):
493+ def create_index (self , key_or_list , unique = False , ttl = 300 , name = None ):
494494 """Creates an index on this collection.
495495
496496 Takes either a single key or a list of (key, direction) pairs.
@@ -519,6 +519,8 @@ def create_index(self, key_or_list, unique=False, ttl=300):
519519 this index will be recognized by subsequent calls to
520520 :meth:`ensure_index` - see documentation for
521521 :meth:`ensure_index` for details
522+ - `name` (optional): name for the index. If none given, a name
523+ will be generated.
522524
523525 .. seealso:: :meth:`ensure_index`
524526
@@ -528,7 +530,7 @@ def create_index(self, key_or_list, unique=False, ttl=300):
528530 """
529531 keys = helpers ._index_list (key_or_list )
530532 index_doc = helpers ._index_document (keys )
531- name = self ._gen_index_name (keys )
533+ name = name is not None and name or self ._gen_index_name (keys )
532534 to_save = SON ()
533535 to_save ["name" ] = name
534536 to_save ["ns" ] = self .__full_name
@@ -542,7 +544,7 @@ def create_index(self, key_or_list, unique=False, ttl=300):
542544 check_keys = False )
543545 return to_save ["name" ]
544546
545- def ensure_index (self , key_or_list , unique = False , ttl = 300 ):
547+ def ensure_index (self , key_or_list , unique = False , ttl = 300 , name = None ):
546548 """Ensures that an index exists on this collection.
547549
548550 Takes either a single key or a list of (key, direction) pairs.
@@ -577,17 +579,20 @@ def ensure_index(self, key_or_list, unique=False, ttl=300):
577579 - `ttl` (optional): time window (in seconds) during which
578580 this index will be recognized by subsequent calls to
579581 :meth:`ensure_index`
582+ - `name` (optional): name for the index. If none given, a name
583+ will be generated.
580584
581585 .. seealso:: :meth:`create_index`
582586 """
583587 if not isinstance (key_or_list , (str , unicode , list )):
584588 raise TypeError ("key_or_list must either be a single key or a list of (key, direction) pairs" )
585589
586590 keys = helpers ._index_list (key_or_list )
587- name = self ._gen_index_name (keys )
591+ name = name is not None and name or self ._gen_index_name (keys )
588592 if self .__database .connection ._cache_index (self .__database .name ,
589593 self .__name , name , ttl ):
590- return self .create_index (key_or_list , unique = unique , ttl = ttl )
594+ return self .create_index (key_or_list , unique = unique , ttl = ttl ,
595+ name = name )
591596 return None
592597
593598 def drop_indexes (self ):
0 commit comments