async def test_common_blacklist(aresponses, event_loop): aresponses.add( "api.github.com", "/rate_limit", "get", aresponses.Response(body=b"{}", headers=response_rate_limit_header, status=200), ) aresponses.add( "api.github.com", "/repos/test/test", "get", aresponses.Response(body=json.dumps(repository_data), headers=response_rate_limit_header), ) async with aiohttp.ClientSession(loop=event_loop) as session: hacs = get_hacs() hacs.session = session hacs.configuration = Configuration() hacs.configuration.token = TOKEN removed = get_removed("test/test") assert removed.repository == "test/test" repository = dummy_repository_base() with pytest.raises(HacsException): await common_validate(repository)
async def handle_critical_repositories(self): """Handled critical repositories during runtime.""" # Get critical repositories critical_queue = QueueManager() instored = [] critical = [] was_installed = False try: critical = await self.data_repo.get_contents("critical") critical = json.loads(critical.content) except AIOGitHubAPIException: pass if not critical: self.logger.debug("No critical repositories") return stored_critical = await async_load_from_store(self.hass, "critical") for stored in stored_critical or []: instored.append(stored["repository"]) stored_critical = [] for repository in critical: removed_repo = get_removed(repository["repository"]) removed_repo.removal_type = "critical" repo = self.get_by_name(repository["repository"]) stored = { "repository": repository["repository"], "reason": repository["reason"], "link": repository["link"], "acknowledged": True, } if repository["repository"] not in instored: if repo is not None and repo.installed: self.logger.critical( f"Removing repository {repository['repository']}, it is marked as critical" ) was_installed = True stored["acknowledged"] = False # Remove from HACS critical_queue.add(repository.uninstall()) repo.remove() stored_critical.append(stored) removed_repo.update_data(stored) # Uninstall await critical_queue.execute() # Save to FS await async_save_to_store(self.hass, "critical", stored_critical) # Restart HASS if was_installed: self.logger.critical("Resarting Home Assistant") self.hass.async_create_task(self.hass.async_stop(100))
async def async_load_default_repositories(self): """Load known repositories.""" self.logger.info("Loading known repositories") for item in await async_get_list_from_default("removed"): removed = get_removed(item["repository"]) removed.reason = item.get("reason") removed.link = item.get("link") removed.removal_type = item.get("removal_type") for category in self.common.categories or []: self.queue.add(self.async_get_category_repositories(category)) await self.queue.execute()
def test_get_removed(): repo = "removed/removed" removed = get_removed(repo) assert removed.repository == repo