You are not logged in Log in Join
You are here: Home » Members » k_vertigo » ShortStories » counter.py » View File

Log in
Name

Password

 

counter.py

File details
Size
1 K
File type
text/plain

File contents

from BTrees.Length import Length
from threading import RLock
from OFS.SimpleItem import SimpleItem
from Acquisition import Implicit
from AccessControl import ClassSecurityInfo
import Globals

manage_addSuperFooCounterForm = Globals.DTMLFile('dtml/addCounter', globals())

def manage_addSuperFooCounter(self
                              id,
                              title,
                              start=1,
                              callback_url='',
                              REQUEST
                              ):

    id=str(id)
    title=str(title)
    start=int(start) # raises
    
    ob = Counter(id, title, start)

    self._setObject(id, ob)

    if REQUEST is not None:
        if callback_url:
            REQUEST.RESPONSE.redirect(callback_url)
        else:
            REQUEST.RESPONSE.redirect('manage_main')


# conflict resistant counter
class Counter(SimpleItem, Implicit):

    meta_type = "Super Foo Counter"

    security = ClassSecurityInfo()

    def __init__(self, id, title, start=1):
        self.id = id
        self.title = title
        self._counter = Length(start)

    security.declarePublic('next')
    def next(self):
        val = self._counter()
        self._counter.change(1)
        return val


Globals.InitializeClass(Counter)
# the above doesn't do mutual exclusion though...