def get_or_create_user(email, password, role, **kwargs): u = user_datastore.get_user(email) if not u: u = user_datastore.create_user(email=email, password=encrypt_password(password), **kwargs) user_datastore.add_role_to_user(u, role) db.session.commit() return u
def save(self, user_id: int, **kwargs): kwargs['id'] = user_id data = self.user_serializer.load(kwargs, unknown=EXCLUDE) user = self.manager.find(user_id) with db_wrapper.database.atomic(): self.manager.save(user_id, **data) if 'role_id' in data: user_datastore.remove_role_from_user(user, user.roles[0]) role = self.role_manager.find(data['role_id']) user_datastore.add_role_to_user(user, role) return user.reload()
def create_extra_data(): #Make a bunch of example users role_user = user_datastore.find_role('user') users = [] for i in range(60): u = User(email='*****@*****.**'%i, aga_id = 100000+i, password=encrypt_password('test')) user_datastore.add_role_to_user(u,role_user) db.session.add(u) users.append(u) db.session.commit() for u in users: for j in range(2): db.session.add(Player(name="Player-%d-%d" % (u.id,j), server_id=1, user_id=u.id, token="Player-%d-%d" % (u.id,j))) db.session.commit() users = User.query.all() p_priors = {user.id: random.randint(0,40) for user in users} print("Prior ratings") for p in sorted(p_priors, key=lambda k: p_priors[k]): print("%d: %f" % (p,p_priors[p])) import rating.rating_math as rm def choose_pair(): while True: pair = random.sample(users, 2) diff = abs(p_priors[pair[0].id] - p_priors[pair[1].id]) if len(pair[0].players) > 0 and len(pair[1].players) > 0 and diff < 10: break return pair def make_game(): user_pair = choose_pair() ps = (random.choice(user_pair[0].players).id, random.choice(user_pair[1].players).id) result = "B+5" if random.random() < rm.expect(p_priors[user_pair[0].id], p_priors[user_pair[1].id], 0, 6.5) else "W+5" g = Game(server_id=1, white_id=ps[0], black_id=ps[1], rated=False, result=result, game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0,10000000))) return g print("Games...") games = [make_game() for i in range(2000)] print("Saving games...") for g in games: db.session.add(g) db.session.commit() strongest = max(p_priors, key = lambda k: p_priors[k]) strongest_games = [str(g) for g in games if g.white.user_id == strongest or g.black.user_id == strongest] print("Strongest, %d (%f):\n%s"% (strongest, p_priors[strongest], strongest_games))
def edit_user(id): user = User.query.get(id) if not user: raise ValueError('Invalid user with identifier %s' % id) content = request.get_json(silent=True) validate(instance=content, schema=user_schema) user.email = content["email"] user.username = content["name"] if content["password"] and len(content["password"]): user.password = utils.hash_password(content["password"]) if content["role"] == "admin": user_datastore.add_role_to_user(user.email, "admin") elif "admin" in (role.name for role in user.roles): user_datastore.remove_role_from_user(user.email, "admin") # Variable and station access config. user.access_stations_all = ( content['access']['stations']['unlimited'] == True) user.access_variables_all = ( content['access']['variables']['unlimited'] == True) user.access_variables_standard = ( content['access']['variables']['standard'] == True) if content['access']['variables']['unlimited'] == False and content[ 'access']['variables']['standard'] == False: user.access_variable_specific = list( map(lambda x: AccessVariable(variable_id=int(x)), content['access']['variables']['specific'])) else: user.access_variable_specific = [] if content['access']['stations']['unlimited'] == False: user.access_stations_specific = list( map(lambda x: AccessStation(station_id=x), content['access']['stations']['specific'])) else: user.access_stations_specific = [] db.commit() return jsonify({"status": "success"})
def put(self, id): parser = reqparse.RequestParser() parser.add_argument('roles') args = parser.parse_args() user = User.get(User.id == id) user_roles = [role.name for role in list(user.roles.select())] roles = args['roles'].strip(",").replace(" ", "").split(",") for role in roles: if role not in user_roles: user_datastore.add_role_to_user(user, role) for role in user_roles: if role not in roles: user_datastore.remove_role_from_user(user, role) return user
def create_extra_data(): basedir = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(basedir, 'tests/testsgf.sgf')) as sgf_file: sgf_data = "\n".join(sgf_file.readlines()).encode() role_user = user_datastore.find_role('user') users = [] for i in range(60): u = User(email='*****@*****.**' % i, aga_id=100000 + i, password=encrypt_password('test')) user_datastore.add_role_to_user(u, role_user) db.session.add(u) users.append(u) db.session.commit() for u in users: for j in range(2): db.session.add( Player(name="Player-%d-%d" % (u.id, j), server_id=1, user_id=u.id, token="Player-%d-%d" % (u.id, j))) db.session.commit() users = User.query.all() players = Player.query.all() p_priors = {user.id: random.randint(0, 40) for user in users} print("Prior ratings") for p in sorted(p_priors, key=lambda k: p_priors[k]): print("%d: %f" % (p, p_priors[p])) import rating.rating_math as rm def choose_pair(): while True: pair = random.sample(users, 2) diff = abs(p_priors[pair[0].id] - p_priors[pair[1].id]) if len(pair[0].players) > 0 and len( pair[1].players) > 0 and diff < 10: break return pair def make_game(): user_pair = choose_pair() ps = (random.choice(user_pair[0].players).id, random.choice(user_pair[1].players).id) result = "B+5" if random.random() < rm.expect( p_priors[user_pair[0].id], p_priors[user_pair[1].id], 0, 6.5) else "W+5" g = Game(server_id=1, white_id=ps[0], black_id=ps[1], rated=False, result=result, game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 10000000))) return g print("Games...") games = [make_game() for i in range(2000)] print("Saving games...") for g in games: db.session.add(g) db.session.commit() strongest = max(p_priors, key=lambda k: p_priors[k]) strongest_games = [ str(g) for g in games if g.white.user_id == strongest or g.black.user_id == strongest ] print("Strongest, %d (%f):\n%s" % (strongest, p_priors[strongest], strongest_games)) def make_tournament(): t = Tournament(event_name="The Ultimate Go-ing Championship", start_date=datetime.datetime.now(), venue="LasVegas", director="Donald J. Trump", director_phone="555-5555", director_email="*****@*****.**", pairing="McMahon", rule_set="AGA", time_controls="required field", basic_time="required field", overtime_format="required field", overtime_conditions="required field", komi="7", tie_break1="SOS", tie_break2="SODOS") return t print("Tournament...") t = make_tournament() print("Saving tournament...") db.session.add(t) db.session.commit()
def create_test_data(): role_user = user_datastore.create_role(**USER_ROLE._asdict()) role_gs_admin = user_datastore.create_role(**SERVER_ADMIN_ROLE._asdict()) role_aga_admin = user_datastore.create_role(**RATINGS_ADMIN_ROLE._asdict()) u = user_datastore.create_user(email='*****@*****.**', password=encrypt_password('usgo'), id=1) user_datastore.add_role_to_user(u, role_aga_admin) kgs_admin = user_datastore.create_user(email='*****@*****.**', password=encrypt_password('kgs'), id=2) user_datastore.add_role_to_user(kgs_admin, role_gs_admin) u = user_datastore.create_user(email='*****@*****.**', aga_id=10, password=encrypt_password('foo'), id=3) db.session.add( Player(id=1, name="FooPlayerKGS", server_id=1, user_id=3, token="secret_foo_KGS")) db.session.add( Player(id=4, name="FooPlayerIGS", server_id=2, user_id=3, token="secret_foo_IGS")) user_datastore.add_role_to_user(u, role_user) u = user_datastore.create_user(email='*****@*****.**', aga_id=20, password=encrypt_password('bar'), id=4) db.session.add( Player(id=2, name="BarPlayerKGS", server_id=1, user_id=4, token="secret_bar_KGS")) db.session.add( Player(id=5, name="BarPlayerIGS", server_id=2, user_id=4, token="secret_bar_IGS")) user_datastore.add_role_to_user(u, role_user) u = user_datastore.create_user(email='*****@*****.**', aga_id=30, password=encrypt_password('baz'), id=5) db.session.add( Player(id=3, name="BazPlayerKGS", server_id=1, user_id=5, token="secret_baz_KGS")) db.session.add( Player(id=6, name="BazPlayerIGS", server_id=2, user_id=5, token="secret_baz_IGS")) user_datastore.add_role_to_user(u, role_user) gs = GoServer(id=1, name='KGS', url='http://gokgs.com', token='secret_kgs') gs.admins.append(kgs_admin) db.session.add(gs) db.session.add( GoServer(id=2, name='IGS', url='http://pandanet.com', token='secret_igs')) basedir = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(basedir, 'tests/testsgf.sgf')) as sgf_file: sgf_data = "\n".join(sgf_file.readlines()).encode() db.session.add( Game(server_id=1, white_id=1, black_id=2, rated=True, result="B+0.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=1, white_id=1, black_id=2, rated=True, result="W+39.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=2, white_id=5, black_id=4, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=2, white_id=5, black_id=4, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=2, white_id=6, black_id=5, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=1, white_id=1, black_id=2, rated=True, result="B+0.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=1, white_id=3, black_id=2, rated=True, result="W+39.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.add( Game(server_id=2, white_id=5, black_id=6, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)))) db.session.commit() try: # needed to reset the postgresql autoincrement counter db.engine.execute( "SELECT setval('myuser_id_seq', (SELECT MAX(id) FROM myuser))") db.engine.execute( "SELECT setval('player_id_seq', (SELECT MAX(id) FROM player))") except: pass
def create_test_data(): role_user = user_datastore.create_role(**USER_ROLE._asdict()) role_gs_admin = user_datastore.create_role(**SERVER_ADMIN_ROLE._asdict()) role_aga_admin = user_datastore.create_role(**RATINGS_ADMIN_ROLE._asdict()) u = user_datastore.create_user(email="*****@*****.**", password=encrypt_password("usgo"), id=1) user_datastore.add_role_to_user(u, role_aga_admin) kgs_admin = user_datastore.create_user(email="*****@*****.**", password=encrypt_password("kgs"), id=2) user_datastore.add_role_to_user(kgs_admin, role_gs_admin) u = user_datastore.create_user(email="*****@*****.**", aga_id=10, password=encrypt_password("foo"), id=3) db.session.add(Player(id=1, name="FooPlayerKGS", server_id=1, user_id=3, token="secret_foo_KGS")) db.session.add(Player(id=4, name="FooPlayerIGS", server_id=2, user_id=3, token="secret_foo_IGS")) user_datastore.add_role_to_user(u, role_user) u = user_datastore.create_user(email="*****@*****.**", aga_id=20, password=encrypt_password("bar"), id=4) db.session.add(Player(id=2, name="BarPlayerKGS", server_id=1, user_id=4, token="secret_bar_KGS")) db.session.add(Player(id=5, name="BarPlayerIGS", server_id=2, user_id=4, token="secret_bar_IGS")) user_datastore.add_role_to_user(u, role_user) u = user_datastore.create_user(email="*****@*****.**", aga_id=30, password=encrypt_password("baz"), id=5) db.session.add(Player(id=3, name="BazPlayerKGS", server_id=1, user_id=5, token="secret_baz_KGS")) db.session.add(Player(id=6, name="BazPlayerIGS", server_id=2, user_id=5, token="secret_baz_IGS")) user_datastore.add_role_to_user(u, role_user) gs = GoServer(id=1, name="KGS", url="http://gokgs.com", token="secret_kgs") gs.admins.append(kgs_admin) db.session.add(gs) db.session.add(GoServer(id=2, name="IGS", url="http://pandanet.com", token="secret_igs")) basedir = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(basedir, "tests/testsgf.sgf")) as sgf_file: sgf_data = "\n".join(sgf_file.readlines()).encode() db.session.add( Game( server_id=1, white_id=1, black_id=2, rated=True, result="B+0.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=1, white_id=1, black_id=2, rated=True, result="W+39.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=2, white_id=5, black_id=4, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=2, white_id=5, black_id=4, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=2, white_id=6, black_id=5, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=1, white_id=1, black_id=2, rated=True, result="B+0.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=1, white_id=3, black_id=2, rated=True, result="W+39.5", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.add( Game( server_id=2, white_id=5, black_id=6, rated=True, result="W+Resign", game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 1000000)), ) ) db.session.commit() try: # needed to reset the postgresql autoincrement counter db.engine.execute("SELECT setval('myuser_id_seq', (SELECT MAX(id) FROM myuser))") db.engine.execute("SELECT setval('player_id_seq', (SELECT MAX(id) FROM player))") except: pass
def create_extra_data(): #Make a bunch of example users role_user = user_datastore.find_role('user') users = [] for i in range(60): u = User(email='*****@*****.**' % i, aga_id=100000 + i, password=encrypt_password('test')) user_datastore.add_role_to_user(u, role_user) db.session.add(u) users.append(u) db.session.commit() for u in users: for j in range(2): db.session.add( Player(name="Player-%d-%d" % (u.id, j), server_id=1, user_id=u.id, token="Player-%d-%d" % (u.id, j))) db.session.commit() users = User.query.all() p_priors = {user.id: random.randint(0, 40) for user in users} print("Prior ratings") for p in sorted(p_priors, key=lambda k: p_priors[k]): print("%d: %f" % (p, p_priors[p])) import rating.rating_math as rm def choose_pair(): while True: pair = random.sample(users, 2) diff = abs(p_priors[pair[0].id] - p_priors[pair[1].id]) if len(pair[0].players) > 0 and len( pair[1].players) > 0 and diff < 10: break return pair def make_game(): user_pair = choose_pair() ps = (random.choice(user_pair[0].players).id, random.choice(user_pair[1].players).id) result = "B+5" if random.random() < rm.expect( p_priors[user_pair[0].id], p_priors[user_pair[1].id], 0, 6.5) else "W+5" g = Game(server_id=1, white_id=ps[0], black_id=ps[1], rated=False, result=result, game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 10000000))) return g print("Games...") games = [make_game() for i in range(2000)] print("Saving games...") for g in games: db.session.add(g) db.session.commit() strongest = max(p_priors, key=lambda k: p_priors[k]) strongest_games = [ str(g) for g in games if g.white.user_id == strongest or g.black.user_id == strongest ] print("Strongest, %d (%f):\n%s" % (strongest, p_priors[strongest], strongest_games))
def create_extra_data(): basedir = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(basedir, 'tests/testsgf.sgf')) as sgf_file: sgf_data = "\n".join(sgf_file.readlines()).encode() role_user = user_datastore.find_role('user') users = [] for i in range(60): u = User(email='*****@*****.**'%i, aga_id = 100000+i, password=encrypt_password('test')) user_datastore.add_role_to_user(u,role_user) db.session.add(u) users.append(u) db.session.commit() for u in users: for j in range(2): db.session.add(Player(name="Player-%d-%d" % (u.id,j), server_id=1, user_id=u.id, token="Player-%d-%d" % (u.id,j))) db.session.commit() users = User.query.all() players = Player.query.all() p_priors = {user.id: random.randint(0,40) for user in users} print("Prior ratings") for p in sorted(p_priors, key=lambda k: p_priors[k]): print("%d: %f" % (p,p_priors[p])) import rating.rating_math as rm def choose_pair(): while True: pair = random.sample(users, 2) diff = abs(p_priors[pair[0].id] - p_priors[pair[1].id]) if len(pair[0].players) > 0 and len(pair[1].players) > 0 and diff < 10: break return pair def make_game(): user_pair = choose_pair() ps = (random.choice(user_pair[0].players).id, random.choice(user_pair[1].players).id) result = "B+5" if random.random() < rm.expect(p_priors[user_pair[0].id], p_priors[user_pair[1].id], 0, 6.5) else "W+5" g = Game(server_id=1, white_id=ps[0], black_id=ps[1], rated=False, result=result, game_record=sgf_data, date_played=datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0,10000000))) return g print("Games...") games = [make_game() for i in range(2000)] print("Saving games...") for g in games: db.session.add(g) db.session.commit() strongest = max(p_priors, key = lambda k: p_priors[k]) strongest_games = [str(g) for g in games if g.white.user_id == strongest or g.black.user_id == strongest] print("Strongest, %d (%f):\n%s"% (strongest, p_priors[strongest], strongest_games)) def make_tournament(): t = Tournament(event_name="The Ultimate Go-ing Championship", start_date=datetime.datetime.now(), venue="LasVegas", director="Donald J. Trump", director_phone="555-5555", director_email="*****@*****.**", pairing="McMahon", rule_set="AGA", time_controls="required field", basic_time="required field", overtime_format="required field", overtime_conditions="required field", komi="7", tie_break1="SOS", tie_break2="SODOS") return t print("Tournament...") t = make_tournament() print("Saving tournament...") db.session.add(t) db.session.commit()