Example of Service in Python

From Apache OpenOffice Wiki
Jump to: navigation, search
OOo Extensions project

Please view the wiki usage guidelines
before contributing.

Categories:

Pages:

Extensions on the main site

Extensions in other languages:
ES - FR - IT - JA - NL - OC -


at first, PyUNO bridge must be installed. E.g., I need to launch ping and see what errorcode it returns:

import os 
import uno 
import unohelper 
 
from com.sun.star.task import XJob 
 
class Pinger( unohelper.Base, XJob ): 
    def __init__( self, ctx ): 
        self.ctx = ctx 
 
    def execute( self, args ): 
        struct  = uno.createUnoStruct( "com.sun.star.beans.PropertyValue" ) 
        status  = -1 
        output  = "false" 
        pipeout = "Something goes wrong?" 
 
        for struct in args: 
                if struct.Name == 'command': 
                        pipe    = os.popen('{ ' + struct.Value + '; } 2>&1', 'r') 
                        pipeout = pipe.read() 
                        status  = pipe.close() 
                elif struct.Name == 'print': 
                        output  = struct.Value 
 
        if output != "false": 
                desktop = self.ctx.ServiceManager.createInstanceWithContext( "com.sun.star.frame.Desktop", self.ctx ) 
                model = desktop.getCurrentComponent() 
                text = model.Text 
                cursor = text.createTextCursor() 
                text.insertString( cursor, pipeout, 0 ) 
 
        return status 
 
 
g_ImplementationHelper = unohelper.ImplementationHelper() 
g_ImplementationHelper.addImplementation( Pinger, "org.openoffice.comp.pyuno.Pinger", ("com.sun.star.task.Job",),)

Since pkgchk I can use org.openoffice.comp.pyuno.Pinger e.g. in basic:

   dim worm as object 
   worm = CreateUnoService("org.openoffice.comp.pyuno.Pinger")

For 2.x the pkgchk has been replaced wiht unopkg which usually has a better compilation.

Explanation of the code

First we need to import all the modules we need.

import os 
import uno 
import unohelper

Second we will load the XJob within the com.sun.star.task this let us avoid being able to load OOo in listen mode.

 
from com.sun.star.task import XJob
Personal tools