diff options
Diffstat (limited to 'adapters/request_parsing')
-rw-r--r-- | adapters/request_parsing/__init__.py | 0 | ||||
-rw-r--r-- | adapters/request_parsing/placement.py | 33 |
2 files changed, 33 insertions, 0 deletions
diff --git a/adapters/request_parsing/__init__.py b/adapters/request_parsing/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/adapters/request_parsing/__init__.py diff --git a/adapters/request_parsing/placement.py b/adapters/request_parsing/placement.py new file mode 100644 index 0000000..d7a6575 --- /dev/null +++ b/adapters/request_parsing/placement.py @@ -0,0 +1,33 @@ +# ------------------------------------------------------------------------- +# Copyright (c) 2015-2017 AT&T Intellectual Property +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------- +# + +import copy +import json +from osdf.utils.programming_utils import list_flatten, dot_notation + + +def json_path_after_expansion(req_json, reference): + """ + Get the child node(s) from the dot-notation [reference] and parent [req_json]. + For placement and other requests, there are encoded JSONs inside the request or policy, + so we need to expand it and then do a search over the parent plus expanded JSON. + """ + req_json_copy = copy.deepcopy(req_json) # since we expand the JSON in place, we work on a copy + req_json_copy['placementInfo']['orderInfo'] = json.loads(req_json_copy['placementInfo']['orderInfo']) + info = dot_notation(req_json_copy, reference) + return list_flatten(info) if isinstance(info, list) else info |