This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
va-project/stockingly.py

76 lines
2.4 KiB
Python

from flask import Flask, jsonify, redirect, url_for, send_from_directory
from flask_cors import CORS
from backend.utils.build_frontend import build_frontend
from backend.api.companies import get_companies
from backend.api.closing_price import get_closing_price_hist
from backend.api.employees import get_employees
from backend.api.assets_debts import compare_balance_sheets
import os
import sys
import subprocess
from typing import Optional
from backend.api.eps import get_eps
from backend.api.past_performance import get_eps_comp
ROOT_DIR: str = os.path.dirname(__file__)
# instantiate the app
app = Flask(__name__, static_url_path='/static', static_folder='stockingly-frontend/dist')
app.config.from_object(__name__)
# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})
@app.route('/', methods=['GET'])
def index():
return redirect(url_for('static', filename='index.html'))
@app.route('/companies', methods=['GET'])
@app.route('/companies/<path:tickers>', methods=['GET'])
def companies(tickers: Optional[str] = None) -> object:
return jsonify(get_companies(None if tickers is None else tickers.split('/')))
@app.route('/employees/<path:tickers>', methods=['GET'])
def employees(tickers: Optional[str]) -> object:
return jsonify(get_employees(tickers.split('/')))
@app.route('/price_history/<path:tickers>', methods=['GET'])
def price_history(tickers: Optional[str]) -> object:
return jsonify(get_closing_price_hist(tickers.split('/')))
@app.route('/assets_debts/<path:tickers>', methods=['GET'])
def assets_debts(tickers: Optional[str]) -> object:
return jsonify(compare_balance_sheets(tickers.split('/')))
@app.route('/companies/logos/<ticker>')
def get_company_logo(ticker: str):
logo_dir: str = os.path.join(ROOT_DIR, 'scraper', 'logos', 'logos')
logo_name: str = str(ticker).upper() + '.png'
if os.path.exists(os.path.join(logo_dir, logo_name)):
return send_from_directory(logo_dir, logo_name)
return send_from_directory(ROOT_DIR, 'company_generic.svg')
@app.route('/eps/<path:tickers>', methods=['GET'])
def eps(tickers: Optional[str]) -> object:
return jsonify(get_eps(tickers.split('/')))
@app.route('/eps_comp/<path:tickers>', methods=['GET'])
def eps_comp(tickers: Optional[str]) -> object:
return jsonify(get_eps_comp(tickers.split('/')))
if __name__ == '__main__':
if len(sys.argv) < 2 or sys.argv[1] != 'no-frontend':
build_frontend()
app.run()