Hi all:

Hoping some kind soul on the list will be able to advise on this use/
implementation problem I'm having:

I have two tables (both declarative representations): the first,
Device, describes devices (device ID, import time, other details), and
the second, DeviceState, lists state changes for those devices (device
ID, old state, new state, timestamp). The device table is imported
daily and contains state information at the time the export is
performed. The state changes come in to DeviceState as the devices
change state.

I have a property on Device as follows:

@property
def curradminstate(self):
return
Session.query(DeviceState.adminstate).filter(DeviceState.deviceid ==
self.deviceid).filter(DeviceState.insert_ts >
self.import_ts).order_by(desc(DeviceState.insert_ts)).limit(1).scalar()
or self.adminstate

... and this "works" as expected: that is, I can query
device.curradminstate as a property instead of a method.

I'd like to create a Comparator so I can do something like the
following:

Session.Query(Device).filter(Device.curradminstate == "ACTIVE")

but I'm completely lost as to how to do this. I've tried creating a
class that returns a PropComparator but it hasn't worked (I get a
variety of errors; here's my latest attempt which has at least one
error in doit()):

class AdminStateComparator(PropComparator):
    '''
    Compares admin states (case-insensitive)
    '''
    def doit(self):
        device = self.prop.parent.class_
        return
Session.query(DeviceState.adminstate).filter(DeviceState.deviceid ==
device.deviceid).filter(DeviceState.insert_ts >
self.import_ts).order_by(desc(DeviceState.insert_ts)).limit(1).scalar()
or device.adminstate
    sprop = property(doit)
    def operate(self,op,other,**kwargs):
        return op(self.sprop,other,**kwargs)

(hope the formatting came through - if not, assume appropriate
indentation.)
I have read the docs (several times!) but don't quite understand how
PropComparator is supposed to work, especially with multiple tables. I
got it working with transparent encryption/decryption (using
func.aes_encrypt) for another table, but that was within a single
table. In addition, I'm enough of a novice with SQL that I can't even
describe what I want to do that way - I'm hoping someone on the list
will be able to help regardless.

Thanks,

S.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to