@@ -123,10 +123,9 @@ def delete_index(self, model, vector_field):
123123 )
124124
125125
126- class UpdateVectorOperation (Operation ):
126+ class BaseVectorOperation (Operation ):
127127 """
128- Updates changes to :class:`~pg_fts.fields.TSVectorField` for existing
129- models
128+ Base migrations class
130129
131130 :param name: The Model name
132131
@@ -136,6 +135,8 @@ class UpdateVectorOperation(Operation):
136135 reduces_to_sql = True
137136 reversible = True
138137 sql_creator = PgFtsSQL ()
138+ forward_fn = None
139+ backward_fn = None
139140
140141 def __init__ (self , name , fts_vector ):
141142 self .name = name
@@ -149,61 +150,76 @@ def database_forwards(self, app_label, schema_editor, from_state,
149150
150151 model = from_state .render ().get_model (app_label , self .name )
151152 vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
152- schema_editor .execute (self .sql_creator . update_vector (
153+ schema_editor .execute (self .forward_fn (
153154 model ,
154155 vector_field
155156 ))
156157
157158 def database_backwards (self , app_label , schema_editor , from_state ,
158159 to_state ):
159- pass
160+
161+ model = from_state .render ().get_model (app_label , self .name )
162+ vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
163+
164+ schema_editor .execute (self .backward_fn (
165+ model ,
166+ vector_field
167+ ))
160168
161169 def describe (self ):
162170 return "Create trigger `%s` for model `%s`" % (
163171 self .fts_vector , self .name
164172 )
165173
166174
167- class CreateFTSTriggerOperation ( Operation ):
175+ class UpdateVectorOperation ( BaseVectorOperation ):
168176 """
169- Creates a :pg_docs:`custom trigger <textsearch-features.html#TEXTSEARCH-UPDATE-TRIGGERS>`
170- for updating the :class:`~pg_fts.fields.TSVectorField` with rank values
177+ Updates changes to :class:`~pg_fts.fields.TSVectorField` for existing
178+ models
171179
172180 :param name: The Model name
173181
174182 :param fts_vector: The :class:`~pg_fts.fields.TSVectorField` field name
175183 """
176184
177- reduces_to_sql = True
178- reversible = True
179-
180- sql_creator = PgFtsSQL ()
181-
182185 def __init__ (self , name , fts_vector ):
183186 self .name = name
184187 self .fts_vector = fts_vector
188+ self .forward_fn = self .sql_creator .update_vector
185189
186- def state_forwards (self , app_label , state ):
190+ def database_backwards (self , app_label , schema_editor , from_state ,
191+ to_state ):
187192 pass
188193
189- def database_forwards (self , app_label , schema_editor , from_state ,
190- to_state ):
194+ def describe (self ):
195+ return "Create trigger `%s` for model `%s`" % (
196+ self .fts_vector , self .name
197+ )
191198
192- model = from_state .render ().get_model (app_label , self .name )
193- vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
194199
195- schema_editor .execute (self .sql_creator .create_fts_trigger (
196- model ,
197- vector_field
198- ))
200+ class CreateFTSTriggerOperation (BaseVectorOperation ):
201+ """
202+ Creates a :pg_docs:`custom trigger <textsearch-features.html#TEXTSEARCH-UPDATE-TRIGGERS>`
203+ for updating the :class:`~pg_fts.fields.TSVectorField` with rank values
204+
205+ :param name: The Model name
206+
207+ :param fts_vector: The :class:`~pg_fts.fields.TSVectorField` field name
208+ """
209+
210+ def __init__ (self , name , fts_vector ):
211+ self .name = name
212+ self .fts_vector = fts_vector
213+ self .forward_fn = self .sql_creator .create_fts_trigger
214+ self .backward_fn = self .sql_creator .delete_trigger
199215
200216 def database_backwards (self , app_label , schema_editor , from_state ,
201217 to_state ):
202218
203219 model = from_state .render ().get_model (app_label , self .name )
204220 vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
205221
206- schema_editor .execute (self .sql_creator . delete_trigger (
222+ schema_editor .execute (self .backward_fn (
207223 model ,
208224 vector_field
209225 ))
@@ -214,7 +230,7 @@ def describe(self):
214230 )
215231
216232
217- class DeleteFTSTriggerOperation (Operation ):
233+ class DeleteFTSTriggerOperation (BaseVectorOperation ):
218234 """
219235 Deletes trigger generated by :class:`~pg_fts.migrations.CreateFTSTriggerOperation`
220236
@@ -223,47 +239,19 @@ class DeleteFTSTriggerOperation(Operation):
223239 :param fts_vector: The :class:`~pg_fts.fields.TSVectorField` field name
224240 """
225241
226- reduces_to_sql = True
227- reversible = True
228-
229- sql_creator = PgFtsSQL ()
230-
231242 def __init__ (self , name , fts_vector ):
232243 self .name = name
233244 self .fts_vector = fts_vector
234-
235- def state_forwards (self , app_label , state ):
236- pass
237-
238- def database_forwards (self , app_label , schema_editor , from_state ,
239- to_state ):
240-
241- model = from_state .render ().get_model (app_label , self .name )
242- vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
243-
244- schema_editor .execute (self .sql_creator .delete_trigger (
245- model ,
246- vector_field
247- ))
248-
249- def database_backwards (self , app_label , schema_editor , from_state ,
250- to_state ):
251-
252- model = from_state .render ().get_model (app_label , self .name )
253- vector_field = model ._meta .get_field_by_name (self .fts_vector )[0 ]
254-
255- schema_editor .execute (self .sql_creator .create_fts_trigger (
256- model ,
257- vector_field
258- ))
245+ self .forward_fn = self .sql_creator .delete_trigger
246+ self .backward_fn = self .sql_creator .create_fts_trigger
259247
260248 def describe (self ):
261249 return "Delete trigger `%s` for model `%s`" % (
262250 self .fts_vector , self .name
263251 )
264252
265253
266- class CreateFTSIndexOperation (Operation ):
254+ class CreateFTSIndexOperation (BaseVectorOperation ):
267255 """
268256 Creates a index for :class:`~pg_fts.fields.TSVectorField`
269257
@@ -276,10 +264,6 @@ class CreateFTSIndexOperation(Operation):
276264
277265 # http://www.postgresql.org/docs/9.3/static/textsearch-indexes.html
278266 INDEXS = ('gin' , 'gist' )
279- reduces_to_sql = True
280-
281- reversible = True
282- sql_creator = PgFtsSQL ()
283267
284268 def __init__ (self , name , fts_vector , index ):
285269 assert index in self .INDEXS , "Invalid index '%s'. Options %s " % (
@@ -319,28 +303,14 @@ def describe(self):
319303 )
320304
321305
322- class DeleteFTSIndexOperation (Operation ):
306+ class DeleteFTSIndexOperation (CreateFTSIndexOperation ):
323307 """
324308 Removes index created by :class:`~pg_fts.migrations.CreateFTSIndexOperation`
325309
326310 :param name: The Model name
327311 :param fts_vector: The :class:`~pg_fts.fields.TSVectorField` field name
328312 :param index: The type of index 'gin' or 'gist' for more information go to
329313 """
330- reduces_to_sql = True
331- reversible = True
332- INDEXS = ('gin' , 'gist' )
333- sql_creator = PgFtsSQL ()
334-
335- def __init__ (self , name , fts_vector , index ):
336- assert index in self .INDEXS , "Invalid index '%s'. Options %s " % (
337- index , ', ' .join (self .INDEXS ))
338- self .name = name
339- self .fts_vector = fts_vector
340- self .index = index
341-
342- def state_forwards (self , app_label , state ):
343- pass
344314
345315 def database_forwards (self , app_label , schema_editor , from_state ,
346316 to_state ):
0 commit comments