def test_diffs_return_new_keys_and_values(self): """New keys previously absent will be returned in the delta.""" expected = {"newkey": "val"} assert expected == util.get_dict_deltas({"k": "v"}, { "newkey": "val", "k": "v" })
def test_return_only_keys_which_represent_deltas(self): """Only return specific keys which have deltas.""" orig_dict = { '1': '1', '2': 'orig2', '3': { '3.1': '3.1', '3.2': 'orig3.2' }, '4': { '4.1': '4.1' } } new_dict = { '1': '1', '2': 'new2', '3': { '3.1': '3.1', '3.2': 'new3.2' }, '4': { '4.1': '4.1' } } expected = {'2': 'new2', '3': {'3.2': 'new3.2'}} assert expected == util.get_dict_deltas(orig_dict, new_dict)
def test_diffs_return_new_keys_and_values(self): """New keys previously absent will be returned in the delta.""" expected = {'newkey': 'val'} assert expected == util.get_dict_deltas({'k': 'v'}, { 'newkey': 'val', 'k': 'v' })
def test_return_only_keys_which_represent_deltas(self): """Only return specific keys which have deltas.""" orig_dict = { "1": "1", "2": "orig2", "3": { "3.1": "3.1", "3.2": "orig3.2" }, "4": { "4.1": "4.1" }, } new_dict = { "1": "1", "2": "new2", "3": { "3.1": "3.1", "3.2": "new3.2" }, "4": { "4.1": "4.1" }, } expected = {"2": "new2", "3": {"3.2": "new3.2"}} assert expected == util.get_dict_deltas(orig_dict, new_dict)
def process_entitlement_delta(orig_access, new_access, allow_enable=False): """Process a entitlement access dictionary deltas if they exist. :param orig_access: Dict with original entitlement access details before contract refresh deltas :param orig_access: Dict with updated entitlement access details after contract refresh :param allow_enable: Boolean set True to perform enable operation on enableByDefault delta. When False log message about ignored default. """ from uaclient.entitlements import ENTITLEMENT_CLASS_BY_NAME util.apply_series_overrides(new_access) deltas = util.get_dict_deltas(orig_access, new_access) if deltas: name = orig_access.get('entitlement', {}).get('type') if not name: name = deltas.get('entitlement', {}).get('type') if not name: raise RuntimeError( 'Could not determine contract delta service type %s %s' % (orig_access, new_access)) try: ent_cls = ENTITLEMENT_CLASS_BY_NAME[name] except KeyError: logging.debug( 'Skipping entitlement deltas for "%s". No such class', name) return deltas entitlement = ent_cls() entitlement.process_contract_deltas(orig_access, deltas, allow_enable=allow_enable) return deltas
def test_diffs_return_dropped_keys_set_dropped(self): """Old keys which are now dropped are returned as DROPPED_KEY.""" expected = {'oldkey': util.DROPPED_KEY, 'oldkey2': util.DROPPED_KEY} assert expected == util.get_dict_deltas( { 'oldkey': 'v', 'k': 'v', 'oldkey2': {} }, {'k': 'v'})
def test_diffs_return_dropped_keys_set_dropped(self): """Old keys which are now dropped are returned as DROPPED_KEY.""" expected = {"oldkey": util.DROPPED_KEY, "oldkey2": util.DROPPED_KEY} assert expected == util.get_dict_deltas( { "oldkey": "v", "k": "v", "oldkey2": {} }, {"k": "v"})
def process_entitlement_delta( orig_access: "Dict[str, Any]", new_access: "Dict[str, Any]", allow_enable: bool = False, series_overrides: bool = True, ) -> "Dict": """Process a entitlement access dictionary deltas if they exist. :param orig_access: Dict with original entitlement access details before contract refresh deltas :param new_access: Dict with updated entitlement access details after contract refresh :param allow_enable: Boolean set True if allowed to perform the enable operation. When False, a message will be logged to inform the user about the recommended enabled service. :param series_overrides: Boolean set True if series overrides should be applied to the new_access dict. :raise UserFacingError: on failure to process deltas. :return: Dict of processed deltas """ from uaclient.entitlements import ENTITLEMENT_CLASS_BY_NAME if series_overrides: util.apply_series_overrides(new_access) deltas = util.get_dict_deltas(orig_access, new_access) if deltas: name = orig_access.get("entitlement", {}).get("type") if not name: name = deltas.get("entitlement", {}).get("type") if not name: raise RuntimeError( "Could not determine contract delta service type {} {}".format( orig_access, new_access)) try: ent_cls = ENTITLEMENT_CLASS_BY_NAME[name] except KeyError: logging.debug( 'Skipping entitlement deltas for "%s". No such class', name) return deltas entitlement = ent_cls(assume_yes=allow_enable) entitlement.process_contract_deltas(orig_access, deltas, allow_enable=allow_enable) return deltas
def test_non_dict_diffs_return_new_value(self, value1, value2): """When two values differ and are not a dict return the new value.""" expected = {'key': value2} assert expected == util.get_dict_deltas({'key': value1}, {'key': value2})