Re: [Pyobjc-dev] Objc-agnostic model classes
Brought to you by:
ronaldoussoren
From: Bob I. <bo...@re...> - 2004-08-12 23:27:23
|
On Aug 12, 2004, at 7:15 PM, Jordan Krushen wrote: > However, in another project, I'm trying to have a resuable,=20 > pure-Python model class that can be used verbatim in the Twisted=20 > server to which this Cocoa app will communicate, with the model=20 > objects ultimately residing on said server (using Twisted's cacheable=20= > PB objects, perhaps) > > I tried making a pure-Python (no objc references) class that was=20 > created for each above Person class: > > class PyPerson (object): > def __init__(self): > self.personName =3D 'New Person' > self.expectedRaise =3D 6.0 > > ...and instantiating it as self.pyPerson in Person.py's init(), and=20 > then get/set self.pyPerson.whatever from Person.py's setters/getters,=20= > like so: > > def setExpectedRaise_(self, x): > self.pyPerson.expectedRaise =3D x.doubleValue() > setExpectedRaise_ =3D objc.accessor(setExpectedRaise_) > > (ignoring setter/getter methods in PyPerson for now, using direct=20 > attribute access) > > > This works, but is this the recommended way of doing things? Will I=20= > have to wrap all my pure-Python model objects with KVC shims like=20 > this? Should I simply override setValue:forKey: and valueForKey: and=20= > access the pure-Python model's methods that way? Will this bugger up=20= > nil-related attribute setting =E0 la setNilValueForKey: ? Having Python objects that don't inherit from NSObject cross the bridge=20= doesn't work as well as it could. Personally I think that everything=20 in PyObjC should support KVC unless explicitly told not to, especially=20= bridged pure python objects. That's more up to bill and ronald though. > Is there an auto-converter for any given objc type to a native,=20 > non-objc Python type, so that I don't have to call x.doubleValue(), or=20= > str(personName) every time, or should I write my own? There is and can't really be an "auto-converter". BTW: You should never str(personName) .. you should use unicode(...). =20= As for doubleValue(), etc. You don't know whether it's an integer,=20 double, etc. from the NSNumber so you're better off calling what you=20 want explicitly. > One more obligatory question, where I don't mean to offend, and I know=20= > that few people in this world are capable of fixing it, but: Any hope=20= > of getting Twisted to work with PyObjC again soon?: > http://www.twistedmatrix.com/users/roundup.twistd/twisted/issue648 > > I'm spending a lot of time trying to figure out how to get Cocoa to=20 > talk to the remote server, and may have to set up XML-RPC blocking=20 > calls to the Twisted server for now, and it's a bunch of extra work,=20= > and really doesn't give me the object access I'd want. Imagine having=20= > expectedRaise() call to a remote XML-RPC service every time the=20 > tableView calls it! I'd like to fix it but I'm too busy. I'm not sure when I'll have time.=20= I don't use PyObjC+Twisted in any sort of production application right=20= now. -bob |