Ha, human error!

The corrected Events:

class Event(sqlobject):
  WorldTakeOverId = ForeignKey('WorldTakeOver',cascade=False)
  EventDate = DateCol(default= datetime.now())
  EventTypeId = ForeignKey("EventType",cascade=False)
  Description = UnicodeCol(default=None)
  def _init(self,*args,**kwargs):
    """
    When we create an Event, we have to update the WorldTakeOver object
    so it knows the LastEventDate and its current status, if any.
    """
    >>> SQLObject._init(self, *args, **kwargs) <<<
    wto = WorldTakeOver.get(self.WorldTakeOverId)
    wto.LastEventDate = self.EventDate
    if self.debug: print "New event. Status:", self.Type.Status
    if self.Type.Status:
      opt.CurrentStatus = self.Type.Status
      if self.debug: print "Updated WorldTakeOver status:",wto.CurrentStatus

However, I'm still fascinated that this didn't cause any problems when we add rows to the table, only when we try to read them.

Molly

On 5/22/07, Molly Aplet <meaplet@gmail.com> wrote:
I've got two classes (which I'm simplifying here for the sake of an easier demonstration).

class WorldTakeOver(sqlobject):
  Events = MultipleJoin('Event',joinColumn="OptimizationId")
  LastEventDate = DateTimeCol(default=None)
  CurrentStatus = UnicodeCol(default=None)
  Notes = UnicodeCol(default=None)
  def AddEvent(self,event_name,desc=None):
    et = EventType.byName(event_name)
    e = Event(OptimizationId= self.id,EventTypeId=et.id ,Description=desc)

class Event(sqlobject):
  WorldTakeOverId = ForeignKey(WorldTakeOver',cascade=False)
  EventDate = DateCol(default= datetime.now())
  EventTypeId = ForeignKey("EventType",cascade=False)
  Description = UnicodeCol(default=None)
  def _init(self,*args,**kwargs):
    """
    When we create an Event, we have to update the WorldTakeOver object
    so it knows the LastEventDate and its current status, if any.
    """
    wto = WorldTakeOver.get(self.WorldTakeOverId)
    wto.LastEventDate = self.EventDate
    if self.debug: print "New event. Status:", self.Type.Status
    if self.Type.Status:
      opt.CurrentStatus = self.Type.Status
      if self.debug: print "Updated WorldTakeOver status:",wto.CurrentStatus


I'm having trouble accessing my Event objects. What's strange is that there are no issues with creating events in the first place. However, both (for example)

w = WorldTakeOver.get(123)
w.Events

and

e = Event.get(123)

throw the same error:

  File "<stdin>", line 1, in ?
  File "/usr/local/lib/python2.4/site-packages/SQLObject- 0.7.4-py2.4.egg/sqlobject/main.py", line 920, in get
    val._init(id, connection, selectResults)
  File "WorldTakeOver.py", line 253, in _init
    wto = WorldTakeOver.get(self.WorldTakeOverId)
  File "<string>", line 1, in <lambda>
  File "/usr/local/lib/python2.4/site-packages/SQLObject-0.7.4-py2.4.egg/sqlobject/main.py", line 997, in _SO_loadValue
    self._SO_writeLock.release()
AttributeError: 'Event' object has no attribute '_SO_writeLock'

I'm not using any locks on these objects at all, so I'm not sure why I'm encountering a writeLock when I try to read the object but not when I write it. Is there anything I'm overlooking here?

Thanks,
Molly