Tool to help diff two Django settings modules
Project description
A very simple tool to help diff two Django settings modules.
Motivation
Let’s say that you have done some significant refactoring to your settings module. For example, you have gone from a single settings file to a modular approach, where there is no longer a single settings.py. You want to make sure that your settings are effectively exactly the same as before, though! Of course you can’t rely on simple file diffing, since there is no longer a single settings.py.
There are some non-intuitive things to account for, which django-settings-diff handles for you:
Even with a single settings.py, there is a (potentially) significant difference between simply importing the file and the “final” settings that are used by Django (see https://docs.djangoproject.com/en/2.1/topics/settings/#using-settings-in-python-code). That is, we want to compare the actual settings at runtime!
The settings object cannot be naively treated as a dict – it is similar, but different enough to prevent easy diffing (the native settings object thwarts both pprint and deepdiff).
So, it isn’t doing anything crazy, but it removes some overhead.
Installation
Install from pip (recommended):
$ pip install django-settings-diff
Or, install straight from the repo:
$ git clone https://github.com/GreenBankObservatory/django-settings-diff $ pip install django-settings-diff
Note that this will install a wrapper script for you: diffsettings
Entry Points
Use the wrapper script (recommended):
$ diffsettings -h
Call the module:
$ python -m django_settings_diff -h
Import as library:
$ python >>> from django_settings_diff import diffsettings >>> help(diffsettings)
Usage
There are two standard usage patterns.
You should first ensure that you have saved two versions of your settings. For this example we will use myapp/settings_old.py and myapp/settings_new.py.
Alternatively, you could use the same DJANGO_SETTINGS_MODULE for both dumps, but swap the settings file itself in between. This is useful in repositories that rely on the settings file being a specific name, for example.
#1: Compare Python objects directly
This uses deepdiff internally to perform the diff.
Dump Settings
Pickle the settings modules to disk:
$ DJANGO_SETTINGS_MODULE=myapp.settings_old diffsettings --dump old_settings.pkl $ DJANGO_SETTINGS_MODULE=myapp.settings_new diffsettings --dump new_settings.pkl
Diff Settings
Now we can diff the two settings objects:
$ diffsettings old_settings.pkl new_settings.pkl
See the documentation for deepdiff for help deciphering the output.
#2: Compare via external diff tool
In this method the settings are dumped as text files and then compared using a standard diff tool.
Dump Settings
Dump the settings modules to disk (internally this uses pprint to print the settings object):
$ DJANGO_SETTINGS_MODULE=myapp.settings_old diffsettings --dump old_settings.txt $ DJANGO_SETTINGS_MODULE=myapp.settings_new diffsettings --dump new_settings.txt
Diff Settings
Then, use your favorite diff tool to compare these. This should work quite well, since the object hierarchy has been broken up line by line.
For example:
$ tkdiff {old,new}_settings.txt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django_settings_diff-0.2.2.tar.gz
.
File metadata
- Download URL: django_settings_diff-0.2.2.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.9 CPython/3.8.2 Linux/4.15.0-106-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 314025c7aa6cfc67896829107203e81269c6b6baec5ba44d79e2fa8226a357f3 |
|
MD5 | 114c28621a00ec631fdc6a16d6b74b91 |
|
BLAKE2b-256 | 472b09f77b887622c8737de48f1e441a95ba05603d130f53bda8f3833f260363 |
File details
Details for the file django_settings_diff-0.2.2-py2.py3-none-any.whl
.
File metadata
- Download URL: django_settings_diff-0.2.2-py2.py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.9 CPython/3.8.2 Linux/4.15.0-106-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b72ffaffca4967b159956a933a31c777a37a6d1bf1d2180fcb193c82737a8b5 |
|
MD5 | a3c0345a5d7bc464b52dd798dcfe493b |
|
BLAKE2b-256 | d8979d07cd23a7a400c238533c30f9c48db5fe23e1b212485d214508acda7937 |