Files
pdfplumber/tests/test_ca_warn_report.py
T

142 lines
3.6 KiB
Python
Raw Normal View History

2016-04-23 21:06:33 -04:00
#!/usr/bin/env python
2021-12-09 22:27:51 -05:00
import logging
2020-12-16 22:29:51 -05:00
import os
2021-12-09 22:27:51 -05:00
import unittest
2016-04-23 21:06:33 -04:00
2021-12-09 22:27:51 -05:00
import pdfplumber
from pdfplumber import table, utils
2020-12-16 22:19:17 -05:00
2016-04-23 21:06:33 -04:00
logging.disable(logging.ERROR)
HERE = os.path.abspath(os.path.dirname(__file__))
2020-12-16 22:19:17 -05:00
2016-04-23 21:06:33 -04:00
def fix_row_spaces(row):
2020-12-16 22:19:17 -05:00
return [(x or "").replace(" ", "") for x in row[:3]] + row[3:]
2016-04-23 21:06:33 -04:00
2020-12-16 22:19:17 -05:00
class Test(unittest.TestCase):
@classmethod
def setup_class(self):
2020-12-16 22:19:17 -05:00
self.path = os.path.join(
HERE, "pdfs/WARN-Report-for-7-1-2015-to-03-25-2016.pdf"
)
2020-07-29 23:01:00 -04:00
self.pdf = pdfplumber.open(self.path)
2016-04-23 21:06:33 -04:00
self.PDF_WIDTH = self.pdf.pages[0].width
@classmethod
def teardown_class(self):
self.pdf.close()
2020-07-29 23:01:00 -04:00
def test_page_limiting(self):
2020-12-16 22:19:17 -05:00
with pdfplumber.open(self.path, pages=[1, 3]) as pdf:
2020-07-29 23:01:00 -04:00
assert len(pdf.pages) == 2
assert pdf.pages[1].page_number == 3
2020-07-26 15:58:06 -04:00
def test_objects(self):
2020-08-29 13:35:47 -04:00
p = self.pdf.pages[0]
assert len(p.chars)
assert len(p.rects)
assert len(p.images)
2020-07-26 15:58:06 -04:00
def test_parse(self):
2016-04-23 21:06:33 -04:00
2020-12-16 22:19:17 -05:00
rect_x0_clusters = utils.cluster_list(
[r["x0"] for r in self.pdf.pages[1].rects], tolerance=3
)
2016-04-23 21:06:33 -04:00
2020-12-16 22:19:17 -05:00
v_lines = [x[0] for x in rect_x0_clusters]
2016-04-23 21:06:33 -04:00
def parse_page(page):
2020-12-16 22:19:17 -05:00
data = page.extract_table(
{"vertical_strategy": "explicit", "explicit_vertical_lines": v_lines}
)
without_spaces = [fix_row_spaces(row) for row in data]
2016-04-23 21:06:33 -04:00
return without_spaces
parsed = parse_page(self.pdf.pages[0])
2020-12-16 22:19:17 -05:00
assert parsed[0] == [
2016-04-23 21:06:33 -04:00
"NoticeDate",
"Effective",
"Received",
"Company",
"City",
"No. Of",
"Layoff/Closure",
2020-12-16 22:19:17 -05:00
]
2016-04-23 21:06:33 -04:00
2020-12-16 22:19:17 -05:00
assert parsed[1] == [
2016-04-23 21:06:33 -04:00
"06/22/2015",
"03/25/2016",
"07/01/2015",
"Maxim Integrated Product",
"San Jose",
"150",
"Closure Permanent",
2020-12-16 22:19:17 -05:00
]
2017-02-25 13:23:51 -05:00
def test_edge_merging(self):
p0 = self.pdf.pages[0]
2020-12-16 22:19:17 -05:00
assert len(p0.edges) == 364
assert (
len(
table.merge_edges(
p0.edges,
snap_x_tolerance=3,
snap_y_tolerance=3,
join_x_tolerance=3,
join_y_tolerance=3,
)
)
== 46
)
assert (
len(
table.merge_edges(
p0.edges,
snap_x_tolerance=3,
snap_y_tolerance=3,
join_x_tolerance=3,
join_y_tolerance=0,
)
)
== 52
)
assert (
len(
table.merge_edges(
p0.edges,
snap_x_tolerance=0,
snap_y_tolerance=3,
join_x_tolerance=3,
join_y_tolerance=3,
)
)
== 94
)
assert (
len(
table.merge_edges(
p0.edges,
snap_x_tolerance=3,
snap_y_tolerance=0,
join_x_tolerance=3,
join_y_tolerance=3,
)
)
== 174
2020-12-16 22:19:17 -05:00
)
2017-02-25 13:23:51 -05:00
def test_vertices(self):
p0 = self.pdf.pages[0]
edges = table.merge_edges(
p0.edges,
snap_x_tolerance=3,
snap_y_tolerance=3,
join_x_tolerance=3,
join_y_tolerance=3,
)
2017-02-25 13:23:51 -05:00
ixs = table.edges_to_intersections(edges)
2020-12-16 22:19:17 -05:00
assert len(ixs.keys()) == 304 # 38x8