[IronPython] 'DispPropertyGet' error returned from read-write COM interop property

Rodney Howeedy Rodney.Howeedy at Sun.COM
Sat Dec 6 01:38:57 CET 2008


Thank you for that work around... now I can start the weekend.  :-D

There used to be a mytestRun.Field.SetValue in the dir() listing in Beta3:
 >>> dir(mytestRun.Field)
['Equals', 'GetHashCode', 'GetType', 'GetValue', 'Item', 
'ReferenceEquals', 'SetValue', 'ToString', '__class__', '__delattr__', 
'__delete__', '__doc__', '__get_
_', '__getattribute__', '__getitem__', '__hash__', '__init__', 
'__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__',
'__setitem__', '__str__']

But Field.SetValue disappeared in RC2:
 >>> dir(mytestRun.Field)
['ComMethodDesc', 'DispatchObject', 'Equals', 'GetHashCode', 
'GetMetaObject', 'GetType', 'Item', 'MemberwiseClone', 'Ref
erenceEquals', 'ToString', '__class__', '__delattr__', '__doc__', 
'__eq__', '__getattribute__', '__getitem__', '__hash__
', '__init__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__str__']

I didn't know what the Dev team had in mind.  Some things became more 
straightforward but I couldn't get this critical piece to work.

Additional dir() output on RC2:
 >>> dir(mytestRun.Field.Item)
['Equals', 'GetHashCode', 'GetType', 'GetValue', 'Item', 
'MemberwiseClone', 'ReferenceEquals', 'SetValue', 'ToString', '
__class__', '__delattr__', '__delete__', '__doc__', '__get__', 
'__getattribute__', '__getitem__', '__hash__', '__init__'
, '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__setitem__', '__str
__']

I already found and tried Item's SetValue but encountered the same 
SystemError.  I tried to find the expected inputs:
 >>> print mytestRun.Field.Item.SetValue.__doc__
bool SetValue(self, CodeContext context, 
SiteLocalStorage[CallSite[Func[CallSite, CodeContext, object, 
Array[object], ob
ject]]] storage, Array[object] keys, object value)

I may have gotten close, but no cigar:
 >>> mytestRun.Field.Item.SetValue(Array[object](["RN_DURATION"]),"10")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
SystemError: Object reference not set to an instance of an object.

The requested 2.0 RC2 output:
 >>> dir(mytestRun)
['Attachments', 'AutoPost', 'BPStepParamFactory', 'CancelRun', 
'CopyDesignSteps', 'CopyStepsToTest', 'CreateObjRef', 'Eq
uals', 'ExtendedStorage', 'Field', 'GetHashCode', 'GetLifetimeService', 
'GetType', 'HasAttachment', 'History', 'ID', 'In
itializeLifetimeService', 'IsLocked', 'LockObject', 'MemberwiseClone', 
'Modified', 'Name', 'Params', 'Post', 'ReferenceE
quals', 'Refresh', 'ResolveStepsParameters', 'ResultLocation', 'Status', 
'StepFactory', 'TestId', 'TestInstance', 'TestI
nstanceID', 'TestSetID', 'ToString', 'UnLockObject', 'Undo', 'Virtual', 
'__class__', '__delattr__', '__doc__', '__getatt
ribute__', '__hash__', '__init__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__str__']

Thank you,
Rodney Howeedy
Staff Engineer, Sun Microsystems


Dino Viehland wrote:
> This might be broken but the output of dir(mytestRun) might be helpful as well to make sure (e.g. maybe there'll be some set_Field method or something).
>
> But I suspect you might want to pass the -X:PreferComInteropAssembly command line option and I think that'll restore the beta 3 behavior for you.
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Rodney Howeedy
> Sent: Friday, December 05, 2008 3:35 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] 'DispPropertyGet' error returned from read-write COM interop property
>
> Stack trace for the statement that raises the SytemError:
>  >>> mytestRun.Field.Item['RN_USER_01'] = 'abc'
> Object reference not set to an instance of an object.
>    at
> IronPython.Runtime.Types.ReflectedGetterSetter.CallTarget(CodeContext
> context, SiteLocalStorage`1 storage, MethodInfo[] targets, Object
> instance, Object[] args)
>    at
> IronPython.Runtime.Types.ReflectedGetterSetter.CallSetter(CodeContext
> context, SiteLocalStorage`1 storage, Objectinstance, Object[] args,
> Object value)
>    at IronPython.Runtime.Types.ReflectedIndexer.SetValue(CodeContext
> context, SiteLocalStorage`1 storage, Object[] keys, Object value)
>    at
> IronPython.Runtime.Types.ReflectedIndexer.set_Item(SiteLocalStorage`1
> storage, Object[] key, Object value)
>    at _stub_$1209##669(Closure , CallSite , Object , String , String )
>    at
> Microsoft.Scripting.Actions.MatchCaller.Call3[T0,T1,T2,TRet](Func`5
> target, CallSite site, Object[] args)
>    at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
>    at
> Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallSite
> site, T0 arg0, T1 arg1, T2 arg2)
>    at <module>$1203##663(Closure , Scope , LanguageContext )
>    at
> Microsoft.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(LambdaExpression
> code, Scope scope)
>    at Microsoft.Scripting.ScriptCode.Run(Scope scope)
>    at
> IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction>b__0()
> SystemError: Object reference not set to an instance of an object.
>
> Dino Viehland wrote:
>   
>> What's the stack trace for the object reference exception if you run with the -X:ExceptionDetail option?
>>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Rodney Howeedy
>> Sent: Friday, December 05, 2008 3:22 PM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] 'DispPropertyGet' error returned from read-write COM interop property
>>
>> I found that one and tried before.  I didn't have any luck:
>>  >>> mytestRun.Field.Item['RN_USER_01'] = 'abc'
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> SystemError: Object reference not set to an instance of an object.
>>
>>  >>> print mytestRun.Field.Item['RN_USER_01']
>> None
>>
>> I couldn't decipher the error so I couldn't figure out what I'm doing
>> wrong.
>> I suspect the folks on this list can. =)
>>
>> Dino Viehland wrote:
>>
>>     
>>> Does:
>>>
>>> mytestRun.Field.Item['RN_USER_01'] = 'abc'
>>>
>>> work?
>>>
>>> -----Original Message-----
>>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Rodney Howeedy
>>> Sent: Friday, December 05, 2008 3:11 PM
>>> To: users at lists.ironpython.com
>>> Subject: [IronPython] 'DispPropertyGet' error returned from read-write COM interop property
>>>
>>> Hi everyone,
>>>
>>> I encounter an error with 2.0 RC2 that didn't occur in the same
>>> IronPython code on 2.0 Beta 3.
>>>
>>> I use a factory object from a COM interop assembly that has a read-write
>>> property named "Field".  I get a TypeError when I assign a value to this
>>> property (read-write):
>>>  >>> mytestRun.Field['RN_USER_01'] = 'abc'
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>> TypeError: 'DispPropertyGet' object is unsubscriptable
>>>
>>>  >>> print mytestRun.Field['RN_USER_01']
>>> None
>>>
>>> I imported the same COM interop assembly that worked with 2.0 Beta3.
>>> The interop was converted with tlbimp.exe from a COM API .dll.  Here's
>>> the 2.0 Beta3 output:
>>>  >>> mytestRun.Field['RN_USER_01'] = 'abc'
>>>  >>> print mytestRun.Field['RN_USER_01']
>>> abc
>>>
>>> My best guess is that IronPython 2.0 RC2 interprets the property as
>>> read-only even though the COM interop assembly defines the property
>>> read-write. The error occurs in IronPython 2.0 RC2 with every COM
>>> interop object with the read-write "Field" property.
>>>
>>> I can read the default assigned value but cannot assign anything.  Any
>>> ideas?  I'm fresh out of them after trying many permutations of the syntax.
>>>
>>> Thank you,
>>> Rodney Howeedy
>>> Staff Engineer, Sun Microsystems
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>>
>>>       
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>     
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   



More information about the Ironpython-users mailing list