3
11

New add-on: IDE script executor #14

Open
Crisp-Ness wants to merge 1 commits from Crisp-Ness/blender-addons-contrib:idee_0.1 into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.

86
development_idee.py Normal file
View File

@ -0,0 +1,86 @@
# SPDX-License-Identifier: GPL-2.0-or-later
bl_info = {
"name": "IDE script executor",
"description": "Runs python scripts saved by IDE / external editor",
"author": "Crisp Ness",
"version": (0, 1),
"blender": (3, 6, 0),
"location": "Preferences > Add-ons",
"warning": "",
"doc_url": "https://projects.blender.org/Crisp-Ness/doc/src/branch/main/idee_0.1.md",
"tracker_url": "https://projects.blender.org/Crisp-Ness/doc/issues",
"support": "COMMUNITY",
"category": "Development",
}
from os import path, remove
import bpy
def idee_onerun():
"""
Checks for the existence of the path file.
If found: reads path to script, removes path file, runs script.
Returns timer delay for next run.
"""
prefs = bpy.context.preferences.addons[__name__].preferences
if not path.exists(prefs.pathfile):
return prefs.delay
with open(prefs.pathfile) as pf:
path_to_script = pf.read().strip()
remove(prefs.pathfile)
try:
bpy.utils.execfile(path_to_script)
except BaseException:
import traceback
traceback.print_exc()
return prefs.delay
class IdeePrefs(bpy.types.AddonPreferences):
bl_idname = __name__
pathfile: bpy.props.StringProperty(
name="Path file",
description="File containing path to script",
subtype='DIR_PATH',
default="/tmp/idee.path",
)
delay: bpy.props.FloatProperty(
name="Delay",
description="Delay in seconds between consecutive runs",
default=1.00,
min=0.01,
max=60.0,
precision=2,
)
def draw(self, context):
layout = self.layout
layout.use_property_split = True
box = layout.box()
box.row().prop(self, "pathfile")
box.row().prop(self, "delay")
def remove_pathfile():
prefs = bpy.context.preferences.addons[__name__].preferences
if path.exists(prefs.pathfile):
remove(prefs.pathfile)
def register():
bpy.utils.register_class(IdeePrefs)
remove_pathfile()
bpy.app.timers.register(idee_onerun, persistent=True)
def unregister():
bpy.app.timers.unregister(idee_onerun)
remove_pathfile()
bpy.utils.unregister_class(IdeePrefs)