Fixtures are a Messy Mess

It is quite a pain to maintain fixtures it seems. I am not sure why yet. Maybe there hasn’t been quite enough time on this piece of the product for it to mature.

Django dumpdata

I tried several different variations to dump the data. I’ll include a few of them here since they might actually work for someone else.

python manage.py dumpdata > fixture.json

I kept getting various key errors.

Could not load contenttypes.ContentType(pk=23): duplicate key value violates unique constraint “django_content_type_app_label_76bd3d3b_uniq” DETAIL: Key (app_label, model)=(businesses, business) already exists.

Eventually turned into this:

python manage.py dumpdata –indent=4 -e contenttypes -e auth.Permission -e admin –natural-foreign > fixture.json

OR

python manage.py dumpdata –natural-foreign –natural-primary –indent=4 > fixture.json

gave me this:

Could not load object.User(pk=None): null value in column “user_ptr_id” violates not-null constraint

DumpData Alternatives

The django grid to the rescue again.

A lot of the packages were for generating testing fixtures. I don’t need that. What I need is basically a data backup tool so that whichever dev has the best copy of the data to be able to create the deployment fixture.

I decided to give Fixture Magic a try.

Fixture Magic

My initial test wasn’t very promising.

ImportError: cannot import name loading

But apparently I wasn’t the only one.

-e git://github.com/davedash/django-fixture-magic@42c6df73d11512d76e3170453f175164ff22db02#egg=django_fixture_magic

Then I found out that I can’t have non-int keys. Since most of my objects use UUID that was the end of F-Magic.

I Gave Up On Fixtures

This data model must just be too complex.

Deploying dev environment now consists of setting up the db and loading a full DB dump.

pg_dump APP > APP/fixtures/pg_dump.latest.sql

Load it up with a script when deploying dev.

psql APP < APP/fixtures/pg_dump.latest.sql

How Now Tests?

I know. Fixtures are kinda important with tests. I went ahead and installed Factory boy.

Good enough for now.

Sorry Django Fixtures. You kinda suck.