diff options
| author | Julian Andres Klode <jak@debian.org> | 2009-07-24 19:37:48 +0200 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2009-07-24 19:37:48 +0200 |
| commit | 93b79ada84fb8f27c2f9c124b2ea9ed87864d967 (patch) | |
| tree | c8e27aa02f648dae3d45c62c8efb5d3b11346e5b | |
| parent | 7a30c8bb4b70f42cc268b4b3a75dab5b414146c4 (diff) | |
| download | python-apt-93b79ada84fb8f27c2f9c124b2ea9ed87864d967.tar.gz | |
utils/doclint.py: Add a script to check the documentation.
| -rw-r--r-- | utils/doclint.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/utils/doclint.py b/utils/doclint.py new file mode 100644 index 00000000..a387b05f --- /dev/null +++ b/utils/doclint.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +# Documentation lint. +# Copyright (C) 2009 Julian Andres Klode <jak@debian.org> +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. +# +# This comes without any warranty. +"""Read the pickle file created by sphinx and check it.""" + +from __future__ import with_statement +import cPickle +import os +import sys + + +def handle(filename): + with open(filename) as fobj: + index = cPickle.load(fobj) + + objects = index['descrefs'] + modules = index['modules'] + types = index['desctypes'] + + for modname in modules: + module = __import__(modname, fromlist=["*"]) + + for modmember in objects[modname]: + if not modmember in module.__dict__: + print 'W: Unknown', modname + '.' + modmember + elif types[objects[modname][modmember][1]] == u'class': + if modname + '.' + modmember not in objects: + print 'I: No members', modname + '.' + modmember + continue + for member in objects.get(modname + '.' + modmember): + if not member in dir(module.__dict__[modmember]): + print 'W: Unknown', modname + '.' + modmember + '.' + member + + assert(types[objects[modname+"."+modmember][member][1]] in ('method', 'attribute')) + + all = getattr(module, '__all__', []) + for modmember in dir(module): + if getattr(module.__dict__[modmember], "__module__", modname) != modname: + continue + if isinstance(module.__dict__[modmember], type(module)): + continue + if modmember.startswith("_"): + continue + if not modmember in objects[modname] and (not all or modmember in all): + print 'E: Missing', modname + '.' + modmember + elif not modmember in objects[modname]: + print 'W: Missing', modname + '.' + modmember + elif types[objects[modname][modmember][1]] == u'class': + for member in dir(module.__dict__[modmember]): + if member.startswith("_"): + continue + try: + contin = False + for base in module.__dict__[modmember].__bases__: + if member in dir(base): + contin = True + if contin: + continue + except: + pass + if not member in objects.get(modname + '.' + modmember, ""): + print 'E: Missing', modname + '.' + modmember + '.' + member + + +if __name__ == '__main__': + scriptdir = os.path.dirname(__file__) + parentdir = os.path.join(scriptdir, "..") + directory = os.path.join(parentdir, "doc", "build", "pickle") + directory = os.path.normpath(directory) + sys.path.insert(0, os.path.abspath(parentdir)) + handle(os.path.join(directory, "searchindex.pickle")) |
