Skip to content

Commit baba98c

Browse files
simonjayhawkinsjreback
authored andcommitted
add type annotations to io\formats\html.py (#27355)
1 parent 5a7a8e1 commit baba98c

File tree

2 files changed

+59
-40
lines changed

2 files changed

+59
-40
lines changed

pandas/io/formats/format.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,6 @@ def _get_adjustment():
400400

401401
class TableFormatter:
402402

403-
is_truncated = False
404403
show_dimensions = None
405404

406405
@property

pandas/io/formats/html.py

Lines changed: 59 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44

55
from collections import OrderedDict
66
from textwrap import dedent
7+
from typing import Dict, List, Optional, Tuple, Union
78

89
from pandas._config import get_option
910

10-
from pandas.core.dtypes.generic import ABCMultiIndex
11+
from pandas.core.dtypes.generic import ABCIndex, ABCMultiIndex
1112

1213
from pandas import option_context
1314

1415
from pandas.io.common import _is_url
15-
from pandas.io.formats.format import TableFormatter, get_level_lengths
16+
from pandas.io.formats.format import (
17+
DataFrameFormatter,
18+
TableFormatter,
19+
get_level_lengths,
20+
)
1621
from pandas.io.formats.printing import pprint_thing
1722

1823

@@ -28,13 +33,18 @@ class HTMLFormatter(TableFormatter):
2833

2934
indent_delta = 2
3035

31-
def __init__(self, formatter, classes=None, border=None):
36+
def __init__(
37+
self,
38+
formatter: DataFrameFormatter,
39+
classes: Optional[Union[str, List, Tuple]] = None,
40+
border: Optional[bool] = None,
41+
) -> None:
3242
self.fmt = formatter
3343
self.classes = classes
3444

3545
self.frame = self.fmt.frame
3646
self.columns = self.fmt.tr_frame.columns
37-
self.elements = []
47+
self.elements = [] # type: List[str]
3848
self.bold_rows = self.fmt.kwds.get("bold_rows", False)
3949
self.escape = self.fmt.kwds.get("escape", True)
4050
self.show_dimensions = self.fmt.show_dimensions
@@ -47,15 +57,15 @@ def __init__(self, formatter, classes=None, border=None):
4757
self.fmt.col_space = "{colspace}px".format(colspace=self.fmt.col_space)
4858

4959
@property
50-
def show_row_idx_names(self):
60+
def show_row_idx_names(self) -> bool:
5161
return self.fmt.show_row_idx_names
5262

5363
@property
54-
def show_col_idx_names(self):
64+
def show_col_idx_names(self) -> bool:
5565
return self.fmt.show_col_idx_names
5666

5767
@property
58-
def row_levels(self):
68+
def row_levels(self) -> int:
5969
if self.fmt.index:
6070
# showing (row) index
6171
return self.frame.index.nlevels
@@ -69,22 +79,24 @@ def row_levels(self):
6979
# not showing (row) index
7080
return 0
7181

72-
def _get_columns_formatted_values(self):
82+
def _get_columns_formatted_values(self) -> ABCIndex:
7383
return self.columns
7484

7585
@property
76-
def is_truncated(self):
86+
def is_truncated(self) -> bool:
7787
return self.fmt.is_truncated
7888

7989
@property
80-
def ncols(self):
90+
def ncols(self) -> int:
8191
return len(self.fmt.tr_frame.columns)
8292

83-
def write(self, s, indent=0):
93+
def write(self, s: str, indent: int = 0) -> None:
8494
rs = pprint_thing(s)
8595
self.elements.append(" " * indent + rs)
8696

87-
def write_th(self, s, header=False, indent=0, tags=None):
97+
def write_th(
98+
self, s: str, header: bool = False, indent: int = 0, tags: Optional[str] = None
99+
) -> None:
88100
"""
89101
Method for writting a formatted <th> cell.
90102
@@ -111,20 +123,24 @@ def write_th(self, s, header=False, indent=0, tags=None):
111123
tags = tags or ""
112124
tags += 'style="min-width: {colspace};"'.format(colspace=self.fmt.col_space)
113125

114-
return self._write_cell(s, kind="th", indent=indent, tags=tags)
126+
self._write_cell(s, kind="th", indent=indent, tags=tags)
115127

116-
def write_td(self, s, indent=0, tags=None):
117-
return self._write_cell(s, kind="td", indent=indent, tags=tags)
128+
def write_td(self, s: str, indent: int = 0, tags: Optional[str] = None) -> None:
129+
self._write_cell(s, kind="td", indent=indent, tags=tags)
118130

119-
def _write_cell(self, s, kind="td", indent=0, tags=None):
131+
def _write_cell(
132+
self, s: str, kind: str = "td", indent: int = 0, tags: Optional[str] = None
133+
) -> None:
120134
if tags is not None:
121135
start_tag = "<{kind} {tags}>".format(kind=kind, tags=tags)
122136
else:
123137
start_tag = "<{kind}>".format(kind=kind)
124138

125139
if self.escape:
126140
# escape & first to prevent double escaping of &
127-
esc = OrderedDict([("&", r"&amp;"), ("<", r"&lt;"), (">", r"&gt;")])
141+
esc = OrderedDict(
142+
[("&", r"&amp;"), ("<", r"&lt;"), (">", r"&gt;")]
143+
) # type: Union[OrderedDict[str, str], Dict]
128144
else:
129145
esc = {}
130146

@@ -146,14 +162,14 @@ def _write_cell(self, s, kind="td", indent=0, tags=None):
146162

147163
def write_tr(
148164
self,
149-
line,
150-
indent=0,
151-
indent_delta=0,
152-
header=False,
153-
align=None,
154-
tags=None,
155-
nindex_levels=0,
156-
):
165+
line: List[str],
166+
indent: int = 0,
167+
indent_delta: int = 0,
168+
header: bool = False,
169+
align: Optional[str] = None,
170+
tags: Optional[Dict[int, str]] = None,
171+
nindex_levels: int = 0,
172+
) -> None:
157173
if tags is None:
158174
tags = {}
159175

@@ -173,7 +189,7 @@ def write_tr(
173189
indent -= indent_delta
174190
self.write("</tr>", indent)
175191

176-
def render(self):
192+
def render(self) -> List[str]:
177193
self._write_table()
178194

179195
if self.should_show_dimensions:
@@ -186,7 +202,7 @@ def render(self):
186202

187203
return self.elements
188204

189-
def _write_table(self, indent=0):
205+
def _write_table(self, indent: int = 0) -> None:
190206
_classes = ["dataframe"] # Default class.
191207
use_mathjax = get_option("display.html.use_mathjax")
192208
if not use_mathjax:
@@ -220,7 +236,7 @@ def _write_table(self, indent=0):
220236

221237
self.write("</table>", indent)
222238

223-
def _write_col_header(self, indent):
239+
def _write_col_header(self, indent: int) -> None:
224240
truncate_h = self.fmt.truncate_h
225241
if isinstance(self.columns, ABCMultiIndex):
226242
template = 'colspan="{span:d}" halign="left"'
@@ -337,14 +353,14 @@ def _write_col_header(self, indent):
337353

338354
self.write_tr(row, indent, self.indent_delta, header=True, align=align)
339355

340-
def _write_row_header(self, indent):
356+
def _write_row_header(self, indent: int) -> None:
341357
truncate_h = self.fmt.truncate_h
342358
row = [x if x is not None else "" for x in self.frame.index.names] + [""] * (
343359
self.ncols + (1 if truncate_h else 0)
344360
)
345361
self.write_tr(row, indent, self.indent_delta, header=True)
346362

347-
def _write_header(self, indent):
363+
def _write_header(self, indent: int) -> None:
348364
self.write("<thead>", indent)
349365

350366
if self.fmt.header:
@@ -355,12 +371,12 @@ def _write_header(self, indent):
355371

356372
self.write("</thead>", indent)
357373

358-
def _get_formatted_values(self):
374+
def _get_formatted_values(self) -> Dict[int, List[str]]:
359375
with option_context("display.max_colwidth", 999999):
360376
fmt_values = {i: self.fmt._format_col(i) for i in range(self.ncols)}
361377
return fmt_values
362378

363-
def _write_body(self, indent):
379+
def _write_body(self, indent: int) -> None:
364380
self.write("<tbody>", indent)
365381
fmt_values = self._get_formatted_values()
366382

@@ -372,7 +388,9 @@ def _write_body(self, indent):
372388

373389
self.write("</tbody>", indent)
374390

375-
def _write_regular_rows(self, fmt_values, indent):
391+
def _write_regular_rows(
392+
self, fmt_values: Dict[int, List[str]], indent: int
393+
) -> None:
376394
truncate_h = self.fmt.truncate_h
377395
truncate_v = self.fmt.truncate_v
378396

@@ -385,7 +403,7 @@ def _write_regular_rows(self, fmt_values, indent):
385403
else:
386404
index_values = self.fmt.tr_frame.index.format()
387405

388-
row = []
406+
row = [] # type: List[str]
389407
for i in range(nrows):
390408

391409
if truncate_v and i == (self.fmt.tr_row_num):
@@ -416,7 +434,9 @@ def _write_regular_rows(self, fmt_values, indent):
416434
row, indent, self.indent_delta, tags=None, nindex_levels=self.row_levels
417435
)
418436

419-
def _write_hierarchical_rows(self, fmt_values, indent):
437+
def _write_hierarchical_rows(
438+
self, fmt_values: Dict[int, List[str]], indent: int
439+
) -> None:
420440
template = 'rowspan="{span}" valign="top"'
421441

422442
truncate_h = self.fmt.truncate_h
@@ -546,13 +566,13 @@ class NotebookFormatter(HTMLFormatter):
546566
DataFrame._repr_html_() and DataFrame.to_html(notebook=True)
547567
"""
548568

549-
def _get_formatted_values(self):
569+
def _get_formatted_values(self) -> Dict[int, List[str]]:
550570
return {i: self.fmt._format_col(i) for i in range(self.ncols)}
551571

552-
def _get_columns_formatted_values(self):
572+
def _get_columns_formatted_values(self) -> List[str]:
553573
return self.columns.format()
554574

555-
def write_style(self):
575+
def write_style(self) -> None:
556576
# We use the "scoped" attribute here so that the desired
557577
# style properties for the data frame are not then applied
558578
# throughout the entire notebook.
@@ -580,7 +600,7 @@ def write_style(self):
580600
template = dedent("\n".join((template_first, template_mid, template_last)))
581601
self.write(template)
582602

583-
def render(self):
603+
def render(self) -> List[str]:
584604
self.write("<div>")
585605
self.write_style()
586606
super().render()

0 commit comments

Comments
 (0)