예제 #1
0
class TagTimeKey(TimeKey):

    def __init__(self, tag, minutes=each10minutes, name='tagtime'):
        self.minutes = IIBTree([(i, 1) for i in minutes])

        self.tag = tag
        self.name = name

    def __call__(self, objectId, instance, *arg, **kw):
        tag = self.tag.query(instance.context)
        if not tag:
            return ()

        tag = time.localtime(tag)

        minute = tag[4]
        if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)):
            minute = self.minutes.maxKey(minute)

        try:
            minute2 = self.minutes.minKey(minute+1)
            time2 = time.mktime(tag[:4] + (minute2, 0, 0, 0, 0))
        except ValueError:
            time2 = time.mktime(tag[:4] + (0, 0, 0, 0, 0)) + 3600

        if time2 < time.time():
            return {'%s:%s'%(self.name, self.tag.name): time2}

        return {'%s:%s'%(self.name, self.tag.name):
                    time.mktime(tag[:4] + (minute, 0, 0, 0, 0))}
예제 #2
0
    def testMany(self):
        import random
        N = 15  # number of IIBTrees to feed in
        L = []
        commonkey = N * 1000
        allkeys = {commonkey: 1}
        for i in range(N):
            t = IIBTree()
            t[commonkey] = i
            for j in range(N - i):
                key = i + j
                allkeys[key] = 1
                t[key] = N * i + j
            L.append((t, i + 1))
        random.shuffle(L)
        allkeys = allkeys.keys()
        allkeys.sort()

        # Test the union.
        expected = []
        for key in allkeys:
            sum = 0
            for t, w in L:
                if t.has_key(key):
                    sum += t[key] * w
            expected.append((key, sum))
        # print 'union', expected
        got = mass_weightedUnion(L)
        self.assertEqual(expected, list(got.items()))

        # Test the intersection.
        expected = []
        for key in allkeys:
            sum = 0
            for t, w in L:
                if t.has_key(key):
                    sum += t[key] * w
                else:
                    break
            else:
                # We didn't break out of the loop so it's in the intersection.
                expected.append((key, sum))
        # print 'intersection', expected
        got = mass_weightedIntersection(L)
        self.assertEqual(expected, list(got.items()))
예제 #3
0
    def testMany(self):
        import random
        N = 15  # number of IIBTrees to feed in
        L = []
        commonkey = N * 1000
        allkeys = {commonkey: 1}
        for i in range(N):
            t = IIBTree()
            t[commonkey] = i
            for j in range(N-i):
                key = i + j
                allkeys[key] = 1
                t[key] = N*i + j
            L.append((t, i+1))
        random.shuffle(L)
        allkeys = allkeys.keys()
        allkeys.sort()

        # Test the union.
        expected = []
        for key in allkeys:
            sum = 0
            for t, w in L:
                if t.has_key(key):
                    sum += t[key] * w
            expected.append((key, sum))
        # print 'union', expected
        got = mass_weightedUnion(L)
        self.assertEqual(expected, list(got.items()))

        # Test the intersection.
        expected = []
        for key in allkeys:
            sum = 0
            for t, w in L:
                if t.has_key(key):
                    sum += t[key] * w
                else:
                    break
            else:
                # We didn't break out of the loop so it's in the intersection.
                expected.append((key, sum))
        # print 'intersection', expected
        got = mass_weightedIntersection(L)
        self.assertEqual(expected, list(got.items()))
예제 #4
0
class TimeKey(object):
    interface.implements(ITimeKey)

    def __init__(self, hours=eachHour, minutes=each0minute, name='time'):
        self.hours = IIBTree([(i, 1) for i in hours])
        self.minutes = IIBTree([(i, 1) for i in minutes])
        self.name = name

    def __call__(self, *args, **kw):
        now = time.localtime()

        minute = now[4]
        if not (self.minutes.has_key(-1) or self.minutes.has_key(minute)):
            minute = self.minutes.maxKey(minute)

        hour = now[3]
        if not (self.hours.has_key(-1) or self.hours.has_key(hour)):
            hour = self.hours.maxKey(hour)

        return {self.name: time.mktime(now[:3] + (hour, minute, 0, 0, 0, 0))}
예제 #5
0
class database:
    def __init__(self):
        self.data = []
        self.dict = IIBTree()
        self.index = -1  #index of the last element in the list

    def insert(self, key, value):
        if self.dict.has_key(key):
            index = self.dict.get(key)
            self.data[index] = value
        else:
            self.data.append(value)
            self.index = self.index + 1
            index = self.index
            self.dict.update({key: index})

    def search(self, key):
        if self.dict.has_key(key):
            value = self.data[self.dict.get(key)]
            return value
        return "NOT PRESENT"

    def delete(self, key):
        self.dict.pop(key)