Python_Session : Sessieklasse

Inhoud
Index 🔎︎

# Verkrijgen van Sessie-informatie

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.

## Voorbeelden:

Met Python shell.

>>> from <the_module> import Session

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

>>> print(Session().UserName) # objecteigenschap

>>> input(Session().UserProfile) # objecteigenschap

### Vanuit het menu Extra – Macro's - Macro uitvoeren....

            from <the_module> import Session

            def demo_session():
                import screen_io as ui
                ui.MsgBox(Session.Share(),title='Deel Installatie')  # static methode
                ui.Print(Session.SharedPythonScripts())  # static methode
                s = Session()  # aanmaken van instantie
                ui.MsgBox(s.UserName,title='Hallo')  # objecteigenschap
                ui.Print(s.UserPythonScripts)  # objecteigenschap

            g_exportedScripts = (demo_session,)  # publieke macro's

### Met LibreOffice Basic.

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

### Gebruikt COM/OLE en Visual Basic scripttaal.

            ' De service manager is altijd het uitgangspunt
            ' Als er geen office wordt uitgevoerd, zal deze worden gestart
            Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
            ' PathSubstitution service vertoont informatie om af te leiden
            ' <UserProfile|Share>/Scripts/python locaties van
            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 Sessieklasse:

            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  # alternatief voor de '$(gebruikersnaam)' variabele
                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"])

In tegenstelling tot Basic, wordt normalisatie van het pad in Python uitgevoerd binnen de Sessieklasse.

## LibreOffice Basic Sessieklasse:

            Option Explicit
            Option Compatible
            Option ClassModule

            Private _ps As Object ' Particulier lid

            Private Sub Class_Initialize()
                GlobalScope.BasicLibraries.LoadLibrary("Tools")
                Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
            End Sub ' Constructie

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

            Public Property Get UserProfile() As String ' Systeempad gebruikersprofiel
                userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
            End Property ' Session.userProfile

            Public Property Get UserScripts() As String ' Systeempad gebruikerscripts
                userScripts = userProfile() & GetPathSeparator() &"Scripts"
            End Property ' Session.userScripts

            Public Property Get UserPythonScripts() As String ' Systeempad gebruiker Pythonscripts
                userPythonScripts = userScripts() & GetPathSeparator() &"python"
            End Property ' Session.userPythonScripts

Verwante onderwerpen

Python Scripts Organisatie en Locatie

Python Modules Importeren

Invoer/Uitvoer naar Scherm

Python programmeringsvoorbeelden