Metadata-Version: 2.0
Name: django-reversion-compare
Version: 0.5.2
Summary: history compare for django-reversion
Home-page: https://github.com/jedie/django-reversion-compare/
Author: Jens Diemer
Author-email: django-reversion-compare@jensdiemer.de
License: UNKNOWN
Download-URL: http://pypi.python.org/pypi/django-reversion-compare/
Keywords: django,django-reversion,reversion,diff,compare
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Programming Language :: Python
Classifier: Framework :: Django
Classifier: Topic :: Database :: Front-Ends
Classifier: Topic :: Documentation
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Classifier: Operating System :: OS Independent
Requires-Dist: Django (>=1.7,<1.8)
Requires-Dist: django-reversion (>=1.8)

========================
django-reversion-compare
========================

**django-reversion-compare** is an extension to `django-reversion <https://github.com/etianen/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.

+-----------------------------------+--------------------------------------------------+
| |Coverage Status on coveralls.io| | `coveralls.io/r/jedie/django-reversion-compare`_ |
+-----------------------------------+--------------------------------------------------+
| |Build Status on travis-ci.org|   | `travis-ci.org/jedie/django-reversion-compare`_  |
+-----------------------------------+--------------------------------------------------+

.. |Coverage Status on coveralls.io| image:: https://coveralls.io/repos/jedie/django-reversion-compare/badge.svg
.. _coveralls.io/r/jedie/django-reversion-compare: https://coveralls.io/r/jedie/django-reversion-compare
.. |Build Status on travis-ci.org| image:: https://travis-ci.org/jedie/django-reversion-compare.svg
.. _travis-ci.org/jedie/django-reversion-compare: https://travis-ci.org/jedie/django-reversion-compare/

------------
Requirements
------------

* Django 1.7.x

* `django-tools <https://github.com/jedie/django-tools/>`_ (**only** for running the unittests!)

------------
installation
------------

Just use:

::

    pip install django-reversion-compare

Optional you can install `google-diff-match-patch <https://code.google.com/p/google-diff-match-patch/>`_ otherwise difflib would be used.
The easiest way it to use the unofficial package `diff-match-patch <http://pypi.python.org/pypi/diff-match-patch/>`_, e.g.:

::

    pip install diff-match-patch

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

usage
=====

Inherit from **CompareVersionAdmin** instead of **VersionAdmin** to get the compare feature.

admin.py e.g.:

::

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

    from my_app.models import ExampleModel

    class ExampleModelAdmin(CompareVersionAdmin):
        pass

    admin.site.register(ExampleModel, ExampleModelAdmin)

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 exist no method with this name scheme, the ``fallback_compare()`` method would be used.

example for specify 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)

-----------
screenshots
-----------

Here some screenshots of django-reversion-compare:

----

How to select the versions to compare:

|django-reversion-compare_v0_1_0-01.png|

.. |django-reversion-compare_v0_1_0-01.png| image:: http://www.pylucid.org/static/pylucid.org/screenshots_PyLucid/django-reversion/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|

.. |django-reversion-compare_v0_1_0-02.png| image:: http://www.pylucid.org/static/pylucid.org/screenshots_PyLucid/django-reversion/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|

.. |django-reversion-compare_v0_1_0-03.png| image:: http://www.pylucid.org/static/pylucid.org/screenshots_PyLucid/django-reversion/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|

.. |django-reversion-compare_v0_3_0-01.png| image:: http://www.pylucid.org/static/pylucid.org/screenshots_PyLucid/django-reversion/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

---------
unittests
---------

run unittests
=============

via setup.py:

::

    $ cd path/to/django-reversion-compare
    django-reversion-compare$ ./setup.py test

via runtests.py:

::

    $ cd path/to/django-reversion-compare
    django-reversion-compare$ ./runtests.py

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

::

    ~$ cd path/to/django-reversion-compare/
    /django-reversion-compare$ ./tests/manage.py run_testserver

**migration** will be run and a superuser will be created. Username: **test** Password: **12345678**

---------------------
Version compatibility
---------------------

+-------------------+--------+
| Reversion-Compare | Django |
+===================+========+
| >=v0.4            | v1.7   |
+-------------------+--------+
| <v0.4             | v1.4   |
+-------------------+--------+

(These are the unittests variants. Maybe other versions are compatible, too.)

---------
changelog
---------

* v0.5.2 - 14.04.2015:

    * , contributed by Samuel Spencer:

        * Added Django 1.8 support: `pull #35 <https://github.com/jedie/django-reversion-compare/pull/35>`_

        * list of changes for reverse fields incorrectly includes a "deletion" for the item that was added in: `issues #34 <https://github.com/jedie/django-reversion-compare/issues/34>`_

* v0.5.1 - 28.02.2015:

    * activate previous/next links and add unitests for them

* v0.5.0 - 27.02.2015:

    * refactory unittests, test with Django v1.7 and Python 2.7 & 3.4

* v0.4.0 - 02.02.2015:

    * Updates for django 1.7 support

    * Add ``settings.ADD_REVERSION_ADMIN``

* v0.3.5 - 03.01.2013:

    * Remove date from version string. `issues 9 <https://github.com/jedie/django-reversion-compare/issues/9>`_

* v0.3.4 - 20.06.2012:

    * Use VersionAdmin.revision_manager rather than default_revision_manager, contributed by Mark Lavin - see: `pull request 7 <https://github.com/jedie/django-reversion-compare/pull/7>`_

    * Use logging for all debug prints, contributed by Bojan Mihelac - see: `pull request 8 <https://github.com/jedie/django-reversion-compare/pull/8>`_

* v0.3.3 - 11.06.2012:

    * Bugfix "ValueError: zero length field name in format" with Python 2.6 `issues 5 <https://github.com/jedie/django-reversion-compare/issues/5>`_

* v0.3.2 - 04.06.2012:

    * Bugfix for Python 2.6 in unified_diff(), see: `AttributeError: 'module' object has no attribute '_format_range_unified' <https://github.com/jedie/django-reversion-compare/issues/5>`_

* v0.3.1 - 01.06.2012:

    * Bugfix: force unicode in html diff

    * Bugfix in unittests

* v0.3.0 - 16.05.2012:

    * Enhanced handling of m2m changes with follow and non-follow relations.

* v0.2.2 - 15.05.2012:

    * Compare many-to-many in the right way.

* v0.2.1 - 10.05.2012:

    * Bugfix for models which has no m2m field: `https://github.com/jedie/django-reversion-compare/commit/c8e042945a6e78e5540b6ae27666f9b0cfc94880 <https://github.com/jedie/django-reversion-compare/commit/c8e042945a6e78e5540b6ae27666f9b0cfc94880>`_

* v0.2.0 - 09.05.2012:

    * many-to-many compare works, too.

* v0.1.0 - 08.05.2012:

    * First release

* v0.0.1 - 08.05.2012:

    * collect all compare stuff from old "diff" branch

    * see also: `https://github.com/etianen/django-reversion/issues/147 <https://github.com/etianen/django-reversion/issues/147>`_

-----
Links
-----

+-----------------+----------------------------------------------------------+
| IRC             | `#pylucid on freenode.net`_                              |
+-----------------+----------------------------------------------------------+
| Github          | `http://github.com/jedie/django-reversion-compare`_      |
+-----------------+----------------------------------------------------------+
| Python Packages | `http://pypi.python.org/pypi/django-reversion-compare/`_ |
+-----------------+----------------------------------------------------------+

.. _#pylucid on freenode.net: http://www.pylucid.org/permalink/304/irc-channel
.. _http://github.com/jedie/django-reversion-compare: http://github.com/jedie/django-reversion-compare
.. _http://pypi.python.org/pypi/django-reversion-compare/: http://pypi.python.org/pypi/django-reversion-compare/

contact
=======

Come into the conversation, besides the github communication features:

+---------+--------------------------------------------------------+
| Forum   | `official 'django-reversion-compare' Forum`_           |
+---------+--------------------------------------------------------+
| IRC     | #pylucid on freenode.net (Yes, the PyLucid channel...) |
+---------+--------------------------------------------------------+
| webchat | `http://webchat.freenode.net/?channels=pylucid`_       |
+---------+--------------------------------------------------------+

.. _official 'django-reversion-compare' Forum: http://www.pylucid.org/en/forum/13/
.. _http://webchat.freenode.net/?channels=pylucid: http://webchat.freenode.net/?channels=pylucid

