1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 """
18 ==================
19 API doc builders
20 ==================
21
22 API doc builders.
23 """
24 __author__ = u"Andr\xe9 Malo"
25 __docformat__ = "restructuredtext en"
26
27 import os as _os
28 import re as _re
29
30 from _setup import shell as _shell
31 from _setup import term as _term
32
33
34 _VERSION_SEARCH = _re.compile(
35 r'\bversion\s+(?P<major>\d+)\.(?P<minor>\d+)'
36 ).search
38 """ Run epydoc """
39
40 prog = kwargs.get('epydoc') or 'epydoc'
41 if not _os.path.dirname(_os.path.normpath(prog)):
42 prog = _shell.frompath(prog)
43 if not prog:
44 _term.red("%(epydoc)s not found",
45 epydoc=kwargs.get('epydoc') or 'epydoc',
46 )
47 return False
48
49 version = _VERSION_SEARCH(_shell.spawn(prog, "--version", stdout=True))
50 if version is not None:
51 try:
52 version = tuple(map(int, version.group('major', 'minor')))
53 except (TypeError, ValueError):
54 version = None
55 if version is None:
56 _term.red("%(prog)s version not recognized" % locals())
57 return False
58
59 if version < (3, 0):
60 _term.red("%(prog)s is too old %(version)r < (3, 0)" % locals())
61 return False
62
63 env = dict(_os.environ)
64
65 prepend = kwargs.get('prepend')
66 if prepend:
67 toprepend = _os.pathsep.join(map(str, prepend))
68 if 'PYTHONPATH' in env:
69 env['PYTHONPATH'] = _os.pathsep.join(toprepend, env['PYTHONPATH'])
70 else:
71 env['PYTHONPATH'] = toprepend
72
73 append = kwargs.get('append')
74 if append:
75 toappend = _os.pathsep.join(map(str, append))
76 if 'PYTHONPATH' in env:
77 env['PYTHONPATH'] = _os.pathsep.join(env['PYTHONPATH'], toappend)
78 else:
79 env['PYTHONPATH'] = toappend
80
81 moreenv = kwargs.get('env')
82 if moreenv:
83 env.update(moreenv)
84
85 config = kwargs.get('config') or _shell.native('docs/epydoc.conf')
86
87 argv = [prog, '--config', config]
88 return not _shell.spawn(*argv, **{'env': env})
89