Mercurial > mozilla > hg > DocumentIt
annotate document_it.py @ 12:54e27f046cd2
more stubbing
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 02 Aug 2011 16:06:29 -0700 |
| parents | df6c2e71b87e |
| children | 1efb669ab1c8 |
| rev | line source |
|---|---|
| 0 | 1 #!/usr/bin/env python |
| 2 | |
| 3 """ | |
| 9 | 4 update MDN documentation from markdown |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
5 |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
6 see: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
7 http://developer.mindtouch.com/en/ref/MindTouch_API/POST%3Apages%2F%2F%7Bpageid%7D%2F%2Fcontents |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
8 |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
9 The manifest format is in the form: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
10 |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
11 mozrunner/README.txt https://developer.mozilla.org/en/Mozrunner |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
12 jsbridge/README.txt https://developer.mozilla.org/en/JSbridge |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
13 mozmill/README.txt https://developer.mozilla.org/en/Mozmill |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
14 mozmill/docs/ https://developer.mozilla.org/en/Mozmill/ |
| 9 | 15 |
| 16 --dest sets the destination, e.g. | |
| 17 | |
| 18 --dest http://developer.mozilla.org/ | |
| 19 --dest https://developer-stage9.mozilla.org/jhammel | |
| 20 --dest path/to directory | |
| 21 | |
| 22 By default, a new temporary directory will be created | |
| 0 | 23 """ |
| 24 | |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
25 import optparse |
| 0 | 26 import os |
| 27 import sys | |
| 9 | 28 import tempfile |
| 0 | 29 import urllib2 |
| 30 | |
| 31 # necessary imports | |
| 32 try: | |
| 33 import markdown | |
| 34 except ImportError: | |
| 35 raise ImportError("markdown is not installed, run (e.g.):\neasy_install Markdown") | |
| 36 | |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
37 DIR=os.path.dirname(os.path.abspath(__file__)) # XXX currently unused |
| 0 | 38 |
| 39 def find_readme(directory): | |
| 40 """find a README file in a directory""" | |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
41 # XXX currently unused |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
42 README=['README.md', 'README.txt', 'README'] |
| 0 | 43 for name in README: |
| 44 path = os.path.join(directory, name) | |
| 45 if os.path.exists(path): | |
| 46 return path | |
| 47 | |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
48 def parse_manifest(filename, directory=None): |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
49 """ |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
50 reads a documentation manifest; returns a list of two-tuples: |
| 6 | 51 [(filename, destination)] |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
52 """ |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
53 |
| 6 | 54 assert os.path.exists(filename) and os.path.isfile(filename), "%s not found" % filename |
| 55 | |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
56 if directory is None: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
57 directory = os.path.dirname(os.path.abspath(filename)) |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
58 lines = [line.strip() for line in file(filename).readlines()] |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
59 lines = [line for line in lines |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
60 if line and not line.startswith('#')] |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
61 items = [] |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
62 for line in lines: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
63 try: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
64 f, url = line.split() |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
65 # TODO: include options as third segment (e.g. format=ReST) |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
66 except ValueError: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
67 raise ValueError("illegal manifest line: '%s'" % line) |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
68 |
| 12 | 69 url = url.lstrip('/') # no leading /s |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
70 filename = os.path.join(directory, f) |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
71 if os.path.isdir(filename): |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
72 pass # TODO |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
73 else: |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
74 items.append((filename, url)) |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
75 return items |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
76 |
| 0 | 77 def main(args=sys.argv[1:]): |
| 78 | |
| 9 | 79 # default output directory |
| 80 default_dir = tempfile.mktemp() | |
| 81 | |
| 0 | 82 # parse command line options |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
83 usage = '%prog [options] manifest <manifest> <...>' |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
84 |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
85 # description formatter |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
86 class PlainDescriptionFormatter(optparse.IndentedHelpFormatter): |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
87 def format_description(self, description): |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
88 if description: |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
89 return description + '\n' |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
90 else: |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
91 return '' |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
92 |
|
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
93 parser = optparse.OptionParser(usage=usage, description=__doc__, formatter=PlainDescriptionFormatter()) |
| 0 | 94 parser.add_option('-d', '--directory', dest='directory', |
| 6 | 95 help='render the documentation from this directory') |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
96 parser.add_option('--dest', dest='dest', |
| 9 | 97 default=default_dir, |
| 98 help='base directory or URL of destination [DEFAULT: %default]') | |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
99 parser.add_option('-u', '--user', dest='user', |
|
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
100 help='user name') |
| 6 | 101 parser.add_option('--list', dest='list', action='store_true', default=False, |
| 102 help="list files") | |
| 9 | 103 parser.add_option('--validate', dest='validate', # TODO unused |
| 104 action='store_true', default=False, | |
| 105 help="validate the rendering but don't output") | |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
106 options, manifests = parser.parse_args(args) |
| 0 | 107 |
| 6 | 108 # print help if no manifests given |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
109 if not args: |
|
5
3464eda1af80
better formatting for command line
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
110 parser.print_help() |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
111 parser.exit() |
| 0 | 112 |
| 7 | 113 # get base url |
| 11 | 114 assert options.dest |
| 7 | 115 if '://' in options.dest: |
| 116 baseurl = options.dest | |
| 117 else: | |
| 118 baseurl = 'file://' + options.dest | |
| 119 | |
| 6 | 120 # read the manifests |
| 121 files = [] | |
| 122 for manifest in manifests: | |
| 11 | 123 for item in parse_manifest(manifest, options.directory): |
| 6 | 124 if item not in files: |
| 125 files.append(item) | |
| 126 if options.list: | |
| 127 for item in files: | |
| 7 | 128 print '%s -> %s/%s' % (item[0], baseurl.rstrip('/'), item[1].lstrip('/')) |
| 0 | 129 |
| 9 | 130 if not files: |
| 131 return # you're done | |
| 132 | |
| 0 | 133 # render and upload READMEs |
| 11 | 134 if baseurl.startswith('file://'): |
| 135 options.dest = baseurl[len('file://'):] # deals with --dest file:///foo from command line | |
| 8 | 136 |
| 11 | 137 # ensure a directory |
| 138 if os.path.exists(options.dest): | |
| 139 assert os.path.isdir(options.dest), "'%s' - not a directory" % options.dest | |
| 8 | 140 |
| 141 # TODO render to directory | |
| 9 | 142 for src, dest in files: |
| 143 dest = os.path.join(options.dest, dest) | |
| 11 | 144 |
| 145 # create a directory if needed | |
| 146 dirname = os.path.dirname(dest) | |
| 147 os.makedirs(dirname) | |
| 148 | |
| 149 # render | |
| 150 f = file(dest, 'w') | |
| 151 buffer = markdown.Markdown().convert(file(src).read()) | |
| 152 f.write(buffer) | |
| 153 f.close() | |
| 6 | 154 else: |
| 155 # TODO check credentials | |
| 12 | 156 for src, dest in files: |
| 157 pass | |
| 6 | 158 raise NotImplementedError |
|
4
550f4b240e20
make almost look like what we want to do
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
159 |
| 11 | 160 |
| 10 | 161 if options.dest == default_dir: |
| 11 | 162 print "Files rendered to\n%s" % default_dir |
| 9 | 163 |
| 0 | 164 if __name__ == '__main__': |
| 165 main() |
