11# We need to put these in a separate module so they're easy to import
22# on a test-by-test basis so that we can skip django-requiring tests
33# if django isn't installed.
4+ from uuid import UUID
45
56
67from elasticutils .contrib .django import MappingType , Indexable
@@ -22,11 +23,17 @@ class SearchQuerySet(object):
2223 # Yes. This is kind of crazy, but ... whatever.
2324 def __init__ (self , model ):
2425 self .model = model
26+ self .id_field = model .id_field
2527 self .steps = []
2628
27- def get (self , pk ):
28- pk = int (pk )
29- return [m for m in _model_cache if m .id == pk ][0 ]
29+ def get (self , pk = None , uuid = None ):
30+ if pk :
31+ pk = int (pk )
32+ return [m for m in _model_cache if m .id == pk ][0 ]
33+ if uuid :
34+ uuid = UUID (uuid )
35+ return [m for m in _model_cache if m .uuid == uuid ][0 ]
36+ return []
3037
3138 def filter (self , id__in = None ):
3239 self .steps .append (('filter' , id__in ))
@@ -47,7 +54,8 @@ def __iter__(self):
4754
4855 for mem in self .steps :
4956 if mem [0 ] == 'filter' :
50- objs = [obj for obj in objs if obj .id in mem [1 ]]
57+ objs = [obj for obj in objs
58+ if getattr (obj , self .id_field ) in mem [1 ]]
5159 elif mem [0 ] == 'order_by' :
5260 order_by_field = mem [1 ][0 ]
5361 elif mem [0 ] == 'values_list' :
@@ -58,16 +66,16 @@ def __iter__(self):
5866
5967 if values_list :
6068 # Note: Hard-coded to just id and flat
61- objs = [obj . id for obj in objs ]
69+ objs = [getattr ( obj , self . id_field ) for obj in objs ]
6270 return iter (objs )
6371
6472
6573class Manager (object ):
6674 def get_query_set (self ):
6775 return SearchQuerySet (self )
6876
69- def get (self , pk ):
70- return self .get_query_set ().get (pk )
77+ def get (self , pk = None , uuid = None ):
78+ return self .get_query_set ().get (pk = pk , uuid = uuid )
7179
7280 def filter (self , * args , ** kwargs ):
7381 return self .get_query_set ().filter (* args , ** kwargs )
@@ -84,6 +92,7 @@ class FakeModel(object):
8492 objects = Manager ()
8593
8694 def __init__ (self , ** kw ):
95+ self .objects .id_field = kw .pop ('id_field' , 'id' )
8796 self ._doc = kw
8897 for key in kw :
8998 setattr (self , key , kw [key ])
@@ -102,3 +111,6 @@ def extract_document(cls, obj_id, obj=None):
102111 'what to do with these args.' )
103112
104113 return obj ._doc
114+
115+ class FakeDjangoWithUuidMappingType (FakeDjangoMappingType ):
116+ id_field = 'uuid'
0 commit comments