Skip to content

Sushant/cheeses

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cheeses Build Status

CRDTs in Python

Heavily inspired by Meangirls

Example usage

Sets

All sets support add, remove, merge, clone, to_dict, to_list, to_json methods and a from_dict class method.

Following examples use a hypothetical set up of 3 replicas which receive requests to add or remove an element and a cache layer that merges the results from all the replicas before returning a read response.

>>> import crdt
# Replica A
>>> a = crdt.TwoPhaseSet() # or crdt.LWWSet() or crdt.ORSet()
# Replica B
>>> b = crdt.TwoPhaseSet() # or crdt.LWWSet() or crdt.ORSet()
# Replica C
>>> c = crdt.TwoPhaseSet() # or crdt.LWWSet() or crdt.ORSet()

>>> a.add('foo')
>>> b.add('bar')
>>> c.remove('foo') # TwoPhaseSet will raise an exception here

# Cache layer that merges all replicas before returning the read response. 
# To do this over the wire:
# 1) to_json() to serialize
# 2) json.loads() to deserialize
# 3) and from_dict() to instantiate object again
>>> d = a.clone()

>>> d.merge(b)
>>> d.merge(c)

>>> d.to_list()
['foo', 'bar'] # if d is TwoPhaseSet
['bar']        # if d is LWWSet
['foo', 'bar'] # if d is ORSet

Running tests

$ python -m unittest discover -s tests -p '*_test.py'

Resources