1
- from functools import singledispatchmethod
2
-
3
1
from django .db .backends .base .schema import BaseDatabaseSchemaEditor
4
2
from django .db .models import Index , UniqueConstraint
5
3
from pymongo .operations import IndexModel , SearchIndexModel
@@ -261,18 +259,13 @@ def alter_unique_together(
261
259
model , constraint , parent_model = parent_model , column_prefix = column_prefix
262
260
)
263
261
264
- @singledispatchmethod
265
262
def _add_index (self , index , model ):
263
+ if isinstance (index , SearchIndexModel ):
264
+ return self .get_collection (model ._meta .db_table ).create_search_index (index )
265
+ if isinstance (index , IndexModel ):
266
+ return self .get_collection (model ._meta .db_table ).create_indexes ([index ])
266
267
raise ValueError (f"{ type (index )} isn't a supported index type" )
267
268
268
- @_add_index .register
269
- def _ (self , index : IndexModel , model ):
270
- return self .get_collection (model ._meta .db_table ).create_indexes ([index ])
271
-
272
- @_add_index .register
273
- def _ (self , index : SearchIndexModel , model ):
274
- return self .get_collection (model ._meta .db_table ).create_search_index (index )
275
-
276
269
@ignore_embedded_models
277
270
def add_index (
278
271
self , model , index , * , field = None , unique = False , column_prefix = "" , parent_model = None
@@ -296,18 +289,13 @@ def _add_field_index(self, model, field, *, column_prefix=""):
296
289
index .name = self ._create_index_name (model ._meta .db_table , [column_prefix + field .column ])
297
290
self .add_index (model , index , field = field , column_prefix = column_prefix )
298
291
299
- @singledispatchmethod
300
292
def _remove_index (self , index , model ):
293
+ if isinstance (index , AtlasSearchIndex | AtlasVectorSearchIndex ):
294
+ return self .get_collection (model ._meta .db_table ).drop_search_index (index .name )
295
+ if isinstance (index , Index ):
296
+ return self .get_collection (model ._meta .db_table ).drop_index (index .name )
301
297
raise ValueError (f"{ type (index )} isn't a supported index type" )
302
298
303
- @_remove_index .register
304
- def _ (self , index : Index , model ):
305
- return self .get_collection (model ._meta .db_table ).drop_index (index .name )
306
-
307
- @_remove_index .register
308
- def _ (self , index : AtlasSearchIndex | AtlasVectorSearchIndex , model ):
309
- return self .get_collection (model ._meta .db_table ).drop_search_index (index .name )
310
-
311
299
@ignore_embedded_models
312
300
def remove_index (self , model , index ):
313
301
if index .contains_expressions :
0 commit comments