Example #1
0
class CacheFilter:
    """
    A class which takes an exporter and returns records which have
    changed by comparing them against cached data
    """
    def __init__(self, export_scheme, options):
        self.export_scheme = export_scheme
        self.options = options
        # Load our cached state if given
        if not options.state_file:
            # fake being a shelf
            self.cached_state = UserDict()
            self.cached_state.close = lambda: None
        else:
            self.cached_state = shelve.open(options.state_file)

    def extract_row_key(self, row):
        """
        Extract a tuple from a row to uniquely identify it
        """
        key = [row['case_id'], row['syndrome_id']]
        for form in self.export_scheme.include_forms:
            base = '%s.form_id' % form
            if base in row:
                key.append(row[base])
            else:
                n = 0
                while '%s.%d' % (base, n) in row:
                    key.append(row['%s.%d' % (base, n)])
                    n += 1
        return tuple(key)

    def __iter__(self):
        # Run over value tuples checking against cached state
        for row in dictifying_filter_gen(self.export_scheme.row_gen()):
            row_key = self.extract_row_key(row)
            row_key_repr = repr(row_key)
            current_values = [row[f] for f in self.options.monitored_fields]
            cached_values = self.cached_state.get(
                row_key_repr, [None] * len(self.options.monitored_fields))
            changed_values = [
                (f, cached_values[n], row[f])
                for n, f in enumerate(self.options.monitored_fields)
                if row[f] != cached_values[n]
            ]
            if changed_values:
                #print row_key, '->', changed_values
                yield (row, changed_values)

    def update_cache(self, row):
        row_key = self.extract_row_key(row)
        row_key_repr = repr(row_key)
        current_values = [row[f] for f in self.options.monitored_fields]
        if not self.options.dry_run:
            self.cached_state[row_key_repr] = current_values

    def commit(self):
        # Clean up
        self.cached_state.close()
Example #2
0
    def hit(self, key):
        if not key: return
        if key in self:
            self[key] += 1
        else:
            self[key] = 1

        return UserDict.get(self, key, 1)
Example #3
0
	def hit(self, key):
		if not key: return
		if key in self:
			self[key] += 1
		else:
			self[key] = 1
		
		return UserDict.get(self, key, 1)
class CacheFilter:
    """
    A class which takes an exporter and returns records which have
    changed by comparing them against cached data
    """
    def __init__(self, export_scheme, options):
        self.export_scheme = export_scheme
        self.options = options
        # Load our cached state if given
        if not options.state_file:
            # fake being a shelf
            self.cached_state = UserDict()
            self.cached_state.close = lambda: None
        else:
            self.cached_state = shelve.open(options.state_file)

    def extract_row_key(self, row):
        """
        Extract a tuple from a row to uniquely identify it
        """
        key = [row['case_id'], row['syndrome_id']]
        for form in self.export_scheme.include_forms:
            base = '%s.form_id' % form
            if base in row:
                key.append(row[base])
            else:
                n = 0
                while '%s.%d' % (base, n) in row:
                    key.append(row['%s.%d' % (base, n)])
                    n += 1
        return tuple(key)

    def __iter__(self):
        # Run over value tuples checking against cached state
        for row in dictifying_filter_gen(self.export_scheme.row_gen()):
            row_key = self.extract_row_key(row)
            row_key_repr = repr(row_key)
            current_values = [ row[f] for f in self.options.monitored_fields ]
            cached_values = self.cached_state.get(row_key_repr, [None] * len(self.options.monitored_fields))
            changed_values = [ (f, cached_values[n], row[f]) for n, f in enumerate(self.options.monitored_fields) if row[f] != cached_values[n] ]
            if changed_values:
                #print row_key, '->', changed_values
                yield (row, changed_values)

    def update_cache(self, row):
        row_key = self.extract_row_key(row)
        row_key_repr = repr(row_key)
        current_values = [ row[f] for f in self.options.monitored_fields ]
        if not self.options.dry_run:
            self.cached_state[row_key_repr] = current_values

    def commit(self):
        # Clean up
        self.cached_state.close()
Example #5
0
    verify(u2.has_key(i) == 1)
    verify((i in u2) == 1)
    verify(u1.has_key(i) == d1.has_key(i))
    verify((i in u1) == (i in d1))
    verify(u0.has_key(i) == d0.has_key(i))
    verify((i in u0) == (i in d0))

# Test update

t = UserDict()
t.update(u2)
verify(t == u2)

# Test get

for i in u2.keys():
    verify(u2.get(i) == u2[i])
    verify(u1.get(i) == d1.get(i))
    verify(u0.get(i) == d0.get(i))

# Test "in" iteration.
for i in xrange(20):
    u2[i] = str(i)
ikeys = []
for k in u2:
    ikeys.append(k)
ikeys.sort()
keys = u2.keys()
keys.sort()
verify(ikeys == keys)
Example #6
0
 def get(self, key, failobj=None):
     self.__populate()
     return UserDict.get( self, self._keyTransform(key), failobj )
    verify(u2.has_key(i) == 1)
    verify((i in u2) == 1)
    verify(u1.has_key(i) == d1.has_key(i))
    verify((i in u1) == (i in d1))
    verify(u0.has_key(i) == d0.has_key(i))
    verify((i in u0) == (i in d0))

# Test update

t = UserDict()
t.update(u2)
verify(t == u2)

# Test get

for i in u2.keys():
    verify(u2.get(i) == u2[i])
    verify(u1.get(i) == d1.get(i))
    verify(u0.get(i) == d0.get(i))

# Test "in" iteration.
for i in xrange(20):
    u2[i] = str(i)
ikeys = []
for k in u2:
    ikeys.append(k)
ikeys.sort()
keys = u2.keys()
keys.sort()
verify(ikeys == keys)
Example #8
0
 def get(self, key):
     return UserDict.get(self, key, 0)
Example #9
0
 def get(self, key, default=None):
     return UserDict.get(self, lower(key), default)
Example #10
0
# Check every path through every method of UserDict
from test_support import verify, verbose
from UserDict import UserDict, IterableUserDict
d0 = {}
d1 = {"one": 1}
d2 = {"one": 1, "two": 2}
# Test constructors
u = UserDict()
u0 = UserDict(d0)
u1 = UserDict(d1)
u2 = IterableUserDict(d2)
uu = UserDict(u)
uu0 = UserDict(u0)
uu1 = UserDict(u1)
uu2 = UserDict(u2)
# Test __repr__
verify(str(u0) == str(d0))
verify(repr(u1) == repr(d1))
verify( ` u2 ` == ` d2 `)
# Test __cmp__ and __len__
all = [d0, d1, d2, u, u0, u1, u2, uu, uu0, uu1, uu2]
for a in all:
    for b in all:
        verify(cmp(a, b) == cmp(len(a), len(b)))
# Test __getitem__
verify(u2["one"] == 1)
try:
    u1["two"]
except KeyError:
    pass
m2 = MyUserDict(u2)
m2a = m2.copy()
verify(m2a == m2)

# Test keys, items, values

verify(u2.keys() == d2.keys())
verify(u2.items() == d2.items())
verify(u2.values() == d2.values())

# Test has_key

for i in u2.keys():
    verify(u2.has_key(i) == 1)
    verify(u1.has_key(i) == d1.has_key(i))
    verify(u0.has_key(i) == d0.has_key(i))

# Test update

t = UserDict()
t.update(u2)
verify(t == u2)

# Test get

for i in u2.keys():
    verify(u2.get(i) == u2[i])
    verify(u1.get(i) == d1.get(i))
    verify(u0.get(i) == d0.get(i))
Example #12
0
	def get(self, key): 
		return UserDict.get(self, key, 0)
Example #13
0
 def get(self, key, failobj=None):
     k = self._key(key)
     return UserDict.get(self, k, failobj)
Example #14
0
 def get(self, key, failobj=None):
     self.__populate()
     return UserDict.get( self, self._keyTransform(key), failobj )
Example #15
0
# Check every path through every method of UserDict
from test_support import verify, verbose
from UserDict import UserDict, IterableUserDict
d0 = {}
d1 = {"one": 1}
d2 = {"one": 1, "two": 2}
# Test constructors
u = UserDict()
u0 = UserDict(d0)
u1 = UserDict(d1)
u2 = IterableUserDict(d2)
uu = UserDict(u)
uu0 = UserDict(u0)
uu1 = UserDict(u1)
uu2 = UserDict(u2)
# Test __repr__
verify(str(u0) == str(d0))
verify(repr(u1) == repr(d1))
verify(`u2` == `d2`)
# Test __cmp__ and __len__
all = [d0, d1, d2, u, u0, u1, u2, uu, uu0, uu1, uu2]
for a in all:
    for b in all:
        verify(cmp(a, b) == cmp(len(a), len(b)))
# Test __getitem__
verify(u2["one"] == 1)
try:
    u1["two"]
except KeyError:
    pass
Example #16
0
m2 = MyUserDict(u2)
m2a = m2.copy()
assert m2a == m2

# Test keys, items, values

assert u2.keys() == d2.keys()
assert u2.items() == d2.items()
assert u2.values() == d2.values()

# Test has_key

for i in u2.keys():
    assert u2.has_key(i) == 1
    assert u1.has_key(i) == d1.has_key(i)
    assert u0.has_key(i) == d0.has_key(i)

# Test update

t = UserDict()
t.update(u2)
assert t == u2

# Test get

for i in u2.keys():
    assert u2.get(i) == u2[i]
    assert u1.get(i) == d1.get(i)
    assert u0.get(i) == d0.get(i)
Example #17
0
 def get(self, key, failobj=None):
     k = self._key(key)
     return UserDict.get(self, k, failobj)