RFC : Migration Adapters

51 views
Skip to first unread message

Curtis Maloney

unread,
Feb 3, 2018, 4:29:54 AM2/3/18
to django-d...@googlegroups.com
Hey,

I've recently written an app that implements a closure tree using
views... and in order to make the migrations work as needed you must
manually add an entry to the migrations.

Another friend of mine, a recent django convert, was wanting a way to
add to the migration script generated when creating certain tables...

And today I realised I wanted quite involved control of how migration
actions are written for the idea I was working on...

What I conceived was what I call a MigrationAdapter, which controls at
least how create/modify/delete actions for a given object are generated.

I've started looking into the migrations code, and it appears the steps
are very much hard-coded [and, it appears, with much painfully learned
good reasons]...

Anyone with more familiarity with the migration machinery got input on
if this is feasible?

--
Curtis

Markus Holtermann

unread,
Feb 3, 2018, 8:00:06 AM2/3/18
to django-d...@googlegroups.com
Hey Curtis,

the key of the migration operations ordering is in
https://github.com/django/django/blob/d0a42a14c06e033922f6d51e6384cba53be887b6/django/db/migrations/autodetector.py#L159-L195
as you probably have figured out.

What _could_ work, it's not more than idea w/o much thinking about it,
turning these function calls into a list or whatnot that you can inject
functions into that could do "stuff". Or create a dozen hooks that are
called before/after each of these steps.

The other important part is the MigrationGraph in
https://github.com/django/django/blob/d0a42a14c06e033922f6d51e6384cba53be887b6/django/db/migrations/graph.py#L99
that defines in which order migrations are being applied. Injecting
something there is relatively easy by adding more nodes and dependencies
to the graph. There's no official interface to do so, though.

I hope that already helps.

/Markus
>--
>You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group.
>To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
>To post to this group, send email to django-d...@googlegroups.com.
>Visit this group at https://groups.google.com/group/django-developers.
>To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/12134aff-d37c-2b35-27a2-58d52f9358ff%40tinbrain.net.
>For more options, visit https://groups.google.com/d/optout.

--
signature.asc
Reply all
Reply to author
Forward
0 new messages