import random from hashlib import blake2b db.define_table( 'Room', Field('code', 'string', notnull=True, requires=IS_NOT_EMPTY(), writable=False, unique=True), Field('hashcode', 'string', notnull=True, requires=IS_NOT_EMPTY(), writable=False), Field('player_max', 'integer', notnull=True, requires=IS_NOT_EMPTY()), Field('creation', 'datetime', default=request.now, notnull=True, requires=IS_NOT_EMPTY()), Field('heartbeat', 'datetime', default=request.now, notnull=True, requires=IS_NOT_EMPTY()) ) def generateRoomCode(_record): code = None while not code or db(db.Room.code == code).count() > 0: code = "" for i in range(4): # Removed characters which could be confused like 0 and O code = code + random.choice("346789ABCDEFGHJKLMNPQRTUVWXY") return(code) def generateHashCode(_record): code = "" digest = blake2b(digest_size=32) digest.update(_record.code.encode("utf-8")) digest.update(str(_record.player_max).encode("utf-8")) digest.update(str(_record.creation).encode("utf-8")) digest.update(str(random.random()).encode("utf-8")) return (digest.hexdigest()) db.Room.code.compute = generateRoomCode db.Room.hashcode.compute = generateHashCode