def get_equ(token): account = Account.api_authenticate(token) if account: res = Position.from_position_equity(account.pk) total = res.total_equ(account.pk) return jsonify({'equity': total}) return jsonify({'error': 'invalid key'})
def trades_for(api_key, ticker): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 trades = account.get_trades_for(ticker) json_list = [trade.json() for trade in trades] return jsonify({"username": account.username, "trades": json_list})
def positions(api_key): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 positions = account.get_positions() json_list = [position.json() for position in positions] return jsonify({"username": account.username, "positions": json_list})
def get_num_shares(api_key, ticker): user = Account.api_authenticate(api_key) if user: total_shares = Position.one_from_account(user.pk, ticker) return jsonify({"total": total_shares}) return jsonify({'error': 'invalid key'})
def tracker_chart(api_key, ticker): user = Account.api_authenticate(api_key) if user: new_user = Tracking.pk_authenticate(user.pk) tracker = tracking_chart(ticker) return jsonify({"tracker": tracker}) return jsonify({"error": "failed"})
def deposit(api_key, amount): account = Account.api_authenticate(api_key) if account: account.balance += int(amount) account.save() return jsonify({"new balance": account.balance, "status": "success"}) else: return jsonify({"error": "authentication error"})
def positions_sum(api_key): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 positions = account.get_positions() tot_sum = 0 for position in positions: tot_sum += util.get_price(position.ticker) * position.shares return jsonify({"account_sum": tot_sum})
def track(ticker, api_key): data = request.get_json() ticker = data.get('ticker') account = Account.api_authenticate(api_key) if account: new_track = Tracking(None, account.pk, ticker) new_track.save() return jsonify({"tracking": ticker}) return jsonify({"error": "no track added"})
def look_price(api_key, ticker): user = Account.api_authenticate(api_key) if user: new_user = Tracking.pk_authenticate(user.pk) price = get_price_of_ticker(ticker) change = day_change(ticker) # tracker = tracking_chart(ticker) return jsonify({'current_price': price, 'change': change}) return jsonify({"error": "failed"})
def viewall(api_key): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 stocks = account.getallprices() if stocks == False: return jsonify(NOTFOUND), 404 json_list = [allstocks for allstocks in stocks] return jsonify({"username": account.username, "stocks": json_list})
def testApiAuthenticate(self): account = Account(pk=2, username="******", password_hash="password", balance=50000) api_key = account.generate_api_key() account.save() test = account.api_authenticate(api_key) self.assertAlmostEqual(account, test)
def position_for(api_key, ticker): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 position = account.get_position_for(ticker) return jsonify({ "username": account.username, "positions": position.json() })
def accoun_info(api_key): account = Account.api_authenticate(api_key) data = {} data["balance"] = account.balance data["username"] = account.username return jsonify(data)
def testLogin(self): account3 = Account(username="******", pin="1234", balance=20.00) api = account3.generate_api_key() account3.save() get_api = account3.get_api() account4 = Account.api_authenticate(get_api) self.assertEqual(account4.username, "mike_bloom") self.assertEqual(account4.pin, "1234") self.assertEqual(account4.balance, 20.00)
def deposit(api_key): if not request.json or 'amount' not in request.json: return jsonify(BADREQUEST), 400 account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 amount = request.json['amount'] account.deposit(float(amount)) account.save() return jsonify({"username": account.username, "balance": account.balance})
def deposit(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) else: if request.method == 'GET': return render_template('deposit.html', balance=view.bal_and_pos(account.balance)) else: amt = float(request.form['deposit_amount']) account.deposit(amt) return render_template('deposit.html', amt1=view.deposit_outp(amt), balance=view.bal_and_pos(account.balance))
def withdraw(api_key): if not request.json or 'amount' not in request.json: return jsonify(BAD_REQUEST), 400 account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 amount = request.json['amount'] if amount < 0: return jsonify(BAD_REQUEST), 400 account.withdraw(amount) account.save() return jsonify({"username": account.username, "balance": account.balance})
def trades(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) trades = account.get_trades() if len(trades) == 0: return render_template('trades.html', Total=view.total_trades(0)) else: totals = view.total_trades(len(trades)) tradelist = [] for trade in trades: tradelist.append(view.trade_detail(trade.volume, trade.ticker, trade.price, trade.price * trade.volume, trade.time)) return render_template('trades.html', Total=totals, Title=tradelist)
def reset(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) else: if request.method == 'GET': return render_template('reset.html') else: if request.form['pword'] != request.form['pword_confirm']: return render_template('reset.html', message="Passwords entered do not match. Please re-enter a new password.") else: account.set_password(util.hash_pass(request.form['pword'])) account.save() return render_template('reset.html', message="Password reset successful.")
def lookup(ticker, api_key): user = Account.api_authenticate(api_key) if user: price = get_price(ticker) description = stock_description(ticker) chart_data = chart(ticker) logo = Logo(ticker) related = related_Companies(ticker) return jsonify({ 'current_price': price, "des": description, "chartData": chart_data, "logo": logo }) return jsonify({"error": "failed"})
def deposit(api_key): print(request.json) if not request.json or 'amount' not in request.json: return jsonify(BAD_REQUEST), 400 account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 amount = request.json['amount'] if not (isinstance(amount, float) or isinstance(amount, int)) or amount < 0: return jsonify(BAD_REQUEST), 400 account.deposit(amount) account.save() rdict = {"username": account.username, "balance": account.balance} print(rdict) return jsonify({"username": account.username, "balance": account.balance})
def balance(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) cash = account.balance positions = account.get_positions() if len(positions) == 0: return render_template('balance.html', Title=view.bal_and_pos(cash) + " " + view.no_positions()) else: bal = 0 for position in positions: ticker = position.ticker shares = position.shares px = util.get_price(ticker) bal += px * shares return render_template('balance.html', Title=view.totbal(bal) + "\n" + view.totport(bal + cash), Title2=view.api_key(account.api_key))
def positions(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) positions = account.get_positions() if len(positions) == 0: return render_template('positions.html', Title=view.no_positions()) else: bal = 0 textlist = [] for position in positions: ticker = position.ticker shares = position.shares px = util.get_price(ticker) bal += px * shares textlist.append(view.stockbal(shares, ticker, px * shares)) totals = view.totbal(bal) return render_template('positions.html', Total=totals, Title=textlist)
def sell(api_key): if not request.json or 'amount' not in request.json or 'ticker' not in request.json: return jsonify(BADREQUEST), 400 account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 amount = request.json['amount'] symbol = request.json['ticker'] if int(amount) < 0: return jsonify(BADREQUEST), 400 account.sell(symbol, int(amount)) account.save() return jsonify({ "username": account.username, "shares": amount, "ticker": symbol, "balance": account.balance })
def sell(): account = Account.api_authenticate(session['api_key']) if not account: return redirect(url_for('login')) else: if request.method == 'GET': return render_template('sell.html') else: ticker = request.form['tick_sell'] shares = float(request.form['shareno_sell']) try: account.sell(ticker, shares) message = view.total_trades(1) except ConnectionError: return render_template('sell.html', error="Ticker not found please enter new valid ticker") except ValueError: return render_template('sell.html', error=view.insuf_funds()) return render_template('sell.html', message=message)
def sell(api_key): if not request.json or 'amount' not in request.json: return jsonify(BAD_REQUEST), 400 if 'ticker' not in request.json: return jsonify(BAD_REQUEST), 400 account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 amount = request.json['amount'] if not isinstance(amount, int or float) or amount < 0: return jsonify(BAD_REQUEST), 400 ticker = request.json['ticker'] if not isinstance(ticker, str) or len(ticker) > 4: return jsonify(BAD_REQUEST), 400 account.sell(ticker, amount) account.save() position = account.get_position_for(ticker) return jsonify({ "username": account.username, "balance": account.balance, "position": position.json() })
def get_positions(api_key): account = Account.api_authenticate(api_key) if account: res = Position.all_shares_accounts(account.pk) for pos in res: equ = pos[2] pk = pos[3] ticker = pos[0] number_shares = pos[1] equ = 0 equ = get_price_of_ticker(ticker) * int(number_shares) New_positions = Position(pk, account.pk, ticker, number_shares, equ) New_positions.save() return jsonify({ "Positions": account.get_my_positions(), "Positions_for_graph": New_positions.positions_for_graph(account.pk) }) return jsonify({'error': 'invalid key'})
def sell(api_key): data = request.get_json() account = Account.api_authenticate(api_key) if account: ticker = request.get_json()['ticker'] amount = request.get_json()['amount'] Withdrawal = request.get_json()['type'] current_position = Position.from_account(account.pk, ticker) if current_position.num_shares < int(amount): return jsonify({"Insufficient_funds": "Insufficient_funds"}) transaction_price = get_price_of_ticker(ticker) * int(amount) account.balance += (transaction_price) account.equity -= transaction_price current_position.equity -= (transaction_price) current_position.num_shares -= int(amount) current_position.save() time = data.get('unix_time') new_trade = Trade(account.pk, ticker, amount, current_position.equity, Withdrawal, time) new_trade.equity = transaction_price new_trade.insert() account.save() return jsonify({"ticker": ticker, "amount": amount}) return jsonify({'error': 'invalid key'})
def buy(api_key): data = request.get_json() account = Account.api_authenticate(api_key) if account: ticker = request.get_json()['ticker'] amount = request.get_json()['amount'] Deposit = request.get_json()['type'] current_price = get_price_of_ticker(ticker) * int(amount) if account.balance < current_price: return jsonify({"Insufficient_funds": "Insufficient_funds"}) account.balance -= current_price account.equity += current_price current_position = Position.from_account(account.pk, ticker) current_position.equity += current_price current_position.number_shares += int(amount) current_position.save() time = data.get('unix_time') new_trade = Trade(account.pk, ticker, amount, current_position.equity, Deposit, time) new_trade.equity = current_price new_trade.insert() account.save() return jsonify({"ticker": ticker, "amount": amount}) return jsonify({'error': 'invalid key'})
def balance(api_key): account = Account.api_authenticate(api_key) if not account: return jsonify(UNAUTHORIZED), 401 return jsonify({"username": account.username, "balance": account.balance})