Process data by 'jsondata.JSONPatch' 
************************************

The module jsondata.JSONPatch provides patch operations in 
accordance to RFC6901.


Basic types of provided basic operations are:

* **Pointer Arithmetics**:  Manipulates and calculates the pointer itself.
  Thus the comparison is related to the resulting contained set.
  Where the shorter matching pointer path contains more elements, than 
  the longer, which itself is contained in the matching shorter path. 

* **Pointed Value Evaluation**: Fetches values from JSON documents.
  Thus the comparison is related to the resulting values pointed 
  to by the pointer path.

* **Calculations with Pointed Values**: Applies common arithmetics on to evaluated 
  values and numeric parts of pointers.

Syntax Elements
===============
The current release provides the following operators for the class 'JSONPointer'.

Class Components:

* **JSONPatch**:
  Job manager for the complete set tasks represented by patch items.

* **JSONPatchItem**:
  A task in accordance to RFC6901 stored as patch item.
  The creation requires the parameters to be prepared for 
  the record format.

* **JSONPatchItemRaw**:
  Splits a raw JSON patch string into the record format
  for JSONPatchItem.

Job Manager
-----------

Job list comparison::

   ops := '==' | '!='


Add and remove task entries::

   ops := '+' | '+=' | '-' | '-='


Task execution operators::

   ops := '()' 

Miscellaneous operators::

   ops := __len__ | '[]' | '()' 

Keyword operators::

   ops := apply | get | patch_export | patch_import 


Task Items
----------

Task comparison::

   ops := '==' | '!='


Task execution operators::

   ops := '()'

Keyword operators::

   ops := apply


Examples 
========

Examples for the provided basic calculations are:

Create List
-----------

* **Create a Job List**::

    jsonpatchlist = JSONPatch()


Add Item
--------
* **Add a Task Item**::

    jsonpatchlist = JSONPatch()
    for i in range(0,10):
        jsonpatchlist += JSONPatchItem("add", "/a"+unicode(i), "v"+unicode(i))


Remove Item
-----------
* **Remove a Task Item**::

    jsonpatchlist -= 8

    x = jsonpatchlist[1]
    jsonpatchlist -= x


Apply List
----------
* **Apply the Job List**::

    n,err = jsonpatchlist(configdata)
    assert n == 5
    assert err == []


Apply Item
----------
* **Apply a Task Item**::

    n,err = jsonpatchlist(configdata,0)
    ref = { "a0": "v0", "foo": "bar" }
    assert n == 1
    assert err == []
    assert ref == configdata


Export List
-----------
* **Export Job List**::

    filepath = os.path.dirname(__file__)+os.sep+"export.jsonp"
    ret = jsonpatchlist.patch_export(filepath)
    assert ret


Import List
----------
* **Import Job List**::

    implist = JSONPatch()
    imppatch = implist.patch_import(filepath)
    assert imppatch

    assert implist == jsonpatchlist.patch
    assert implist == jsonpatchlist