Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg-security/TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/authz/xacml/etree/targetreader.py@6731
Revision 6731,
1.8 KB
checked in by pjkersha, 11 years ago
(diff) |
Work on XACML !ETree based parsing. Added first basic unit test.
|
Line | |
---|
1 | ''' |
---|
2 | Created on 16 Mar 2010 |
---|
3 | |
---|
4 | @author: pjkersha |
---|
5 | ''' |
---|
6 | from ndg.security.common.authz.xacml import XMLParseError |
---|
7 | from ndg.security.common.authz.xacml.action import Action |
---|
8 | from ndg.security.common.authz.xacml.resource import Resource |
---|
9 | from ndg.security.common.authz.xacml.subject import Subject |
---|
10 | from ndg.security.common.authz.xacml.environment import Environment |
---|
11 | from ndg.security.common.authz.xacml.etree.reader import AbstractReader |
---|
12 | |
---|
13 | |
---|
14 | class TargetReader(AbstractReader): |
---|
15 | """ElementTree based parser for XACML Target elements""" |
---|
16 | |
---|
17 | def __call__(self, obj): |
---|
18 | elem = super(TargetReader, self)._parse(obj) |
---|
19 | |
---|
20 | target = Target() |
---|
21 | cls = Target |
---|
22 | |
---|
23 | localName = QName.getLocalPart(elem.tag) |
---|
24 | if localName != cls.ELEMENT_LOCAL_NAME: |
---|
25 | raise XMLParseError('No "%s" element found' % |
---|
26 | cls.ELEMENT_LOCAL_NAME) |
---|
27 | |
---|
28 | # Parse sub-elements |
---|
29 | for childElem in elem: |
---|
30 | localName = QName.getLocalPart(childElem.tag) |
---|
31 | |
---|
32 | if localName == Subject.ELEMENT_LOCAL_NAME: |
---|
33 | target.subjects.append(SubjectReader.parse(childElem)) |
---|
34 | |
---|
35 | elif localName == Resource.ELEMENT_LOCAL_NAME: |
---|
36 | target.resources.append(ResourceReader.parse(childElem)) |
---|
37 | |
---|
38 | elif localName == Action.ELEMENT_LOCAL_NAME: |
---|
39 | target.actions.append(ActionReader.parse(childElem)) |
---|
40 | |
---|
41 | elif localName == Environment.ELEMENT_LOCAL_NAME: |
---|
42 | target.environments.append(EnvironmentReader.parse(childElem)) |
---|
43 | |
---|
44 | else: |
---|
45 | raise XMLParseError("XACML Target child element name %r not " |
---|
46 | "recognised" % localName) |
---|
Note: See
TracBrowser
for help on using the repository browser.