from flask import Flask, render_template, jsonify from datetime import datetime from sqlalchemy import create_engine,func from sqlalchemy.orm import sessionmaker from Coin import Coin, CoinMarketPosition app = Flask(__name__) engine = create_engine('sqlite:///coins.db', echo=False, connect_args={'check_same_thread':False}) # create a Session Session = sessionmaker(bind=engine) session = Session() def result50(date=datetime.now()): result = [] for x in session.query(CoinMarketPosition,Coin).filter(func.Date(CoinMarketPosition.date) == date.date()).distinct(Coin.id).join(Coin).order_by(CoinMarketPosition.market_caps.desc()).limit(50).all(): result.append((x[1].symbol, x[0].market_caps, x[0].prices, x[1].id)) return result @app.route("/") @app.route('/top50async//') def top50async(date="2020-01-12"): return render_template('async_list.html', date=date ) @app.route('/top50json//') def top50json(date): d = datetime.strptime(date, "%d-%m-%Y") results = result50(d) arr = [{'name':x[0],'marketCap':x[1], 'prices':x[2], 'id':x[3]} for x in results] return jsonify(arr) @app.route('/coin//') def coinHistory(id): results = session.query(CoinMarketPosition, Coin).filter(Coin.id==id).join(CoinMarketPosition).all() return jsonify([ {'date':marketPos[0].date,'prices':marketPos[0].prices, 'name':marketPos[1].symbol} for marketPos in results]) @app.route('/coin/chart//') def coinChart(id="bitcoin"): currentCoin = session.query(Coin).filter(Coin.id==id).first() nextRowId = currentCoin.row_id + 1 nextCoin = session.query(Coin).filter(Coin.row_id==nextRowId).first() return render_template('chart_coin.html', id=id , nextId=nextCoin.id) if __name__ == '__main__': app.run(debug=True)