Re: [IronPython] .NET attributes for methods
This looks very promising but I cannot make it work. I have changed product.py in DevHawk's example to: #from clrtypeold import ClrMetaclass import clrtype class Product(object): #__metaclass__ = ClrMetaclass __metaclass__ = clrtype.ClrClass _clrnamespace = DevHawk.IronPython.ClrTypeSeries #_clrproperties = { #name:str, #cost:float, #quantity:int, #} def __init__(self, name, cost, quantity): self.name = name self.cost = cost self.quantity = quantity def calc_total(self): return self.cost * self.quantity @property @clrtype.accepts() @clrtype.returns(str) def name(self): return self._name @name.setter @clrtype.accepts(str) @clrtype.returns() def name(self, value): self._name = value When I run it I don't see any items in the listbox. When I check the name, it is a property: py a.root.listbox1.Items[0] = Product object at 0x002B py a.root.listbox1.Items[0].GetType().GetProperties() = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) Whe I used the old clrtype with _clrproperties = {'name': str, ...}, it worked. -- -- Lukáš Shri Borde wrote: Here is an updated version of clrtype.py that uses @property + @clrtype.accepts/@clrtype.returns to indicate a CLR property, instead of using _clrproperties. I think its more Pythonic in general, but also you should be able to modify @notify_property to work with it. Note that notify_property won't just work. You will have to change it to propagate the func_name, arg_types, and return_type properties from the old getter/setter function objects to the new getter/setter function objects since these values are used by clrtype to generate the CLR members. Something like this: class notify_property(property): def propagate_attributes(old_function, new_function): new_function.func_name = old_function.func_name new_function.arg_types = old_function.arg_types new_function.return_type = old_function.return_type def __init__(self, getter): def newgetter(slf): try: return getter(slf) except AttributeError: return None propagate_attributes(getter, newgetter) super(notify_property, self).__init__(newgetter) def setter(self, setter): def newsetter(slf, newvalue): oldvalue = self.fget(slf) if oldvalue != newvalue: setter(slf, newvalue) slf.OnPropertyChanged(setter.__name__) propagate_attributes(setter, newsetter) return property( fget=self.fget, fset=newsetter, fdel=self.fdel, doc=self.__doc__) *From:* Lukas Cenovsky [mailto:cenov...@bakalari.cz] *Sent:* Thursday, November 12, 2009 11:01 AM *To:* Shri Borde *Subject:* Re: [IronPython] .NET attributes for methods Shri Borde wrote: So the new clrtype.py still works - cool! Yep ;-) I am not an expert on data binding, so I don't have any suggestions. Why do you say that the decorator approach will not work with Silverlight? Does @notifiy_property from http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html use any feature not available in Silverlight? It does not (as far as I know because it is pure IronPython). But @notify_property does not work with clrtypes: class ViewModel(NotifyPropertyChangedBase): __metaclass__ = clrtype.ClrMetaclass _clrnamespace = Cenda.ViewModel _clrproperties = {'size': str} def __init__(self): super(ViewModel, self).__init__() # must be string to two-way binding work correctly self.size = '10' @notify_property def size(self): return self._size @size.setter def size(self, value): self._size = value print 'Size changed to %r' % self.size When I run this code, the size is still clr property and Python getter and setter are not run. So basically I need to override/enhance clr getter and setter created by clrtype._clrproperties. -- -- Lukáš *From:* Lukas Cenovsky [mailto:cenov...@bakalari.cz] *Sent:* Thursday, November 12, 2009 8:09 AM *To:* Shri Borde *Subject:* Re: [IronPython] .NET attributes for methods Thanks, that works! What do you think would be the best approach to create notifiable properties for Silverlight? I did it for WPF (via decorators: http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html) but it seems to me it won't be possible to do it similarly for Silverlight... -- -- Lukáš Shri Borde wrote: Can you use _clrproperties instead of _clrfields? DevHawk's same created a field and a property even when you just used _clrfields. I don't do that anymore. So you will need to use _clrproperties to get properties, which SL must use for data binding. *From:* users-boun
Re: [IronPython] .NET attributes for methods
, String name, Object[] bases, String selfNames) at unnamed$1.unnamed(CodeContext $globalContext, FunctionCode functionCode) at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx) at IronPython.Compiler.PythonScriptCode.Run(Scope scope) at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope) at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope) at Microsoft.Scripting.Hosting.CompiledCode.Execute(ScriptScope scope) at Microsoft.Scripting.Silverlight.DynamicEngine.Run(String entryPoint) at Microsoft.Scripting.Silverlight.DynamicApplication.DynamicApplication_Startupb__1() at Microsoft.Scripting.Silverlight.Cache.Download(List`1 uris, Action onComplete) at Microsoft.Scripting.Silverlight.HttpVirtualFilesystem.DownloadAndCache(List`1 uris, Action onComplete) at Microsoft.Scripting.Silverlight.DynamicScriptTags.DownloadExternalCode(Action onComplete) at Microsoft.Scripting.Silverlight.DynamicApplication.DynamicApplication_Startupb__0() at Microsoft.Scripting.Silverlight.DynamicLanguageConfig.DownloadLanguages(DynamicAppManifest appManifest, Action onComplete) at Microsoft.Scripting.Silverlight.DynamicApplication.DynamicApplication_Startup(Object sender, StartupEventArgs e) at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) | Shri Borde wrote: Here is an updated version of clrtype.py that uses @property + @clrtype.accepts/@clrtype.returns to indicate a CLR property, instead of using _clrproperties. I think its more Pythonic in general, but also you should be able to modify @notify_property to work with it. Note that notify_property won't just work. You will have to change it to propagate the func_name, arg_types, and return_type properties from the old getter/setter function objects to the new getter/setter function objects since these values are used by clrtype to generate the CLR members. Something like this: class notify_property(property): def propagate_attributes(old_function, new_function): new_function.func_name = old_function.func_name new_function.arg_types = old_function.arg_types new_function.return_type = old_function.return_type def __init__(self, getter): def newgetter(slf): try: return getter(slf) except AttributeError: return None propagate_attributes(getter, newgetter) super(notify_property, self).__init__(newgetter) def setter(self, setter): def newsetter(slf, newvalue): oldvalue = self.fget(slf) if oldvalue != newvalue: setter(slf, newvalue) slf.OnPropertyChanged(setter.__name__) propagate_attributes(setter, newsetter) return property( fget=self.fget, fset=newsetter, fdel=self.fdel, doc=self.__doc__) *From:* Lukas Cenovsky [mailto:cenov...@bakalari.cz] *Sent:* Thursday, November 12, 2009 11:01 AM *To:* Shri Borde *Subject:* Re: [IronPython] .NET attributes for methods Shri Borde wrote: So the new clrtype.py still works - cool! Yep ;-) I am not an expert on data binding, so I don't have any suggestions. Why do you say that the decorator approach will not work with Silverlight? Does @notifiy_property from http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html use any feature not available in Silverlight? It does not (as far as I know because it is pure IronPython). But @notify_property does not work with clrtypes: class ViewModel(NotifyPropertyChangedBase): __metaclass__ = clrtype.ClrMetaclass _clrnamespace = Cenda.ViewModel _clrproperties = {'size': str} def __init__(self): super(ViewModel, self).__init__() # must be string to two-way binding work correctly self.size = '10' @notify_property def size(self): return self._size @size.setter def size(self, value): self._size = value print 'Size changed to %r' % self.size When I run this code, the size is still clr property and Python getter and setter are not run. So basically I need to override/enhance clr getter and setter created by clrtype._clrproperties. -- -- Lukáš *From:* Lukas Cenovsky [mailto:cenov...@bakalari.cz] *Sent:* Thursday, November 12, 2009 8:09 AM *To:* Shri Borde *Subject:* Re: [IronPython] .NET attributes for methods Thanks, that works! What do you think would be the best approach to create notifiable properties for Silverlight? I did it for WPF (via decorators: http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html) but it seems to me it won't be possible to do it similarly
Re: [IronPython] .NET attributes for methods
I can help you create a property. And I can help you get it to work with your decorators (you can check if the name property exposes your @notify_property wrapper methods or not, and presumably that works). Beyond that, you are on your own :) I would try calling the property methods to make sure they are accessible. Something like this. If that works, I am not sure what Silverlight needs to make databinding happy. props = a.root.listbox1.Items[0].GetType().GetProperties() prop = props[0] prop.GetGetMethod.Invoke(a, None) # call using Reflection About the SystemError: Application code cannot access System.AppDomain.get_CurrentDomain() using Reflection. error when defining interfaces, it could be worked around. We need to call AppDomain.DefineDynamicAssembly, and IronPython itself does do this. So its just a question of figuring out the right way to access an AppDomain instance. Will look into it, but I doubt it will help you with data binding. From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Friday, November 13, 2009 5:42 AM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods This looks very promising but I cannot make it work. I have changed product.py in DevHawk's example to: #from clrtypeold import ClrMetaclass import clrtype class Product(object): #__metaclass__ = ClrMetaclass __metaclass__ = clrtype.ClrClass _clrnamespace = DevHawk.IronPython.ClrTypeSeries #_clrproperties = { #name:str, #cost:float, #quantity:int, #} def __init__(self, name, cost, quantity): self.name = name self.cost = cost self.quantity = quantity def calc_total(self): return self.cost * self.quantity @property @clrtype.accepts() @clrtype.returns(str) def name(self): return self._name @name.setter @clrtype.accepts(str) @clrtype.returns() def name(self, value): self._name = value When I run it I don't see any items in the listbox. When I check the name, it is a property: py a.root.listbox1.Items[0] = Product object at 0x002B py a.root.listbox1.Items[0].GetType().GetProperties() = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) Whe I used the old clrtype with _clrproperties = {'name': str, ...}, it worked. -- -- Lukáš Shri Borde wrote: Here is an updated version of clrtype.py that uses @property + @clrtype.accepts/@clrtype.returns to indicate a CLR property, instead of using _clrproperties. I think its more Pythonic in general, but also you should be able to modify @notify_property to work with it. Note that notify_property won't just work. You will have to change it to propagate the func_name, arg_types, and return_type properties from the old getter/setter function objects to the new getter/setter function objects since these values are used by clrtype to generate the CLR members. Something like this: class notify_property(property): def propagate_attributes(old_function, new_function): new_function.func_name = old_function.func_name new_function.arg_types = old_function.arg_types new_function.return_type = old_function.return_type def __init__(self, getter): def newgetter(slf): try: return getter(slf) except AttributeError: return None propagate_attributes(getter, newgetter) super(notify_property, self).__init__(newgetter) def setter(self, setter): def newsetter(slf, newvalue): oldvalue = self.fget(slf) if oldvalue != newvalue: setter(slf, newvalue) slf.OnPropertyChanged(setter.__name__) propagate_attributes(setter, newsetter) return property( fget=self.fget, fset=newsetter, fdel=self.fdel, doc=self.__doc__) From: Lukas Cenovsky [mailto:cenov...@bakalari.cz] Sent: Thursday, November 12, 2009 11:01 AM To: Shri Borde Subject: Re: [IronPython] .NET attributes for methods Shri Borde wrote: So the new clrtype.py still works - cool! Yep ;-) I am not an expert on data binding, so I don't have any suggestions. Why do you say that the decorator approach will not work with Silverlight? Does @notifiy_property from http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html use any feature not available in Silverlight? It does not (as far as I know because it is pure IronPython). But @notify_property does not work with clrtypes: class ViewModel(NotifyPropertyChangedBase): __metaclass__ = clrtype.ClrMetaclass _clrnamespace = Cenda.ViewModel _clrproperties = {'size': str} def __init__(self): super(ViewModel, self).__init__() # must be string to two-way binding work correctly self.size = '10
Re: [IronPython] .NET attributes for methods
Help with getting properties to work will hopefully resolve the databinding as well ;-) The property getter looks wrong but I have no idea what's wrong: py props = a.root.listbox1.Items[0].GetType().GetProperties() py props = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) py prop = props[0] py prop.GetGetMethod() = System.Reflection.RuntimeMethodInfo object at 0x002B [System.String name()] py prop.GetGetMethod().Invoke(a.root.listbox1.Items[0], None) System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. at module in string, line 0 Just for clarification a is Silverlight Application instance As for the interface error - this is a different strory. You may remember I created WCF service in IronPython with just interface defined in C#. To be able to move interface to IronPython, I need such interface to work with Silverlight too because Silverlight is the cause why I am building WCF services. -- -- Lukáš Shri Borde wrote: I can help you create a property. And I can help you get it to work with your decorators (you can check if the name property exposes your @notify_property wrapper methods or not, and presumably that works). Beyond that, you are on your own :) I would try calling the property methods to make sure they are accessible. Something like this. If that works, I am not sure what Silverlight needs to make databinding happy. props = a.root.listbox1.Items[0].GetType().GetProperties() prop = props[0] prop.GetGetMethod.Invoke(a, None) # call using Reflection About the SystemError: Application code cannot access System.AppDomain.get_CurrentDomain() using Reflection. error when defining interfaces, it could be worked around. We need to call AppDomain.DefineDynamicAssembly, and IronPython itself does do this. So its just a question of figuring out the right way to access an AppDomain instance. Will look into it, but I doubt it will help you with data binding. *From:* users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] *On Behalf Of *Lukas Cenovsky *Sent:* Friday, November 13, 2009 5:42 AM *To:* Discussion of IronPython *Subject:* Re: [IronPython] .NET attributes for methods This looks very promising but I cannot make it work. I have changed product.py in DevHawk's example to: #from clrtypeold import ClrMetaclass import clrtype class Product(object): #__metaclass__ = ClrMetaclass __metaclass__ = clrtype.ClrClass _clrnamespace = DevHawk.IronPython.ClrTypeSeries #_clrproperties = { #name:str, #cost:float, #quantity:int, #} def __init__(self, name, cost, quantity): self.name = name self.cost = cost self.quantity = quantity def calc_total(self): return self.cost * self.quantity @property @clrtype.accepts() @clrtype.returns(str) def name(self): return self._name @name.setter @clrtype.accepts(str) @clrtype.returns() def name(self, value): self._name = value When I run it I don't see any items in the listbox. When I check the name, it is a property: py a.root.listbox1.Items[0] = Product object at 0x002B py a.root.listbox1.Items[0].GetType().GetProperties() = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) Whe I used the old clrtype with _clrproperties = {'name': str, ...}, it worked. -- -- Lukáš Shri Borde wrote: Here is an updated version of clrtype.py that uses @property + @clrtype.accepts/@clrtype.returns to indicate a CLR property, instead of using _clrproperties. I think its more Pythonic in general, but also you should be able to modify @notify_property to work with it. Note that notify_property won't just work. You will have to change it to propagate the func_name, arg_types, and return_type properties from the old getter/setter function objects to the new getter/setter function objects since these values are used by clrtype to generate the CLR members. Something like this: class notify_property(property): def propagate_attributes(old_function, new_function): new_function.func_name = old_function.func_name new_function.arg_types = old_function.arg_types new_function.return_type = old_function.return_type def __init__(self, getter): def newgetter(slf): try: return getter(slf) except AttributeError: return None propagate_attributes(getter, newgetter) super(notify_property, self).__init__(newgetter) def setter(self, setter): def newsetter(slf, newvalue): oldvalue = self.fget(slf) if oldvalue != newvalue: setter(slf, newvalue) slf.OnPropertyChanged(setter.__name__) propagate_attributes
Re: [IronPython] .NET attributes for methods
Thanks to Shri and the new clrtype both issues are resolved. I will post details soon on my blog. -- -- Lukáš Lukas Cenovsky wrote: Help with getting properties to work will hopefully resolve the databinding as well ;-) The property getter looks wrong but I have no idea what's wrong: py props = a.root.listbox1.Items[0].GetType().GetProperties() py props = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) py prop = props[0] py prop.GetGetMethod() = System.Reflection.RuntimeMethodInfo object at 0x002B [System.String name()] py prop.GetGetMethod().Invoke(a.root.listbox1.Items[0], None) System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. at module in string, line 0 Just for clarification a is Silverlight Application instance As for the interface error - this is a different strory. You may remember I created WCF service in IronPython with just interface defined in C#. To be able to move interface to IronPython, I need such interface to work with Silverlight too because Silverlight is the cause why I am building WCF services. -- -- Lukáš Shri Borde wrote: I can help you create a property. And I can help you get it to work with your decorators (you can check if the name property exposes your @notify_property wrapper methods or not, and presumably that works). Beyond that, you are on your own :) I would try calling the property methods to make sure they are accessible. Something like this. If that works, I am not sure what Silverlight needs to make databinding happy. props = a.root.listbox1.Items[0].GetType().GetProperties() prop = props[0] prop.GetGetMethod.Invoke(a, None) # call using Reflection About the SystemError: Application code cannot access System.AppDomain.get_CurrentDomain() using Reflection. error when defining interfaces, it could be worked around. We need to call AppDomain.DefineDynamicAssembly, and IronPython itself does do this. So its just a question of figuring out the right way to access an AppDomain instance. Will look into it, but I doubt it will help you with data binding. *From:* users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] *On Behalf Of *Lukas Cenovsky *Sent:* Friday, November 13, 2009 5:42 AM *To:* Discussion of IronPython *Subject:* Re: [IronPython] .NET attributes for methods This looks very promising but I cannot make it work. I have changed product.py in DevHawk's example to: #from clrtypeold import ClrMetaclass import clrtype class Product(object): #__metaclass__ = ClrMetaclass __metaclass__ = clrtype.ClrClass _clrnamespace = DevHawk.IronPython.ClrTypeSeries #_clrproperties = { #name:str, #cost:float, #quantity:int, #} def __init__(self, name, cost, quantity): self.name = name self.cost = cost self.quantity = quantity def calc_total(self): return self.cost * self.quantity @property @clrtype.accepts() @clrtype.returns(str) def name(self): return self._name @name.setter @clrtype.accepts(str) @clrtype.returns() def name(self, value): self._name = value When I run it I don't see any items in the listbox. When I check the name, it is a property: py a.root.listbox1.Items[0] = Product object at 0x002B py a.root.listbox1.Items[0].GetType().GetProperties() = Array[PropertyInfo]((System.Reflection.RuntimePropertyInfo object at 0x002C [System.String name])) Whe I used the old clrtype with _clrproperties = {'name': str, ...}, it worked. -- -- Lukáš Shri Borde wrote: Here is an updated version of clrtype.py that uses @property + @clrtype.accepts/@clrtype.returns to indicate a CLR property, instead of using _clrproperties. I think its more Pythonic in general, but also you should be able to modify @notify_property to work with it. Note that notify_property won't just work. You will have to change it to propagate the func_name, arg_types, and return_type properties from the old getter/setter function objects to the new getter/setter function objects since these values are used by clrtype to generate the CLR members. Something like this: class notify_property(property): def propagate_attributes(old_function, new_function): new_function.func_name = old_function.func_name new_function.arg_types = old_function.arg_types new_function.return_type = old_function.return_type def __init__(self, getter): def newgetter(slf): try: return getter(slf) except AttributeError: return None propagate_attributes(getter, newgetter) super(notify_property, self).__init__(newgetter) def setter(self, setter): def newsetter(slf, newvalue): oldvalue = self.fget(slf) if oldvalue
Re: [IronPython] .NET attributes for methods
So the new clrtype.py still works - cool! I am not an expert on data binding, so I don't have any suggestions. Why do you say that the decorator approach will not work with Silverlight? Does @notifiy_property from http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html use any feature not available in Silverlight? From: Lukas Cenovsky [mailto:cenov...@bakalari.cz] Sent: Thursday, November 12, 2009 8:09 AM To: Shri Borde Subject: Re: [IronPython] .NET attributes for methods Thanks, that works! What do you think would be the best approach to create notifiable properties for Silverlight? I did it for WPF (via decorators: http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html) but it seems to me it won't be possible to do it similarly for Silverlight... -- -- Lukáš Shri Borde wrote: Can you use _clrproperties instead of _clrfields? DevHawk's same created a field and a property even when you just used _clrfields. I don't do that anymore. So you will need to use _clrproperties to get properties, which SL must use for data binding. From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Wednesday, November 11, 2009 2:37 AM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods I did change __metaclass__ to ClrMetaclass. See the attached source I use for testing - the only difference is to comment/uncomment appropriate part in product.py. The outputs look the same, there are no visible exceptions: DevHawk: py a.root.FindName('listbox1').ItemsSource[0].GetType().GetFields() = Array[FieldInfo]((System.Reflection.RtFieldInfo object at 0x002B [Double cost], System.Reflection.RtFieldInfo object at 0x002C [Int32 quantity], System.Reflection.RtFieldInfo object at 0x002D [System.String name], System.Reflection.RtFieldInfo object at 0x002E [IronPython.Runtime.Types.PythonType .class], System.Reflection.RtFieldInfo object at 0x002F [IronPython.Runtime.PythonDictionary .dict], System.Reflection.RtFieldInfo object at 0x0030 [System.Object[] .slots_and_weakref])) Shri: py a.root.FindName('listbox1').ItemsSource[0].GetType().GetFields() = Array[FieldInfo]((System.Reflection.RtFieldInfo object at 0x002B [Double cost], System.Reflection.RtFieldInfo object at 0x002C [Int32 quantity], System.Reflection.RtFieldInfo object at 0x002D [System.String name], System.Reflection.RtFieldInfo object at 0x002E [IronPython.Runtime.Types.PythonType .class], System.Reflection.RtFieldInfo object at 0x002F [IronPython.Runtime.PythonDictionary .dict], System.Reflection.RtFieldInfo object at 0x0030 [System.Object[] .slots_and_weakref])) -- -- Lukáš Shri Borde wrote: Note that you will have to set __metaclass__ to ClrMetaclass, not ClrTypeMetaclass as in DevHawk's sample. I had changed the name of the type. The old name will cause a NameError, but maybe SL is hiding exceptions. Can you do o.GetType().GetFields() and display that on the page to inspect the object and also make sure that no exceptions were thrown? From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Tuesday, November 10, 2009 2:59 PM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods I have just found that the Silverlight binding does not work with this version of clrtype and/or IronPython 2.6RC2. I used DevHawk demo [1] and after I added reference to Microsoft.Dynamic in clrtypemetaclass.py it worked flawlessly. But when I switch to your version, no items show in the listbox. By the way - I have seen a commit message you have added support for interfaces - nice! ;-) -- -- Lukáš [1] http://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/^_^_clrtype^_^_/SL%20databinding%20demo.ziphttp://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/%5E_%5E_clrtype%5E_%5E_/SL%20databinding%20demo.zip ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
Silverlight doesn't support ICustomTypeDescriptor -- that's probably why binding is failing. You need to emit CLR properties to use data binding with Silverlight 2 and 3. 2009/11/12 Shri Borde shri.bo...@microsoft.com So the new clrtype.py still works - cool! I am not an expert on data binding, so I don't have any suggestions. Why do you say that the decorator approach will not work with Silverlight? Does @notifiy_property from http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.htmluse any feature not available in Silverlight? *From:* Lukas Cenovsky [mailto:cenov...@bakalari.cz] *Sent:* Thursday, November 12, 2009 8:09 AM *To:* Shri Borde *Subject:* Re: [IronPython] .NET attributes for methods Thanks, that works! What do you think would be the best approach to create notifiable properties for Silverlight? I did it for WPF (via decorators: http://gui-at.blogspot.com/2009/11/inotifypropertychanged-in-ironpython.html) but it seems to me it won't be possible to do it similarly for Silverlight... -- -- Lukáš Shri Borde wrote: Can you use _clrproperties instead of _clrfields? DevHawk's same created a field and a property even when you just used _clrfields. I don't do that anymore. So you will need to use _clrproperties to get properties, which SL must use for data binding. *From:* users-boun...@lists.ironpython.com [ mailto:users-boun...@lists.ironpython.comusers-boun...@lists.ironpython.com] *On Behalf Of *Lukas Cenovsky *Sent:* Wednesday, November 11, 2009 2:37 AM *To:* Discussion of IronPython *Subject:* Re: [IronPython] .NET attributes for methods I did change __metaclass__ to ClrMetaclass. See the attached source I use for testing - the only difference is to comment/uncomment appropriate part in product.py. The outputs look the same, there are no visible exceptions: DevHawk: py a.root.FindName('listbox1').ItemsSource[0].GetType().GetFields() = Array[FieldInfo]((System.Reflection.RtFieldInfo object at 0x002B [Double cost], System.Reflection.RtFieldInfo object at 0x002C [Int32 quantity], System.Reflection.RtFieldInfo object at 0x002D [System.String name], System.Reflection.RtFieldInfo object at 0x002E [IronPython.Runtime.Types.PythonType .class], System.Reflection.RtFieldInfo object at 0x002F [IronPython.Runtime.PythonDictionary .dict], System.Reflection.RtFieldInfo object at 0x0030 [System.Object[] .slots_and_weakref])) Shri: py a.root.FindName('listbox1').ItemsSource[0].GetType().GetFields() = Array[FieldInfo]((System.Reflection.RtFieldInfo object at 0x002B [Double cost], System.Reflection.RtFieldInfo object at 0x002C [Int32 quantity], System.Reflection.RtFieldInfo object at 0x002D [System.String name], System.Reflection.RtFieldInfo object at 0x002E [IronPython.Runtime.Types.PythonType .class], System.Reflection.RtFieldInfo object at 0x002F [IronPython.Runtime.PythonDictionary .dict], System.Reflection.RtFieldInfo object at 0x0030 [System.Object[] .slots_and_weakref])) -- -- Lukáš Shri Borde wrote: Note that you will have to set __metaclass__ to ClrMetaclass, not ClrTypeMetaclass as in DevHawk's sample. I had changed the name of the type. The old name will cause a NameError, but maybe SL is hiding exceptions. Can you do o.GetType().GetFields() and display that on the page to inspect the object and also make sure that no exceptions were thrown? *From:* users-boun...@lists.ironpython.com [ mailto:users-boun...@lists.ironpython.comusers-boun...@lists.ironpython.com] *On Behalf Of *Lukas Cenovsky *Sent:* Tuesday, November 10, 2009 2:59 PM *To:* Discussion of IronPython *Subject:* Re: [IronPython] .NET attributes for methods I have just found that the Silverlight binding does not work with this version of clrtype and/or IronPython 2.6RC2. I used DevHawk demo [1] and after I added reference to Microsoft.Dynamic in clrtypemetaclass.py it worked flawlessly. But when I switch to your version, no items show in the listbox. By the way - I have seen a commit message you have added support for interfaces - nice! ;-) -- -- Lukáš [1] http://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/^_^_clrtype^_^_/SL%20databinding%20demo.ziphttp://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/%5E_%5E_clrtype%5E_%5E_/SL%20databinding%20demo.zip ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
I have just found that the Silverlight binding does not work with this version of clrtype and/or IronPython 2.6RC2. I used DevHawk demo [1] and after I added reference to Microsoft.Dynamic in clrtypemetaclass.py it worked flawlessly. But when I switch to your version, no items show in the listbox. By the way - I have seen a commit message you have added support for interfaces - nice! ;-) -- -- Lukáš [1] http://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/^_^_clrtype^_^_/SL%20databinding%20demo.zip http://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/%5E_%5E_clrtype%5E_%5E_/SL%20databinding%20demo.zip Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
Note that you will have to set __metaclass__ to ClrMetaclass, not ClrTypeMetaclass as in DevHawk's sample. I had changed the name of the type. The old name will cause a NameError, but maybe SL is hiding exceptions. Can you do o.GetType().GetFields() and display that on the page to inspect the object and also make sure that no exceptions were thrown? From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Tuesday, November 10, 2009 2:59 PM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods I have just found that the Silverlight binding does not work with this version of clrtype and/or IronPython 2.6RC2. I used DevHawk demo [1] and after I added reference to Microsoft.Dynamic in clrtypemetaclass.py it worked flawlessly. But when I switch to your version, no items show in the listbox. By the way - I have seen a commit message you have added support for interfaces - nice! ;-) -- -- Lukáš [1] http://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/^_^_clrtype^_^_/SL%20databinding%20demo.ziphttp://cid-0d9bc809858885a4.skydrive.live.com/self.aspx/DevHawk%20Content/IronPython%20Stuff/%5E_%5E_clrtype%5E_%5E_/SL%20databinding%20demo.zip Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
I was thinking about this... Does ir mean that (after adding such support to clrtype) and building a .dll from the interface class, this class can be used from c#? -- -- Lukáš Shri Borde wrote: The clrtype module could be extended to make it possible to declare CLR interfaces in Python code. Something like: class IFoo(object): *__metaclass__ = ClrType.ClrInterface # Proposed way to indicate an interface* @clrtype.accepts(int, str) @clrtype.returns(int) @clrtype.attribute(OperationContractAttribute)() def foo(i, s):raise RuntimeError(this should not get called) This does not work today... *From:* users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] *On Behalf Of *Lukas Cenovsky *Sent:* Friday, October 30, 2009 10:41 AM *To:* Discussion of IronPython *Subject:* Re: [IronPython] .NET attributes for methods Thanks. I wanted to implement WCF service in pure Ironpython but I overlooked the [OperationContract] method attribute is used in the interface declaration. Anyway, thanks to class attributes it is now possible to implement the WCF service in IronPython and have only the interface done in C#. See my blog post: http://gui-at.blogspot.com/2009/10/wcf-service-in-ironpython.html DllImport is good to have too - I can get rid of of my Win32API.dll when simulating user's input http://gui-at.blogspot.com/2008/07/simulate-users-input.html :-) -- -- Lukáš Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.com mailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.com mailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com mailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
It should be possible. However, note that you create the .dll using clr.GetSubclassedTypes (and clr.CompileSubclassedTypes) which requires you to run your application with all the scenarios you care about. You can't just run a simple command line like csc.exe foo.cs and get a dll. From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Monday, November 02, 2009 9:29 AM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods I was thinking about this... Does ir mean that (after adding such support to clrtype) and building a .dll from the interface class, this class can be used from c#? -- -- Lukáš Shri Borde wrote: The clrtype module could be extended to make it possible to declare CLR interfaces in Python code. Something like: class IFoo(object): __metaclass__ = ClrType.ClrInterface # Proposed way to indicate an interface @clrtype.accepts(int, str) @clrtype.returns(int) @clrtype.attribute(OperationContractAttribute)() def foo(i, s):raise RuntimeError(this should not get called) This does not work today... From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Friday, October 30, 2009 10:41 AM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods Thanks. I wanted to implement WCF service in pure Ironpython but I overlooked the [OperationContract] method attribute is used in the interface declaration. Anyway, thanks to class attributes it is now possible to implement the WCF service in IronPython and have only the interface done in C#. See my blog post: http://gui-at.blogspot.com/2009/10/wcf-service-in-ironpython.html DllImport is good to have too - I can get rid of of my Win32API.dll when simulating user's inputhttp://gui-at.blogspot.com/2008/07/simulate-users-input.html :-) -- -- Lukáš Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
Thanks. I wanted to implement WCF service in pure Ironpython but I overlooked the [OperationContract] method attribute is used in the interface declaration. Anyway, thanks to class attributes it is now possible to implement the WCF service in IronPython and have only the interface done in C#. See my blog post: http://gui-at.blogspot.com/2009/10/wcf-service-in-ironpython.html DllImport is good to have too - I can get rid of of my Win32API.dll when simulating user's input http://gui-at.blogspot.com/2008/07/simulate-users-input.html :-) -- -- Lukáš Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
Re: [IronPython] .NET attributes for methods
The clrtype module could be extended to make it possible to declare CLR interfaces in Python code. Something like: class IFoo(object): __metaclass__ = ClrType.ClrInterface # Proposed way to indicate an interface @clrtype.accepts(int, str) @clrtype.returns(int) @clrtype.attribute(OperationContractAttribute)() def foo(i, s):raise RuntimeError(this should not get called) This does not work today... From: users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Friday, October 30, 2009 10:41 AM To: Discussion of IronPython Subject: Re: [IronPython] .NET attributes for methods Thanks. I wanted to implement WCF service in pure Ironpython but I overlooked the [OperationContract] method attribute is used in the interface declaration. Anyway, thanks to class attributes it is now possible to implement the WCF service in IronPython and have only the interface done in C#. See my blog post: http://gui-at.blogspot.com/2009/10/wcf-service-in-ironpython.html DllImport is good to have too - I can get rid of of my Win32API.dll when simulating user's inputhttp://gui-at.blogspot.com/2008/07/simulate-users-input.html :-) -- -- Lukáš Shri Borde wrote: The following files extend DevHawk's blog and adds support for typed methods with attributes. It will be available as part of the samples released with the 2.6 RTM (over the next month). Do let us know if it works for you. Also, I would be curious to know what scenario you need method attributes for (other than DllImport for pinvokes)... -Original Message- From: users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com [mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky Sent: Thursday, October 22, 2009 10:37 AM To: Discussion of IronPython Subject: [IronPython] .NET attributes for methods Hi, I have read all DewHawk blogposts about .Net attributes in IronPython via __clrtype__ metaclass (http://devhawk.net/CategoryView,category,__clrtype__.aspx). He describes how to add attributes to classes but not to methods. Is there any example how to add attributes to a method. It looks like method generation is necessary (like for getter and setter or in http://www.voidspace.org.uk/python/weblog/arch_d7_2007_03_10.shtml#e659) but this is kind of deep magic for me... Thanks. -- -- Lukáš ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.commailto:Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com ___ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com