app.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from flask import Flask, render_template, jsonify
  2. from datetime import datetime
  3. from sqlalchemy import create_engine,func
  4. from sqlalchemy.orm import sessionmaker
  5. from Coin import Coin, CoinMarketPosition
  6. app = Flask(__name__)
  7. engine = create_engine('sqlite:///coins.db', echo=False, connect_args={'check_same_thread':False})
  8. # create a Session
  9. Session = sessionmaker(bind=engine)
  10. session = Session()
  11. def result50(date=datetime.now()):
  12. result = []
  13. 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():
  14. result.append((x[1].symbol, x[0].market_caps, x[0].prices, x[1].id))
  15. return result
  16. @app.route("/")
  17. @app.route('/top50async/<date>/')
  18. def top50async(date="2020-01-12"):
  19. return render_template('async_list.html', date=date )
  20. @app.route('/top50json/<date>/')
  21. def top50json(date):
  22. d = datetime.strptime(date, "%d-%m-%Y")
  23. results = result50(d)
  24. arr = [{'name':x[0],'marketCap':x[1], 'prices':x[2], 'id':x[3]} for x in results]
  25. return jsonify(arr)
  26. @app.route('/coin/<id>/')
  27. def coinHistory(id):
  28. results = session.query(CoinMarketPosition, Coin).filter(Coin.id==id).join(CoinMarketPosition).all()
  29. return jsonify([ {'date':marketPos[0].date,'prices':marketPos[0].prices, 'name':marketPos[1].symbol} for marketPos in results])
  30. @app.route('/coin/chart/<id>/')
  31. def coinChart(id="bitcoin"):
  32. currentCoin = session.query(Coin).filter(Coin.id==id).first()
  33. nextRowId = currentCoin.row_id + 1
  34. nextCoin = session.query(Coin).filter(Coin.row_id==nextRowId).first()
  35. return render_template('chart_coin.html', id=id , nextId=nextCoin.id)
  36. if __name__ == '__main__':
  37. app.run(debug=True)