This repository has been archived on 2023-02-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-package-manager-addon/pkg_ops.py

77 lines
2.0 KiB
Python
Raw Normal View History

2017-06-22 01:43:08 -07:00
import bpy
import logging
from multiprocessing import Process, Pipe
2017-06-22 01:43:08 -07:00
from . import blenderpack
class SubprocessOperatorMixin:
timer = None
# run once in invoke
def setup(self):
pass
# run on receipt of data from subprocess
def handle_response(self, resp):
pass
def __init__(self):
self.pipe = Pipe()
self.subprocess = None
def execute(self, context):
return self.invoke(context, None)
def invoke(self, context, event):
self.subprocess.start()
# we have to explicitly close the end of the pipe we are NOT using,
# otherwise no exception will be generated when the other process closes its end.
self.pipe[1].close()
wm = context.window_manager
wm.modal_handler_add(self)
self.timer = wm.event_timer_add(.01, context.window)
self.setup()
return {'RUNNING_MODAL'}
def modal(self, context, event):
print("polling")
try:
if self.pipe[0].poll():
newdata = self.pipe[0].recv()
else:
newdata = None
except EOFError:
print("done polling")
return {'FINISHED'}
if newdata is not None:
self.handle_response(newdata)
return {'PASS_THROUGH'}
class PACKAGE_OT_fetch(SubprocessOperatorMixin, bpy.types.Operator):
bl_idname = "package.fetch"
2017-06-22 01:43:08 -07:00
bl_label = "Update package list(s)"
last_response = None
def __init__(self):
SubprocessOperatorMixin.__init__(self)
settings = bpy.context.window_manager.package_manager_settings
self.subprocess = Process(target=blenderpack.fetch, args=(settings.url, self.pipe))
def handle_response(self, resp):
self.__class__.last_response = resp
self.report({'INFO'}, "Request returned %s" % self.__class__.last_response)
2017-06-22 01:43:08 -07:00
def execute(self, context):
return {'FINISHED'}
def register():
bpy.utils.register_class(PACKAGE_OT_fetch)
2017-06-22 01:43:08 -07:00
def unregister():
bpy.utils.unregister_class(PACKAGE_OT_fetch)
2017-06-22 01:43:08 -07:00