bronx.stdtypes.tracking¶
Tools to handle changes in some context.
Changes could be creation, deletion, modification.
Classes¶
- class bronx.stdtypes.tracking.MappingTracker(before, after)[source]¶
Bases:
TrackerA tracker that compute the differences between two mappings (e.g. dictionaries).
- Parameters:
before (collections.abc.Mapping) – The reference mapping
after (collections.abc.Mapping) – The (possibly) modified mapping
On the contrary to the
Trackerclass, thedeleted,created,updatedandunchangedproperties are read-only.Example:
>>> a=dict(a=1, b=2, c=3) >>> b=dict(b=9, c=3, d=4) >>> mtracker=MappingTracker(a, b) >>> mtracker.dump() Item deleted: a Item created: d Item updated: b Item unchanged: c >>> mtracker.differences() Item deleted: a Item created: d Item updated: b >>> len(mtracker) 3 >>> sorted(mtracker) ['a', 'b', 'c', 'd'] >>> 'c' in mtracker True
- property created¶
The set of created items.
- property deleted¶
The set of deleted items.
- property unchanged¶
The set of unchanged items.
- property updated¶
The set of updated items.
- class bronx.stdtypes.tracking.RecursiveMappingTracker(before, after)[source]¶
Bases:
MappingTrackerA tracker that compute that recursively compute differences between two mappings (e.g. dictionaries).
- Parameters:
before (collections.abc.Mapping) – The reference mapping
after (collections.abc.Mapping) – The (possibly) modified mapping
On the contrary to the
Trackerclass, thedeleted,created,updatedandunchangedproperties are read-only.Example:
>>> a = dict(a=1, b=dict(b1=1, b2=2, b3={1, 2}), c=0) >>> b = dict(a=1, b=dict(b1=1, b2=3, b3={1, 3}, b4='x'), d=0) >>> mtracker=RecursiveMappingTracker(a, b) >>> mtracker.dump_legend() (legend: created: "+" deleted: "-" unchanged: "=" updated: "?") >>> mtracker.differences() - c: 0 + d: 0 ? b: | + b4: 'x' | ? b2: before=2 after=3 | ? b3: | | Set's item deleted: 2 | | Set's item created: 3 >>> mtracker.deleted_data == {'c': 0} True >>> mtracker.created_data == {'d': 0} True >>> mtracker.unchanged_data == {'a': 1} True >>> set(mtracker.updated_data.keys()) == {'b'} True
The updated_data one and only item (b) is itself a
RecursiveMappingTrackerobject:>>> mtracker.updated_data['b'].dump() + b4: 'x' = b1: 1 ? b2: before=2 after=3 ? b3: | Set's item deleted: 2 | Set's item created: 3
- property created_data¶
A mapping of created items (present in after but not in before).
- property deleted_data¶
A mapping of deleteted items (present in before but not in after).
- property unchanged_data¶
A mapping of items available and identical in both before and after.
- property updated_data¶
A mapping of items available in both before and after but with different values.
- bronx.stdtypes.tracking.SimpleDifference¶
alias of
SimpleDiffernce
- class bronx.stdtypes.tracking.Tracker(before=None, after=None, deleted=None, created=None, updated=None, unchanged=None, sectionlabel='Section')[source]¶
Bases:
objectHandling of simple state status through
deleted,createdorupdateditems.- Parameters:
before (collections.abc.Iterable) – The reference list of items
after (collections.abc.Iterable) – The possibly modified list of items
deleted (collections.abc.Iterable) – The list of deleted items
created (collections.abc.Iterable) – The list of created items
updated (collections.abc.Iterable) – The list of updated items
unchanged (collections.abc.Iterable) – The list of unchanged items
sectionlabel – The display name of items
There are two way to initialise such an object:
Using the after and before attributes. Doing so, the deleted, created and unchanged sets are automatically computed;
Using the deleted, created and unchanged attributes in order to setup manually those items.
Example using after and before:
>>> a=[1,2,3,4,5,6] >>> b=[1,2,4,6,7] >>> tracker=Tracker(before=a, after=b) >>> tracker.dump() Section deleted: 3, 5 Section created: 7 Section updated: Section unchanged: 1, 2, 4, 6 >>> tracker.differences() Section deleted: 3, 5 Section created: 7 >>> list(tracker) [1, 2, 3, 4, 5, 6, 7] >>> tracker.updated = [2, 4] >>> tracker.dump() Section deleted: 3, 5 Section created: 7 Section updated: 2, 4 Section unchanged: 1, 6
Example using deleted, created and unchanged:
>>> trackbis=Tracker(deleted=[1, 2], created=[3, 4], unchanged=[5, 6], updated=[7, 8]) >>> trackbis.dump() Section deleted: 1, 2 Section created: 3, 4 Section updated: 8, 7 Section unchanged: 5, 6 >>> trackbis.unchanged = [7, ] >>> trackbis.dump() Section deleted: 1, 2 Section created: 3, 4 Section updated: 8 Section unchanged: 7
- property created¶
The set of created items.
- property deleted¶
The set of deleted items.
- property unchanged¶
The set of unchanged items.
- property updated¶
The set of updated items.