def query_summary_ratio(code): latest_ratio = SummaryRatios.query.filter_by(code=code).order_by(SummaryRatios.dead_line.desc()).all() if latest_ratio == None: result = summary_ratios_calculate(code, dead_line) for key in result: summary_ratio = SummaryRatios( code, int(key), result[key]["MoM_main_business_revenue"], result[key]["YoY_main_business_revenue"], result[key]["MoM_net_profit"], result[key]["YoY_net_profit"], result[key]["MoM_earnings_per_share"], result[key]["YoY_earnings_per_share"], result[key]["MoM_cash_flow_per_share"], result[key]["YoY_cash_flow_per_share"], ) db.session.add(summary_ratio) db.session.commit() current_app.logger.debug("DB commited summary_ratio %s" % code) else: result = {} for elem in latest_ratio: result[str(elem.dead_line)] = elem.serialize() return jsonify(ratios=result)
def summary_craw(): """craw seasonly summary""" #thread lock lock = threading.Lock() lock.acquire() try: stocks = StockIdentity.query.all() for company in stocks: current_app.logger.debug("begin to update finance summary ratio for[%s]"%company.code) latest = SeasonlySummary.query.filter_by(code=company.code).\ order_by(SeasonlySummary.dead_line.desc()).first() summaryCrawler = SeasonlySummaryCrawler() if latest==None: dead_line = None else: dead_line = latest.dead_line # if already latest dealine, ignore if dead_line is not None and is_latest_deadline(dead_line): current_app.logger.debug("seasonly_summary for: %s ignored" % company.code) else: result = summaryCrawler.fetch_seasonly_summary(company.code, dead_line) for elem in result: summary = SeasonlySummary(company.code, elem) db.session.add(summary) db.session.commit() current_app.logger.debug("DB commited seasonly_summary %s" % company.code) #summary ratios current_app.logger.debug("begin to update finance summary ratio...") latest_ratio = SummaryRatios.query.filter_by(code=company.code).\ order_by(SummaryRatios.dead_line.desc()).first() if latest_ratio==None: dead_line = None else: dead_line = latest_ratio.dead_line if dead_line is not None and is_latest_deadline(dead_line): current_app.logger.debug("summary_ratio for: %s is ignored" % company.code) else: result = summary_ratios_calculate(company.code, dead_line) for key in result: summary_ratio = SummaryRatios(company.code, int(key), result[key]['MoM_main_business_revenue'], result[key]['YoY_main_business_revenue'], result[key]['MoM_net_profit'], result[key]['YoY_net_profit'], result[key]['MoM_earnings_per_share'], result[key]['YoY_earnings_per_share'], result[key]['MoM_cash_flow_per_share'], result[key]['YoY_cash_flow_per_share']) db.session.add(summary_ratio) db.session.commit() current_app.logger.debug("DB commited summary_ratio %s" % company.code) finally: lock.release()