source: orange/orange/doc/doc_statistics.py @ 8042:ffcb93bc9028

Revision 8042:ffcb93bc9028, 3.9 KB checked in by markotoplak, 3 years ago (diff)

Hierarchical clustering: also catch RuntimeError when importing matplotlib (or the documentation could not be built on server).

  • Property exe set to *
Line 
1import orngEnviron
2import glob
3import os.path
4import sys
5
6test_type = "orange" if len(sys.argv) < 2 else sys.argv[1]
7if test_type in ["orange", "orng"]:
8    orange_dir = orngEnviron.orangeDir
9    module_head = "orng"
10elif test_type == "obi":
11    orange_dir = orngEnviron.addOnsDirSys + "/Bioinformatics"
12    if not os.path.exists(orange_dir):
13        orange_dir = os.path.split(orngEnviron.orangeDir)[0] + "/Bioinformatics"
14    if not os.path.exists(orange_dir):
15        orange_dir = os.path.split(orngEnviron.orangeDir)[0] + "/bioinformatics"
16    module_head = "obi"
17elif test_type == "text":
18    orange_dir = orngEnviron.addOnsDirSys + "/Text"
19    module_head = "orng"
20else:
21    print "Error: wrong arguments"
22    print "%s [orng|obi|text]"
23    sys.exit(1)
24
25# utility functions
26
27def pp_names(names, lead="   ", cols=80, sep=", "):
28    """Pretty-print list of names."""
29    buffer = []
30    for name in names:
31        if (len(lead) + len(sep.join(buffer))) > cols:
32            print "%s%s" % (lead, sep.join(buffer))
33            buffer = []
34        buffer.append(name)
35    print "%s%s" % (lead, sep.join(buffer))
36
37# compile a list of Orange modules, check for their documentation
38
39modules = [os.path.basename(m)[:-3] for m in glob.glob(orange_dir + "/%s*.py" % module_head)]
40module_docs = [os.path.basename(m)[:-4] for m in glob.glob(orange_dir + "/doc/modules/*.htm")]
41not_documented = [m for m in modules if m not in module_docs]
42documented = [m for m in modules if m in module_docs]
43
44print "DOCUMENTATION OF MODULES"
45print "There are %d modules, %d with documentation" % (len(modules), len(documented)) 
46print "Of %d modules, %d are not documented:" % (len(modules), len(not_documented))
47pp_names(sorted(not_documented))
48
49# compile a list of scripts for regression testing
50
51def collect_documentation_scripts(basedir, dir):
52    """Return a list of documentation scripts in a specific directory"""
53    excl_name = "%s/%s/exclude-from-regression.txt" % (basedir, dir)
54    exclude_files = [line.rstrip() for line in file(excl_name).readlines()] if os.path.exists(excl_name) else []
55    names = [os.path.basename(m) for m in glob.glob("%s/%s/*.py" % (basedir, dir))]
56    return [n for n in names if n not in exclude_files]
57
58def collect_imports(dir, scriptname):
59    """For script name return the list of names of imported documentation modules"""
60    names = []
61    for scriptname in file("%s/%s" % (dir, scriptname)).readlines():
62        if scriptname.startswith("import "):
63            names.extend(scriptname[7:].rstrip().replace(" ", "").split(","))
64        if scriptname.startswith("from ") and "import" in scriptname:
65            names.extend(scriptname[5:scriptname.index("import")].replace(" ", "").split(","))
66    return set([n for n in names if n in modules])
67
68class DocScript:
69    """Stores info on documentation script."""
70    def __init__(self, **karg):
71        self.__dict__.update(karg)
72        self.modules = set()
73    def __str__(self):
74        return "%s/%s" % (dir, name)
75   
76print
77print "REGRESSION TESTING SCRIPTS"
78
79print "Regression scripts for documentation section:"
80scripts = {}
81exclude_dirs = set([".svn", "datasets", "widgets"])
82script_dirs = [f for f in os.listdir(orange_dir + "/doc") if os.path.isdir(orange_dir + "/doc/" + f) and f not in exclude_dirs]
83for dir in script_dirs:
84    ms = dict([((dir, name), DocScript(name=name, dir=dir)) for name in collect_documentation_scripts(orange_dir + "/doc", dir)])
85    print "   %-10s %d" % (dir, len(ms))
86    scripts.update(ms)
87
88for (_, script), info in scripts.items():
89    info.modules.update(collect_imports(orange_dir + "/doc/" + info.dir, script))
90
91module_scripts = {}
92for info in scripts.values():
93    for m in info.modules:
94        module_scripts.setdefault(m, []).append(info.name)
95       
96module2nscripts = dict([(m, len(ss)) for m, ss in module_scripts.items()])
97
98print "Regression scripts that use a specific documented module:"
99for (n, m) in sorted([(module2nscripts.get(m, 0), m) for m in documented]):
100    print "   %-15s %d" % (m, n)
Note: See TracBrowser for help on using the repository browser.