Example #1
0
 def as_bytes(self, data, extension=None):
     if extension is None:
         extension = self.default_extension()
     assert self.is_type_of(data)
     mimetype = mimetype_from_extension(extension)
     if extension == "csv":
         output = StringIO()
         data.to_csv(output, index=False)
         return output.getvalue().encode("utf-8"), mimetype
     elif extension == "tsv":
         output = StringIO()
         data.to_csv(output, index=False, sep="\t")
         return output.getvalue().encode("utf-8"), mimetype
     elif extension == "json":
         output = StringIO()
         data.to_json(output, index=False, orient="table")
         return output.getvalue().encode("utf-8"), mimetype
     elif extension in ("html", "htm"):
         output = StringIO()
         data.to_html(output, index=False)
         return output.getvalue().encode("utf-8"), mimetype
     elif extension in ("pkl", "pickle"):
         output = ResilientBytesIO()
         data.to_pickle(output, compression=None)
         b = output.getvalue()
         output.really_close()
         return b, mimetype
     elif extension == "parquet":
         output = ResilientBytesIO()
         data.to_parquet(output, engine="pyarrow")
         b = output.getvalue()
         output.really_close()
         return b, mimetype
     elif extension == "feather":
         output = ResilientBytesIO()
         data.to_feather(output)
         b = output.getvalue()
         output.really_close()
         return b, mimetype
     elif extension == "xlsx":
         output = BytesIO()
         writer = pd.ExcelWriter(output, engine="xlsxwriter")
         data.to_excel(writer)
         writer.close()
         return output.getvalue(), mimetype
     elif extension == "msgpack":
         output = BytesIO()
         data.to_msgpack(output)
         return output.getvalue(), mimetype
     else:
         raise Exception(
             f"Serialization: file extension {extension} is not supported by dataframe type."
         )