Initial multiple repository support
And lots of code reshuffling which likely should've been done in separate commits..
This commit is contained in:
@@ -7,9 +7,10 @@ from . import utils
|
||||
from . import bpkg
|
||||
from . import messages
|
||||
from .bpkg import exceptions as bpkg_exs
|
||||
from .bpkg.types import (Package, Repository)
|
||||
import logging
|
||||
|
||||
def download_and_install_package(pipe_to_blender, package: bpkg.Package, install_path: Path):
|
||||
def download_and_install_package(pipe_to_blender, package: Package, install_path: Path):
|
||||
"""Downloads and installs the given package."""
|
||||
|
||||
log = logging.getLogger(__name__ + '.download_and_install')
|
||||
@@ -29,7 +30,7 @@ def download_and_install_package(pipe_to_blender, package: bpkg.Package, install
|
||||
pipe_to_blender.send(messages.Success())
|
||||
|
||||
|
||||
def uninstall_package(pipe_to_blender, package: bpkg.Package, install_path: Path):
|
||||
def uninstall_package(pipe_to_blender, package: Package, install_path: Path):
|
||||
"""Deletes the given package's files from the install directory"""
|
||||
#TODO: move package to cache and present an "undo" button to user, to give nicer UX on misclicks
|
||||
|
||||
@@ -44,31 +45,37 @@ def uninstall_package(pipe_to_blender, package: bpkg.Package, install_path: Path
|
||||
pipe_to_blender.send(messages.Success())
|
||||
|
||||
|
||||
def refresh_repository(pipe_to_blender, repo_storage_path: Path, repository_url: str):
|
||||
"""Retrieves and stores the given repository"""
|
||||
def refresh_repositories(pipe_to_blender, repo_storage_path: Path, repository_urls: str, progress_callback=None):
|
||||
"""Downloads and stores the given repository"""
|
||||
|
||||
log = logging.getLogger(__name__ + '.refresh')
|
||||
repository_url = utils.add_repojson_to_url(repository_url)
|
||||
log = logging.getLogger(__name__ + '.refresh_repository')
|
||||
|
||||
repo_path = repo_storage_path / 'repo.json'
|
||||
if repo_path.exists():
|
||||
repo = bpkg.Repository.from_file(repo_path)
|
||||
if repo.url != repository_url:
|
||||
# We're getting a new repository
|
||||
repo = bpkg.Repository(repository_url)
|
||||
else:
|
||||
repo = bpkg.Repository(repository_url)
|
||||
if progress_callback is None:
|
||||
progress_callback = lambda x: None
|
||||
progress_callback(0.0)
|
||||
|
||||
try:
|
||||
repo.refresh()
|
||||
except bpkg_exs.DownloadException as err:
|
||||
pipe_to_blender.send(messages.DownloadError(err))
|
||||
raise
|
||||
except bpkg_exs.BadRepositoryException as err:
|
||||
pipe_to_blender.send(messages.BadRepositoryError(err))
|
||||
raise
|
||||
repos = bpkg.load_repositories(repo_storage_path)
|
||||
|
||||
repo.to_file(repo_path) # TODO: this always writes even if repo wasn't changed
|
||||
pipe_to_blender.send(messages.RepositoryResult(repo))
|
||||
def prog(progress: float):
|
||||
progress_callback(progress/len(repos))
|
||||
|
||||
known_repo_urls = [repo.url for repo in repos]
|
||||
for repo_url in repository_urls:
|
||||
if repo_url not in known_repo_urls:
|
||||
repos.append(Repository(repo_url))
|
||||
|
||||
for repo in repos:
|
||||
log.debug("repo name: %s, url: %s", repo.name, repo.url)
|
||||
for repo in repos:
|
||||
try:
|
||||
repo.refresh(repo_storage_path, progress_callback=prog)
|
||||
except bpkg_exs.DownloadException as err:
|
||||
pipe_to_blender.send(messages.DownloadError(err))
|
||||
log.exception("Download error")
|
||||
except bpkg_exs.BadRepositoryException as err:
|
||||
pipe_to_blender.send(messages.BadRepositoryError(err))
|
||||
log.exception("Bad repository")
|
||||
|
||||
progress_callback(1.0)
|
||||
pipe_to_blender.send(messages.Success())
|
||||
|
||||
|
Reference in New Issue
Block a user