From f98256d7e9fd4b91282301d520355f5cb7df9620 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Wed, 1 Feb 2023 09:58:30 +0100 Subject: [PATCH] Fix bug in table generation - Remove the check `elif size < Size.LARGE.value` and made it into `else`, since it was intended to cover all cells that are larger than medium size. - Also disbale page number generation for now --- test/fixtures/page_generation/page.py | 119 +++++++++++++------------- 1 file changed, 61 insertions(+), 58 deletions(-) diff --git a/test/fixtures/page_generation/page.py b/test/fixtures/page_generation/page.py index aefd1bf..d929588 100644 --- a/test/fixtures/page_generation/page.py +++ b/test/fixtures/page_generation/page.py @@ -457,9 +457,6 @@ def page_with_opaque_content( content_generator = ContentGenerator() boxes = content_generator(boxes) - boxes.append(generate_random_page_number(texture)) # TODO: Refactor - print(boxes[-1]) - page = paste_contents(texture, boxes) return page, boxes @@ -482,8 +479,6 @@ def page_with_translucent_content( boxes = content_generator(boxes) page_content = paste_contents(blank_page, boxes) - boxes.append(generate_random_page_number(texture)) - texture = random_flip(texture) texture = texture_fn(texture) @@ -890,7 +885,6 @@ class RecursiveRandomTable(RandomContentRectangle): def inner(cell): - choice = rnd.choice(["text", "plot", "recurse", "plain_table", "blank"]) size = get_size(cell) if size <= Size.SMALL.value: @@ -915,7 +909,7 @@ class RecursiveRandomTable(RandomContentRectangle): else: return generate_text_block(cell, f"{choice} {size:.0f} {get_size_class(cell).name}") - elif size <= Size.LARGE.value: + else: choice = rnd.choice(["plot", "recurse"]) @@ -932,8 +926,6 @@ class RecursiveRandomTable(RandomContentRectangle): layout=random.choice(["open", "horizontal", "vertical"]), double_rule=False, ) - else: - return generate_text_block(cell, f"{choice} {size:.0f} {get_size_class(cell).name}") cell = inner(cell) @@ -1370,7 +1362,6 @@ class RandomPlot(RandomContentRectangle): y = np.random.normal(size=n) scatter_fn = partial( plt.scatter, - s=np.random.randint(low=1, high=100, size=n), cmap=self.cmap, marker=rnd.choice(["o", "*", "+", "x"]), ) @@ -1642,6 +1633,17 @@ class TextBlock(ContentRectangle): return self +class RandomPageNumber(TextBlock): + def __init__(self, x1, y1, x2, y2): + super().__init__(x1, y1, x2, y2) + self.page_number = random.randint(1, 1000) + self.margin_distance_percentage = 0.05 + self.margin_distance_x = int(self.width * self.margin_distance_percentage) + self.margin_distance_y = int(self.height * self.margin_distance_percentage) + + self.location_coordinates = self.location_to_coordinates(self.pick_location()) + + def generate_random_text_lines(rectangle: Rectangle, line_formatter=identity, n_sentences=3000) -> List[str]: text = Faker().paragraph(nb_sentences=n_sentences, variable_nb_sentences=False, ext_word_list=None) unformatted_lines = textwrap.wrap(text, width=rectangle.width, break_long_words=False) @@ -1669,6 +1671,7 @@ def paste_contents(page, contents: Iterable[ContentRectangle]): return page +# TODO: produce boxes for page numbers, headers and footers class PagePartitioner(abc.ABC): def __init__(self): self.left_margin_percentage = 0.05 @@ -1793,51 +1796,51 @@ def draw_boxes(page: Image, boxes: Iterable[Rectangle]): show_image(page, backend="pil") -class RandomPageNumber(ContentRectangle): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.page_number = random.randint(1, 1000) - self.margin_distance_percentage = 0.05 - self.margin_distance_x = int(self.width * self.margin_distance_percentage) - self.margin_distance_y = int(self.height * self.margin_distance_percentage) - - self.location_coordinates = self.location_to_coordinates(self.pick_location()) - - def __repr__(self): - return f"PageNumber({self.page_number}, {super().__repr__()})" - - def generate_random_page_number(self, rectangle: Rectangle): - logger.info(f"Generating random page number for {rectangle}") - self.add_page_number() - - def add_page_number(self): - page_number_image = self.get_page_number_image() - self.content.paste(page_number_image, self.location_coordinates, page_number_image) - - def pick_location(self): - return rnd.choice(["top_left", "top_right", "bottom_left", "bottom_right", "center_top", "center_bottom"]) - - def location_to_coordinates(self, locations: str): - if locations == "top_left": - return self.x1 + self.margin_distance_x, self.y1 + self.margin_distance_y - elif locations == "top_right": - return self.x2 - self.margin_distance_x, self.y1 + self.margin_distance_y - elif locations == "bottom_left": - return self.x1 + self.margin_distance_x, self.y2 - self.margin_distance_y - elif locations == "bottom_right": - return self.x2 - self.margin_distance_x, self.y2 - self.margin_distance_y - elif locations == "center_top": - return self.x1 + self.width // 2, self.y1 + self.margin_distance_y - elif locations == "center_bottom": - return self.x1 + self.width // 2, self.y2 - self.margin_distance_y - else: - raise ValueError(f"Unknown location: {locations}") - - def get_page_number_image(self): - font = pick_random_mono_space_font_available_on_system(excludes=("italic", "oblique")) - page_number_image = Image.new("RGBA", (100, 100), (255, 255, 255, 0)) - - draw = ImageDraw.Draw(page_number_image) - draw.text((0, 0), str(self.page_number), font=font, fill=(0, 0, 0, 255)) - - return page_number_image +# class RandomPageNumber(ContentRectangle): +# def __init__(self, *args, **kwargs): +# super().__init__(*args, **kwargs) +# self.page_number = random.randint(1, 1000) +# self.margin_distance_percentage = 0.05 +# self.margin_distance_x = int(self.width * self.margin_distance_percentage) +# self.margin_distance_y = int(self.height * self.margin_distance_percentage) +# +# self.location_coordinates = self.location_to_coordinates(self.pick_location()) +# +# def __repr__(self): +# return f"PageNumber({self.page_number}, {super().__repr__()})" +# +# def generate_random_page_number(self, rectangle: Rectangle): +# logger.info(f"Generating random page number for {rectangle}") +# self.add_page_number() +# +# def add_page_number(self): +# page_number_image = self.get_page_number_image() +# self.content.paste(page_number_image, self.location_coordinates, page_number_image) +# +# def pick_location(self): +# return rnd.choice(["top_left", "top_right", "bottom_left", "bottom_right", "center_top", "center_bottom"]) +# +# def location_to_coordinates(self, locations: str): +# if locations == "top_left": +# return self.x1 + self.margin_distance_x, self.y1 + self.margin_distance_y +# elif locations == "top_right": +# return self.x2 - self.margin_distance_x, self.y1 + self.margin_distance_y +# elif locations == "bottom_left": +# return self.x1 + self.margin_distance_x, self.y2 - self.margin_distance_y +# elif locations == "bottom_right": +# return self.x2 - self.margin_distance_x, self.y2 - self.margin_distance_y +# elif locations == "center_top": +# return self.x1 + self.width // 2, self.y1 + self.margin_distance_y +# elif locations == "center_bottom": +# return self.x1 + self.width // 2, self.y2 - self.margin_distance_y +# else: +# raise ValueError(f"Unknown location: {locations}") +# +# def get_page_number_image(self): +# font = pick_random_mono_space_font_available_on_system(excludes=("italic", "oblique")) +# page_number_image = Image.new("RGBA", (100, 100), (255, 255, 255, 0)) +# +# draw = ImageDraw.Draw(page_number_image) +# draw.text((0, 0), str(self.page_number), font=font, fill=(0, 0, 0, 255)) +# +# return page_number_image