Fix: cleanup repository from list (#2310)

* Fix: cleanup repository from list

* Add repr

* Avoid not exists error message
This commit is contained in:
Pascal Vizeli 2020-11-29 14:00:29 +01:00 committed by GitHub
parent f6bf44de1c
commit 19620d6808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 2 deletions

View File

@ -27,6 +27,8 @@ class FixupStoreExecuteRemove(FixupBase):
await repository.remove() await repository.remove()
except StoreError: except StoreError:
raise ResolutionFixupError() from None raise ResolutionFixupError() from None
else:
self.sys_store.repositories.pop(repository.slug, None)
self.sys_config.drop_addon_repository(repository.source) self.sys_config.drop_addon_repository(repository.source)
self.sys_config.save_data() self.sys_config.save_data()

View File

@ -40,6 +40,10 @@ class Repository(CoreSysAttributes):
self._slug = get_hash_from_repository(repository) self._slug = get_hash_from_repository(repository)
self._type = StoreType.GIT self._type = StoreType.GIT
def __repr__(self) -> str:
"""Return internal representation."""
return f"<Store.Repository: {self.slug} / {self.source}>"
@property @property
def slug(self) -> str: def slug(self) -> str:
"""Return repo slug.""" """Return repo slug."""
@ -75,11 +79,17 @@ class Repository(CoreSysAttributes):
if self.type != StoreType.GIT: if self.type != StoreType.GIT:
return True return True
# If exists?
repository_file = Path(self.git.path, "repository.json") repository_file = Path(self.git.path, "repository.json")
if not repository_file.exists():
return False
# If valid?
try: try:
SCHEMA_REPOSITORY_CONFIG(read_json_file(repository_file)) SCHEMA_REPOSITORY_CONFIG(read_json_file(repository_file))
except (JsonFileError, vol.Invalid): except (JsonFileError, vol.Invalid):
return False return False
return True return True
async def load(self) -> None: async def load(self) -> None:

View File

@ -22,6 +22,8 @@ async def test_fixup(coresys: CoreSys):
) )
mock_repositorie = AsyncMock() mock_repositorie = AsyncMock()
mock_repositorie.slug = "test"
coresys.store.repositories["test"] = mock_repositorie coresys.store.repositories["test"] = mock_repositorie
await store_execute_remove() await store_execute_remove()
@ -30,3 +32,5 @@ async def test_fixup(coresys: CoreSys):
assert coresys.config.save_data.called assert coresys.config.save_data.called
assert len(coresys.resolution.suggestions) == 0 assert len(coresys.resolution.suggestions) == 0
assert len(coresys.resolution.issues) == 0 assert len(coresys.resolution.issues) == 0
assert "test" not in coresys.store.repositories

View File

@ -15,7 +15,7 @@ async def test_add_valid_repository(coresys, store_manager):
with patch("supervisor.store.repository.Repository.load", return_value=None), patch( with patch("supervisor.store.repository.Repository.load", return_value=None), patch(
"pathlib.Path.read_text", "pathlib.Path.read_text",
return_value=json.dumps({"name": "Awesome repository"}), return_value=json.dumps({"name": "Awesome repository"}),
): ), patch("pathlib.Path.exists", return_value=True):
await store_manager.update_repositories(current + ["http://example.com"]) await store_manager.update_repositories(current + ["http://example.com"])
assert store_manager.get_from_url("http://example.com").validate() assert store_manager.get_from_url("http://example.com").validate()
assert "http://example.com" in coresys.config.addons_repositories assert "http://example.com" in coresys.config.addons_repositories
@ -30,7 +30,7 @@ async def test_add_valid_repository_url(coresys, store_manager):
return_value=json.dumps( return_value=json.dumps(
{"name": "Awesome repository", "url": "http://example2.com/docs"} {"name": "Awesome repository", "url": "http://example2.com/docs"}
), ),
): ), patch("pathlib.Path.exists", return_value=True):
await store_manager.update_repositories(current + ["http://example.com"]) await store_manager.update_repositories(current + ["http://example.com"])
assert store_manager.get_from_url("http://example.com").validate() assert store_manager.get_from_url("http://example.com").validate()
assert "http://example.com" in coresys.config.addons_repositories assert "http://example.com" in coresys.config.addons_repositories
@ -51,6 +51,21 @@ async def test_add_invalid_repository(coresys, store_manager):
assert coresys.resolution.suggestions[-1].type == SuggestionType.EXECUTE_REMOVE assert coresys.resolution.suggestions[-1].type == SuggestionType.EXECUTE_REMOVE
@pytest.mark.asyncio
async def test_add_invalid_repository_file(coresys, store_manager):
"""Test add custom repository."""
current = coresys.config.addons_repositories
with patch("supervisor.store.repository.Repository.load", return_value=None), patch(
"pathlib.Path.read_text",
return_value=json.dumps({"name": "Awesome repository"}),
), patch("pathlib.Path.exists", return_value=False):
await store_manager.update_repositories(current + ["http://example.com"])
assert not store_manager.get_from_url("http://example.com").validate()
assert "http://example.com" in coresys.config.addons_repositories
assert coresys.resolution.suggestions[-1].type == SuggestionType.EXECUTE_REMOVE
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_preinstall_valid_repository(coresys, store_manager): async def test_preinstall_valid_repository(coresys, store_manager):
"""Test add core repository valid.""" """Test add core repository valid."""