def estimates(ticker: str, export: str):
    """Display analysts' estimates for a given ticker. [Source: Business Insider]

    Parameters
    ----------
    ticker : str
        Ticker to get analysts' estimates
    export : str
        Export dataframe data to csv,json,xlsx file
    """
    (
        df_year_estimates,
        df_quarter_earnings,
        df_quarter_revenues,
    ) = business_insider_model.get_estimates(ticker)

    print_rich_table(
        df_year_estimates,
        headers=list(df_year_estimates.columns),
        show_index=True,
        title="Annual Earnings Estimates",
    )
    console.print("")
    print_rich_table(
        df_quarter_earnings,
        headers=list(df_quarter_earnings.columns),
        show_index=True,
        title="Quarterly Earnings Estimates",
    )
    console.print("")
    print_rich_table(
        df_quarter_revenues,
        headers=list(df_quarter_revenues.columns),
        show_index=True,
        title="Quarterly Revenue Estimates",
    )
    console.print("")

    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_year",
        df_year_estimates,
    )
    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_qtr_earnings",
        df_quarter_earnings,
    )
    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_qtr_revenues",
        df_quarter_revenues,
    )
Example #2
0
async def est_command(ctx, ticker=""):
    """Displays earning estimates [Business Insider]"""

    try:

        # Debug
        if cfg.DEBUG:
            print(f"!stocks.dd.est {ticker}")

        # Check for argument
        if ticker == "":
            raise Exception("Stock ticker is required")

        (
            df_year_estimates,
            df_quarter_earnings,
            df_quarter_revenues,
        ) = business_insider_model.get_estimates(ticker)

        if (df_quarter_revenues.empty and df_year_estimates.empty
                and df_quarter_earnings.empty):
            raise Exception("Enter a valid ticker")

        # Debug user output
        if cfg.DEBUG:
            print(df_year_estimates.to_string())
            print(df_quarter_earnings.to_string())
            print(df_quarter_revenues.to_string())

        # Output data
        cols = []
        initial_text = (
            "´´´Page 0: Overview\nPage 1: Year Estimates\n"
            "Page 2: Quarter Earnings\nPage 3: Quarter Revenues´´´")
        text = "´´´" + df_year_estimates.to_string() + "´´´"
        cols.append(text)
        text = "´´´" + df_quarter_earnings.to_string() + "´´´"
        cols.append(text)
        text = "´´´" + df_quarter_revenues.to_string() + "´´´"
        cols.append(text)
        columns = []
        columns.append(
            discord.Embed(
                title="Stocks: [Business Insider] Earning Estimates",
                description=initial_text,
                colour=cfg.COLOR,
            ).set_author(
                name=cfg.AUTHOR_NAME,
                icon_url=cfg.AUTHOR_ICON_URL,
            ))
        for text in cols:
            columns.append(
                discord.Embed(
                    description=text,
                    colour=cfg.COLOR,
                ).set_author(
                    name=cfg.AUTHOR_NAME,
                    icon_url=cfg.AUTHOR_ICON_URL,
                ))

        await pagination(columns, ctx)
    except Exception as e:
        embed = discord.Embed(
            title="ERROR Stocks: [Business Insider] Earning Estimates",
            colour=cfg.COLOR,
            description=e,
        )
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )

        await ctx.send(embed=embed)
Example #3
0
def est_command(ticker: str = ""):
    """Displays earning estimates [Business Insider]"""

    # Debug
    if cfg.DEBUG:
        logger.debug("dd-est %s", ticker)

    # Check for argument
    if ticker == "":
        raise Exception("Stock ticker is required")

    (
        df_year_estimates,
        df_quarter_earnings,
        df_quarter_revenues,
    ) = business_insider_model.get_estimates(ticker)

    if (df_quarter_revenues.empty and df_year_estimates.empty
            and df_quarter_earnings.empty):
        raise Exception("Enter a valid ticker")

    # Debug user output
    if cfg.DEBUG:
        logger.debug(df_year_estimates.to_string())
        logger.debug(df_quarter_earnings.to_string())
        logger.debug(df_quarter_revenues.to_string())

    dindex = len(df_year_estimates.index)
    fig = df2img.plot_dataframe(
        df_year_estimates,
        fig_size=(1200, (40 + (60 * dindex))),
        col_width=[12, 4, 4, 4, 4],
        tbl_cells=dict(height=35, ),
        font=dict(
            family="Consolas",
            size=20,
        ),
        template="plotly_dark",
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = save_image("estimates.png", fig)

    uploaded_image = gst_imgur.upload_image(imagefile, title="something")
    link_estimates = uploaded_image.link

    os.remove(imagefile)

    fig = df2img.plot_dataframe(
        df_quarter_earnings,
        fig_size=(1200, (40 + (40 * 20))),
        col_width=[5, 5, 4, 4, 5, 4],
        tbl_cells=dict(height=35, ),
        font=dict(
            family="Consolas",
            size=20,
        ),
        template="plotly_dark",
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = save_image("earnings.png", fig)

    uploaded_image = gst_imgur.upload_image(imagefile, title="something")
    link_earnings = uploaded_image.link
    os.remove(imagefile)

    fig = df2img.plot_dataframe(
        df_quarter_revenues,
        fig_size=(1200, (40 + (40 * 20))),
        col_width=[5, 5, 4, 4, 5, 4],
        tbl_cells=dict(height=35, ),
        font=dict(
            family="Consolas",
            size=20,
        ),
        template="plotly_dark",
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = save_image("revenues.png", fig)

    uploaded_image = gst_imgur.upload_image(imagefile, title="something")
    link_revenues = uploaded_image.link
    os.remove(imagefile)

    embeds = [
        disnake.Embed(
            title=f"**{ticker.upper()} Year Estimates**",
            color=cfg.COLOR,
        ),
        disnake.Embed(
            title=f"**{ticker.upper()} Quarter Earnings**",
            colour=cfg.COLOR,
        ),
        disnake.Embed(
            title=f"**{ticker.upper()} Quarter Revenues**",
            colour=cfg.COLOR,
        ),
    ]
    embeds[0].set_image(url=link_estimates)
    embeds[1].set_image(url=link_earnings)
    embeds[2].set_image(url=link_revenues)
    titles = [
        f"**{ticker.upper()} Year Estimates**",
        f"**{ticker.upper()} Quarter Earnings**",
        f"**{ticker.upper()} Quarter Revenues**",
    ]
    embeds_img = [
        f"{link_estimates}",
        f"{link_earnings}",
        f"{link_revenues}",
    ]
    # Output data
    choices = [
        disnake.SelectOption(label=f"{ticker.upper()} Year Estimates",
                             value="0",
                             emoji="🟢"),
        disnake.SelectOption(label=f"{ticker.upper()} Quarter Earnings",
                             value="1",
                             emoji="🟢"),
        disnake.SelectOption(label=f"{ticker.upper()} Quarter Revenues",
                             value="2",
                             emoji="🟢"),
    ]

    return {
        "view": Menu,
        "titles": titles,
        "embed": embeds,
        "choices": choices,
        "embeds_img": embeds_img,
    }
Example #4
0
def estimates(ticker: str, export: str):
    """Display analysts' estimates for a given ticker. [Source: Business Insider]

    Parameters
    ----------
    ticker : str
        Ticker to get analysts' estimates
    export : str
        Export dataframe data to csv,json,xlsx file
    """
    (
        df_year_estimates,
        df_quarter_earnings,
        df_quarter_revenues,
    ) = business_insider_model.get_estimates(ticker)

    print(
        tabulate(
            df_year_estimates,
            headers=df_year_estimates.columns,
            floatfmt=".2f",
            showindex=True,
            tablefmt="fancy_grid",
        ), )
    print("")
    print(
        tabulate(
            df_quarter_earnings,
            headers=df_quarter_earnings.columns,
            floatfmt=".2f",
            showindex=True,
            tablefmt="fancy_grid",
        ), )
    print("")
    print(
        tabulate(
            df_quarter_revenues,
            headers=df_quarter_revenues.columns,
            floatfmt=".2f",
            showindex=True,
            tablefmt="fancy_grid",
        ))
    print("")

    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_year",
        df_year_estimates,
    )
    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_qtr_earnings",
        df_quarter_earnings,
    )
    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "pt_qtr_revenues",
        df_quarter_revenues,
    )
def test_get_estimates_quarter_revenues(recorder):
    _, _, df_quarter_revenues = business_insider_model.get_estimates(
        ticker="TSLA")
    result_df = df_quarter_revenues

    recorder.capture(result_df)
def test_get_estimates_quarter_earnings(recorder):
    _, df_quarter_earnings, _ = business_insider_model.get_estimates(
        ticker="TSLA")
    result_df = df_quarter_earnings

    recorder.capture(result_df)
def test_get_estimates_year_estimates(recorder):
    df_year_estimates, _, _ = business_insider_model.get_estimates(
        ticker="TSLA")
    result_df = df_year_estimates

    recorder.capture(result_df)
Example #8
0
async def est_command(ctx, ticker: str = ""):
    """Displays earning estimates [Business Insider]"""

    try:

        # Debug
        if cfg.DEBUG:
            logger.debug("!stocks.dd.est %s", ticker)

        # Check for argument
        if ticker == "":
            raise Exception("Stock ticker is required")

        (
            df_year_estimates,
            df_quarter_earnings,
            df_quarter_revenues,
        ) = business_insider_model.get_estimates(ticker)

        if (df_quarter_revenues.empty and df_year_estimates.empty
                and df_quarter_earnings.empty):
            raise Exception("Enter a valid ticker")

        # Debug user output
        if cfg.DEBUG:
            logger.debug(df_year_estimates.to_string())
            logger.debug(df_quarter_earnings.to_string())
            logger.debug(df_quarter_revenues.to_string())

        dindex = len(df_year_estimates.index)
        fig = df2img.plot_dataframe(
            df_year_estimates,
            fig_size=(1200, (40 + (60 * dindex))),
            col_width=[12, 4, 4, 4, 4],
            tbl_cells=dict(height=35, ),
            font=dict(
                family="Consolas",
                size=20,
            ),
            template="plotly_dark",
            paper_bgcolor="rgba(0, 0, 0, 0)",
        )
        imagefile = "estimates.png"

        df2img.save_dataframe(fig=fig, filename=imagefile)
        image = Image.open(imagefile)
        image = autocrop_image(image, 0)
        image.save(imagefile, "PNG", quality=100)
        uploaded_image = gst_imgur.upload_image(imagefile, title="something")
        link_estimates = uploaded_image.link

        os.remove(imagefile)

        fig = df2img.plot_dataframe(
            df_quarter_earnings,
            fig_size=(1200, (40 + (40 * 20))),
            col_width=[5, 5, 4, 4, 5, 4],
            tbl_cells=dict(height=35, ),
            font=dict(
                family="Consolas",
                size=20,
            ),
            template="plotly_dark",
            paper_bgcolor="rgba(0, 0, 0, 0)",
        )
        imagefile = "earnings.png"

        df2img.save_dataframe(fig=fig, filename=imagefile)
        image = Image.open(imagefile)
        image = autocrop_image(image, 0)
        image.save(imagefile, "PNG", quality=100)
        uploaded_image = gst_imgur.upload_image(imagefile, title="something")
        link_earnings = uploaded_image.link
        os.remove(imagefile)

        fig = df2img.plot_dataframe(
            df_quarter_revenues,
            fig_size=(1200, (40 + (40 * 20))),
            col_width=[5, 5, 4, 4, 5, 4],
            tbl_cells=dict(height=35, ),
            font=dict(
                family="Consolas",
                size=20,
            ),
            template="plotly_dark",
            paper_bgcolor="rgba(0, 0, 0, 0)",
        )
        imagefile = "revenues.png"

        df2img.save_dataframe(fig=fig, filename=imagefile)
        image = Image.open(imagefile)
        image = autocrop_image(image, 0)
        image.save(imagefile, "PNG", quality=100)
        uploaded_image = gst_imgur.upload_image(imagefile, title="something")
        link_revenues = uploaded_image.link
        os.remove(imagefile)

        embeds = [
            disnake.Embed(
                title=f"**{ticker.upper()} Year Estimates**",
                color=cfg.COLOR,
            ),
            disnake.Embed(
                title=f"**{ticker.upper()} Quarter Earnings**",
                colour=cfg.COLOR,
            ),
            disnake.Embed(
                title=f"**{ticker.upper()} Quarter Revenues**",
                colour=cfg.COLOR,
            ),
        ]
        embeds[0].set_image(url=link_estimates)
        embeds[1].set_image(url=link_earnings)
        embeds[2].set_image(url=link_revenues)
        # Output data
        choices = [
            disnake.SelectOption(label=f"{ticker.upper()} Year Estimates",
                                 value="0",
                                 emoji="🟢"),
            disnake.SelectOption(label=f"{ticker.upper()} Quarter Earnings",
                                 value="1",
                                 emoji="🟢"),
            disnake.SelectOption(label=f"{ticker.upper()} Quarter Revenues",
                                 value="2",
                                 emoji="🟢"),
        ]

        await ctx.send(embed=embeds[0], view=Menu(embeds, choices))
    except Exception as e:
        embed = disnake.Embed(
            title="ERROR Stocks: [Business Insider] Earning Estimates",
            colour=cfg.COLOR,
            description=e,
        )
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )

        await ctx.send(embed=embed, delete_after=30.0)
Example #9
0
def est_command(ticker: str = ""):
    """Displays earning estimates [Business Insider]"""

    # Debug
    if imps.DEBUG:
        logger.debug("dd est %s", ticker)

    # Check for argument
    if ticker == "":
        raise Exception("Stock ticker is required")

    (
        df_year_estimates,
        df_quarter_earnings,
        df_quarter_revenues,
    ) = business_insider_model.get_estimates(ticker)

    if (df_quarter_revenues.empty and df_year_estimates.empty
            and df_quarter_earnings.empty):
        raise Exception("Enter a valid ticker")

    # Debug user output
    if imps.DEBUG:
        logger.debug(df_year_estimates.to_string())
        logger.debug(df_quarter_earnings.to_string())
        logger.debug(df_quarter_revenues.to_string())

    images_list = []
    dindex = len(df_year_estimates.index)
    fig = imps.plot_df(
        df_year_estimates,
        fig_size=(900, (40 + (60 * dindex))),
        col_width=[9, 4, 4, 4, 4],
        tbl_header=imps.PLT_TBL_HEADER,
        tbl_cells=imps.PLT_TBL_CELLS,
        font=imps.PLT_TBL_FONT,
        row_fill_color=imps.PLT_TBL_ROW_COLORS,
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = imps.save_image("estimates.png", fig)

    if imps.IMAGES_URL or not imps.IMG_HOST_ACTIVE:
        link_estimates = imps.multi_image(imagefile)
        images_list.append(imagefile)
    else:
        link_estimates = imps.multi_image(imagefile)

    fig = imps.plot_df(
        df_quarter_earnings,
        fig_size=(900, (40 + (40 * 20))),
        col_width=[5, 5, 4, 4, 5, 4],
        tbl_header=imps.PLT_TBL_HEADER,
        tbl_cells=imps.PLT_TBL_CELLS,
        font=imps.PLT_TBL_FONT,
        row_fill_color=imps.PLT_TBL_ROW_COLORS,
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = imps.save_image("earnings.png", fig)

    if imps.IMAGES_URL or not imps.IMG_HOST_ACTIVE:
        link_earnings = imps.multi_image(imagefile)
        images_list.append(imagefile)
    else:
        link_earnings = imps.multi_image(imagefile)

    fig = imps.plot_df(
        df_quarter_revenues,
        fig_size=(900, (40 + (40 * 20))),
        col_width=[5, 5, 4, 4, 5, 4],
        tbl_header=imps.PLT_TBL_HEADER,
        tbl_cells=imps.PLT_TBL_CELLS,
        font=imps.PLT_TBL_FONT,
        row_fill_color=imps.PLT_TBL_ROW_COLORS,
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = imps.save_image("revenues.png", fig)

    if imps.IMAGES_URL or not imps.IMG_HOST_ACTIVE:
        link_revenues = imps.multi_image(imagefile)
        images_list.append(imagefile)
    else:
        link_revenues = imps.multi_image(imagefile)

    embeds = [
        disnake.Embed(
            title=f"**{ticker.upper()} Year Estimates**",
            color=imps.COLOR,
        ),
        disnake.Embed(
            title=f"**{ticker.upper()} Quarter Earnings**",
            colour=imps.COLOR,
        ),
        disnake.Embed(
            title=f"**{ticker.upper()} Quarter Revenues**",
            colour=imps.COLOR,
        ),
    ]
    embeds[0].set_image(url=link_estimates)
    embeds[1].set_image(url=link_earnings)
    embeds[2].set_image(url=link_revenues)
    titles = [
        f"**{ticker.upper()} Year Estimates**",
        f"**{ticker.upper()} Quarter Earnings**",
        f"**{ticker.upper()} Quarter Revenues**",
    ]
    embeds_img = [
        f"{link_estimates}",
        f"{link_earnings}",
        f"{link_revenues}",
    ]
    # Output data
    choices = [
        disnake.SelectOption(label=f"{ticker.upper()} Year Estimates",
                             value="0",
                             emoji="🟢"),
        disnake.SelectOption(label=f"{ticker.upper()} Quarter Earnings",
                             value="1",
                             emoji="🟢"),
        disnake.SelectOption(label=f"{ticker.upper()} Quarter Revenues",
                             value="2",
                             emoji="🟢"),
    ]

    return {
        "view": imps.Menu,
        "titles": titles,
        "embed": embeds,
        "choices": choices,
        "embeds_img": embeds_img,
        "images_list": images_list,
    }