From dae9afd6da0f6f4af99741697eade3dcd494b7d4 Mon Sep 17 00:00:00 2001 From: Ellwood Zwovic Date: Tue, 18 Jul 2017 18:25:53 -0700 Subject: [PATCH] Store repository on window manager so it isn't saved in the .blend We store it outside blender in JSON anyway, storing it two places at once could be confusing. We can move it back into the .blend later if it seems that would be preferred. --- bpkg/__init__.py | 24 +++++++++++------------- bpkg/subproc.py | 17 ++++++----------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/bpkg/__init__.py b/bpkg/__init__.py index 6dc5c89..4b5262b 100644 --- a/bpkg/__init__.py +++ b/bpkg/__init__.py @@ -284,8 +284,7 @@ class BPKG_OT_refresh(SubprocMixin, bpy.types.Operator): self.quit() def _subproc_repository_result(self, result: subproc.RepositoryResult): - prefs = bpy.context.user_preferences.addons[__package__].preferences - prefs['repo'] = result.repository + bpy.context.window_manager['package_repo'] = result.repository self.report({'INFO'}, 'Package list retrieved successfully') self.quit() @@ -443,7 +442,7 @@ class USERPREF_PT_packages(bpy.types.Panel): return False - # use two lists as a simple way of putting matches from the start on top + # use two lists as a simple way of putting "matches from the beginning" on top contains = [] startswith = [] @@ -544,21 +543,22 @@ class USERPREF_PT_packages(bpy.types.Panel): row.scale_y = 10 try: - #TODO either store repos in windowmanager and reload from disk every time, or store them in the .blend. Not both - repo = context.user_preferences.addons[__package__].preferences['repo'] + repo = wm['package_repo'] except KeyError: center_message(pkgzone, "Loading Repositories...") import pathlib # TODO: read repository synchronously for now; can't run an operator to do async monitoring from draw code - prefs = bpy.context.user_preferences.addons[__package__].preferences storage_path = pathlib.Path(bpy.utils.user_resource('CONFIG', 'packages', create=True)) - res = subproc._load_repo(storage_path) - prefs['repo'] = res.to_dict(sort=True, ids=True) + try: + res = subproc._load_repo(storage_path) + wm['package_repo'] = res.to_dict(sort=True, ids=True) + except FileNotFoundError: + wm['package_repo'] = None return if repo is None: - center_message(pkgzone, "No repository found. Add one in the addon preferences.") + center_message(pkgzone, "No repositories found.") return filters = { @@ -586,15 +586,13 @@ class WM_OT_package_toggle_expand(bpy.types.Operator): ) def execute(self, context): - repo = context.user_preferences.addons[__package__].preferences.get('repo') + repo = context.window_manager.get('package_repo') if not repo: return {'CANCELLED'} - pkg_id = self.package_id - for pkg in repo['packages']: - if pkg.get('id') == pkg_id: + if pkg.get('id') == self.package_id: # if pkg['expand'] is unset, it's not expanded pkg['expand'] = not pkg.get('expand', False) diff --git a/bpkg/subproc.py b/bpkg/subproc.py index 64d739b..aad3303 100644 --- a/bpkg/subproc.py +++ b/bpkg/subproc.py @@ -310,10 +310,7 @@ class Repository: """ Read repository from a json file at `path`. """ - try: - repo_file = path.open('r', encoding='utf-8') - except IOError as err: - raise BadRepository from err + repo_file = path.open('r', encoding='utf-8') with repo_file: try: @@ -513,14 +510,12 @@ def refresh(pipe_to_blender, storage_path: pathlib.Path, repository_url: str): log = logging.getLogger(__name__ + '.refresh') repo_path = storage_path / 'repo.json' - try: + if repo_path.exists(): repo = Repository.from_file(repo_path) - except BadRepository as err: - log.warning("Failed to read existing repository: %s. Continuing download.", err) - repo = Repository(repository_url) - - if repo.url != repository_url: - # We're getting a new repository + if repo.url != repository_url: + # We're getting a new repository + repo = Repository(repository_url) + else: repo = Repository(repository_url) try: