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:
helmutm 2005-11-08 21:35:28 +00:00
parent 2e55d2273e
commit d574908e21
6 changed files with 0 additions and 176 deletions

View file

@ -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) ])

View file

@ -1,4 +0,0 @@
"""
$Id$
"""

View file

@ -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')