14
14
$ ./validate_docstrings.py pandas.DataFrame.head
15
15
"""
16
16
import os
17
- import subprocess
18
17
import sys
19
18
import json
20
19
import re
25
24
import inspect
26
25
import importlib
27
26
import doctest
28
-
29
27
try :
30
28
from io import StringIO
31
29
except ImportError :
42
40
from numpydoc .docscrape import NumpyDocString
43
41
from pandas .io .formats .printing import pprint_thing
44
42
43
+
45
44
PRIVATE_CLASSES = ['NDFrame' , 'IndexOpsMixin' ]
46
45
DIRECTIVES = ['versionadded' , 'versionchanged' , 'deprecated' ]
47
46
@@ -530,16 +529,15 @@ def validate_one(func_name):
530
529
if examples_errs :
531
530
errs .append ('Examples do not pass tests' )
532
531
533
- return ({'type' : doc .type ,
534
- 'docstring' : doc .clean_doc ,
535
- 'deprecated' : doc .deprecated ,
536
- 'file' : doc .source_file_name ,
537
- 'file_line' : doc .source_file_def_line ,
538
- 'github_link' : doc .github_url ,
539
- 'errors' : errs ,
540
- 'warnings' : wrns ,
541
- 'examples_errors' : examples_errs },
542
- doc )
532
+ return {'type' : doc .type ,
533
+ 'docstring' : doc .clean_doc ,
534
+ 'deprecated' : doc .deprecated ,
535
+ 'file' : doc .source_file_name ,
536
+ 'file_line' : doc .source_file_def_line ,
537
+ 'github_link' : doc .github_url ,
538
+ 'errors' : errs ,
539
+ 'warnings' : wrns ,
540
+ 'examples_errors' : examples_errs }
543
541
544
542
545
543
def validate_all ():
@@ -600,15 +598,10 @@ def header(title, width=80, char='#'):
600
598
full_line = full_line , title_line = title_line )
601
599
602
600
if func_name is None :
603
- flake8 = _call_flake8_plugin ()
604
- if flake8 :
605
- fd .write ('Flake8 reported issues:\n ' )
606
- fd .write (flake8 )
607
-
608
601
json_doc = validate_all ()
609
602
fd .write (json .dumps (json_doc ))
610
603
else :
611
- doc_info , doc = validate_one (func_name )
604
+ doc_info = validate_one (func_name )
612
605
613
606
fd .write (header ('Docstring ({})' .format (func_name )))
614
607
fd .write ('{}\n ' .format (doc_info ['docstring' ]))
@@ -622,40 +615,14 @@ def header(title, width=80, char='#'):
622
615
for wrn in doc_info ['warnings' ]:
623
616
fd .write ('\t {}\n ' .format (wrn ))
624
617
625
- flake8 = _call_flake8_plugin (doc .source_file_name )
626
- if flake8 :
627
- fd .write ('Flake8 reported issues:\n ' )
628
- fd .write (flake8 )
629
-
630
- if not doc_info ['errors' ] and not flake8 :
618
+ if not doc_info ['errors' ]:
631
619
fd .write ('Docstring for "{}" correct. :)\n ' .format (func_name ))
632
620
633
621
if doc_info ['examples_errors' ]:
634
622
fd .write (header ('Doctests' ))
635
623
fd .write (doc_info ['examples_errors' ])
636
624
637
625
638
- def _call_flake8_plugin (* source_file_name ):
639
- sub_cmds = (['flake8' , '--doctest' , * source_file_name ],
640
- ['flake8-rst' , * source_file_name ])
641
-
642
- check_output = [_check_output_safe (sub_cmd ) for sub_cmd in sub_cmds ]
643
- output = [output for output in check_output if output ]
644
- return '\n \n ' .join (output ) if output else None
645
-
646
-
647
- def _check_output_safe (sub_cmd ):
648
- try :
649
- output = subprocess .check_output (sub_cmd )
650
- except subprocess .CalledProcessError as e :
651
- output = e .output
652
- if output :
653
- return '\n ' .join (['Invoking command "{}" returned:'
654
- .format (' ' .join (sub_cmd )), output .decode ("utf-8" )])
655
- else :
656
- return None
657
-
658
-
659
626
if __name__ == '__main__' :
660
627
func_help = ('function or method to validate (e.g. pandas.DataFrame.head) '
661
628
'if not provided, all docstrings are validated and returned '
0 commit comments