Python_Session : Session class /text/sbasic/python/python_session.xhp Session;ComputerName Session;SharedScripts Session;SharedPythonScripts Session;UserProfile Session;UserScripts Session;UserPythonScripts API;PathSubstitution

Getting Session Information

Computing %PRODUCTNAME user profile and shared modules system file paths can be performed with Python or with Basic languages. BeanShell, Java, JavaScript and Python scripts locations can be derived from this information.

Examples:

With Python shell. >>> from <the_module> import Session >>> print(Session.SharedPythonScripts()) # static method >>> print(Session().UserName) # object property >>> input(Session().UserProfile) # object property

From Tools – Macros - Run Macro... menu.

from <the_module> import Session def demo_session(): import screen_io as ui ui.MsgBox(Session.Share(),title='Installation Share') # static method ui.Print(Session.SharedPythonScripts()) # static method s = Session() # instance creation ui.MsgBox(s.UserName,title='Hello') # object property ui.Print(s.UserPythonScripts) # object property g_exportedScripts = (demo_session,) # public macros

With %PRODUCTNAME Basic.

Sub Session_example() Dim s As New Session ' instance of Session class Print "Shared scripts location:", s.SharedScripts MsgBox s.UserName,,"Hello" Print s.UserScripts, Chr(13), s.UserPythonScripts End Sub ' Session_example

Using COM/OLE and Visual Basic Scripting language.

' The service manager is always the entry point ' If there is no office running then an office is started up Set sm = WScript.CreateObject("com.sun.star.ServiceManager") ' PathSubstitution service exhibits information to infer ' <UserProfile|Share>/Scripts/python locations from Set obj = sm.createInstance("com.sun.star.util.PathSubstitution") MsgBox CreateObject("WScript.Network").UserName,, "Hello" user = obj.getSubstituteVariableValue("$(user)") MsgBox user & "/Scripts",, "User scripts location" libO = Replace(obj.getSubstituteVariableValue("$(inst)"), "program/..", "Share") MsgBox libO & "/Scripts",, "Shared scripts location"

Python Session class:

import getpass, os, os.path, uno class Session(): @staticmethod def substitute(var_name): ctx = uno.getComponentContext() ps = ctx.getServiceManager().createInstanceWithContext( 'com.sun.star.util.PathSubstitution', ctx) return ps.getSubstituteVariableValue(var_name) @staticmethod def Share(): inst = uno.fileUrlToSystemPath(Session.substitute("$(prog)")) return os.path.normpath(inst.replace('program', "Share")) @staticmethod def SharedScripts(): return ''.join([Session.Share(), os.sep, "Scripts"]) @staticmethod def SharedPythonScripts(): return ''.join([Session.SharedScripts(), os.sep, 'python']) @property # alternative to '$(username)' variable def UserName(self): return getpass.getuser() @property def UserProfile(self): return uno.fileUrlToSystemPath(Session.substitute("$(user)")) @property def UserScripts(self): return ''.join([self.UserProfile, os.sep, 'Scripts']) @property def UserPythonScripts(self): return ''.join([self.UserScripts, os.sep, "python"]) Unlike Basic, pathname normalization is performed with Python inside Session class.

%PRODUCTNAME Basic Session class:

Option Explicit Option Compatible Option ClassModule Private _ps As Object ' Private member Private Sub Class_Initialize() GlobalScope.BasicLibraries.LoadLibrary("Tools") Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution") End Sub ' Constructor Private Sub Class_Terminate() _ps = Nothing End Sub ' Destructor Public Property Get SharedScripts() As String Dim inst As String, shr As String inst = ConvertFromURL(_ps.getSubstituteVariableValue("$(prog)")) shr = Tools.Strings.ReplaceString(inst,"Share","program") SharedScripts = shr & GetPathSeparator() &"Scripts" End Property ' Session.sharedScripts Public Property Get SharedPythonScripts() As String sharedPythonScripts = sharedScripts() & GetPathSeparator() &"python" End Property ' Session.sharedPythonScripts Public Property Get UserName() As String ' User account name userName = _ps.getSubstituteVariableValue("$(username)") End Property ' Session.userName Public Property Get UserProfile() As String ' User profile system path userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)")) End Property ' Session.userProfile Public Property Get UserScripts() As String ' User scripts system path userScripts = userProfile() & GetPathSeparator() &"Scripts" End Property ' Session.userScripts Public Property Get UserPythonScripts() As String ' User Python scripts system path userPythonScripts = userScripts() & GetPathSeparator() &"python" End Property ' Session.userPythonScripts