Contains the mechanism to evaluate whether to use or not a catalog

class DIRAC.Resources.Catalog.FCConditionParser.FCConditionParser(vo=None, ro_methods=None)

Bases: object

This objects allows to evaluate conditions on whether or not a given operation should be evaluated on a given catalog for a given lfn (be glad so many things are given to you !).

The conditions are expressed as boolean logic, where the basic bloc has the form “pluginName=whateverThatWillBePassedToThePlugin”. The basic blocs will be evaluated by the respective plugins, and the result can be combined using the standard boolean operators:

  • ! for not

  • & for and

  • | for or

  • [ ] for prioritizing the operations

All these characters, as well as the ‘=’ symbol cannot be used in any expression to be evaluated by a plugin.

The rule to evaluate can either be given at calling time, or can be retrieved from the CS depending on the context (see doc of __call__ and __getConditionFromCS)

Example of rules are:

  • Filename=startswith(‘/lhcb’) & Proxy=voms.has(/lhcb/Role->production)

  • [Filename=startswith(‘/lhcb’) & !Filename=find(‘/user/’)] | Proxy=group.in(lhcb_mc, lhcb_data)

class PluginOperand(tokens)

Bases: object

This class is a wrapper for a plugin and it’s condition It is instantiated by pyparsing every time it encounters “plugin=condition”


tokens – [ pluginName, =, conditions ] the pluginName is automatically prepended with ‘Plugin’


Forward the evaluation call to the plugin


**kwargs – contains all the information given to the plugin namely the lfns


True or False

__init__(vo=None, ro_methods=None)

vo – name of the VO