#!/usr/bin/env python import yaml import re from os.path import dirname, abspath, join PROJECT_ROOT = dirname(dirname(abspath(__file__))) DOCS_ROOT = join(PROJECT_ROOT, 'docs/') MKDOCS_YAML_FILE = join(PROJECT_ROOT, 'mkdocs.yml') OUTPUT_FILE = join(DOCS_ROOT, 'hooks/', 'list.md') HEADER = """# All hooks <!-- -- DO NOT EDIT -- -- This entire page is auto-generated by the following command: -- ./bin/hook-summary.py -- --> This is an overview list of all available hooks, listed by category. """ def findBetween( s, first, last ): start = s.index( first ) + len( first ) end = s.index( last, start ) return s[start:end] def getSummary(hookFile): content = open(join(DOCS_ROOT + hookFile), 'r').read() summary = findBetween(content, '## Summary', '##') summary = re.sub('This hook (is)?(was)?', '', summary) summary = re.sub('\s+', ' ', summary).strip() if not (summary.endswith('.')): summary = summary + '.' return summary output = f = open(OUTPUT_FILE, 'w') with open(MKDOCS_YAML_FILE, 'r') as f: doc = yaml.load(f) pages = doc["pages"] for section in pages: if "Hooks" in section: hookSection = section.get("Hooks") output.write(HEADER) for section in hookSection: categoryHooks = list() category, hookList = section.popitem() if isinstance(hookList, list): for hookDetails in hookList: hookName = hookDetails.iterkeys().next() if re.match("^(<del>)?hook_civicrm_*", hookName): categoryHooks.append(hookDetails) if len(categoryHooks) > 0: output.write('\n## {}\n\n'.format(category)) for hookDetails in categoryHooks: hookName, hookFile = hookDetails.popitem() summary = getSummary(hookFile) output.write('* **[{}](/{})** - {}\n'.format(hookName, hookFile, summary))