15
15
class SearchField (object ):
16
16
17
17
field_type = None
18
-
19
- attrs = ('boost' , 'include_in_all' , 'index' , 'null_value' , 'store' )
18
+ attrs = []
20
19
21
20
# Used to maintain the order of fields as defined in the class.
22
21
_creation_order = 0
23
22
24
23
def __init__ (self , * args , ** kwargs ):
25
- self .index_fieldname = kwargs .pop ('index_fieldname' , None )
26
- self .is_multivalued = kwargs .pop ('is_multivalued' , None )
24
+ # These are special.
25
+ for attr in ('index_fieldname' , 'is_multivalue' ):
26
+ setattr (self , attr , kwargs .pop (attr , None ))
27
+
28
+ # Set all kwargs on self for later access.
29
+ for attr in kwargs .keys ():
30
+ self .attrs .append (attr )
31
+ setattr (self , attr , kwargs .pop (attr , None ))
27
32
28
33
# Store this fields order.
29
34
self ._creation_order = SearchField ._creation_order
@@ -64,16 +69,6 @@ def get_definition(self):
64
69
65
70
class StringField (SearchField ):
66
71
field_type = 'string'
67
- attrs = SearchField .attrs + (
68
- 'analyzer' , 'ignore_above' ,
69
- 'index_analyzer' , 'index_options' , 'omit_norms' ,
70
- 'position_offset_gap' , 'search_analyzer' , 'term_vector' )
71
-
72
- def __init__ (self , * args , ** kwargs ):
73
- for attr in self .attrs :
74
- setattr (self , attr , kwargs .pop (attr , None ))
75
-
76
- super (StringField , self ).__init__ (* args , ** kwargs )
77
72
78
73
def prepare (self , value ):
79
74
return self .convert (super (StringField , self ).prepare (value ))
@@ -85,18 +80,12 @@ def convert(self, value):
85
80
return unicode (value )
86
81
87
82
88
- class NumberFieldBase (SearchField ):
89
- attrs = SearchField .attrs + ('ignore_malformed' , 'precision_step' )
90
-
91
-
92
- class IntegerField (NumberFieldBase ):
83
+ class IntegerField (SearchField ):
93
84
field_type = 'integer'
94
85
95
86
def __init__ (self , type = 'integer' , * args , ** kwargs ):
96
87
if type in ('byte' , 'short' , 'integer' , 'long' ):
97
88
self .field_type = type
98
- for attr in self .attrs :
99
- setattr (self , attr , kwargs .pop (attr , None ))
100
89
super (IntegerField , self ).__init__ (* args , ** kwargs )
101
90
102
91
def prepare (self , value ):
@@ -109,14 +98,12 @@ def convert(self, value):
109
98
return int (value )
110
99
111
100
112
- class FloatField (NumberFieldBase ):
101
+ class FloatField (SearchField ):
113
102
field_type = 'float'
114
103
115
104
def __init__ (self , type = 'float' , * args , ** kwargs ):
116
105
if type in ('float' , 'double' ):
117
106
self .field_type = type
118
- for attr in self .attrs :
119
- setattr (self , attr , kwargs .pop (attr , None ))
120
107
super (FloatField , self ).__init__ (* args , ** kwargs )
121
108
122
109
def prepare (self , value ):
@@ -131,11 +118,6 @@ def convert(self, value):
131
118
132
119
class DecimalField (StringField ):
133
120
134
- def __init__ (self , * args , ** kwargs ):
135
- for attr in self .attrs :
136
- setattr (self , attr , kwargs .pop (attr , None ))
137
- super (DecimalField , self ).__init__ (* args , ** kwargs )
138
-
139
121
def prepare (self , value ):
140
122
if value is None :
141
123
return None
@@ -152,11 +134,6 @@ def convert(self, value):
152
134
class BooleanField (SearchField ):
153
135
field_type = 'boolean'
154
136
155
- def __init__ (self , * args , ** kwargs ):
156
- for attr in self .attrs :
157
- setattr (self , attr , kwargs .pop (attr , None ))
158
- super (BooleanField , self ).__init__ (* args , ** kwargs )
159
-
160
137
def prepare (self , value ):
161
138
return self .convert (super (BooleanField , self ).prepare (value ))
162
139
@@ -167,19 +144,9 @@ def convert(self, value):
167
144
return bool (value )
168
145
169
146
170
- class DateFieldBase (SearchField ):
171
- attrs = SearchField .attrs + ('format' , 'ignore_malformed' ,
172
- 'precision_step' )
173
-
174
-
175
- class DateField (DateFieldBase ):
147
+ class DateField (SearchField ):
176
148
field_type = 'date'
177
149
178
- def __init__ (self , * args , ** kwargs ):
179
- for attr in self .attrs :
180
- setattr (self , attr , kwargs .pop (attr , None ))
181
- super (DateField , self ).__init__ (* args , ** kwargs )
182
-
183
150
def prepare (self , value ):
184
151
if isinstance (value , (datetime .date , datetime .datetime )):
185
152
return value .isoformat ()
@@ -231,7 +198,6 @@ def convert(self, value):
231
198
232
199
class BinaryField (SearchField ):
233
200
field_type = 'binary'
234
- attrs = ()
235
201
236
202
def prepare (self , value ):
237
203
if value is None :
0 commit comments