1
- # -*- coding: utf-8 -*-
2
- """Class used to generate formatted markdown tables. See class description"""
3
- import warnings
4
1
import math
5
2
from typing import Tuple , List , Dict
6
3
from py_markdown_table .utils import count_emojis , split_list_by_indices
7
4
8
5
9
- class markdown_table : # pylint: disable=C0103,R0902
6
+ class markdown_table :
10
7
"""
11
8
A class used to generate padded tables in a markdown code block
12
9
@@ -133,6 +130,7 @@ def __init__(self, data):
133
130
self .multiline_strategy = "rows"
134
131
self .multiline_delimiter = " "
135
132
self .quote = True
133
+ self .validate = True
136
134
self .__update_meta_params ()
137
135
138
136
def set_params (
@@ -142,13 +140,14 @@ def set_params(
142
140
padding_weight : str = "centerleft" ,
143
141
padding_char : str = " " ,
144
142
newline_char : str = "\n " ,
145
- float_rounding : Tuple [int , type ( None ) ] = None ,
143
+ float_rounding : Tuple [int , None ] = None ,
146
144
emoji_spacing : str = None ,
147
- multiline : Tuple [List [Dict ], type ( None ) ] = None ,
145
+ multiline : Tuple [List [Dict ], None ] = None ,
148
146
multiline_strategy : str = "rows" ,
149
147
multiline_delimiter : str = " " ,
150
148
quote : bool = True ,
151
- ): # pylint: disable=R0913
149
+ validate : bool = True ,
150
+ ):
152
151
"""Setter function for markdown table rendering parameters
153
152
154
153
Args:
@@ -178,7 +177,9 @@ def set_params(
178
177
self .multiline_strategy = multiline_strategy
179
178
self .multiline_delimiter = multiline_delimiter
180
179
self .quote = quote
181
- self .__validate_parameters ()
180
+ self .validate = validate
181
+ if validate :
182
+ self .__validate_parameters ()
182
183
self .__update_meta_params ()
183
184
return self
184
185
@@ -240,10 +241,7 @@ def __validate_parameters(self):
240
241
f"multiline_strategy value of '{ self .multiline_strategy } ' is not valid. \
241
242
Possible values are { * multiline_strategy_values ,} ."
242
243
)
243
- if (
244
- not isinstance (self .multiline_delimiter , str )
245
- or len (str (self .multiline_delimiter )) != 1
246
- ):
244
+ if not isinstance (self .multiline_delimiter , str ) or len (str (self .multiline_delimiter )) != 1 :
247
245
raise ValueError (
248
246
f"multiline_delimiter value of '{ self .multiline_delimiter } ' is not valid. \
249
247
Please use a single character string."
@@ -261,17 +259,13 @@ def __validate_data(self):
261
259
for item in self .data :
262
260
for key in keys :
263
261
if key not in item :
264
- raise ValueError (
265
- "Dictionary keys are not uniform across data variable."
266
- )
262
+ raise ValueError ("Dictionary keys are not uniform across data variable." )
267
263
if self .multiline :
268
264
for row in self .data :
269
265
for key , item in row .items ():
270
266
multiline_data = row [key ].split (self .multiline_delimiter )
271
267
multiline_max_width = max (multiline_data , key = len )
272
- if (self .var_padding [key ]) < (
273
- len (multiline_max_width ) + self .padding_width
274
- ):
268
+ if (self .var_padding [key ]) < (len (multiline_max_width ) + self .padding_width ):
275
269
raise ValueError (
276
270
f"Contiguous string exists longer than the \
277
271
allocated column width for column '{ key } ' \
@@ -343,7 +337,7 @@ def __get_row(self, item):
343
337
def __get_normal_row (self , item ):
344
338
row = ""
345
339
for key in self .data [0 ].keys ():
346
- # preprend emoji pre-processing for cell values
340
+ # prepend emoji pre-processing for cell values
347
341
emoji = []
348
342
if self .emoji_spacing == "mono" :
349
343
emoji = count_emojis (item [key ])
@@ -352,13 +346,13 @@ def __get_normal_row(self, item):
352
346
local_padding = self .var_padding [key ] - len (emoji )
353
347
margin = local_padding - len (str (item [key ]))
354
348
right = self .__get_margin (margin )
355
- row += "|" + str (item [key ]).rjust (
356
- local_padding - right , self .padding_char
357
- ). ljust ( local_padding , self . padding_char )
349
+ row += "|" + str (item [key ]).rjust (local_padding - right , self . padding_char ). ljust (
350
+ local_padding , self .padding_char
351
+ )
358
352
row += "|"
359
353
return row
360
354
361
- def __get_multiline_row (self , item ): # pylint: disable=R0912,R0914
355
+ def __get_multiline_row (self , item ):
362
356
multiline_items = {}
363
357
# process multiline rows column by column
364
358
for key in self .data [0 ].keys ():
@@ -373,9 +367,7 @@ def __get_multiline_row(self, item): # pylint: disable=R0912,R0914
373
367
fully_split_cell .append (element )
374
368
# if emojis are present, split by emoji into a list and concat
375
369
else :
376
- emoji_indices = [
377
- emoji ["index" ] for emoji in emojis if "index" in emoji
378
- ]
370
+ emoji_indices = [emoji ["index" ] for emoji in emojis if "index" in emoji ]
379
371
emoji_split_element = split_list_by_indices (element , emoji_indices )
380
372
fully_split_cell = fully_split_cell + emoji_split_element
381
373
@@ -386,17 +378,9 @@ def __get_multiline_row(self, item): # pylint: disable=R0912,R0914
386
378
while len (fully_split_cell ) > 0 :
387
379
# check item length and adjust for presence of emoji
388
380
# only check the first element since we are using a stack
389
- item_length = len (fully_split_cell [0 ]) + len (
390
- count_emojis (fully_split_cell [0 ])
391
- )
381
+ item_length = len (fully_split_cell [0 ]) + len (count_emojis (fully_split_cell [0 ]))
392
382
393
- if (
394
- item_length
395
- + item_prev_length
396
- + spacing_between_items
397
- + self .padding_width
398
- <= self .var_padding [key ]
399
- ):
383
+ if item_length + item_prev_length + spacing_between_items + self .padding_width <= self .var_padding [key ]:
400
384
# count just the items
401
385
item_prev_length += item_length
402
386
# add item to the current row
@@ -450,9 +434,9 @@ def get_header(self):
450
434
for key in self .data [0 ].keys ():
451
435
margin = self .var_padding [key ] - len (key )
452
436
right = self .__get_margin (margin )
453
- header += "|" + key .rjust (
454
- self .var_padding [key ] - right , self .padding_char
455
- ). ljust ( self . var_padding [ key ], self . padding_char )
437
+ header += "|" + key .rjust (self . var_padding [ key ] - right , self . padding_char ). ljust (
438
+ self .var_padding [key ], self .padding_char
439
+ )
456
440
header += "|" + self .newline_char
457
441
458
442
if self .row_sep == "always" :
@@ -482,32 +466,3 @@ def get_markdown(self):
482
466
if self .quote :
483
467
return "```" + data + "```"
484
468
return data
485
-
486
- # backwards compatibility
487
- def getHeader (self ): # pylint: disable=C0116,C0103
488
- warnings .warn (
489
- "the getHeader() function will be deprecated soon. Please use get_header() instead" ,
490
- DeprecationWarning ,
491
- )
492
- return self .get_header ()
493
-
494
- def getBody (self ): # pylint: disable=C0116,C0103
495
- warnings .warn (
496
- "the getBody() function will be deprecated soon. Please use get_body() instead" ,
497
- DeprecationWarning ,
498
- )
499
- return self .get_body ()
500
-
501
- def getMarkdown (self ): # pylint: disable=C0116,C0103
502
- warnings .warn (
503
- "the getMarkdown() function will be deprecated soon. Please use get_markdown() instead" ,
504
- DeprecationWarning ,
505
- )
506
- return self .get_markdown ()
507
-
508
- def setParams (self , ** keywords ): # pylint: disable=C0116,C0103
509
- warnings .warn (
510
- "the setParams() function will be deprecated soon. Please use set_params() instead" ,
511
- DeprecationWarning ,
512
- )
513
- return self .set_params (** keywords )
0 commit comments