Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from google.appengine.ext import db
- import md5
- import base64
- class UniqueConstraint(db.Model):
- @classmethod
- def check(cls, model, **values):
- # Build a list of key names to test.
- key_names = []
- concat = ""
- for key in values:
- pair_str = '%s:%s' % (key, values[key])
- key_names.append(pair_str)
- concat += pair_str
- # "sharded" version now added - it creates a hash for each one of the
- # possible key combinations
- concat_hash = base64.b64encode(md5.new(concat).digest())
- # Create a pseudo-key for use as an entity group.
- parent = db.Key.from_path(model.kind(), 'unique-values' + concat_hash[0:2])
- def txn():
- result = cls.get_by_key_name(key_names, parent)
- for test in result:
- if test: return False
- for key_name in key_names:
- uc = cls(key_name=key_name, parent=parent)
- uc.put()
- return True
- return db.run_in_transaction(txn)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement