I am trying to test some of the functions I have written for my dash app. Not the actual component yet. Here is one of my functions:
import base64
import io
from typing import Any
import pandas as pd
def parse_contents(contents: str, filename: str) -> Any:
"""
This function takes the contents of the csv or xls file in a string and decodes it using StringIO
then places it in a pandas dataframe then it returns a html.Div of a datatable and a list of rows
content with the attributes in a dictionary
Args:
contents: a string of the data within the csv file
filename: a string of the filename
Returns:
"""
df = pd.DataFrame
content_type, content_string = contents.split(",")
decoded = base64.b64decode(content_string)
try:
if "csv" in filename:
# Assume that the user uploaded a CSV file
df = pd.read_csv(io.StringIO(decoded.decode("utf-8")))
elif "xls" in filename:
# Assume that the user uploaded an Excel file
df = pd.read_excel(io.BytesIO(decoded))
except Exception as e:
print(e)
return []
return df.to_dict("records")
I am used to creating a temporary file, creating a simple test dataframe to test my functions but here I am not sure how do I simulate the way that the upload function puts the file data into a string… my callback function uses this function to process the file and then stores it. So I am wondering how do I simulate dcc.upload in my test so that the this parse_contents function can be tested?