Example #1
0
 def test_get_path_fail(self):
     var = {"a": {"b": {"c": {"d": [0, 1]}}}}
     path = "a.b.e"
     expected = "dict object' has no attribute 'e'"
     with self.assertRaises(Exception) as exc:
         get_path(var, path, environment=self._environment, wantlist=False)
     self.assertIn(expected, str(exc.exception))
Example #2
0
 def test_get_path_pass_wantlist(self):
     var = {"a": {"b": {"c": {"d": [0, 1]}}}}
     path = "a.b.c.d[0]"
     result = get_path(var,
                       path,
                       environment=self._environment,
                       wantlist=True)
     expected = ["0"]
     self.assertEqual(result, expected)
def _get_path(*args, **kwargs):
    """Retrieve the value in a variable using a path."""
    keys = ["environment", "var", "path"]
    data = dict(zip(keys, args))
    data.update(kwargs)
    environment = data.pop("environment")
    aav = AnsibleArgSpecValidator(data=data,
                                  schema=DOCUMENTATION,
                                  name="get_path")
    valid, errors, updated_data = aav.validate()
    if not valid:
        raise AnsibleFilterError(errors)
    updated_data["environment"] = environment
    return get_path(**updated_data)
Example #4
0
 def run(self, terms, variables, **kwargs):
     if isinstance(terms, list):
         keys = ["var", "path"]
         terms = dict(zip(keys, terms))
     terms.update(kwargs)
     aav = AnsibleArgSpecValidator(data=terms,
                                   schema=DOCUMENTATION,
                                   name="get_path")
     valid, errors, updated_data = aav.validate()
     if not valid:
         raise AnsibleLookupError(errors)
     updated_data["wantlist"] = True
     updated_data["environment"] = self._templar.environment
     res = get_path(**updated_data)
     return res
Example #5
0
 def test_roundtrip_large(self):
     """Test the 1000 longest keys, otherwise this takes a _really_ long time"""
     big_json_path = os.path.join(os.path.dirname(__file__), "fixtures",
                                  "large.json")
     with open(big_json_path) as fhand:
         big_json = fhand.read()
     var = json.loads(big_json)
     paths = to_paths(var, prepend=None, wantlist=None)
     to_tests = heapq.nlargest(1000, list(paths.keys()), key=len)
     for to_test in to_tests:
         gotten = get_path(var,
                           to_test,
                           environment=self._environment,
                           wantlist=False)
         self.assertEqual(gotten, paths[to_test])