Skip to content
This repository was archived by the owner on Sep 30, 2019. It is now read-only.

Commit c04d950

Browse files
committed
refactor of migrations
1 parent fa422ab commit c04d950

File tree

1 file changed

+44
-74
lines changed

1 file changed

+44
-74
lines changed

pg_fts/migrations.py

Lines changed: 44 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)