# coding: utf8 # vim: set et ts=4 sw=4 sts mouse=a fdm=indent: import os import sys import subprocess import re import numpy as np from lxml import etree def get_package_version(): p = subprocess.run(["git describe|sed 's/-/.post/'|cut -d'-' -f1"], shell=True, stdout=subprocess.PIPE) full_version = p.stdout.decode('utf-8').strip() versions = full_version.split('.post') version = versions[0] dev_version = "" if len(versions) > 1: dev_version = versions[1] return version, dev_version def generate_download_page(): full_version = '.post'.join(get_package_version()).strip('.post') setupfile_path = '../../package/MsSpec-{}.setup'.format(full_version) docfile_path = '../../package/MsSpec-{}.pdf'.format(full_version) with open('downloads.rst', 'w') as fd: content=""" ########################## Download and install notes ########################## click :download:`here <{}>` to download the last version of MsSpec and :download:`here <{}>` for this website as a single pdf file .. include:: install_notes.inc """.format(setupfile_path, docfile_path) fd.write(content) def modify_banner(): version, dev_version = get_package_version() xml = etree.parse('./title.svg') old_content = etree.tostring(xml) svg = xml.getroot() elements = svg.findall(".//{http://www.w3.org/2000/svg}tspan") for element in elements: tid = element.get('id') if tid.startswith('msspec_version'): element.text = version if tid.startswith('dev_version'): if dev_version: element.text = "post release: " + dev_version else: element.text = "" new_content = etree.tostring(xml).decode('utf-8') if new_content != old_content: with open('./title.svg', 'w') as fd: fd.write(new_content) def generate_parameters(spectroscopy=None): def get_content(all_parameters): content = "" for p in all_parameters: content += ".. _{0}-{1}:\n\n".format(group.lower(), p.name) content += "{0}\n{1}\n\n".format(p.name, "-"*len(p.name)) content += ".. admonition:: details\n\n" table = ("\n.. csv-table::\n" "\t:widths: 100, 100\n\n") table += "\t\"*Types*\", \"{}\"\n".format(', '.join([_.__name__ for _ in p.allowed_types])) table += "\t\"*Limits*\", \"{} <= value <= {}\"\n".format(str(p.low_limit), str(p.high_limit)) table += "\t\"*Unit*\", \"{}\"\n".format(str(p.unit)) if type(p.allowed_values) in (tuple, list, np.ndarray): table += "\t\"*Allowed values*\", \"{}\"\n".format(', '.join([str(_) for _ in p.allowed_values])) else: table += "\t\"*Allowed values*\", \"{}\"\n".format(str(p.allowed_values)) table += "\t\"*Default*\", \"{}\"\n".format(str(p.default)) table += "\n\n\n\n" content += table.replace('\n', '\n\t') content += "{}\n\n\n\n".format(p.docstring) return content content = "" from msspec.calculator import MSSPEC c = MSSPEC(spectroscopy='PED' if spectroscopy==None else spectroscopy) c.shutdown() allp = {} for p in c.get_parameters(): if p.group not in allp.keys(): allp[p.group] = [] if not(p.private): allp[p.group].append(p) common_groups = ("GlobalParameters", "MuffintinParameters", "TMatrixParameters", "SourceParameters", "DetectorParameters", "ScanParameters", "CalculationParameters") if spectroscopy == None: groups = common_groups fn = 'spectroscopies/common_parameters.inc' for group in groups: title = "{}".format(group) content += "{1}\n{0}\n\n".format("=" * len(title), title) content += get_content(allp[group]) else: group = spectroscopy + 'Parameters' fn = 'spectroscopies/{0}/{0}_parameters.inc'.format(spectroscopy.lower()) title = "{}".format(group) content += "{1}\n{0}\n\n".format("=" * len(title), title) content += get_content(allp[group]) with open(fn, 'w') as fd: fd.write(content)