Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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()