13
13
$ ./validate_docstrings.py
14
14
$ ./validate_docstrings.py pandas.DataFrame.head
15
15
"""
16
+
16
17
from __future__ import annotations
17
18
18
19
import argparse
69
70
}
70
71
ALL_ERRORS = set (NUMPYDOC_ERROR_MSGS ).union (set (ERROR_MSGS ))
71
72
duplicated_errors = set (NUMPYDOC_ERROR_MSGS ).intersection (set (ERROR_MSGS ))
72
- assert not duplicated_errors , (f"Errors { duplicated_errors } exist in both pandas "
73
- "and numpydoc, should they be removed from pandas?" )
73
+ assert not duplicated_errors , (
74
+ f"Errors { duplicated_errors } exist in both pandas "
75
+ "and numpydoc, should they be removed from pandas?"
76
+ )
74
77
75
78
76
79
def pandas_error (code , ** kwargs ):
@@ -257,7 +260,7 @@ def pandas_validate(func_name: str):
257
260
pandas_error (
258
261
"SA05" ,
259
262
reference_name = rel_name ,
260
- right_reference = rel_name [len ("pandas." ):],
263
+ right_reference = rel_name [len ("pandas." ) :],
261
264
)
262
265
for rel_name in doc .see_also
263
266
if rel_name .startswith ("pandas." )
@@ -365,17 +368,18 @@ def print_validate_all_results(
365
368
for func_name , res in result .items ():
366
369
error_messages = dict (res ["errors" ])
367
370
actual_failures = set (error_messages )
368
- expected_failures = (ignore_errors .get (func_name , set ())
369
- | ignore_errors .get (None , set ()))
371
+ expected_failures = ignore_errors .get (func_name , set ()) | ignore_errors .get (
372
+ None , set ()
373
+ )
370
374
for err_code in actual_failures - expected_failures :
371
375
sys .stdout .write (
372
- f' { prefix } { res [" file" ]} :{ res [" file_line" ]} :'
373
- f' { err_code } :{ func_name } :{ error_messages [err_code ]} \n '
376
+ f" { prefix } { res [' file' ]} :{ res [' file_line' ]} :"
377
+ f" { err_code } :{ func_name } :{ error_messages [err_code ]} \n "
374
378
)
375
379
exit_status += 1
376
380
for err_code in ignore_errors .get (func_name , set ()) - actual_failures :
377
381
sys .stdout .write (
378
- f' { prefix } { res [" file" ]} :{ res [" file_line" ]} :'
382
+ f" { prefix } { res [' file' ]} :{ res [' file_line' ]} :"
379
383
f"{ err_code } :{ func_name } :"
380
384
"EXPECTED TO FAIL, BUT NOT FAILING\n "
381
385
)
@@ -384,8 +388,9 @@ def print_validate_all_results(
384
388
return exit_status
385
389
386
390
387
- def print_validate_one_results (func_name : str ,
388
- ignore_errors : dict [str , set [str ]]) -> int :
391
+ def print_validate_one_results (
392
+ func_name : str , ignore_errors : dict [str , set [str ]]
393
+ ) -> int :
389
394
def header (title , width = 80 , char = "#" ) -> str :
390
395
full_line = char * width
391
396
side_len = (width - len (title ) - 2 ) // 2
@@ -396,15 +401,18 @@ def header(title, width=80, char="#") -> str:
396
401
397
402
result = pandas_validate (func_name )
398
403
399
- result ["errors" ] = [(code , message ) for code , message in result ["errors" ]
400
- if code not in ignore_errors .get (None , set ())]
404
+ result ["errors" ] = [
405
+ (code , message )
406
+ for code , message in result ["errors" ]
407
+ if code not in ignore_errors .get (None , set ())
408
+ ]
401
409
402
410
sys .stderr .write (header (f"Docstring ({ func_name } )" ))
403
411
sys .stderr .write (f"{ result ['docstring' ]} \n " )
404
412
405
413
sys .stderr .write (header ("Validation" ))
406
414
if result ["errors" ]:
407
- sys .stderr .write (f' { len (result [" errors" ])} Errors found for `{ func_name } `:\n ' )
415
+ sys .stderr .write (f" { len (result [' errors' ])} Errors found for `{ func_name } `:\n " )
408
416
for err_code , err_desc in result ["errors" ]:
409
417
sys .stderr .write (f"\t { err_code } \t { err_desc } \n " )
410
418
else :
@@ -431,14 +439,16 @@ def _format_ignore_errors(raw_ignore_errors):
431
439
raise ValueError (
432
440
f"Object `{ obj_name } ` is present in more than one "
433
441
"--ignore_errors argument. Please use it once and specify "
434
- "the errors separated by commas." )
442
+ "the errors separated by commas."
443
+ )
435
444
ignore_errors [obj_name ] = set (error_codes .split ("," ))
436
445
437
446
unknown_errors = ignore_errors [obj_name ] - ALL_ERRORS
438
447
if unknown_errors :
439
448
raise ValueError (
440
449
f"Object `{ obj_name } ` is ignoring errors { unknown_errors } "
441
- f"which are not known. Known errors are: { ALL_ERRORS } " )
450
+ f"which are not known. Known errors are: { ALL_ERRORS } "
451
+ )
442
452
443
453
# global errors "PR02,ES01"
444
454
else :
@@ -448,27 +458,19 @@ def _format_ignore_errors(raw_ignore_errors):
448
458
if unknown_errors :
449
459
raise ValueError (
450
460
f"Unknown errors { unknown_errors } specified using --ignore_errors "
451
- "Known errors are: {ALL_ERRORS}" )
461
+ "Known errors are: {ALL_ERRORS}"
462
+ )
452
463
453
464
return ignore_errors
454
465
455
466
456
- def main (
457
- func_name ,
458
- output_format ,
459
- prefix ,
460
- ignore_deprecated ,
461
- ignore_errors
462
- ):
467
+ def main (func_name , output_format , prefix , ignore_deprecated , ignore_errors ):
463
468
"""
464
469
Main entry point. Call the validation for one or for all docstrings.
465
470
"""
466
471
if func_name is None :
467
472
return print_validate_all_results (
468
- output_format ,
469
- prefix ,
470
- ignore_deprecated ,
471
- ignore_errors
473
+ output_format , prefix , ignore_deprecated , ignore_errors
472
474
)
473
475
else :
474
476
return print_validate_one_results (func_name , ignore_errors )
@@ -524,10 +526,11 @@ def main(
524
526
args = argparser .parse_args (sys .argv [1 :])
525
527
526
528
sys .exit (
527
- main (args .function ,
528
- args .format ,
529
- args .prefix ,
530
- args .ignore_deprecated ,
531
- _format_ignore_errors (args .ignore_errors ),
532
- )
529
+ main (
530
+ args .function ,
531
+ args .format ,
532
+ args .prefix ,
533
+ args .ignore_deprecated ,
534
+ _format_ignore_errors (args .ignore_errors ),
535
+ )
533
536
)
0 commit comments