X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=gen-sitemap.py;h=333069f0122df57fdad96776356d9ed175467509;hb=3b607b20bbfbc5b8a2282d57b4c1f99f07f9d272;hp=d57d42230f4721c19d891f3749c8f2e1fd1c50b6;hpb=83323dad7ee3deefd87858aa5d93e0bef16c65ae;p=phdru.name%2Fphdru.name.git diff --git a/gen-sitemap.py b/gen-sitemap.py index d57d422..333069f 100755 --- a/gen-sitemap.py +++ b/gen-sitemap.py @@ -3,19 +3,86 @@ import argparse from fnmatch import fnmatch import os +from news import write_if_changed parser = argparse.ArgumentParser(description='Generate sitemap') +parser.add_argument('-x', '--exclude', action='append', + help='exclude directories (pattern)') parser.add_argument('root_dir', help='Root dicrectory') args = parser.parse_args() +exclude = [] +if args.exclude: + for pat in args.exclude: + exclude.append(pat) + if not pat.endswith('/*'): + exclude.append(pat + '/*') + os.chdir(args.root_dir) fullpath = os.getcwd() fp_len = len(fullpath) +tree = ('', []) +current_subtree = tree[1] +save_level = 0 + for dirpath, dirs, files in sorted(os.walk(fullpath)): - dirpath = dirpath[fp_len:] - if not dirpath: - continue - parts = dirpath.split('/') - level = len(parts) - 2 - print ' ' * level + parts[-1] + try: + dirpath = dirpath[fp_len:] + if not dirpath: + continue + for pat in exclude: + if fnmatch(dirpath, pat): + raise StopIteration + parts = dirpath.split('/') + level = len(parts) - 2 + if level < save_level: + current_subtree = tree[1] + for i in range(level): + current_subtree = current_subtree[-1][1] + elif level > save_level: + assert level - save_level == 1 + current_subtree = current_subtree[-1][1] + #else: # level == save_level: + current_subtree.append((parts[-1], [])) + save_level = level + except StopIteration: + pass + +def _tree2html(tree, level=0): + subparts = [] + indent = " " * (level + 1) + for title, subtree in tree: + if subtree: + subparts.append(indent + "
  • %s" % title) + subparts.append(_tree2html(subtree, level+2)) + subparts.append(indent + "
  • ") + else: + subparts.append(indent + "
  • %s
  • " % title) + s = "\n".join(subparts) + + parts = [] + indent = " " * level + parts.append(indent + "") + + return "\n".join(parts) + +sitemap_tmpl = ["""\ +#extends phd_site +#implements respond +#attr $Title = 'Sitemap' +#attr $Copyright = 2015 +## +#def body_html +"""] + +sitemap_tmpl.append(_tree2html(tree[1])) + +sitemap_tmpl.append(""" +#end def +$phd_site.respond(self) +""") + +write_if_changed("sitemap.tmpl", ''.join(sitemap_tmpl))