[Bf-blender-cvs] [f5428b32139] soc-2017-package_manager: Fix a number of issues caused by new repository representation
gandalf3
noreply at git.blender.org
Tue Aug 29 03:53:54 CEST 2017
Commit: f5428b32139333b7aea9bfa89a2ba96b13a9a203
Author: gandalf3
Date: Mon Aug 28 18:05:07 2017 -0700
Branches: soc-2017-package_manager
https://developer.blender.org/rBf5428b32139333b7aea9bfa89a2ba96b13a9a203
Fix a number of issues caused by new repository representation
===================================================================
M release/scripts/modules/bpkg/__init__.py
M release/scripts/modules/bpkg/display.py
M release/scripts/modules/bpkg/types.py
M release/scripts/startup/bl_operators/package.py
M release/scripts/startup/bl_ui/__init__.py
M release/scripts/startup/bl_ui/properties_package.py
M release/scripts/startup/bl_ui/space_userpref.py
===================================================================
diff --git a/release/scripts/modules/bpkg/__init__.py b/release/scripts/modules/bpkg/__init__.py
index d57b52d7a62..7068fc15200 100644
--- a/release/scripts/modules/bpkg/__init__.py
+++ b/release/scripts/modules/bpkg/__init__.py
@@ -41,7 +41,8 @@ def refresh_repository_props():
repo_prop.name = repo.name
repo_prop.enabled = True
repo_prop.url = repo.url
- repo_prop.file = repo.file
+ print(str(repo.filepath))
+ repo_prop.filepath = str(repo.filepath)
def get_installed_packages(refresh=False) -> list:
"""Get list of packages installed on disk"""
diff --git a/release/scripts/modules/bpkg/display.py b/release/scripts/modules/bpkg/display.py
index b489d171385..98d7ec177c6 100644
--- a/release/scripts/modules/bpkg/display.py
+++ b/release/scripts/modules/bpkg/display.py
@@ -11,8 +11,8 @@ def repository_items(self, context) -> list:
"""Return displayed repository enum items"""
import bpy
try:
- repos = context.window_manager.package_repositories
- except AttributeError:
+ repos = context.window_manager['package_repositories']
+ except KeyError:
return []
repolist = []
for repo in repos:
diff --git a/release/scripts/modules/bpkg/types.py b/release/scripts/modules/bpkg/types.py
index cebbe2e35fc..077f0516dc0 100644
--- a/release/scripts/modules/bpkg/types.py
+++ b/release/scripts/modules/bpkg/types.py
@@ -406,7 +406,7 @@ class Repository:
self.name = str()
self.url = url if url is not None else str()
self.packages = list()
- self.file = Path()
+ self.filepath = Path()
self._headers = dict()
def refresh(self, storage_path: Path, progress_callback=None):# {{{
@@ -582,8 +582,8 @@ class Repository:
raise exceptions.BadRepositoryException(err) from err
if repo.url is None or len(repo.url) == 0:
raise exceptions.BadRepositoryException("Repository missing URL")
- repo.file = repo_file
+ repo.filepath = path
cls.log.debug("Repository read from %s", path)
return repo
diff --git a/release/scripts/startup/bl_operators/package.py b/release/scripts/startup/bl_operators/package.py
index c4afacb110b..e907f03d269 100644
--- a/release/scripts/startup/bl_operators/package.py
+++ b/release/scripts/startup/bl_operators/package.py
@@ -306,7 +306,7 @@ else:
wm = context.window_manager
self.repositories = wm.package_repositories
if len(self.repositories) == 0:
- self.report({'ERROR'}, "No repositories to refresh")
+ bpkg.tag_reindex()
return {'CANCELLED'}
PACKAGE_OT_refresh._running = True
@@ -367,6 +367,7 @@ else:
def _subproc_success(self, success: messages.Success):
self.report({'INFO'}, 'Finished refreshing lists')
bpkg.refresh_repository_props()
+ bpkg.tag_reindex()
self.quit()
def _subproc_aborted(self, aborted: messages.Aborted):
@@ -417,11 +418,15 @@ else:
self.report({'ERROR'}, "Repository URL not specified")
return {'CANCELLED'}
+ for repo in wm.package_repositories:
+ if repo['url'] == self.url:
+ self.report({'ERROR'}, "Repository already added")
+ return {'CANCELLED'}
+
repo = wm.package_repositories.add()
repo.url = bpkg.utils.sanitize_repository_url(self.url)
- bpy.ops.package.refresh()
-
+ # bpy.ops.package.refresh()
context.area.tag_redraw()
return {'FINISHED'}
@@ -432,30 +437,39 @@ else:
def execute(self, context):
wm = context.window_manager
try:
- repo = wm['package_repositories'][wm.package_active_repository]
- except IndexError:
+ repo = wm.package_repositories[wm.package_active_repository]
+ except AttributeError:
return {'CANCELLED'}
- filename = bpkg.utils.format_filename(repo['name']) + ".json"
- path = (bpkg.get_repo_storage_path() / filename)
- wm.package_repositories.remove(wm.package_active_repository)
- if not path.exists():
- raise ValueError("Failed find repository file")
- path.unlink()
- bpkg.tag_reindex()
+ try:
+ filepath = Path(repo['filepath'])
+ except KeyError:
+ pass
+ else:
+ if not filepath.exists():
+ raise ValueError("Failed find repository file")
+ filepath.unlink()
+ wm.package_repositories.remove(wm.package_active_repository)
+ # bpy.ops.package.refresh()
+ context.area.tag_redraw()
return {'FINISHED'}
class PACKAGE_OT_edit_repositories(Operator):
bl_idname = "package.edit_repositories"
bl_label = "Edit Repositories"
+ def check(self, context):
+ # TODO: always refresh settings for now
+ return True
+
def execute(self, context):
+ bpy.ops.package.refresh()
return {'FINISHED'}
def invoke(self, context, event):
wm = context.window_manager
- return wm.invoke_props_dialog(self)
+ return wm.invoke_props_dialog(self, width=500, height=300)
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index 2a029ee1a25..d58640f4d93 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -167,11 +167,6 @@ def register():
WindowManager.package_active_repository = IntProperty()
- WindowManager.package_repository_tab = EnumProperty(
- items=[('REPOSITORIES', "Repositories", "Add, remove, and edit repositories")],
- name="Repository tab",
- )
-
# done...
diff --git a/release/scripts/startup/bl_ui/properties_package.py b/release/scripts/startup/bl_ui/properties_package.py
index 4f9090237cc..b9b97d5bf57 100644
--- a/release/scripts/startup/bl_ui/properties_package.py
+++ b/release/scripts/startup/bl_ui/properties_package.py
@@ -4,6 +4,7 @@ from bpy.types import UIList, PropertyGroup
class RepositoryProperty(PropertyGroup):
name = bpy.props.StringProperty(name="Name")
url = bpy.props.StringProperty(name="URL")
+ filepath = bpy.props.StringProperty(name="Filepath")
status = bpy.props.EnumProperty(name="Status", items=[
("OK", "Okay", "FILE_TICK"),
("NOTFOUND", "Not found", "ERROR"),
@@ -13,7 +14,12 @@ class RepositoryProperty(PropertyGroup):
class PACKAGE_UL_repositories(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
- layout.prop(item, "url", text="", emboss=False)
+ try:
+ layout.label(text=item['name'] + ":", icon='FILE_TICK')
+ except KeyError: #name not defined while still downloading
+ layout.label(text="", icon='FILE_REFRESH')
+ # TODO: for some reason unembossing the following causes blender to become unresponsive when ctrl clicking the url
+ layout.prop(item, "url", text="")
classes = (
RepositoryProperty,
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index da7c2d17211..f876896b927 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1320,6 +1320,8 @@ class USERPREF_PT_packages(Panel):
bl_region_type = 'WINDOW'
bl_options = {'HIDE_HEADER'}
+ _started = False
+
@classmethod
def poll(cls, context):
userpref = context.user_preferences
@@ -1339,16 +1341,16 @@ class USERPREF_PT_packages(Panel):
sidebar.operator("package.refresh", text="Check for updates")
sidebar.label("Repositories")
- row = sidebar.row()
- row.prop(wm, "package_repository_filter", expand=True)
+
+ col = sidebar.column(align=True)
+ col.prop(wm, "package_repository_filter")
# row.template_list("PACKAGE_UL_repositories", "", wm, "package_repositories", wm, "package_active_repository")
# col = row.column(align=True)
# col.operator("package.add_repository", text="", icon='ZOOMIN')
# col.operator("package.remove_repository", text="", icon='ZOOMOUT')
# sidebar.separator()
- row = sidebar.row()
- row.operator("package.edit_repositories")
+ col.operator("package.edit_repositories")
sidebar.separator()
sidebar.label("Category")
@@ -1402,9 +1404,13 @@ class USERPREF_PT_packages(Panel):
def match_repositories(metapkg) -> bool:
pkg = metapkg.get_display_version()
- for repo in pkg.repositories:
- if repo.name in filters['repository']:
- return True
+ if pkg.installed:
+ return True
+ if len(pkg.repositories) == 0:
+ return True
+ pkg_reponames = set(repo.name for repo in pkg.repositories)
+ if len(pkg_reponames.intersection(filters['repository'])) > 0:
+ return True
return False
def match_category(pkg: Package) -> bool:
@@ -1426,7 +1432,7 @@ class USERPREF_PT_packages(Panel):
if match_repositories(metapkg)\
and match_category(pkg)\
and match_support(pkg)\
- and match_installstate(pkg):
+ and match_installstate(metapkg):
if len(filters['search']) == 0:
startswith.append(pkgname)
continue
@@ -1649,6 +1655,12 @@ class USERPREF_PT_packages(Panel):
row.alignment='CENTER'
row.scale_y = 10
+
+ if not USERPREF_PT_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list