diff --git a/test/fixtures/page_generation/page.py b/test/fixtures/page_generation/page.py index 287575e..4c5deae 100644 --- a/test/fixtures/page_generation/page.py +++ b/test/fixtures/page_generation/page.py @@ -421,71 +421,51 @@ class RandomTable(RandomContentRectangle): def __init__(self, x1, y1, x2, y2, seed=None): super().__init__(x1, y1, x2, y2, seed=seed) - # def generate_random_table(self, rectangle: Rectangle): - # """Generates the image of a random table. - # - # Reference: https://stackoverflow.com/questions/35634238/how-to-save-a-pandas-dataframe-table-as-a-png - # """ - # # df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) - # df = self.generate_random_dataframe(rectangle, 12) - # print(df) - # - # from pandas.plotting import table - # - # ax = plt.subplot(111, frame_on=False) - # ax.xaxis.set_visible(False) - # ax.yaxis.set_visible(False) - # - # table(ax, df) - # plt.savefig('/tmp/mytable.png') - # - # image = dump_plt_to_image(rectangle) - # image.show() - # - # self.content = image - def generate_random_table(self, rectangle: Rectangle): """Generates the image of a random table. Reference: https://stackoverflow.com/questions/35634238/how-to-save-a-pandas-dataframe-table-as-a-png """ - import dataframe_image as dfi - - df = self.generate_random_dataframe(rectangle, 11) - table_lines = self.generate_random_ascii_table(rectangle, 11) - print(df) + text_table = self.generate_random_ascii_table(rectangle) + table_lines = text_table.split("\n") image = write_lines_to_image(table_lines, rectangle) - # df_styled = df.style.background_gradient() - # buf = io.BytesIO() - # dfi.export(df_styled, buf) - # image = Image.open(buf) - # image = image.resize((rectangle.width, rectangle.height)) - self.content = image - def generate_random_dataframe(self, rectangle: Rectangle, font_size: int): + def generate_random_dataframe(self, rectangle: Rectangle): """Generates a random dataframe that has as many rows and columns as to fit the given rectangle.""" - h_factor = font_size * 5 - v_factor = font_size * 2 + image = Image.new("RGB", (rectangle.width, rectangle.height), color="white") + draw = ImageDraw.Draw(image) + text_size = draw.textsize("dummy", font=ImageFont.load_default())[1] - rows = rectangle.height // h_factor - cols = rectangle.width // v_factor + rows = rectangle.height // text_size + + col_names = list(string.ascii_uppercase) + + cols = min(rectangle.width // text_size, len(col_names)) df = pd.DataFrame( np.random.randint(0, 100, size=(rows, cols)), - columns=list(string.ascii_uppercase[:cols]), + columns=col_names[:cols], ) return df - def generate_random_ascii_table(self, rectangle: Rectangle, font_size: int): - df = self.generate_random_dataframe(rectangle, font_size) - text_table = tabulate(df, headers="keys", tablefmt="psql") - lines = text_table.split("\n") - return lines + def generate_random_ascii_table(self, rectangle: Rectangle): + df = self.generate_random_dataframe(rectangle) + table_format = random.choice( + [ + "simple", + "grid", + "presto", + "psql", + "rst", + ] + ) + text_table = tabulate(df, headers="keys", tablefmt=table_format) + return text_table def dump_plt_to_image(rectangle):