summaryrefslogtreecommitdiff
path: root/tests/builddocs.py
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-07-29 22:35:54 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-07-29 22:35:54 +0000
commit5002b44f2872f87785d34eee6f2cc9e7d410a797 (patch)
tree6de2228bd88344adaf87e1563412668d6a270253 /tests/builddocs.py
parent47ce61533a5364c6d45803a696d86cbcb1ed2b33 (diff)
Added tests.builddocs, which builds HTML documentation by introspecting the model unit tests
git-svn-id: http://code.djangoproject.com/svn/django/trunk@348 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/builddocs.py')
-rwxr-xr-xtests/builddocs.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/builddocs.py b/tests/builddocs.py
new file mode 100755
index 0000000000..191d62838a
--- /dev/null
+++ b/tests/builddocs.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+"""
+This module builds HTML documentation for models by introspecting the model
+unit tests.
+"""
+
+from django.core import meta, template
+import runtests
+import inspect, os, re, sys
+
+MODEL_DOC_TEMPLATE = """
+<div class="document" id="model-{{ model_name }}">
+
+<h1 class="title">{{ title }}</h1>
+{{ blurb }}
+
+<h2>Model source code</h2>
+<pre>{{ model_source }}</pre>
+
+<h2>Sample API usage</h2>
+<pre>{{ api_usage }}</pre>
+</div>
+"""
+
+def make_docs_from_model_tests(output_dir):
+ from django.conf import settings
+
+ # Manually set INSTALLED_APPS to point to the test app.
+ settings.INSTALLED_APPS = (runtests.APP_NAME,)
+
+ for model_name in runtests.get_test_models():
+ mod = meta.get_app(model_name)
+
+ # Clean up the title and blurb.
+ title, blurb = mod.__doc__.strip().split('\n', 1)
+ blurb = '<p>%s</p>' % blurb.strip().replace('\n\n', '</p><p>')
+ api_usage = mod.API_TESTS
+
+ # Get the source code of the model, without the docstring or the
+ # API_TESTS variable.
+ model_source = inspect.getsource(mod)
+ model_source = model_source.replace(mod.__doc__, '')
+ model_source = model_source.replace(mod.API_TESTS, '')
+ model_source = model_source.replace('""""""\n', '\n')
+ model_source = model_source.replace('API_TESTS = ', '')
+ model_source = model_source.strip()
+
+ # Run this through the template system.
+ t = template.Template(MODEL_DOC_TEMPLATE)
+ c = template.Context(locals())
+ html = t.render(c)
+
+ file_name = os.path.join(output_dir, 'model_' + model_name + '.html')
+ try:
+ fp = open(file_name, 'w')
+ except IOError:
+ sys.stderr.write("Couldn't write to %s.\n" % file_name)
+ continue
+ else:
+ fp.write(html)
+ fp.close()
+
+if __name__ == "__main__":
+ import sys
+ make_docs_from_model_tests(sys.argv[1])