How to open/read a file within my own Python extension's mxt zip package?
If I have a self-installed runtime extension - Python based, how can I get another file within my own mxt package.
The script itself streams from the zip (done by Moneydance when the script installs)..
So I want to do the same, e.g. load a help file, or perhaps an icon..
(I don't want to have to open the mxt on disk, and unzip etc. I want to stream in the same fashion)
Many thanks
Comments are currently closed for this discussion. You can start a new one.
Keyboard shortcuts
Generic
? | Show this help |
---|---|
ESC | Blurs the current field |
Comment Form
r | Focus the comment reply box |
---|---|
^ + ↩ | Submit the comment |
You can use Command ⌘
instead of Control ^
on Mac
Support Staff 1 Posted by Sean Reilly on 24 Feb, 2021 02:13 PM
Extensions can call getClass().getResourceAsStream(String resourceName) in order to load a file included in the mxt. That needs to be the only way that you access anything included in the extension as it checks the signature on the resource as it loads.
Thanks,
Sean
--
Sean Reilly
Developer, The Infinite Kind
https://infinitekind.com
2 Posted by Stuart Beesley ... on 24 Feb, 2021 02:20 PM
Thanks. I’ll play with this. Does it work for Py extensions?
3 Posted by Stuart Beesley ... on 24 Feb, 2021 02:58 PM
Hmm,
def initialize(self, extension_context, extension_object):
self.moneydanceContext = extension_context
self.extensionObject = extension_object
print "%s" %self.getClass().getResourceAsStream("readme.txt") print "%s" %self.extensionObject.getClass().getResourceAsStream("readme.txt")
== Both report None.... the file readme.txt is at the root of the mxt
?
4 Posted by Stuart Beesley ... on 25 Feb, 2021 05:13 PM
Updating this post with latest Info for any interested readers...
from Sean: 'It needs to call getClass() on an object that is of a class loaded using the classloader of the extension.'.
Thus, it will not work at the moment...
He mentioned that he will look to add variable called moneydance_extension_loader which is set to the ClassLoader object for the extension in a future build. With this you can then call the method public InputStream getResourceAsStream(String name) in order to get an inputstream for anything bundled in the mxt. You'll need to give the full path to the file within the mxt's zip archive.
Thx
5 Posted by Stuart Beesley ... on 20 Mar, 2021 12:37 PM
This is fixed in build 3051. The moneydance_extension_loader variable exists and works well. Thanks.
Stuart Beesley (Mr Toolbox) closed this discussion on 20 Mar, 2021 12:37 PM.