GithubHelp home page GithubHelp logo

hitenjadeja / django-reversion-compare Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jedie/django-reversion-compare

0.0 1.0 0.0 1.46 MB

Add compare view to django-reversion for comparing two versions of a reversion model.

Home Page: https://pypi.org/project/django-reversion-compare/

License: Other

Shell 0.03% Python 92.09% Makefile 0.93% HTML 6.94%

django-reversion-compare's Introduction

django-reversion-compare

django-reversion-compare is an extension to django-reversion that provides a history compare view to compare two versions of a model which is under reversion.

Comparing model versions is not a easy task. Maybe there are different view how this should looks like. This project will gives you a generic way to see whats has been changed.

Many parts are customizable by overwrite methods or subclassing, see above.

Build Status on github github.com/jedie/django-reversion-compare/actions
Coverage Status on coveralls.io coveralls.io/r/jedie/django-reversion-compare
Coverage Status on codecov.io codecov.io/gh/jedie/django-reversion-compare
Requirements Status on requires.io requires.io/github/jedie/django-reversion-compare/requirements/

Installation

Just use:

pip install django-reversion-compare

Setup

Add reversion_compare to INSTALLED_APPS in your settings.py, e.g.:

INSTALLED_APPS = (
    'django...',
    ...
    'reversion', # https://github.com/etianen/django-reversion
    'reversion_compare', # https://github.com/jedie/django-reversion-compare
    ...
)

# Add reversion models to admin interface:
ADD_REVERSION_ADMIN=True
# optional settings:
REVERSION_COMPARE_FOREIGN_OBJECTS_AS_ID=False
REVERSION_COMPARE_IGNORE_NOT_REGISTERED=False

Usage

Inherit from CompareVersionAdmin instead of VersionAdmin to get the comparison feature.

admin.py e.g.:

from django.contrib import admin
from reversion_compare.admin import CompareVersionAdmin

from my_app.models import ExampleModel

@admin.register(ExampleModel)
class ExampleModelAdmin(CompareVersionAdmin):
    pass

If you're using an existing third party app, then you can add patch django-reversion-compare into its admin class by using the reversion_compare.helpers.patch_admin() method. For example, to add version control to the built-in User model:

from reversion_compare.helpers import patch_admin

patch_admin(User)

e.g.: Add django-cms Page model:

from cms.models.pagemodel import Page
from reversion_compare.helpers import patch_admin


# Patch django-cms Page Model to add reversion-compare functionality:
patch_admin(Page)

Customize

It's possible to change the look for every field or for a entire field type. You must only define a methods to your admin class with this name scheme:

  • "compare_%s" % field_name
  • "compare_%s" % field.get_internal_type()

If there is no method with this name scheme, the fallback_compare() method will be used.

An example for specifying a compare method for a model field by name:

class YourAdmin(CompareVersionAdmin):
    def compare_foo_bar(self, obj_compare):
        """ compare the foo_bar model field """
        return "%r <-> %r" % (obj_compare.value1, obj_compare.value2)

and example using patch_admin with custom version admin class:

patch_admin(User, AdminClass=YourAdmin)

Class Based View

Beyond the Admin views, you can also create a Class Based View for displaying and comparing version differences. This is a single class-based-view that either displays the list of versions to select for an object or displays both the versions and their differences (if the versions to be compared have been selected). This class can be used just like a normal DetailView:

More information about this can be found in DocString of:

The make run-test-server test project contains a Demo, use the links under:

HistoryCompareDetailView Examples:

Screenshots

Here some screenshots of django-reversion-compare:


How to select the versions to compare:

django-reversion-compare_v0_1_0-01.png


from v0.1.0: DateTimeField compare (last update), TextField compare (content) with small changes and a ForeignKey compare (child model instance was added):

django-reversion-compare_v0_1_0-02.png


from v0.1.0: Same as above, but the are more lines changed in TextField and the ForeignKey relation was removed:

django-reversion-compare_v0_1_0-03.png


Example screenshot from v0.3.0: a many-to-many field compare (friends, hobbies):

django-reversion-compare_v0_3_0-01.png

  • In the first line, the m2m object has been changed.
  • line 2: A m2m object was deleted
  • line 3: A m2m object was removed from this entry (but not deleted)
  • line 4: This m2m object has not changed

create developer environment

e.g.:

# Clone project (Use your fork SSH url!):
~$ git clone https://github.com/jedie/django-reversion-compare.git
~$ cd django-reversion-compare
~/django-reversion-compare$ make install
~/django-reversion-compare$ make
help                 List all commands
install-poetry       install or update poetry via pip
install              install via poetry
update               Update the dependencies as according to the pyproject.toml file
lint                 Run code formatters and linter
fix-code-style       Fix code formatting
pyupgrade            Run pyupgrade
tox-listenvs         List all tox test environments
tox                  Run pytest via tox with all environments
pytest               Run pytest
update-rst-readme    update README.rst from README.creole
publish              Release new version to PyPi
run-test-server      Start Django dev server with the test project
makemessages         Make and compile locales message files

Helpful for writing and debugging unittests is to run a local test server with the same data. e.g.:

~/django-reversion-compare$ make run-test-server

migration will be run.

Call manage commands from test project, e.g.:

~/django-reversion-compare$ poetry shell
django-reversion-compare-foobar-py3.6) ~/django-reversion-compare$ ./reversion_compare_tests/manage.py --help
...

Backwards-incompatible changes

v0.12.0

Google "diff-match-patch" is now mandatory and not optional.

Version compatibility

Reversion-Compare django-reversion Django Python
>=v0.15.0 v3.0 v2.2, v3.2, v4.0 v3.7, v3.8, v3.9
>=v0.13.0 v3.0 v2.2, v3.0, v3.1 v3.7, v3.8, v3.9
>=v0.10.0 v3.0 v2.2, v3.0 v3.6, v3.7, v3.8, pypy3
>=v0.9.0 v2.0 v2.2, v3.0 v3.6, v3.7, v3.8, pypy3
>=v0.8.6 v2.0 v1.11, v2.0 v3.5, v3.6, v3.7, pypy3
>=v0.8.4 v2.0 v1.8, v1.11, v2.0 v3.5, v3.6, pypy3
>=v0.8.3 v2.0 v1.8, v1.11 v3.5, v3.6, pypy3
v0.8.x v2.0 v1.8, v1.10, v1.11 v2.7, v3.4, v3.5, v3.6 (only with Django 1.11)
>=v0.7.2 v2.0 v1.8, v1.9, v1.10 v2.7, v3.4, v3.5
v0.7.x v2.0 v1.8, v1.9 v2.7, v3.4, v3.5
v0.6.x v1.9, v1.10 v1.8, v1.9 v2.7, v3.4, v3.5
>=v0.5.2 v1.9 v1.7, v1.8 v2.7, v3.4
>=v0.4 v1.8 v1.7 v2.7, v3.4
<v0.4 v1.6 v1.4 v2.7

These are the unittests variants. See also: /pyproject.toml Maybe other versions are compatible, too.

Changelog

Links

Github https://github.com/jedie/django-reversion-compare
Python Packages https://pypi.org/project/django-reversion-compare/

Donation

django-reversion-compare's People

Contributors

bmihelac avatar charettes avatar dbader avatar dumdata avatar eliast avatar etianen avatar etienned avatar fenrrir avatar gavinwahl avatar geyser avatar gregkaleka avatar jbonnett avatar jedie avatar jeremy-engel avatar lagovas avatar legostormtroopr avatar luzfcb avatar pahaz avatar quantum5 avatar ron8mcr avatar saex avatar samifahed avatar shamrin avatar simonw avatar spapas avatar vdboor avatar w4rri0r3k avatar willtho89 avatar wuilliam321 avatar zsiciarz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.