Loading 103120/examples/json/request7-TrafficPolicyObject.json +21 −10 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "@xmlns:common": "http://uri.etsi.org/03120/common/2016/02/Common", "@xmlns:tp": "http://uri.etsi.org/03120/common/2022/07/TrafficPolicy", "@xmlns:etsi": "http://uri.etsi.org/03280/common/2017/07", "@xmlns:etsi280": "http://uri.etsi.org/03280/common/2017/07", "@xmlns:task": "http://uri.etsi.org/03120/common/2020/09/Task", "Header": { "SenderIdentifier": { Loading Loading @@ -35,13 +35,22 @@ "CountryCode": "XX", "OwnerIdentifier": "ACTOR01", "tp:Criteria": { "tp:Criteria": [{ "tp:Criteria": [ { "tp:IPPolicyCriteria": { "tp:SourceIPRange": { "etsi:IPv4CIDR": "203.0.113.0/24" "etsi280:IPv4CIDR": "203.0.113.0/24" } } }] }, { "tp:IPPolicyCriteria": { "tp:SourceIPRange": { "etsi280:IPv4CIDR": "203.0.113.0/24" } } } ] }, "tp:Action": { "common:Owner": "ETSI", Loading @@ -61,10 +70,12 @@ "OwnerIdentifier": "ACTOR01", "tp:TrafficPolicyName": "Template Rule 1", "tp:TrafficRules": { "policy:TrafficRuleReference": { "policy:Order": "1", "policy:ObjectIdentifier": "f69eb93b-a85b-4ff7-abaa-6f3aead286d5" "tp:TrafficRuleReference": [ { "tp:Order": 1, "tp:ObjectIdentifier": "f69eb93b-a85b-4ff7-abaa-6f3aead286d5" } ] } } } Loading 103120/examples/xml/request7_TrafficPolicyObject.xml +28 −21 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:policy="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" xmlns:etsi="http://uri.etsi.org/03280/common/2017/07" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task"> <HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:tp="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" xmlns:etsi280="http://uri.etsi.org/03280/common/2017/07" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task"> <Header> <SenderIdentifier> <CountryCode>XX</CountryCode> Loading @@ -23,41 +23,48 @@ <ActionRequest> <ActionIdentifier>0</ActionIdentifier> <CREATE> <HI1Object xsi:type="policy:TrafficRuleObject"> <HI1Object xsi:type="tp:TrafficRuleObject"> <ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</ObjectIdentifier> <CountryCode>XX</CountryCode> <OwnerIdentifier>ACTOR01</OwnerIdentifier> <policy:Criteria> <policy:Criteria> <policy:IPPolicyCriteria> <policy:SourceIPRange> <etsi:IPv4CIDR>203.0.113.0/24</etsi:IPv4CIDR> </policy:SourceIPRange> </policy:IPPolicyCriteria> </policy:Criteria> </policy:Criteria> <policy:Action> <tp:Criteria> <tp:Criteria> <tp:IPPolicyCriteria> <tp:SourceIPRange> <etsi280:IPv4CIDR>203.0.113.0/24</etsi280:IPv4CIDR> </tp:SourceIPRange> </tp:IPPolicyCriteria> </tp:Criteria> <tp:Criteria> <tp:IPPolicyCriteria> <tp:SourceIPRange> <etsi280:IPv4CIDR>203.0.113.0/24</etsi280:IPv4CIDR> </tp:SourceIPRange> </tp:IPPolicyCriteria> </tp:Criteria> </tp:Criteria> <tp:Action> <common:Owner>ETSI</common:Owner> <common:Name>PolicyAction</common:Name> <common:Value>PDSR</common:Value> </policy:Action> </tp:Action> </HI1Object> </CREATE> </ActionRequest> <ActionRequest> <ActionIdentifier>1</ActionIdentifier> <CREATE> <HI1Object xsi:type="policy:TrafficPolicyObject"> <HI1Object xsi:type="tp:TrafficPolicyObject"> <ObjectIdentifier>55e25c0a-787b-4049-b7fb-518a13a9483b</ObjectIdentifier> <CountryCode>XX</CountryCode> <OwnerIdentifier>ACTOR01</OwnerIdentifier> <policy:TrafficPolicyName>Template Rule 1</policy:TrafficPolicyName> <policy:TrafficRules> <policy:TrafficRuleReference> <policy:Order>1</policy:Order> <policy:ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</policy:ObjectIdentifier> </policy:TrafficRuleReference> </policy:TrafficRules> <tp:TrafficPolicyName>Template Rule 1</tp:TrafficPolicyName> <tp:TrafficRules> <tp:TrafficRuleReference> <tp:Order>1</tp:Order> <tp:ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</tp:ObjectIdentifier> </tp:TrafficRuleReference> </tp:TrafficRules> </HI1Object> </CREATE> </ActionRequest> Loading 103280/TS_103_280.schema.json +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ }, "IPv4CIDR": { "type": "string", "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])/([1-2]?[0-9]|3[0-2])$" "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\/([1-2]?[0-9]|3[0-2])$" }, "IPv6Address": { "type": "string", Loading utils/xml_to_json.py +23 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ coerce_to_int = [ 'task:Order', 'ErrorCode', 'Generation', 'tp:Order' ] coerce_to_bool = [ Loading Loading @@ -115,6 +116,20 @@ def postprocessor (path, key, value): return key, {} return key, value def recursively_fix_tpcriteria (d: dict): if isinstance(d, dict): if ("tp:Criteria" in d and isinstance(d["tp:Criteria"], list) and len(d["tp:Criteria"]) == 1 ): d["tp:Criteria"] = d["tp:Criteria"][0] else: for k,v in d.items(): recursively_fix_tpcriteria(v) elif isinstance(d, list): for d_item in d: recursively_fix_tpcriteria(d_item) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-v', '--verbose', action='count', help='Verbose logging (can be specified multiple times)') Loading @@ -141,4 +156,10 @@ if __name__ == "__main__": postprocessor=postprocessor )['HI1Message'] print(json.dumps(d, indent=2)) # HACK # Needed because TrafficPolicy.xsd has two nested fields both called tp:Criteria # but only the outer one needs to be coerced into a list recursively_fix_tpcriteria(d) out_str = json.dumps(d, indent=2) print(out_str) Loading
103120/examples/json/request7-TrafficPolicyObject.json +21 −10 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "@xmlns:common": "http://uri.etsi.org/03120/common/2016/02/Common", "@xmlns:tp": "http://uri.etsi.org/03120/common/2022/07/TrafficPolicy", "@xmlns:etsi": "http://uri.etsi.org/03280/common/2017/07", "@xmlns:etsi280": "http://uri.etsi.org/03280/common/2017/07", "@xmlns:task": "http://uri.etsi.org/03120/common/2020/09/Task", "Header": { "SenderIdentifier": { Loading Loading @@ -35,13 +35,22 @@ "CountryCode": "XX", "OwnerIdentifier": "ACTOR01", "tp:Criteria": { "tp:Criteria": [{ "tp:Criteria": [ { "tp:IPPolicyCriteria": { "tp:SourceIPRange": { "etsi:IPv4CIDR": "203.0.113.0/24" "etsi280:IPv4CIDR": "203.0.113.0/24" } } }] }, { "tp:IPPolicyCriteria": { "tp:SourceIPRange": { "etsi280:IPv4CIDR": "203.0.113.0/24" } } } ] }, "tp:Action": { "common:Owner": "ETSI", Loading @@ -61,10 +70,12 @@ "OwnerIdentifier": "ACTOR01", "tp:TrafficPolicyName": "Template Rule 1", "tp:TrafficRules": { "policy:TrafficRuleReference": { "policy:Order": "1", "policy:ObjectIdentifier": "f69eb93b-a85b-4ff7-abaa-6f3aead286d5" "tp:TrafficRuleReference": [ { "tp:Order": 1, "tp:ObjectIdentifier": "f69eb93b-a85b-4ff7-abaa-6f3aead286d5" } ] } } } Loading
103120/examples/xml/request7_TrafficPolicyObject.xml +28 −21 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:policy="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" xmlns:etsi="http://uri.etsi.org/03280/common/2017/07" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task"> <HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:tp="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" xmlns:etsi280="http://uri.etsi.org/03280/common/2017/07" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task"> <Header> <SenderIdentifier> <CountryCode>XX</CountryCode> Loading @@ -23,41 +23,48 @@ <ActionRequest> <ActionIdentifier>0</ActionIdentifier> <CREATE> <HI1Object xsi:type="policy:TrafficRuleObject"> <HI1Object xsi:type="tp:TrafficRuleObject"> <ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</ObjectIdentifier> <CountryCode>XX</CountryCode> <OwnerIdentifier>ACTOR01</OwnerIdentifier> <policy:Criteria> <policy:Criteria> <policy:IPPolicyCriteria> <policy:SourceIPRange> <etsi:IPv4CIDR>203.0.113.0/24</etsi:IPv4CIDR> </policy:SourceIPRange> </policy:IPPolicyCriteria> </policy:Criteria> </policy:Criteria> <policy:Action> <tp:Criteria> <tp:Criteria> <tp:IPPolicyCriteria> <tp:SourceIPRange> <etsi280:IPv4CIDR>203.0.113.0/24</etsi280:IPv4CIDR> </tp:SourceIPRange> </tp:IPPolicyCriteria> </tp:Criteria> <tp:Criteria> <tp:IPPolicyCriteria> <tp:SourceIPRange> <etsi280:IPv4CIDR>203.0.113.0/24</etsi280:IPv4CIDR> </tp:SourceIPRange> </tp:IPPolicyCriteria> </tp:Criteria> </tp:Criteria> <tp:Action> <common:Owner>ETSI</common:Owner> <common:Name>PolicyAction</common:Name> <common:Value>PDSR</common:Value> </policy:Action> </tp:Action> </HI1Object> </CREATE> </ActionRequest> <ActionRequest> <ActionIdentifier>1</ActionIdentifier> <CREATE> <HI1Object xsi:type="policy:TrafficPolicyObject"> <HI1Object xsi:type="tp:TrafficPolicyObject"> <ObjectIdentifier>55e25c0a-787b-4049-b7fb-518a13a9483b</ObjectIdentifier> <CountryCode>XX</CountryCode> <OwnerIdentifier>ACTOR01</OwnerIdentifier> <policy:TrafficPolicyName>Template Rule 1</policy:TrafficPolicyName> <policy:TrafficRules> <policy:TrafficRuleReference> <policy:Order>1</policy:Order> <policy:ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</policy:ObjectIdentifier> </policy:TrafficRuleReference> </policy:TrafficRules> <tp:TrafficPolicyName>Template Rule 1</tp:TrafficPolicyName> <tp:TrafficRules> <tp:TrafficRuleReference> <tp:Order>1</tp:Order> <tp:ObjectIdentifier>f69eb93b-a85b-4ff7-abaa-6f3aead286d5</tp:ObjectIdentifier> </tp:TrafficRuleReference> </tp:TrafficRules> </HI1Object> </CREATE> </ActionRequest> Loading
103280/TS_103_280.schema.json +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ }, "IPv4CIDR": { "type": "string", "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])/([1-2]?[0-9]|3[0-2])$" "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\/([1-2]?[0-9]|3[0-2])$" }, "IPv6Address": { "type": "string", Loading
utils/xml_to_json.py +23 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ coerce_to_int = [ 'task:Order', 'ErrorCode', 'Generation', 'tp:Order' ] coerce_to_bool = [ Loading Loading @@ -115,6 +116,20 @@ def postprocessor (path, key, value): return key, {} return key, value def recursively_fix_tpcriteria (d: dict): if isinstance(d, dict): if ("tp:Criteria" in d and isinstance(d["tp:Criteria"], list) and len(d["tp:Criteria"]) == 1 ): d["tp:Criteria"] = d["tp:Criteria"][0] else: for k,v in d.items(): recursively_fix_tpcriteria(v) elif isinstance(d, list): for d_item in d: recursively_fix_tpcriteria(d_item) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-v', '--verbose', action='count', help='Verbose logging (can be specified multiple times)') Loading @@ -141,4 +156,10 @@ if __name__ == "__main__": postprocessor=postprocessor )['HI1Message'] print(json.dumps(d, indent=2)) # HACK # Needed because TrafficPolicy.xsd has two nested fields both called tp:Criteria # but only the outer one needs to be coerced into a list recursively_fix_tpcriteria(d) out_str = json.dumps(d, indent=2) print(out_str)