Hi Jared, The plugin system isn't really tuned for API extension. As Tsjerk pointed out, cmd.extend only registers a command, not a cmd.xxxx function. Also, scripts which are installed as plugins get loaded asynchronously from the external GUI. I suggest you do the following:
1) Inside your plugin (Python module), do: from pymol import cmd def my_func(): ... cmd.my_func = my_func cmd.extend('my_func', my_func) 2) The plugin's __init_plugin__ (or __init__) function should only be responsible for adding Plugin menu entries, not for anything else. 3) Inside your test file, do: from pymol import cmd import pmg_tk.startup.my_plugin # (now cmd.my_func should be available immediately) Hope that helps. Cheers, Thomas On 17 Feb 2016, at 11:32, Sampson, Jared M. <jms2...@cumc.columbia.edu> wrote: > Hi Tsjerk - > > Thanks for the suggestion. I tried this with: > > import time > from pymol import cmd > while not hasattr(cmd, 'my_func'): > time.sleep(0.5) > > Unfortunately that also causes everything to hang. I think I might need to > do this in a separate thread. I'll have to look into how to do that. > > Cheers, > Jared > > -- > Jared Sampson > Columbia University > >> On Feb 16, 2016, at 2:47 PM, Tsjerk Wassenaar <tsje...@gmail.com> wrote: >> >> Hi Jared, >> >> The extend function must set an attribute "my_func" on cmd. You can test for >> that with hasattr: >> >> while not hasattr(cmd, "my_func"): >> # wait some more >> >> Hope it helps, >> >> Tsjerk >> >> On Feb 16, 2016 20:07, "Sampson, Jared M." <jms2...@cumc.columbia.edu> wrote: >> To my previous message I should add that it works fine if I do: >> >> ``` >> import pmg_tk.startup.my_plugin as mp >> mp.my_func() >> ``` >> >> but I'd like to use the `cmd.my_func()` version, so that `my_func` will work >> in a .pml script. >> >> From `help(cmd)` I found `cmd.kw_list`, but this apparently doesn't include >> "extended" functions, even after the function is loaded. >> >> ``` >> PyMOL>print 'ray' in cmd.kw_list >> True >> PyMOL>print 'my_func' in cmd.kw_list >> False >> ``` >> >> Looking forward to any suggestions. Thanks! >> >> Cheers, >> Jared >> >> -- >> Jared Sampson >> Columbia University >> >>> On Feb 16, 2016, at 1:50 PM, Sampson, Jared M. <jms2...@cumc.columbia.edu> >>> wrote: >>> >>> Hi PyMOLers - >>> >>> Maybe some more experienced users/developers can help me out here. I'm >>> trying to write some automated test scripts for the plugin I'm writing, but >>> the test functions end up running before the plugin is loaded. Is there a >>> way to tell if a plugin has been loaded from within a .pml or .py script? >>> For example, if the plugin makes commands available via >>> `cmd.extend('my_func', my_func)`, how can I run `cmd.myfunc()` from a >>> script and not have it execute before the plugin finishes loading? >>> >>> I've tried something like this: >>> >>> ``` >>> import time >>> from pymol import cmd >>> loaded = 0 >>> while not loaded: >>> try: >>> cmd.my_func() # if it's loaded no exception will be raised >>> loaded = 1 >>> except: >>> time.sleep(0.5) >>> ``` >>> >>> But this just hangs, as apparently `time.sleep()` halts the execution of >>> all threads, so the plugin won't ever be loaded. >>> >>> Thanks, >>> Jared >>> >>> -- >>> Jared Sampson >>> Columbia University -- Thomas Holder PyMOL Principal Developer Schrödinger, Inc. ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net) Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net