diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..61e34a1 --- /dev/null +++ b/__init__.py @@ -0,0 +1,26 @@ +bl_info = { + 'name': 'Package Manager', + 'description': 'Testing package management', + 'category': 'System', + 'support': 'TESTING', +} +import bpy + +class PackageSettings(bpy.types.PropertyGroup): + url = bpy.props.StringProperty(name="URL") + +def register(): + from . import (pkg_ops, pkg_ui) + + bpy.utils.register_class(PackageSettings) + bpy.types.WindowManager.PackageManagerSettings = bpy.props.PointerProperty(type=PackageSettings) + pkg_ops.register() + pkg_ui.register() + +def unregister(): + from . import (pkg_ops, pkg_ui) + + pkg_ops.unregister() + pkg_ui.unregister(); + del bpy.types.WindowManager.PackageManagerSettings + diff --git a/blenderpack.py b/blenderpack.py new file mode 100644 index 0000000..b582533 --- /dev/null +++ b/blenderpack.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 + +# HACK: seems 'requests' module bundled with blender isn't bundled with 'idna' module. So force system python for now +import sys +sys.path.insert(0, '/usr/lib/python3.6/site-packages') +import requests + +def fetch(url): + # TODO: do conditional request + re = requests.get(url) + print(re.json()) + diff --git a/pkg_ops.py b/pkg_ops.py new file mode 100644 index 0000000..6b10233 --- /dev/null +++ b/pkg_ops.py @@ -0,0 +1,21 @@ +import bpy +from multiprocessing import Process +from . import blenderpack + +class PACKAGE_OT_fetch_lists(bpy.types.Operator): + bl_idname = "package.fetch_lists" + bl_label = "Update package list(s)" + + def execute(self, context): + settings = context.window_manager.PackageManagerSettings + proc = Process(target=lambda: blenderpack.fetch(settings.url)) + proc.start() + return {'FINISHED'} + + +def register(): + bpy.utils.register_class(PACKAGE_OT_fetch_lists) + +def unregister(): + bpy.utils.unregister_class(PACKAGE_OT_fetch_lists) + diff --git a/pkg_ui.py b/pkg_ui.py new file mode 100644 index 0000000..af3ce6d --- /dev/null +++ b/pkg_ui.py @@ -0,0 +1,26 @@ +import bpy +from . import pkg_ops + +class USERPREF_PT_packages(bpy.types.Panel): + bl_label = "Package Management" + bl_space_type = 'USER_PREFERENCES' + bl_region_type = 'WINDOW' + bl_options = {'HIDE_HEADER'} + + @classmethod + def poll(cls, context): + userpref = context.user_preferences + return (userpref.active_section == 'PACKAGES') + + def draw(self, context): + layout = self.layout + + row = layout.row() + row.prop(context.window_manager.PackageManagerSettings, "url") + row.operator(pkg_ops.PACKAGE_OT_fetch_lists.bl_idname, text="Fetch") + +def register(): + bpy.utils.register_class(USERPREF_PT_packages) + +def unregister(): + bpy.utils.unregister_class(USERPREF_PT_packages)