Beispiel #1
0
def register():

    email = request.form.get("email")

    existing_user = User.query.filter(User.email == email).first()
    if existing_user:
        return jsonify({"error": "邮箱已经注册"}), 409

    password = request.form.get("password")
    password_hash = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt(10))

    user = User()
    db.session.add(user)
    db.session.commit()

    auth = Auth(user_id=user.id, password=password_hash)
    db.session.add(auth)
    db.session.commit()

    update_user_info(user)

    user_dict = user.to_dict(return_email=True)
    # TODO: sometimes create token failed due to connection
    # to redis, but user is already created, still return 200 OK
    # to client in this case
    token = create_token(user_dict)
    account_data = Account(token, user_dict).to_dict()
    return jsonify(account_data)
    def test_parse_buildings(self):
        credentials = init_credentials(
            '../configs/credentials_static_cookies.json')

        own_uid = credentials.get_own_uid()
        account = Account(own_uid)
        account.update_villages(credentials)

        village = account.villages[0]
        village.force_update(credentials)
        expected = "Buildings([Building((Empty place - lvl:0 id:0)), Building((Woodcutter - lvl:0 id:1)), Building((" \
                   "Cropland - lvl:0 id:2)), Building((Woodcutter - lvl:2 id:3)), Building((Iron Mine - lvl:0 id:4)), " \
                   "Building((Clay Pit - lvl:0 id:5)), Building((Clay Pit - lvl:4 id:6)), Building((Iron Mine - lvl:0 " \
                   "id:7)), Building((Cropland - lvl:0 id:8)), Building((Cropland - lvl:0 id:9)), Building((Iron Mine " \
                   "- lvl:0 id:10)), Building((Iron Mine - lvl:0 id:11)), Building((Cropland - lvl:0 id:12)), " \
                   "Building((Cropland - lvl:0 id:13)), Building((Woodcutter - lvl:0 id:14)), Building((Cropland - " \
                   "lvl:3 id:15)), Building((Clay Pit - lvl:0 id:16)), Building((Woodcutter - lvl:0 id:17)), " \
                   "Building((Clay Pit - lvl:0 id:18)), Building((Warehouse - lvl:1 id:19)), Building((Granary - " \
                   "lvl:1 id:20)), Building((Empty place - lvl:0 id:21)), Building((Empty place - lvl:0 id:22)), " \
                   "Building((Empty place - lvl:0 id:23)), Building((Empty place - lvl:0 id:24)), Building((Empty " \
                   "place - lvl:0 id:25)), Building((Main Building - lvl:3 id:26)), Building((Empty place - lvl:0 " \
                   "id:27)), Building((Empty place - lvl:0 id:28)), Building((Empty place - lvl:0 id:29)), " \
                   "Building((Empty place - lvl:0 id:30)), Building((Empty place - lvl:0 id:31)), Building((Empty " \
                   "place - lvl:0 id:32)), Building((Empty place - lvl:0 id:33)), Building((Empty place - lvl:0 " \
                   "id:34)), Building((Empty place - lvl:0 id:35)), Building((Empty place - lvl:0 id:36)), " \
                   "Building((Empty place - lvl:0 id:37)), Building((Empty place - lvl:0 id:38)), Building((Rally " \
                   "Point - lvl:0 id:39)), Building((Empty place - lvl:0 id:0))]) "

        assert_str(village.buildings, expected)
Beispiel #3
0
 def get_balances(self):
     data = json.loads(Account().get_balances().data)["data"]
     available_balance = 0
     for i in range(len(data)):
         if data[i]["asset"] == "BTC":
             available_balance = data[i]["free"]
             return available_balance
     return available_balance
Beispiel #4
0
def get_account_data(user=None):
    """
    Not currently used, could use it when we want to get latest
    user data of himself.
    """
    token = request.headers.get("token")
    account_data = Account(token, user).to_dict()
    return jsonify(account_data)
    def test_account_from_profile_page(self):
        credentials = init_credentials('./tests/configs/credentials_static_cookies.json')

        # Get Multi hunter account
        account = Account(uid=1)

        # Test double update
        account.update_villages(credentials)
        account.update_villages(credentials)

        assert_str(account.villages, "['Multihunter (0,0)']")
Beispiel #6
0
def get_dumped_account():
    soup_overview = soup_from_file('./tests/configs/village1_html_dump.txt')
    soup_overview.page = Page.overview

    soup_center = soup_from_file('./tests/configs/village2_html_dump.txt')
    soup_center.page = Page.center

    account = Account(0)
    village = Village(account, 0, '')
    village.update_from_soup(soup_overview)
    village.update_from_soup(soup_center)
    account.villages = [village]

    return account
    def test_broadcast_finished_events(self):
        credentials = init_credentials(
            './tests/configs/credentials_dynamic_login.json')

        own_uid = credentials.get_own_uid()
        account = Account(own_uid)
        account.update_villages(credentials)

        village = account.get_village_by_vid(4207)
        village.force_update(credentials)

        assert construct_building(credentials, village, 32, Building.cranny)
        assert upgrade_building(credentials, village, 32)
        b = village.buildings[32]
        assert_str(b, 'Building((Cranny - lvl:0+2 id:32))')

        actions_left = 6
        num_times_sleep = 0
        time_granularity = 0.1
        while actions_left > 0:
            num = account.events.broadcast_finished_events()
            if num:
                assert_eq(num, 1)
                actions_left -= 1
                village.force_update(credentials)

                if actions_left == 5:
                    assert_str(b, 'Building((Cranny - lvl:1+1 id:32))')
                if actions_left == 4:
                    assert_str(b, 'Building((Cranny - lvl:2 id:32))')
                    demolish_building(credentials, village, 32)
                if actions_left == 3:
                    assert_str(b, 'Building((Cranny - lvl:1 id:32))')
                    demolish_building(credentials, village, 32)
                if actions_left == 2:
                    assert_str(b, 'Building((Empty place - lvl:0 id:32))')
                    assert construct_building(credentials, village, 32,
                                              Building.cranny)
                if actions_left == 1:
                    assert_str(b, 'Building((Cranny - lvl:1 id:32))')
                    demolish_building(credentials, village, 32)
                if actions_left == 0:
                    assert_str(b, 'Building((Empty place - lvl:0 id:32))')

            time.sleep(time_granularity)
            num_times_sleep += 1

        # Assert time to complete, for a relative benchmark
        assert_lt(num_times_sleep * time_granularity, 18.0)
Beispiel #8
0
def update_user(user=None):
    email = request.form.get("email")
    u = User.query.filter_by(id=user['id']).first()
    if email != u.email:
        # if updating email, ensure new email isn't already registered
        email_registered_by_user = User.query.filter_by(email=email).first()
        if email_registered_by_user:
            return jsonify({"error": "email registed already!"}), 409

    update_user_info(u)

    token = request.headers.get("token")
    account_data = Account(token, u.to_dict(return_email=True)).to_dict()
    refresh_user_data(token, u)
    return jsonify(account_data)
Beispiel #9
0
def login():
    payload = request.get_json()
    email = payload["email"]
    password = payload["password"]

    # Allow user to use user id to login, but it's not exposed
    # in the UI for simplicity
    if email.isdigit():
        user = User.query.filter(User.id == email).first()
    else:
        user = User.query.filter(User.email == email).first()

    if not user:
        return jsonify({"error": "用户不存在"}), 400

    auth = Auth.query.filter_by(user_id=user.id).first()
    if not auth:
        # some really really old legacy user maybe
        # shouldn't happen
        return jsonify({"error": "账号不存在"}), 400

    correct_pwd = auth.password
    try:
        # Mysql db return string type
        correct_pwd = correct_pwd.encode("utf8")
    except:
        # sqlite return byte type
        print('password is byte type already for sqlite')

    if bcrypt.checkpw(password.encode("utf8"), correct_pwd):
        # password is correct
        # check if banned or not before letting in

        if user.is_banned():
            return jsonify({"error": "封禁中"}), 403

        user_dict = user.to_dict(return_email=True)

        token = create_token(user_dict)
        account_data = Account(token, user_dict).to_dict()
        return jsonify(account_data)
    else:
        return jsonify({"error": "密码错误"}), 401
    def test_celebration_events(self):
        credentials = init_credentials(
            './tests/configs/credentials_dynamic_login.json')

        own_uid = credentials.get_own_uid()
        account = Account(own_uid)
        account.update_villages(credentials)

        village = account.get_village_by_vid(4007)
        village.force_update(credentials)

        host_celebration(credentials, village, Celebration.small)

        evq = account.events
        found = False

        for event in evq.queue:
            if event.event_type == EventQueue.CelebrationCompleted and event.village.vid == village.vid:
                found = True

        assert_eq(found, 1)
    def test_send_resources(self):
        credentials = init_credentials(
            './tests/configs/credentials_dynamic_login.json')

        own_uid = credentials.get_own_uid()
        account = Account(own_uid)
        account.update_villages(credentials)

        village = account.get_village_by_vid(4007)
        target_village = account.get_village_by_vid(4207)
        village.force_update(credentials)

        send_resources(credentials, village, target_village, [1, 1, 1, 1])

        evq = account.events
        num = 0

        for event in evq.queue:
            if event.event_type == EventQueue.TradersArrived and event.village.vid == village.vid:
                num += 1

        assert_eq(num, 1)
Beispiel #12
0
import settings
from api.account import Account
from api.pricing import Pricing
from api.candle import Candle

API_REST_URL = settings.main.API_REST_URL
API_STREAM_URL = settings.main.API_STREAM_URL
API_KEY = settings.main.API_KEY

account = Account(API_REST_URL, API_STREAM_URL, API_KEY)

pricing = Candle(account, "EUR_USD")
print(pricing.get_candles())
# pricing.streaming(["EUR_USD", "USD_CAD"])

# print(prices)