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)
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)']")
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)
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 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
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_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 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)
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_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)
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)