Contenido
Índice 🔎︎

# Getting Session Information

Computing LibreOffice 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.

## Ejemplos:

Con el intérprete de Python

>>> from <the_module> import Session

>>> print(Session.SharedPythonScripts()) # static method

>>> print(Session().UserName) # propiedad de objeto

>>> input(Session().UserProfile) # propiedad de objeto

### Desde el menú Herramientas – Macros - Ejecutar Macro...

            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()  # creación de instancia
                ui.MsgBox(s.UserName,title='Hola')  # propiedad de objeto
                ui.Print(s.UserPythonScripts)  # propiedad de objeto

            g_exportedScripts = (demo_session,)  # macros públicas

### Con LibreOffice Basic

            Sub Session_example()
                Dim s As New Session ' instance of Session class
                Print "Ubicación de secuencias compartidas:", s.SharedScripts
                MsgBox s.UserName,,"Hola"
                Print s.UserScripts, Chr(13), s.UserPythonScripts
            End Sub ' Session_example

### Mediante COM/OLE y el lenguaje VBScript

            ' El gestor de servicios es siempre el punto de entrada
            ' Si no hay ninguna instancia en funcionamiento, se pone en marcha una.
            Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
            ' El servicio PathSubstitution muestra información para inferir
            ' <UserProfile|Share>/Scripts/python ubicaciones desde
            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"

## Clase Session de Python:

            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  # alternativa a la variable «$(username)»
                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"])

A diferencia de Basic, la normalización de nombres de rutas de acceso se realiza con Python en la clase Session.

## Clase Session de LibreOffice Basic:

            Option Explicit
            Option Compatible
            Option ClassModule

            Private _ps As Object ' miembro privado

            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 ' nombre de cuenta de usuario
                userName = _ps.getSubstituteVariableValue("$(username)")
            End Property ' Session.userName

            Public Property Get UserProfile() As String ' ruta de perfil de usuario en el sistema
                userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
            End Property ' Session.userProfile

            Public Property Get UserScripts() As String ' ruta de secuencias de órdenes de usuario en el sistema
                userScripts = userProfile() & GetPathSeparator() &"Scripts"
            End Property ' Session.userScripts

            Public Property Get UserPythonScripts() As String ' ruta de secuencias de órdenes en Python de usuario en el sistema
                userPythonScripts = userScripts() & GetPathSeparator() &"python"
            End Property ' Session.userPythonScripts

Temas relacionados

Organización y ubicación de las macros en Python

Importing Python Modules

Entrada y salida de y hacia la pantalla

Ejemplos de programación en Python