| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | # -*- coding: utf-8 -*-## This script parses the README.md and generates a machine-readable# data structure from it, for publication as an API.## https://springload.github.io/awesome-wagtail/api/v1/readme.json## It is automatically ran as part of Travis builds, also validating the README# formatting, and the API endpoint is deployed on successful builds on master.## See also:# - https://djangopackages.org/api/v3/grids/wagtail-cms/# - https://github.com/awesomerank/rankfrom __future__ import absolute_import, unicode_literalsimport jsonimport codecsimport datetimeAPI_PATH = '/api/v1/readme.json'def parse_line(line, category):    print(line)    name = line.split('](')[0][3:]    url = line.split('](')[1].split(')')[0]    description = '' if line[-1] == ')' else line.split(') ')[1][2:]    return {        'name': name,        'description': description,        'url': url,        'category': category,    }def parse_section(section, category=''):    return [parse_line(l, category) for l in section.split('\n')]def parse_subsections(section):    subsections = section.split('### ')[1:]    items = []    for subsection in subsections:        split_section = subsection.split('\n\n')        section_title = split_section[0]        items += parse_section(split_section[1], section_title)    return itemsdef cut_section(start):    return readme.split('## %s\n\n' % start)[1].split('\n\n## ')[0]def parse_readme(readme):    return {        'apps': parse_subsections(cut_section('Apps')),        'tools': parse_subsections(cut_section('Tools')),        'resources': parse_subsections(cut_section('Resources')),        'sites': parse_section(cut_section('Open-source sites')),        'metadata': {            'updated': '%sZ' % datetime.datetime.utcnow().isoformat(),        },    }if __name__ == '__main__':    readme = open('README.md', 'r').read()    try:        parsed_readme = parse_readme(readme)        json_path = './dist%s' % API_PATH        with codecs.open(json_path, mode='w+', encoding='utf8') as f:            readme_payload = json.dumps(parsed_readme, indent=True, ensure_ascii=False)            print(readme_payload)            f.write(readme_payload)    except:        print('Is the README well formatted?')        raise
 |