def metals_command(): """Displays metals futures data [Finviz]""" # Debug user input if cfg.DEBUG: logger.debug("econ-metals") # Retrieve data d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures["Metals"]) # Check for argument if df.empty: raise Exception("No available data found") formats = {"last": "${:.2f}", "prevClose": "${:.2f}"} for col, value in formats.items(): df[col] = df[col].map(lambda x: value.format(x)) # pylint: disable=W0640 # Debug user output if cfg.DEBUG: logger.debug(df) df = df.sort_values(by="ticker", ascending=False) df = df.fillna("") df.set_index("label", inplace=True) df = df[[ "prevClose", "last", "change", ]] df.index.names = [""] df = df.rename(columns={ "prevClose": "PrevClose", "last": "Last", "change": "Change" }) dindex = len(df.index) fig = df2img.plot_dataframe( df, fig_size=(800, (40 + (40 * dindex))), col_width=[6, 3, 3], tbl_cells=dict( align="left", height=35, ), template="plotly_dark", font=dict( family="Consolas", size=20, ), paper_bgcolor="rgba(0, 0, 0, 0)", ) imagefile = save_image("econ-metals.png", fig) return { "title": "Economy: [WSJ] Metals Futures", "imagefile": imagefile, }
async def meats_command(ctx): """Displays meats futures data [Finviz]""" try: # Debug user input if cfg.DEBUG: print("\n!economy.meats") # Retrieve data d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures["Meats"]) df = df.set_index("label") df = df.sort_values(by="ticker", ascending=False) # Debug user output if cfg.DEBUG: print(df.to_string()) # Output data if df.empty: df_str = "No available meats futures data" else: df_str = ( df[["prevClose", "last", "change"]].fillna("").to_string(index=True) ) embed = discord.Embed( title="Economy: [Finviz] Meats Futures", description="```" + df_str + "```", colour=cfg.COLOR, ) embed.set_author( name=cfg.AUTHOR_NAME, icon_url=cfg.AUTHOR_ICON_URL, ) await ctx.send(embed=embed) except Exception as e: embed = discord.Embed( title="ERROR Economy: [Finviz] Meats Futures", colour=cfg.COLOR, description=e, ) embed.set_author( name=cfg.AUTHOR_NAME, icon_url=cfg.AUTHOR_ICON_URL, ) await ctx.send(embed=embed)
def display_future( future_type: str = "Indices", sort_col: str = "ticker", ascending: bool = False, export: str = "", ): """Display table of a particular future type. [Source: Finviz] Parameters ---------- future_type : str From the following: Indices, Energy, Metals, Meats, Grains, Softs, Bonds, Currencies sort_col : str Column to sort by ascending : bool Flag to sort in ascending order export : str Export data to csv,json,xlsx or png,jpg,pdf,svg file """ d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures[future_type]) df = df.set_index("label") df = df.sort_values(by=sort_col, ascending=ascending) if gtff.USE_TABULATE_DF: print( tabulate( df[["prevClose", "last", "change"]].fillna(""), showindex=True, floatfmt=".2f", headers=["prevClose", "last", "change (%)"], tablefmt="fancy_grid", )) else: print(df[["prevClose", "last", "change"]].fillna("").to_string(index=True)) export_data( export, os.path.dirname(os.path.abspath(__file__)), future_type.lower(), df, ) print("")
def display_future( future_type: str = "Indices", sort_col: str = "ticker", ascending: bool = False, export: str = "", ): """Display table of a particular future type. [Source: Finviz] Parameters ---------- future_type : str From the following: Indices, Energy, Metals, Meats, Grains, Softs, Bonds, Currencies sort_col : str Column to sort by ascending : bool Flag to sort in ascending order export : str Export data to csv,json,xlsx or png,jpg,pdf,svg file """ d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures[future_type]) df = df.set_index("label") df = df.sort_values(by=sort_col, ascending=ascending) print_rich_table( df[["prevClose", "last", "change"]].fillna(""), show_index=True, headers=["prevClose", "last", "change (%)"], title="Future Table [Source: FinViz]", ) export_data( export, os.path.dirname(os.path.abspath(__file__)), future_type.lower(), df, ) console.print("")
async def softs_command(ctx): """Displays softs futures data [Finviz]""" try: # Debug user input if cfg.DEBUG: logger.debug("econ-softs") # Retrieve data d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures["Softs"]) # Check for argument if df.empty: raise Exception("No available data found") formats = {"last": "${:.2f}", "prevClose": "${:.2f}"} for col, value in formats.items(): df[col] = df[col].map(lambda x: value.format(x)) # pylint: disable=W0640 # Debug user output if cfg.DEBUG: logger.debug(df) df = df.sort_values(by="ticker", ascending=False) df = df.fillna("") df.set_index("label", inplace=True) df = df[[ "prevClose", "last", "change", ]] df.index.names = [""] df = df.rename(columns={ "prevClose": "PrevClose", "last": "Last", "change": "Change" }) dindex = len(df.index) fig = df2img.plot_dataframe( df, fig_size=(800, (40 + (40 * dindex))), col_width=[6, 3, 3], tbl_cells=dict( align="left", height=35, ), template="plotly_dark", font=dict( family="Consolas", size=20, ), paper_bgcolor="rgba(0, 0, 0, 0)", ) imagefile = "econ-softs.png" df2img.save_dataframe(fig=fig, filename=imagefile) image = Image.open(imagefile) image = autocrop_image(image, 0) image.save(imagefile, "PNG", quality=100) image = disnake.File(imagefile) title = "Economy: [Finviz] Softs Futures" embed = disnake.Embed(title=title, colour=cfg.COLOR) embed.set_image(url=f"attachment://{imagefile}") embed.set_author( name=cfg.AUTHOR_NAME, icon_url=cfg.AUTHOR_ICON_URL, ) os.remove(imagefile) await ctx.send(embed=embed, file=image) except Exception as e: embed = disnake.Embed( title="ERROR Economy: [Finviz] Softs Futures", 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)
def softs_command(): """Displays softs futures data [Finviz]""" # Debug user input if imps.DEBUG: logger.debug("econ-softs") # Retrieve data d_futures = finviz_model.get_futures() df = pd.DataFrame(d_futures["Softs"]) # Check for argument if df.empty: raise Exception("No available data found") formats = { "last": "${:.2f}", "prevClose": "${:.2f}", "change": "<b>{:.2f}%</b>" } for col, value in formats.items(): df[col] = df[col].map(lambda x: value.format(x)) # pylint: disable=W0640 # Debug user output if imps.DEBUG: logger.debug(df) df = df.sort_values(by="ticker", ascending=False) df = df.fillna("") df.set_index("label", inplace=True) df = df[[ "prevClose", "last", "change", ]] df.index.names = [""] df = df.rename(columns={ "prevClose": "PrevClose", "last": "Last", "change": "Change" }) font_color = ["white"] * 3 + [[ "#e4003a" if boolv else "#00ACFF" for boolv in df["Change"].str.contains("-") ]] fig = imps.plot_df( df, fig_size=(550, (40 + (40 * len(df.index)))), col_width=[5, 3, 3], 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)", ) fig.update_traces(cells=(dict( align=["center", "right"], font=dict(color=font_color), ))) imagefile = imps.save_image("econ-softs.png", fig) return { "title": "Economy: [Finviz] Softs Futures", "imagefile": imagefile, }
def test_get_futures(recorder): result_dict = finviz_model.get_futures() recorder.capture(result_dict)