示例#1
0
 def test_list_conversion(self):
     ad = dict(classad.ClassAd("[a = {1,2,3}]"))
     self.assertTrue(isinstance(ad["a"], types.ListType))
     self.assertTrue(isinstance(ad["a"][0], types.LongType))
     def listAdd(a, b): return a+b
     classad.register(listAdd)
     self.assertEqual(classad.ExprTree("listAdd({1,2}, {3,4})")[0], 1)
def test_register_custom_function():
    def concatenateLists(list1, list2):
        return list1 + list2

    classad.register(concatenateLists)

    assert classad.ExprTree("concatenateLists({1, 2}, {3, 4})").eval() == [
        1, 2, 3, 4
    ]
def test_custom_function_can_see_python_values():
    local = 1

    def add(a):
        return a + local

    classad.register(add)

    assert classad.ExprTree("add(1)").eval() == 2
示例#4
0
    def test_list_conversion(self):
        ad = dict(classad.ClassAd("[a = {1,2,3}]"))
        self.assertTrue(isinstance(ad["a"], types.ListType))
        self.assertTrue(isinstance(ad["a"][0], types.LongType))

        def listAdd(a, b):
            return a + b

        classad.register(listAdd)
        self.assertEqual(classad.ExprTree("listAdd({1,2}, {3,4})")[0], 1)
def test_register_with_exception():
    def bad(a, b):
        raise Exception("oops")

    classad.register(bad)

    with pytest.raises(Exception) as e:
        classad.ExprTree("bad(1, 2)").eval()

    assert str(e.value) == "oops"
示例#6
0
 def test_state(self):
     def myFunc(state): return 1 if state else 0
     classad.register(myFunc)
     self.assertEquals(0, classad.ExprTree('myFunc(false)').eval())
     self.assertEquals(1, classad.ExprTree('myFunc("foo")').eval())
     ad = classad.ClassAd("""[foo = myFunc(); bar = 2]""")
     self.assertEquals(1, ad.eval('foo'))
     ad['foo'] = classad.ExprTree('myFunc(1)')
     self.assertRaises(TypeError, ad.eval, ('foo',))
     def myFunc(arg1, **kw): return kw['state']['bar']
     classad.register(myFunc)
     self.assertEquals(2, ad.eval('foo'))
示例#7
0
    def test_state(self):
        def myFunc(state):
            return 1 if state else 0

        classad.register(myFunc)
        self.assertEqual(0, classad.ExprTree('myFunc(false)').eval())
        self.assertEqual(1, classad.ExprTree('myFunc("foo")').eval())
        ad = classad.ClassAd("""[foo = myFunc(); bar = 2]""")
        self.assertEqual(1, ad.eval('foo'))
        ad['foo'] = classad.ExprTree('myFunc(1)')
        self.assertRaises(TypeError, ad.eval, ('foo', ))

        def myFunc(arg1, **kw):
            return kw['state']['bar']

        classad.register(myFunc)
        self.assertEqual(2, ad.eval('foo'))
示例#8
0
 def test_register(self):
     class BadException(Exception): pass
     def myAdd(a, b): return a+b
     def myBad(a, b): raise BadException("bad")
     def myComplex(a): return 1j # ClassAds have no complex numbers, not able to convert from python to an expression
     def myExpr(**kw): return classad.ExprTree("foo") # Functions must return values; this becomes "undefined".
     def myFoo(foo): return foo['foo']
     def myIntersect(a, b): return set(a).intersection(set(b))
     classad.register(myAdd)
     classad.register(myAdd, name='myAdd2')
     classad.register(myBad)
     classad.register(myComplex)
     classad.register(myExpr)
     classad.register(myFoo)
     classad.register(myIntersect)
     self.assertEquals(3, classad.ExprTree('myAdd(1, 2)').eval())
     self.assertEquals(3, classad.ExprTree('myAdd2(1, 2)').eval())
     self.assertRaises(BadException, classad.ExprTree('myBad(1, 2)').eval)
     self.assertRaises(TypeError, classad.ExprTree('myComplex(1)').eval)
     self.assertEquals(classad.Value.Undefined, classad.ExprTree('myExpr()').eval())
     self.assertEquals(classad.ExprTree('myExpr()').eval({"foo": 2}), 2)
     self.assertRaises(TypeError, classad.ExprTree('myAdd(1)').eval) # myAdd requires 2 arguments; only one is given.
     self.assertEquals(classad.ExprTree('myFoo([foo = 1])').eval(), 1)
     self.assertEquals(classad.ExprTree('size(myIntersect({1, 2}, {2, 3}))').eval(), 1)
     self.assertEquals(classad.ExprTree('myIntersect({1, 2}, {2, 3})[0]').eval(), 2)
    global g_expire_time
    if time.time() > g_expire_time:
        cache_users()
        g_expire_time = time.time() + 15*3600

def lpcUserDN(user):
    check_caches()
    if isinstance(user, classad.ExprTree):
        try:
            user = user.eval()
        except:
            return False
    return user in g_cache


classad.register(lpcUserDN)


if __name__ == '__main__':
    htcondor.param['CMSLPC_USER_CACHE'] = 'test_lpccache.txt.temp'
    shutil.copy('test_lpccache.txt', 'test_lpccache.txt.temp')
    htcondor.enable_debug()
    print "true ==", lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman")
    print "true ==", classad.ExprTree('lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman")').eval()
    print "false ==", lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman/false")
    print "false ==", classad.ExprTree('lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman/false")').eval()
    ad = classad.ClassAd({'x509userproxysubject': '/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman', 'foo': classad.ExprTree('lpcUserDN(x509userproxysubject)')})
    print "true ==", ad.eval("foo")
    htcondor.param['CMSLPC_USER_URL'] = 'http://hcc-briantest.unl.edu/test_lpccache.txt'
    g_expire_time = 0
    print "true ==", classad.ExprTree('lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman/true")').eval()
示例#10
0
_split_re = re.compile(",\s*")
def sortStringSet(in_list, state={}):
    if isinstance(in_list, classad.ExprTree):
        in_list = in_list.eval(state)
    if isinstance(in_list, classad.Value):
        return classad.Value.Undefined
    split_list = _split_re.split(in_list)
    split_list = list(set(split_list))
    split_list.sort()
    return ",".join(split_list)

_split_re = re.compile(",\s*")
def siteMapping(in_list, source_to_dests, state={}):
    if isinstance(in_list, classad.ExprTree):
        in_list = in_list.eval(state)
    if isinstance(in_list, classad.Value):
        return classad.Value.Undefined

    split_list = _split_re.split(in_list)
    final_set = set()
    for site in split_list:
        final_set.add(site)
        final_set.update(source_to_dests.setdefault(site, set()))
    split_list = list(final_set)
    split_list.sort()
    return str(",".join(split_list))

classad.register(sortStringSet)
classad.register(siteMapping)

示例#11
0
    def test_register(self):
        class BadException(Exception):
            pass

        def myAdd(a, b):
            return a + b

        def myBad(a, b):
            raise BadException("bad")

        def myComplex(a):
            return 1j  # ClassAds have no complex numbers, not able to convert from python to an expression

        def myExpr(**kw):
            return classad.ExprTree(
                "foo"
            )  # Functions must return values; this becomes "undefined".

        def myFoo(foo):
            return foo['foo']

        def myIntersect(a, b):
            return set(a).intersection(set(b))

        classad.register(myAdd)
        classad.register(myAdd, name='myAdd2')
        classad.register(myBad)
        classad.register(myComplex)
        classad.register(myExpr)
        classad.register(myFoo)
        classad.register(myIntersect)
        self.assertEquals(3, classad.ExprTree('myAdd(1, 2)').eval())
        self.assertEquals(3, classad.ExprTree('myAdd2(1, 2)').eval())
        self.assertRaises(BadException, classad.ExprTree('myBad(1, 2)').eval)
        self.assertRaises(TypeError, classad.ExprTree('myComplex(1)').eval)
        self.assertEquals(classad.Value.Undefined,
                          classad.ExprTree('myExpr()').eval())
        self.assertEquals(classad.ExprTree('myExpr()').eval({"foo": 2}), 2)
        self.assertRaises(TypeError,
                          classad.ExprTree('myAdd(1)').eval
                          )  # myAdd requires 2 arguments; only one is given.
        self.assertEquals(classad.ExprTree('myFoo([foo = 1])').eval(), 1)
        self.assertEquals(
            classad.ExprTree('size(myIntersect({1, 2}, {2, 3}))').eval(), 1)
        self.assertEquals(
            classad.ExprTree('myIntersect({1, 2}, {2, 3})[0]').eval(), 2)
示例#12
0
    if time.time() > g_expire_time:
        cache_users()
        g_expire_time = time.time() + 15 * 3600


def lpcUserDN(user):
    check_caches()
    if isinstance(user, classad.ExprTree):
        try:
            user = user.eval()
        except:
            return False
    return user in g_cache


classad.register(lpcUserDN)

if __name__ == '__main__':
    htcondor.param['CMSLPC_USER_CACHE'] = 'test_lpccache.txt.temp'
    shutil.copy('test_lpccache.txt', 'test_lpccache.txt.temp')
    htcondor.enable_debug()
    print "true ==", lpcUserDN(
        "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman"
    )
    print "true ==", classad.ExprTree(
        'lpcUserDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman")'
    ).eval()
    print "false ==", lpcUserDN(
        "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=bbockelm/CN=659869/CN=Brian Paul Bockelman/false"
    )
    print "false ==", classad.ExprTree(
示例#13
0
import re
import classad

_split_re = re.compile(",\s*")
def sortStringSet(in_list, state={}):
    if isinstance(in_list, classad.ExprTree):
        in_list = in_list.eval(state)
    if isinstance(in_list, classad.Value):
        return classad.Value.Undefined
    split_list = _split_re.split(in_list)
    split_list = list(set(split_list))
    split_list.sort()
    return ",".join(split_list)

classad.register(sortStringSet)

示例#14
0
_split_re = re.compile(",\s*")


def siteMapping(in_list, source_to_dests, state={}):
    if isinstance(in_list, classad.ExprTree):
        in_list = in_list.eval(state)
    if isinstance(in_list, classad.Value):
        return classad.Value.Undefined

    split_list = _split_re.split(in_list)
    final_set = set()
    for site in split_list:
        ## add the source sites
        final_set.add(site)
        ## add all destination sites
        final_set.update(source_to_dests.setdefault(site, set()))
    split_list = list(final_set)
    split_list.sort()
    return str(",".join(split_list))


def removeSite(those, from_sites):
    to_remove = set(_split_re.split(those))
    from_sites = set(_split_re.split(from_sites))
    return str(",".join(sorted(from_sites - to_remove)))


classad.register(sortStringSet)
classad.register(siteMapping)
classad.register(removeSite)
示例#15
0
    split_list = list(set(split_list))
    split_list.sort()
    return ",".join(split_list)

_split_re = re.compile(",\s*")
def siteMapping(in_list, source_to_dests, state={}):
    if isinstance(in_list, classad.ExprTree):
        in_list = in_list.eval(state)
    if isinstance(in_list, classad.Value):
        return classad.Value.Undefined

    split_list = _split_re.split(in_list)
    final_set = set()
    for site in split_list:
        ## add the source sites
        final_set.add(site)
        ## add all destination sites
        final_set.update(source_to_dests.setdefault(site, set()))
    split_list = list(final_set)
    split_list.sort()
    return str(",".join(split_list))

def removeSite(those,from_sites):
    to_remove = set(_split_re.split(those))
    from_sites = set(_split_re.split(from_sites))
    return str(",".join( sorted( from_sites - to_remove )))

classad.register(sortStringSet)
classad.register(siteMapping)
classad.register(removeSite)