Ejemplo n.º 1
0
 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"
     })
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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'
     })
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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'})
Ejemplo n.º 7
0
 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"})
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
 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})