The future of Ring

Flexible controller

import ring

class A(object):

    @ring.dict({})
    def f(self, a, b):
        ...

    @f.ring.key  # override key creation function
    def f_key(self, a, b):
        ...  # possible __ring_key__ alternative

    @f.ring.on_update  # events
    def f_on_update(self, a, b):
        ...

    @ring.dict({})
    def g(self, a):
        ...

    @g.ring.cascade  # cascading for subsets (and supersets)
    def g_cascade(self):
        return {
            'delete': self.f,
        }

Ring doctor

import ring

@ring.dict({}, 'prefix')
def f1(a):
    pass

@ring.dict({}, 'prefix')
def f2(a):
    pass

@ring.dict({}, 'overload', overload=True)
def o1(a):
    pass

@ring.dict({}, 'overload', overload=2)
def o2(a):
    pass


ring.doctor()  # raise error: f1 and f2 has potential key collision