6 from __future__
import print_function
9 from AthenaCommon.Utils.unixtools
import find_datafile
11 class T(lark.Transformer):
16 locations = [_
for _
in tok
if isinstance(_, lark.Tree)
and _.data ==
'location']
17 if len(locations) > 1:
18 raise ValueError(f
'More than one location given for reference {tok[0].children[0]}')
19 if len(locations) > 0:
20 locs = locations[0].children[0].
split(
',')
22 locs = [_.children[0]
for _
in tok
if isinstance(_, lark.Tree)
and _.data ==
'file']
23 afspaths = [_
for _
in locs
if _.startswith(
'/afs')]
25 raise ValueError(
'A reference location for a production han configuration is given with an AFS path\n'
26 f
'Offending path is {",".join(afspaths)} of reference {tok[0].children[0]}')
27 eospaths = [_
for _
in locs
if _.startswith(
'/eos')]
28 xrootdpaths = [_
for _
in locs
if _.startswith(
'root://')]
29 if len(eospaths) != len(xrootdpaths):
30 raise ValueError(f
'Backup xrootd locations must be given for references with EOS paths for reference {tok[0].children[0]}\n'
31 f
'Given EOS paths are {",".join(eospaths)}\n'
32 f
'Given xrootd paths are {",".join(xrootdpaths)}')
37 if grammarfile
is None:
38 raise OSError(f
'Unable to find file parser configuration file')
40 parser = lark.Lark(grammar, parser=
'lalr', lexer=
'contextual', transformer=
T())
44 tree = parser.parse(infile)
47 except Exception
as e: