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")
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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"
Ejemplo n.º 5
0
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"
Ejemplo n.º 6
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
        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
Ejemplo n.º 10
0
def test_edge_pass_none():
    with pytest.raises(HacsException):
        assert HacsManifest.from_dict(None)