Driver Update dependencies via script


(bobr.animation) #1

hello , I would like to update the dependencies via script, but i can’t find the path to access this command , anyone knows what’s the string to update the dependencies via python? thank you very much


(Michael Glen Montague) #2

Looking at the source code, the button appears to be a direct function rather than a python operator:

but = uiDefIconTextBut(block, UI_BTYPE_BUT, B_IPO_DEPCHANGE, 
    ICON_FILE_REFRESH, IFACE_("Update Dependencies"),
    0, 0, 10 * UI_UNIT_X, UI_UNIT_Y,
    NULL, 0.0, 0.0, 0, 0,
    TIP_("Force updates of dependencies"));
UI_but_func_set(but, driver_update_flags_cb, fcu, NULL);

The way I update a driver in my add-on is by adding and removing a space on the driver’s expression attribute. As far as I could tell, it acts the same way:

driver.expression += " "
driver.expression = driver.expression[:-1]

(bobr.animation) #3

thank you so much for the answer, so you are telling me that it might be possible to add a button that does it automatically, running this little script?


(Michael Glen Montague) #4

If you’re referring to the first block of code then no, that one I just pasted from Blender’s source C code to expose how the Update Dependencies button isn’t related to the Python side of Blender, which is why there’s no path to call it from a Python script.

As far as Python goes, in order to create a UI button with custom code you have to first create and register a new Operator, which is what the second block of code becomes part of. The built-in text editor has templates that you can view to see how it’s done.


(bobr.animation) #5

yes, i know that the second part is not the complete code, but it’s basically the core part that can be implemented in other scripts! thank you again for the clarification, by the way!


(bobr.animation) #6

i noticed tht this script doesn’t run both for the 3D transform drivers and the shader drivers. any suggetion on how to make it work for the shaders?


(Michael Glen Montague) #7

Sorry, my version was only tested with shape key drivers. Though I’d hope that if there are any other non-intrusive operations that update other types of drivers’ dependencies, those would work as well when planted in code. I found this answer on Stack Exchange with extra details about Blender’s current and upcoming dependency graphs, if that helps.