work in progress: reorganize (and simplify) directory layout
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@664 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
2e55d2273e
commit
d574908e21
6 changed files with 0 additions and 176 deletions
|
@ -1,79 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (c) 2004 Helmut Merz helmutm@cy55.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
"""
|
|
||||||
Definition of the ResourceConstraint class.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
|
||||||
|
|
||||||
from zope.interface import implements
|
|
||||||
|
|
||||||
from interfaces import IResourceConstraint
|
|
||||||
|
|
||||||
|
|
||||||
class ResourceConstraint(object):
|
|
||||||
|
|
||||||
implements(IResourceConstraint)
|
|
||||||
|
|
||||||
explanation = u''
|
|
||||||
constraintType = 'require'
|
|
||||||
referenceType = 'explicit'
|
|
||||||
referenceKey = None
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.referenceValues = []
|
|
||||||
|
|
||||||
|
|
||||||
def isResourceAllowed(self, resource, task=None):
|
|
||||||
if self.referenceType == 'parent':
|
|
||||||
for ref in self.referenceValues:
|
|
||||||
m = getattr(ref, self.referenceKey)
|
|
||||||
if resource in m():
|
|
||||||
return True
|
|
||||||
elif self.referenceType == 'explicit':
|
|
||||||
return resource in self.referenceValues
|
|
||||||
elif self.referenceType == 'checkmethod':
|
|
||||||
m = getattr(resource, self.referenceKey, None)
|
|
||||||
if m:
|
|
||||||
return m()
|
|
||||||
elif self.referenceType == 'selectmethod':
|
|
||||||
allowed = self.getAllowedResources(task=task)
|
|
||||||
return allowed and resource in allowed or False
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def getAllowedResources(self, candidates=None, task=None):
|
|
||||||
if self.referenceType == 'parent':
|
|
||||||
result = []
|
|
||||||
for ref in self.referenceValues:
|
|
||||||
m = getattr(ref, self.referenceKey)
|
|
||||||
result.extend(m())
|
|
||||||
return tuple(result)
|
|
||||||
elif self.referenceType == 'explicit':
|
|
||||||
return tuple(self.referenceValues)
|
|
||||||
elif self.referenceType == 'selectmethod':
|
|
||||||
m = getattr(self, self.referenceKey)
|
|
||||||
return m(candidates, task)
|
|
||||||
else:
|
|
||||||
if candidates is None:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return tuple([ r for r in candidates if self.isResourceAllowed(r, task) ])
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
"""
|
|
||||||
$Id$
|
|
||||||
"""
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
# $Id$
|
|
||||||
|
|
||||||
import unittest
|
|
||||||
#from zope.testing.doctestunit import DocTestSuite
|
|
||||||
from zope.interface.verify import verifyClass
|
|
||||||
from zope.app.container.interfaces import IContained
|
|
||||||
from zope.app.folder import Folder
|
|
||||||
|
|
||||||
from loops.task import Task
|
|
||||||
from loops.resource import Resource
|
|
||||||
from loops.constraint import ResourceConstraint
|
|
||||||
from loops.interfaces import IResourceConstraint
|
|
||||||
|
|
||||||
class Test(unittest.TestCase):
|
|
||||||
"Test methods of the ResourceConstraint class."
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
#placelessSetUp()
|
|
||||||
self.f1 = Folder()
|
|
||||||
self.f1.__name__ = u'f1'
|
|
||||||
self.r1 = Resource()
|
|
||||||
self.f1['rsc1'] = self.r1
|
|
||||||
self.t1 = Task()
|
|
||||||
self.f1['tsk1'] = self.t1
|
|
||||||
self.rc1 = ResourceConstraint()
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# the tests...
|
|
||||||
|
|
||||||
def testInterface(self):
|
|
||||||
self.failUnless(IResourceConstraint.providedBy(self.rc1),
|
|
||||||
'Interface IResourceConstraint is not implemented by class ResourceConstraint.')
|
|
||||||
verifyClass(IResourceConstraint, ResourceConstraint)
|
|
||||||
|
|
||||||
def testRequireExplicit(self):
|
|
||||||
rc1 = self.rc1
|
|
||||||
r1 = self.r1
|
|
||||||
self.assertEqual(False, rc1.isResourceAllowed(r1))
|
|
||||||
self.assertEqual((), rc1.getAllowedResources())
|
|
||||||
rc1.referenceValues = ([r1])
|
|
||||||
self.assertEqual(True, rc1.isResourceAllowed(r1))
|
|
||||||
self.assertEqual((r1,), rc1.getAllowedResources())
|
|
||||||
|
|
||||||
def testRequireParent(self):
|
|
||||||
rc1 = self.rc1
|
|
||||||
r1 = self.r1
|
|
||||||
t2 = Task()
|
|
||||||
t2.allocateResource(r1)
|
|
||||||
rc1.referenceType = 'parent'
|
|
||||||
rc1.referenceKey = 'getAllocatedResources'
|
|
||||||
rc1.referenceValues = ([t2])
|
|
||||||
self.assertEqual(True, rc1.isResourceAllowed(r1))
|
|
||||||
self.assertEqual((r1,), rc1.getAllowedResources())
|
|
||||||
rc1.referenceType = 'parent'
|
|
||||||
rc1.referenceKey = 'getAllocatedResources'
|
|
||||||
|
|
||||||
def testRequireCheckmethod(self):
|
|
||||||
rc1 = self.rc1
|
|
||||||
rc1.referenceType = 'checkmethod'
|
|
||||||
rc1.referenceKey = 'isAllowedForTesting'
|
|
||||||
r1 = self.r1
|
|
||||||
t1 = self.t1
|
|
||||||
self.failIf(rc1.isResourceAllowed(r1))
|
|
||||||
Resource.isAllowedForTesting = lambda self: True
|
|
||||||
self.failUnless(rc1.isResourceAllowed(r1))
|
|
||||||
Resource.isAllowedForTesting = lambda self: False
|
|
||||||
self.failIf(rc1.isResourceAllowed(r1, t1))
|
|
||||||
|
|
||||||
def testRequireSelectMethod(self):
|
|
||||||
rc1 = self.rc1
|
|
||||||
rc1.referenceType = 'selectmethod'
|
|
||||||
rc1.referenceKey = 'selectResources'
|
|
||||||
r1 = self.r1
|
|
||||||
t1 = self.t1
|
|
||||||
def method(self, candidates, task):
|
|
||||||
if task is None: return None
|
|
||||||
return (r1,)
|
|
||||||
ResourceConstraint.selectResources = method
|
|
||||||
self.assertEqual((r1,), rc1.getAllowedResources(task=t1))
|
|
||||||
self.failUnless(rc1.isResourceAllowed(r1, task=t1))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_suite():
|
|
||||||
return unittest.TestSuite((
|
|
||||||
# DocTestSuite('loops.tests.doctests'),
|
|
||||||
unittest.makeSuite(Test),
|
|
||||||
))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main(defaultTest='test_suite')
|
|
Loading…
Add table
Reference in a new issue