http://codereview.appspot.com/975/diff/1/4 File updater.py (right): http://codereview.appspot.com/975/diff/1/4#newcode1 Line 1: import logging move all these changes to display/handler_update.py :) (you may need to svn up) http://codereview.appspot.com/975/diff/1/4#newcode22 Line 22: for m in re.finditer('([+-])([a-zA-Z0-9]{32})', data): a-fA-F also lowercase before adding / looking up http://codereview.appspot.com/975/diff/1/4#newcode23 Line 23: op, hash = m.group(1), m.group(2) what if this doesn't match? let's log and continue. http://codereview.appspot.com/975/diff/1/4#newcode24 Line 24: digest = Digest.gql('WHERE hash = :1', hash).get() name this digests, and instead of get() do get(100) (see the API I think that's how you get all matches). http://codereview.appspot.com/975/diff/1/4#newcode30 Line 30: del_count += 1 else logging.warning ...