To comment on the following update, log in, then open the issue:
http://www.openoffice.org/issues/show_bug.cgi?id=111641
                 Issue #|111641
                 Summary|pyuno: Python-implemented Interface attribute is not w
                        |riteable
               Component|udk
                 Version|OOo 3.2
                Platform|PC
                     URL|
              OS/Version|All
                  Status|UNCONFIRMED
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|PATCH
                Priority|P3
            Subcomponent|code
             Assigned to|jbu
             Reported by|gurfle





------- Additional comments from gur...@openoffice.org Mon May 17 00:38:07 
+0000 2010 -------
Confirmed on Debian Linux 5.03 and Windows XP, sos supect it crosses all OS
platforms - URL is to a - so far inconclusive - OO Community Forum topic I
started on the issue that also lists the same code examples included below.

As illstrated in the OO Basic macro at the very bottom of this desciption,
assigning a value to a Python-implemeted readwrite attribute of a (UNOIDL)
user-defined Interface causes OO to freeze - soffice process must be killed
before any activity can be resumed.

This can be reproduced using the following example UNOIDL and python modules:

Contents of XTestOOPythonComp.idl (compiled .rdb file to be added as OO
Extension UNO RDB Type Library):

#ifndef __names_nick_openoffice_TestOOPythonComp_idl__
#define __names_nick_openoffice_TestOOPythonComp_idl__

module names { module nick { module openoffice { module TestOOPythonComp {

    interface XTestOOPythonComp
    {
       [attribute] double TestOOPyDouble;
       [attribute] long TestOOPyLong;
       [attribute] string TestOOPyString;

       double OOCompFunction( [in] double a, [in] double b  );

//  The following should not be necessary to properly implement the Interface
with the above attributes
/////////////
       double getTestOOPyDouble( );
       void setTestOOPyDouble( [in] double newTestOOPyDouble );

       long getTestOOPyLong( );
       void setTestOOPyLong( [in] long newTestOOPyLong );

       string getTestOOPyString( );
       void setTestOOPyString( [in] string newTestOOPyString );
/////////////

    };

    service STestOOPythonComp: XTestOOPythonComp;
}; }; }; };
#endif


Contents of TestOOPythonComp.py (to be added as OO Extension UNO Python 
Component):

import uno
import unohelper

from com.sun.star.lang import XServiceName
from com.sun.star.lang import XServiceInfo

from names.nick.openoffice.TestOOPythonComp import XTestOOPythonComp

class TestOOPythonComp(unohelper.Base, XServiceName, XServiceInfo,
XTestOOPythonComp):

  TestOOPyDouble=47.3
  TestOOPyLong=60000
  TestOOPyString="MyStr"

  ServiceName="STestOOPythonComp"
  ImplementationName="OTestOOPythonComp"

  def __init__(self,newctx=None):
    self.ctx=newctx

  def OOCompFunction(self,a,b):
    return a+b

  #  The following should not be necessary to properly implement the Interface
with the above attributes
  ############
  def getTestOOPyDouble(self):
    return self.TestOOPyDouble
  def setTestOOPyDouble(self,newTestOOPyDouble):
    self.TestOOPyDouble=newTestOOPyDouble

  def getTestOOPyLong(self):
    return self.TestOOPyLong
  def setTestOOPyLong(self,newTestOOPyLong):
    self.TestOOPyLong=newTestOOPyLong

  def getTestOOPyString(self):
    return self.TestOOPyString
  def setTestOOPyString(self,newTestOOPyString):
    self.TestOOPyString=newTestOOPyString
  ############

  def getServiceName(self):
    return self.ServiceName

  def getImplementationName(self):
    return self.ImplementationName

  def getSupportedServiceNames(self):
    return (self.ServiceName,)

g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(TestOOPythonComp,"names.nick.openoffice.TestOOPythonCompImpl",("com.sun.star.task.Job",),)

OO Basic Macro to test the issue (CAUTION:  As written, it WILL freeze soffice)

Option Explicit

Sub TestOOPythonComp
  Dim x as Object
  Dim y as Double
  x = createUnoService( "names.nick.openoffice.TestOOPythonCompImpl" )
  print x.TestOOPyDouble '  Displays value (47.3) without a problem
  y=23.7
  setTestOOPythonDouble(y) '  This works, as does "print 
getTestOOpythonDouble()"
  x.TestOOPyDouble=y '  CAUTION:  This causes OO to freeze:  Only killing the
soffice process frees OO up again
End Sub

---------------------------------------------------------------------
Please do not reply to this automatically generated notification from
Issue Tracker. Please log onto the website and enter your comments.
http://qa.openoffice.org/issue_handling/project_issues.html#notification

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@udk.openoffice.org
For additional commands, e-mail: issues-h...@udk.openoffice.org


---------------------------------------------------------------------
To unsubscribe, e-mail: allbugs-unsubscr...@openoffice.org
For additional commands, e-mail: allbugs-h...@openoffice.org

Reply via email to