def test_hash_function(self): mock_item_1 = Mock() mock_item_1.value = 1 mock_item_2 = Mock() mock_item_2.value = 2 input_list = [mock_item_1, mock_item_1, mock_item_2, mock_item_2] expected = [mock_item_1, mock_item_2] self.assertEquals(expected, unique_list_items(input_list, lambda x: x.value))
def test_hash_function(self): mock_item_1 = Mock() mock_item_1.value = 1 mock_item_2 = Mock() mock_item_2.value = 2 input_list = [mock_item_1, mock_item_1, mock_item_2, mock_item_2] expected = [mock_item_1, mock_item_2] self.assertEqual(expected, unique_list_items(input_list, lambda x: x.value))
def remove_entitlements_by_serials(self, serials): """ Try to remove pools by Serial numbers :param serials: List of serial numbers :return: List of serial numbers of already removed subscriptions """ _serials = utils.unique_list_items(serials) # Don't allow duplicates removed_serials, unremoved_serials = self._unbind_ids(self.cp.unbindBySerial, self.identity.uuid, _serials) self.entcertlib.update() return removed_serials, unremoved_serials
def remove_entilements_by_pool_ids(self, pool_ids): """ Try to remove entitlements by pool IDs :param pool_ids: List of pool IDs :return: List of serial numbers of removed subscriptions """ removed_serials = [] _pool_ids = utils.unique_list_items(pool_ids) # Don't allow duplicates # FIXME: the cache of CertificateDirectory should be smart enough and refreshing # should not be necessary. I vote for i-notify to be used there somehow. self.entitlement_dir.refresh() pool_id_to_serials = self.entitlement_dir.list_serials_for_pool_ids(_pool_ids) removed_pools, unremoved_pools = self._unbind_ids(self.cp.unbindByPoolId, self.identity.uuid, _pool_ids) if removed_pools: for pool_id in removed_pools: removed_serials.extend(pool_id_to_serials[pool_id]) self.entcertlib.update() return removed_pools, unremoved_pools, removed_serials
def test_preserves_order(self): input_list = [1, 1, 2, 2, 3, 3] expected = [1, 2, 3] self.assertEqual(expected, unique_list_items(input_list))
def test_preserves_order(self): input_list = [1, 1, 2, 2, 3, 3] expected = [1, 2, 3] self.assertEquals(expected, unique_list_items(input_list))
def _do_command(self): """ Executes the command. """ self._validate_options() return_code = 0 if self.is_registered(): ent_service = entitlement.EntitlementService(self.cp) try: if self.options.all: total = ent_service.remove_all_entitlements() # total will be None on older Candlepins that don't # support returning the number of subscriptions unsubscribed from if total is None: print(_("All subscriptions have been removed at the server.")) else: count = total["deletedRecords"] print( ungettext( "%s subscription removed at the server.", "%s subscriptions removed at the server.", count, ) % count ) else: # Try to remove subscriptions defined by pool IDs first (remove --pool=...) if self.options.pool_ids: ( removed_pools, unremoved_pools, removed_serials, ) = ent_service.remove_entilements_by_pool_ids(self.options.pool_ids) if not removed_pools: return_code = 1 self._print_unbind_ids_result(removed_pools, unremoved_pools, "pools") else: removed_serials = [] # Then try to remove subscriptions defined by serials (remove --serial=...) unremoved_serials = [] if self.options.serials: serials = unique_list_items(self.options.serials) # Don't remove serials already removed by a pool serials_to_remove = [serial for serial in serials if serial not in removed_serials] _removed_serials, unremoved_serials = ent_service.remove_entitlements_by_serials( serials_to_remove ) removed_serials.extend(_removed_serials) if not _removed_serials: return_code = 1 # Print final result of removing pools self._print_unbind_ids_result(removed_serials, unremoved_serials, "serial numbers") except connection.GoneException as ge: raise ge except connection.RestlibException as err: log.error(err) mapped_message: str = ExceptionMapper().get_message(err) system_exit(os.EX_SOFTWARE, mapped_message) except Exception as e: handle_exception( _("Unable to perform remove due to the following exception: {e}").format(e=e), e ) else: # We never got registered, just remove the cert try: if self.options.all: total = 0 for ent in self.entitlement_dir.list(): ent.delete() total = total + 1 print(_("{total} subscriptions removed from this system.").format(total=total)) else: if self.options.serials or self.options.pool_ids: serials = self.options.serials or [] pool_ids = self.options.pool_ids or [] count = 0 for ent in self.entitlement_dir.list(): ent_pool_id = str(getattr(ent.pool, "id", None) or "") if str(ent.serial) in serials or ent_pool_id in pool_ids: ent.delete() print( _( "Subscription with serial number {serial} removed from this system" ).format(serial=str(ent.serial)) ) count = count + 1 if count == 0: return_code = 1 except Exception as e: handle_exception( _("Unable to perform remove due to the following exception: {e}").format(e=e), e ) # it is okay to call this no matter what happens above, # it's just a notification to perform a check self._request_validity_check() return return_code