Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
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"})
Ejemplo n.º 6
0
    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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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))
Ejemplo n.º 11
0
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()