mirror of
https://github.com/LCPQ/quantum_package
synced 2024-11-08 07:03:57 +01:00
192 lines
4.5 KiB
Python
Executable File
192 lines
4.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
"""Updates the README.rst file as the include directive is disabled on GitHub."""
|
|
__date__ = "Thu Apr 3 23:06:18 CEST 2014"
|
|
__author__ = "Anthony Scemama<scemama@irsamc.ups-tlse.fr> & TApplencourt "
|
|
|
|
README = "README.rst"
|
|
Assum_key = "Assumptions\n===========\n"
|
|
Needed_key = "Needed Modules\n==============\n"
|
|
Doc_key = "Documentation\n=============\n"
|
|
Sentinel = "@@$%&@@"
|
|
URL = "http://github.com/LCPQ/quantum_package/tree/master/src/"
|
|
|
|
import os
|
|
import subprocess
|
|
from collections import namedtuple
|
|
import sys
|
|
|
|
"""
|
|
NEED to call in a module
|
|
First arg can be the root parent
|
|
"""
|
|
try:
|
|
ROOT_module = os.path.realpath(sys.argv[1])
|
|
except:
|
|
ROOT_module = os.getcwd()
|
|
|
|
if ROOT_module != os.getcwd():
|
|
change = True
|
|
else:
|
|
change = False
|
|
|
|
MODULE_NAME = os.path.basename(os.getcwd())
|
|
|
|
|
|
header = """
|
|
.. Do not edit this section. It was auto-generated from the
|
|
.. by the `update_README.py` script.
|
|
|
|
"""
|
|
|
|
|
|
def fetch_splitted_data():
|
|
"""Read the README.rst file and split it in strings:
|
|
* The documentation
|
|
* The needed modules
|
|
The result is given as a list of strings
|
|
"""
|
|
|
|
try:
|
|
with open(README, 'r') as f:
|
|
data = f.read()
|
|
except IOError:
|
|
return []
|
|
|
|
# Place sentinels
|
|
data = data.replace(Doc_key, Sentinel + Doc_key)
|
|
data = data.replace(Needed_key, Sentinel + Needed_key)
|
|
|
|
# Now Split data using the sentinels
|
|
result = data.split(Sentinel)
|
|
|
|
return result
|
|
|
|
|
|
def update_needed(data):
|
|
"""Read the NEEDED_CHILDREN_MODULES file, and replace the data with it.
|
|
Create the links to the GitHub pages."""
|
|
|
|
with open('NEEDED_CHILDREN_MODULES', 'r') as f:
|
|
modules = f.read()
|
|
|
|
header_image = ".. image:: tree_dependency.png\n\n"
|
|
|
|
if modules.strip():
|
|
modules = ['* `{0} <{1}>`_'.format(name, os.path.join(URL, name))
|
|
for name in modules.split()]
|
|
modules = "\n".join(modules)
|
|
modules = Needed_key + header + header_image + modules + '\n\n'
|
|
|
|
has_modules = False
|
|
for i in range(len(data)):
|
|
if data[i].startswith(Needed_key):
|
|
has_modules = True
|
|
data[i] = modules
|
|
|
|
if not has_modules:
|
|
data.append(modules)
|
|
|
|
return data
|
|
|
|
|
|
def extract_doc(item):
|
|
"""Extracts the documentation contained in IRPF90_man file"""
|
|
|
|
path = os.path.join(ROOT_module, "IRPF90_man/%s.l" % (item))
|
|
with open(path, 'r') as f:
|
|
l_line = f.readlines()
|
|
|
|
result = []
|
|
inside = False
|
|
for line in l_line:
|
|
if not inside:
|
|
inside = line.startswith(".SH Description")
|
|
else:
|
|
if line.startswith(".SH"):
|
|
break
|
|
result.append(" {0}".format(line.strip()))
|
|
|
|
if not result:
|
|
result = [" Undocumented"]
|
|
|
|
return "\n".join(result) + '\n'
|
|
|
|
|
|
def update_documentation(data):
|
|
"""Reads the BEGIN_DOC ... END_DOC blocks and builds the documentation"""
|
|
|
|
IRP_info = namedtuple('IRP_info', ["name", "file", "line"])
|
|
|
|
# If the file does not exist, don't do anything
|
|
|
|
path = os.path.join(ROOT_module, "tags")
|
|
|
|
with open(path, 'r') as f:
|
|
dump = f.readlines()
|
|
|
|
l_info = []
|
|
for i in dump:
|
|
name, f, ligne = i.split()
|
|
|
|
if not change and "/" not in i:
|
|
l_info.append(IRP_info(name, f, ligne))
|
|
elif change and MODULE_NAME in i:
|
|
l_info.append(IRP_info(name, f.split("/")[-1], ligne))
|
|
|
|
l_line = []
|
|
|
|
for irp in l_info:
|
|
url = os.path.join(URL, MODULE_NAME, irp.file)
|
|
doc = extract_doc(irp.name)
|
|
|
|
l_line += ["`{0} <{1}#L{2}>`_".format(irp.name, url, irp.line), doc,
|
|
""]
|
|
|
|
documentation = Doc_key + header + "\n".join(l_line)
|
|
|
|
has_doc = False
|
|
for i in range(len(data)):
|
|
if data[i].startswith(Doc_key):
|
|
has_doc = True
|
|
data[i] = documentation
|
|
|
|
if not has_doc:
|
|
data.append(documentation)
|
|
|
|
return data
|
|
|
|
|
|
def git_add():
|
|
"""Executes:
|
|
git add README.rst
|
|
throw an error if git is not precent"""
|
|
|
|
try:
|
|
# pipe output to /dev/null for silence
|
|
null = open("/dev/null", "w")
|
|
subprocess.Popen("git add README.rst", stdout=null, stderr=null)
|
|
null.close()
|
|
|
|
except OSError:
|
|
raise
|
|
|
|
|
|
def main():
|
|
data = fetch_splitted_data()
|
|
|
|
data = update_documentation(data)
|
|
data = update_needed(data)
|
|
output = ''.join(data)
|
|
|
|
with open(README, 'w') as f:
|
|
f.write(output)
|
|
|
|
try:
|
|
git_add()
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|