async def get_repository_manifest_content(self): """Get the content of the hacs.json file.""" if not "hacs.json" in [x.filename for x in self.tree]: if self.hacs.action: raise HacsException( "::error:: No hacs.json file in the root of the repository." ) return if self.hacs.action: self.logger.info("Found hacs.json") self.ref = version_to_install(self) try: manifest = await self.repository_object.get_contents( "hacs.json", self.ref) self.repository_manifest = HacsManifest.from_dict( json.loads(manifest.content)) self.data.update_data(json.loads(manifest.content)) except (AIOGitHubAPIException, Exception) as exception: # Gotta Catch 'Em All if self.hacs.action: raise HacsException( f"::error:: hacs.json file is not valid ({exception}).") if self.hacs.action: self.logger.info("hacs.json is valid")
def restore_repository_data(repository, repository_data: dict) -> None: """Restore Repository Data""" repository.data.authors = repository_data.get("authors", []) repository.data.description = repository_data.get("description") repository.releases.last_release_object_downloads = repository_data.get( "downloads") repository.data.last_updated = repository_data.get("last_updated") repository.data.topics = repository_data.get("topics", []) repository.data.domain = repository_data.get("domain", None) repository.data.stargazers_count = repository_data.get("stars", 0) repository.releases.last_release = repository_data.get("last_release_tag") repository.data.hide = repository_data.get("hide", False) repository.data.installed = repository_data.get("installed", False) repository.data.new = repository_data.get("new", True) repository.data.selected_tag = repository_data.get("selected_tag") repository.data.show_beta = repository_data.get("show_beta", False) repository.data.last_version = repository_data.get("last_release_tag") repository.data.last_commit = repository_data.get("last_commit") repository.data.installed_version = repository_data.get( "version_installed") repository.data.installed_commit = repository_data.get("installed_commit") repository.repository_manifest = HacsManifest.from_dict( repository_data.get("repository_manifest", {})) if repository.data.installed: repository.status.first_install = False if repository_data["full_name"] == "hacs/integration": repository.data.installed_version = VERSION repository.data.installed = True
async def async_restore_repository(self, entry, repository_data, store, store_exists): if not self.hacs.is_known(entry): await register_repository(repository_data["full_name"], repository_data["category"], False) repository = [ x for x in self.hacs.repositories if str(x.data.id) == str(entry) or x.data.full_name == repository_data["full_name"] ] if not repository: self.logger.error( f"Did not find {repository_data['full_name']} ({entry})") return repository = repository[0] # Restore repository attributes repository.data.id = entry repository.data.authors = repository_data.get("authors", []) repository.data.description = repository_data.get("description") repository.releases.last_release_object_downloads = repository_data.get( "downloads") repository.data.last_updated = repository_data.get("last_updated") repository.data.etag_repository = repository_data.get( "etag_repository") repository.data.topics = repository_data.get("topics", []) repository.data.domain = repository_data.get("domain", None) repository.data.stargazers_count = repository_data.get("stars", 0) repository.releases.last_release = repository_data.get( "last_release_tag") repository.data.hide = repository_data.get("hide", False) repository.data.installed = repository_data.get("installed", False) repository.data.new = repository_data.get("new", True) repository.data.selected_tag = repository_data.get("selected_tag") repository.data.show_beta = repository_data.get("show_beta", False) repository.data.last_version = repository_data.get("last_release_tag") repository.data.last_commit = repository_data.get("last_commit") repository.data.installed_version = repository_data.get( "version_installed") repository.data.installed_commit = repository_data.get( "installed_commit") repository.repository_manifest = HacsManifest.from_dict( repository_data.get("repository_manifest", {})) if repository.data.installed: repository.status.first_install = False if repository_data["full_name"] == "hacs/integration": repository.data.installed_version = INTEGRATION_VERSION repository.data.installed = True restored = store_exists and await store.async_load() or {} if restored: repository.data.update_data(restored) if not repository.data.installed: repository.logger.debug( "Should be installed but is not... Fixing that!") repository.data.installed = True
def test_repository_name(): repository = dummy_repository_base() repository.data.full_name = "test/TEST-REPOSITORY-NAME" repository.data.full_name_lower = "test/TEST-REPOSITORY-NAME".lower() repository.repository_manifest = HacsManifest.from_dict({}) name = get_repository_name(repository) assert name == "Test Repository Name"
def test_integration_manifest(): repository = dummy_repository_base() repository.data.category = "integration" repository.data.full_name = "test/TEST-REPOSITORY-NAME" repository.data.full_name_lower = "test/TEST-REPOSITORY-NAME".lower() repository.repository_manifest = HacsManifest.from_dict({}) repository.integration_manifest = {"name": "TEST-MANIFEST"} name = get_repository_name(repository) assert name == "TEST-MANIFEST"
def test_everything(): repository = dummy_repository_base() repository.data.full_name = "test/TEST-REPOSITORY-NAME" repository.data.full_name_lower = "test/TEST-REPOSITORY-NAME".lower() repository.repository_manifest = HacsManifest.from_dict( {"name": "TEST-HACS_MANIFEST"} ) repository.integration_manifest = {"name": "TEST-MANIFEST"} for category in ELEMENT_TYPES: repository.data.category = category name = get_repository_name(repository) assert name == "TEST-HACS_MANIFEST"
def __init__(self): """Set up HacsRepository.""" self.hacs = get_hacs() self.data = RepositoryData() self.content = RepositoryContent() self.content.path = RepositoryPath() self.information = RepositoryInformation() self.repository_object = None self.status = RepositoryStatus() self.state = None self.force_branch = False self.integration_manifest = {} self.repository_manifest = HacsManifest.from_dict({}) self.validate = Validate() self.releases = RepositoryReleases() self.versions = RepositoryVersions() self.pending_restart = False self.tree = [] self.treefiles = [] self.ref = None
def test_manifest_structure(): manifest = HacsManifest.from_dict({"name": "TEST"}) assert isinstance(manifest.manifest, dict) assert isinstance(manifest.name, str) assert manifest.name == "TEST" assert isinstance(manifest.content_in_root, bool) assert not manifest.content_in_root assert isinstance(manifest.zip_release, bool) assert not manifest.zip_release assert isinstance(manifest.filename, (str, type(None))) assert manifest.filename is None assert isinstance(manifest.domains, list) assert not manifest.domains assert isinstance(manifest.country, list) assert not manifest.country assert isinstance(manifest.homeassistant, (str, type(None))) assert manifest.homeassistant is None assert isinstance(manifest.persistent_directory, (str, type(None))) assert manifest.persistent_directory is None assert isinstance(manifest.iot_class, (str, type(None))) assert manifest.iot_class is None assert isinstance(manifest.render_readme, bool) assert not manifest.render_readme assert isinstance(manifest.hacs, (str, type(None))) assert not manifest.hacs assert isinstance(manifest.hide_default_branch, bool) assert not manifest.hide_default_branch
repository.data.etag_repository = repository_data.get( "etag_repository") repository.data.topics = repository_data.get("topics", []) repository.data.domain = repository_data.get("domain", None) repository.data.stargazers_count = repository_data.get("stars", 0) repository.releases.last_release = repository_data.get( "last_release_tag") repository.data.hide = repository_data.get("hide", False) repository.data.installed = repository_data.get("installed", False) repository.data.new = repository_data.get("new", True) repository.data.selected_tag = repository_data.get("selected_tag") repository.data.show_beta = repository_data.get("show_beta", False) repository.data.last_version = repository_data.get("last_release_tag") repository.data.last_commit = repository_data.get("last_commit") repository.data.installed_version = repository_data.get( "version_installed") repository.data.installed_commit = repository_data.get( "installed_commit") repository.repository_manifest = HacsManifest.from_dict( repository_data.get("repository_manifest", {})) if repository.data.installed: repository.status.first_install = False if full_name == "hacs/integration": repository.data.installed_version = self.hacs.version repository.data.installed = True return True
def test_edge_pass_none(): with pytest.raises(HacsException): assert HacsManifest.from_dict(None)