Source code for sirepo.template.elegant_common

# -*- coding: utf-8 -*-
u"""Common values for elegant

:copyright: Copyright (c) 2017 RadiaSoft LLC.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from __future__ import absolute_import, division, print_function
from pykern.pkdebug import pkdp, pkdc, pkdlog
from sirepo.template import template_common
import os
import subprocess


#: Application name
SIM_TYPE = 'elegant'

#: Where to get files
RESOURCE_DIR = template_common.resource_dir(SIM_TYPE)


[docs]def sort_elements_and_beamlines(data): models = data['models'] data['models']['elements'] = sorted(models['elements'], key=lambda el: el['type']) data['models']['elements'] = sorted(models['elements'], key=lambda el: (el['type'], el['name'].lower())) data['models']['beamlines'] = sorted(models['beamlines'], key=lambda b: b['name'].lower())
[docs]def subprocess_env(): """Adds RPN_DEFNS to os.environ Returns: dict: copy of env """ res = os.environ.copy() res['RPN_DEFNS'] = str(RESOURCE_DIR.join('defns.rpn')) return res
[docs]def subprocess_output(cmd): """Run cmd and return output or None, logging errors. Args: cmd (list): what to run Returns: str: output is None on error else a stripped string """ err = None out = None try: p = subprocess.Popen( cmd, env=subprocess_env(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) out, err = p.communicate() if p.wait() != 0: raise subprocess.CalledProcessError(returncode=p.returncode, cmd=cmd) except subprocess.CalledProcessError as e: pkdlog('{}: exit={} err={}', cmd, e.returncode, err) return None if out != None and len(out): return out.strip() return ''