I just updated my version of SA by checking out what is in TRUNK, and
noticed the following which seems like a bug. I run the following
code:

uow = objectstore.begin()
s = Session()
s.secret = 'secret'
s.logon = 'testuser'
uow.commit()

# Works just fine

uow = objectstore.begin()
s2 = Session()
s2.secret = 'secret2'
s2.logon = 'testuser2'
uow.commit()

# Wroks just fine

uow = objectstore.begin()
s3 = Session()
s3.secret = 'secret3'
s3.logon = 'testuser3'
s3.timestamp = datetime.datetime.now()
uow.commit()

# Returns the following exception: TypeError: argument 1 must be
DateTime, not datetime.datetime

# and I continue

uow = objectstore.begin()
s4 = Session()
s4.secret = 'secret3'
s4.logon = 'testuser3'
uow.commit()

# The commit no longer works! As a matter of fact no new create of a
Session object works after the exception!

Now the exception arose because I was using datetime instead of mx's
DateTime, however it does seem strange that commits would stop working
because of an exception.

Below are all the definitions which I hope can help reproduce the problem:


CREATE TABLE sessions (
sess_id                 VARCHAR(128)    NOT NULL PRIMARY KEY,
sess_logon           TEXT            NOT NULL,
sess_ts                 TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sess_logon) REFERENCES users (usr_logon) ON DELETE
cascade ON UPDATE cascade
) WITHOUT OIDS;

CREATE TABLE users (
usr_id                  BIGSERIAL       NOT NULL PRIMARY KEY,
usr_logon               TEXT            NOT NULL,
usr_name                TEXT            NOT NULL,
usr_passwd             TEXT            NOT NULL,
UNIQUE(usr_logon)
) WITHOUT OIDS;

users = Table('users', db,
    Column('usr_id', Integer, Sequence('users_id_seq',optional=False),
primary_key=True),
    Column('usr_logon', String, nullable=False),
    Column('usr_pp', String, nullable=False),
    Column('usr_name', String, nullable=False))

sessions = Table('sessions', db,
    Column('sess_id', Integer,
Sequence('sessions_id_seq',optional=False), primary_key=True),
    Column('sess_logon', String,  ForeignKey('users.usr_logon'),
nullable=False),
    Column('sess_ts', DateTime, nullable=True))

assign_mapper(Session, tables.sessions, properties={
    'secret': tables.sessions.c.sess_id,
    'logon': tables.sessions.c.sess_logon,
    'timestamp': tables.sessions.c.sess_ts,})

assign_mapper(User, tables.users, properties={
    'usr_id': tables.users.c.usr_id,
    'logon': tables.users.c.usr_logon,
    'passwd': tables.users.c.usr_passwd,
    'name': tables.users.c.usr_name,})

Reply via email to