This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch python-editing-embedding
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 39f90afe1c28065fefddb6a7f3a7d15dd633c1da
Author: Damjan Jovanovic <[email protected]>
AuthorDate: Sun Apr 26 03:19:01 2026 +0200

    Use the parent URI to dynamically derive ours, so renaming
    the parent doesn't break our URI.
    
    Patch by: me
---
 main/scripting/source/pyprov/pythonscript.py | 53 +++++++++++++++-------------
 1 file changed, 29 insertions(+), 24 deletions(-)

diff --git a/main/scripting/source/pyprov/pythonscript.py 
b/main/scripting/source/pyprov/pythonscript.py
index 7486c1321c..ef0b37a090 100644
--- a/main/scripting/source/pyprov/pythonscript.py
+++ b/main/scripting/source/pyprov/pythonscript.py
@@ -486,11 +486,14 @@ def isScript( candidate ):
 
 #-------------------------------------------------------
 class ScriptBrowseNode( unohelper.Base, XBrowseNode , XPropertySet, 
XInvocation, XActionListener ):
-    def __init__( self, provCtx, uri, fileName, funcName ):
+    def __init__( self, provCtx, parent, fileName, funcName ):
+        self.parent = parent
         self.fileName = fileName
         self.funcName = funcName
         self.provCtx = provCtx
-        self.uri = uri
+
+    def uri( self ):
+        return self.parent.uri()
 
     def getName( self ):
         return self.funcName
@@ -509,9 +512,9 @@ class ScriptBrowseNode( unohelper.Base, XBrowseNode , 
XPropertySet, XInvocation,
         try:
             if name == "URI":
                 ret = self.provCtx.uriHelper.getScriptURI(
-                    self.provCtx.getPersistentUrlFromStorageUrl( self.uri + 
"$" + self.funcName ) )
+                    self.provCtx.getPersistentUrlFromStorageUrl( self.uri() + 
"$" + self.funcName ) )
             elif name == "Editable" and ENABLE_EDIT_DIALOG:
-                ret = not self.provCtx.sfa.isReadOnly( self.uri )
+                ret = not self.provCtx.sfa.isReadOnly( self.uri() )
 
             log.debug( "ScriptBrowseNode.getPropertyValue called for " + name 
+ ", returning " + str(ret) )
         except Exception as e:
@@ -539,7 +542,7 @@ class ScriptBrowseNode( unohelper.Base, XBrowseNode , 
XPropertySet, XInvocation,
                 "vnd.sun.star.script:" +
                 "ScriptBindingLibrary.MacroEditor?location=application")
 
-            code = readTextFromStream(self.provCtx.sfa.openFileRead(self.uri))
+            code = 
readTextFromStream(self.provCtx.sfa.openFileRead(self.uri()))
             code = ensureSourceState( code )
             self.editor.getControl("EditorTextField").setText(code)
 
@@ -574,9 +577,9 @@ class ScriptBrowseNode( unohelper.Base, XBrowseNode , 
XPropertySet, XInvocation,
                     str(
                     self.editor.getControl("EditorTextField").getText().encode(
                     sys.getdefaultencoding())) )
-                copyUrl = self.uri + ".orig"
-                self.provCtx.sfa.move( self.uri, copyUrl )
-                out = self.provCtx.sfa.openFileWrite( self.uri )
+                copyUrl = self.uri() + ".orig"
+                self.provCtx.sfa.move( self.uri(), copyUrl )
+                out = self.provCtx.sfa.openFileWrite( self.uri() )
                 out.writeBytes( toWrite )
                 out.close()
                 self.provCtx.sfa.kill( copyUrl )
@@ -603,30 +606,33 @@ class ScriptBrowseNode( unohelper.Base, XBrowseNode , 
XPropertySet, XInvocation,
 
 #-------------------------------------------------------
 class FileBrowseNode( unohelper.Base, XBrowseNode, XPropertySet, XInvocation ):
-    def __init__( self, provCtx, uri , name ):
+    def __init__( self, provCtx, parent, name ):
         self.provCtx = provCtx
-        self.uri = uri
+        self.parent = parent
         self.name = name
         self.funcnames = None
 
+    def uri( self ):
+        return self.parent.rootUrl + "/" + self.name + ".py"
+
     def getName( self ):
         return self.name
 
     def getChildNodes(self):
         ret = ()
         try:
-            self.funcnames = self.provCtx.getFuncsByUrl( self.uri )
+            self.funcnames = self.provCtx.getFuncsByUrl( self.uri() )
 
             scriptNodeList = []
             for i in self.funcnames:
                 scriptNodeList.append(
                     ScriptBrowseNode(
-                    self.provCtx, self.uri, self.name, i ))
+                    self.provCtx, self, self.name, i ))
             ret = tuple( scriptNodeList )
-            log.debug( "returning " +str(len(ret)) + " ScriptChildNodes on " + 
self.uri )
+            log.debug( "returning " +str(len(ret)) + " ScriptChildNodes on " + 
self.uri() )
         except Exception as e:
             text = lastException2String()
-            log.error( "Error while evaluating " + self.uri + ":" + text )
+            log.error( "Error while evaluating " + self.uri() + ":" + text )
             raise
         return ret
 
@@ -645,13 +651,13 @@ class FileBrowseNode( unohelper.Base, XBrowseNode, 
XPropertySet, XInvocation ):
         ret = None
         try:
             if name == "Editable":
-                ret = not self.provCtx.sfa.isReadOnly( self.uri )
+                ret = not self.provCtx.sfa.isReadOnly( self.uri() )
             elif name == "Deletable":
-                ret = not self.provCtx.sfa.isReadOnly( self.uri )
+                ret = not self.provCtx.sfa.isReadOnly( self.uri() )
             elif name == "Renamable":
-                ret = not self.provCtx.sfa.isReadOnly( self.uri )
+                ret = not self.provCtx.sfa.isReadOnly( self.uri() )
 
-            log.debug("uri is " + self.uri)
+            log.debug("uri is " + self.uri())
             log.debug( "FileBrowseNode.getPropertyValue called for " + name + 
", returning " + str(ret) )
         except Exception as e:
             log.error( "FileBrowseNode.getPropertyValue error " + 
lastException2String())
@@ -677,13 +683,12 @@ class FileBrowseNode( unohelper.Base, XBrowseNode, 
XPropertySet, XInvocation ):
         if name == "Editable":
             log.debug("Editable not implemented")
         elif name == "Deletable":
-            self.provCtx.sfa.kill( self.uri )
+            self.provCtx.sfa.kill( self.uri() )
             return True, (), ()
         elif name == "Renamable":
             try:
-                newUrl = self.uri[0:self.uri.rfind("/")+1] + params[0] + ".py"
-                self.provCtx.sfa.move( self.uri, newUrl )
-                self.uri = newUrl
+                newUri = self.parent.rootUrl + "/" + params[0] + ".py"
+                self.provCtx.sfa.move( self.uri(), newUri )
                 self.name = params[0]
                 return self, (), ()
             except Exception as e:
@@ -725,7 +730,7 @@ class DirBrowseNode( unohelper.Base, XBrowseNode, 
XPropertySet, XInvocation ):
                 if i.endswith( ".py" ):
                     log.debug( "adding filenode " + i )
                     browseNodeList.append(
-                        FileBrowseNode( self.provCtx, i, 
i[i.rfind("/")+1:len(i)-3] ) )
+                        FileBrowseNode( self.provCtx, self, 
i[i.rfind("/")+1:len(i)-3] ) )
                 elif self.provCtx.sfa.isFolder( i ) and not 
i.endswith("/pythonpath"):
                     log.debug( "adding DirBrowseNode " + i )
                     browseNodeList.append(
@@ -802,7 +807,7 @@ class DirBrowseNode( unohelper.Base, XBrowseNode, 
XPropertySet, XInvocation ):
                 except Exception as e:
                     log.error( "Creatable error: " + lastException2String())
                     raise
-                childNode = FileBrowseNode( self.provCtx, scriptUrl, params[0] 
)
+                childNode = FileBrowseNode( self.provCtx, self, params[0] )
                 log.debug( "returning" )
                 return childNode, (), ()
         elif name == "Deletable":

Reply via email to