"""
  Defines the plugin to perform evaluation on the lfn name
"""
__RCSID__ = "$Id $"

from DIRAC.Resources.Catalog.ConditionPlugins.FCConditionBasePlugin import FCConditionBasePlugin


class FilenamePlugin( FCConditionBasePlugin ):
  """
     This plugin is to be used when filtering based on the LFN name
  """

  def __init__( self, conditions ):
    """ the condition can be any method of the python string object that can be evaluated
        as True or False:

          * endswith
          * find
          * isalnum
          * isalpha
          * isdigit
          * islower
          * isspace
          * istitle
          * isupper
          * startswith

      It should be written just like if you were calling the python call yourself.
      For example::

        Filename=startswith('/lhcb')
        Filename=istitle()

    """
    super( FilenamePlugin, self ).__init__( conditions )


  def eval( self, **kwargs ):
    """ evaluate the parameters. The lfn argument is mandatory
    """

    lfn = kwargs.get( 'lfn' )

    if not lfn:
      return False

    evalStr = "'%s'.%s" % ( lfn, self.conditions )
    try:
      ret = eval( evalStr )
      # Special case of 'find' which returns -1 if the pattern does not exist
      if self.conditions.startswith( 'find(' ):
        ret = False if ret == -1 else True

      return ret
    except:
      return False
    

      
