stepz on #sqlalchemy helped me to get my mind together and followed me
through setting up all shown bellow:
-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------
from pylons import config
#from oil.lib.helpers import url_for
#from sqlalchemy import Column, MetaData, Table, types
import sqlalchemy as sqla
from sqlalchemy.orm import mapper, relation
from sqlalchemy.orm import scoped_session, sessionmaker
import datetime
from pytz import UTC
# Global session manager.
#S ession() returns the session object appropriate for the current web
request.
Session = scoped_session(sessionmaker(autoflush=True,
transactional=True,
bind=config['pylons.g'].sa_engine))
# Global metadata.
# If you have multiple databases with overlapping table names, you'll
need a
# metadata for each database.
metadata = sqla.MetaData()
users = sqla.Table('users', metadata,
sqla.Column('id', sqla.Integer, primary_key=True,
autoincrement=True),
sqla.Column('name', sqla.Unicode(60), nullable=False,
unique=True),
sqla.Column('openid', sqla.String),
sqla.Column('slug', sqla.String),
sqla.Column('signup', sqla.DateTime(timezone=True),
nullable=False),
sqla.Column('lastlogin', sqla.DateTime(timezone=True),
nullable=False),
sqla.Column('email', sqla.Unicode, nullable=True, unique=True),
sqla.Column('banned', sqla.Boolean, nullable=False,
default=False),
sqla.Column('type', sqla.String(7), nullable=False,
default="user"),
sqla.Column('language', sqla.Unicode, nullable=True,
default="en"),
sqla.Column('tzinfo', sqla.Unicode, nullable=True, default="UTC"),
)
class User(object):
def __init__(self, openid, name=None):
self.openid = openid
self.name = name if name is not None else openid
self.signup = datetime.datetime.utcnow()
self.updatelastlogin()
def __unicode__(self):
return self.name
def updatelastlogin(self):
self.lastlogin = datetime.datetime.utcnow()
def is_admin(self):
return self.type == 'admin'
def is_manager(self):
return self.type == 'manager'
bots = sqla.Table('bots', metadata,
sqla.Column('name', sqla.Unicode, nullable=False, unique=True,
primary_key=True),
sqla.Column('user_id', sqla.Integer, sqla.ForeignKey('users.id'))
)
class Bot(object):
def __init__(self, name):
self.name = name
networks = sqla.Table('networks', metadata,
sqla.Column('name', sqla.Unicode, nullable=False, unique=True,
primary_key=True),
sqla.Column('address', sqla.Unicode, nullable=False,
unique=False),
sqla.Column('port', sqla.Integer, nullable=False, unique=False),
)
class Network(object):
def __init__(self, address, port):
self.address = address
self.port = port
self.name = u'%s-%s' % (address, port)
def __unicode__(self):
return '%s:%s' % (self.address, self.port)
def __repr__(self):
return '<IRC Network: %s:%s>' % (self.address, self.port)
bots_on_network = sqla.Table('bots_on_network', metadata,
sqla.Column('id', sqla.Integer, primary_key=True,
autoincrement=True),
sqla.Column('network_name', sqla.Integer,
sqla.ForeignKey('networks.name')),
sqla.Column('bot_name', sqla.Integer,
sqla.ForeignKey('bots.name')),
sqla.Column('nick', sqla.Unicode, nullable=False, unique=True),
sqla.Column('passwd', sqla.Unicode, nullable=True, unique=False),
)
class BotsOnNetwork(object):
pass
channels = sqla.Table('channels', metadata,
sqla.Column('network_name', sqla.Integer,
sqla.ForeignKey('networks.name'),
primary_key=True),
sqla.Column('channel_name', sqla.Unicode, primary_key=True),
sqla.Column('topic', sqla.Unicode, nullable=True, unique=False),
sqla.Column('first_entry', sqla.Date, nullable=True,
unique=False),
sqla.Column('last_entry', sqla.Date, nullable=True, unique=False),
sqla.PrimaryKeyConstraint('network_name', 'channel_name')
)
class Channel(object):
def __init__(self, name):
self.name = name
def __repr__(self):
network =
Session.query(Network).filter_by(id=self.network_name).first()
return "<IRC Channel: '%s' on '%s:%d'>" % (
self.name, network.address, network.port
)
def __unicode__(self):
return self.name
bots_on_channels = sqla.Table('bots_on_channels', metadata,
sqla.Column('network_name', sqla.Integer),
sqla.Column('channel_name', sqla.Integer),
sqla.Column('bots_on_network_id', sqla.Integer,
sqla.ForeignKey('bots_on_network.id')),
sqla.PrimaryKeyConstraint('bots_on_network_id','network_name','channel_name'),
sqla.ForeignKeyConstraint(['network_name','channel_name'],
['channels.network_name','channels.channel_name'])
)
class BotsOnChannels(object):
pass
mapper(User, users, order_by=[sqla.asc(users.c.name)])
mapper(Bot, bots, order_by=[sqla.asc(bots.c.name)],
properties=dict(
manager=relation(User, backref='bots'),
networks=relation(BotsOnNetwork, backref='bots'),
)
)
mapper(BotsOnNetwork, bots_on_network,
order_by=[sqla.asc(bots_on_network.c.id)],
properties=dict(
channels=relation(BotsOnChannels, backref='bots_on_netw'),
)
)
mapper(BotsOnChannels, bots_on_channels,
order_by=[sqla.asc(bots_on_channels.c.bots_on_network_id)],
)
-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------
Ie, how it should be, unfortunately I sitll fail to know how to
relation() all this....
Any good pointers would be wonderfull, and your also allowed to joke
on me ;)
Regards,
--
Pedro Algarvio
__ ___ ___ _______ ___ __
| Y .' _| _ .-----.' _| |_ .-----.----.-----.
|. | | _| 1___| _ | _| _|__| _ | _| _ |
|. | |__| |____ |_____|__| |____|__|_____|__| |___ |
|: 1 | |: 1 | |_____|
|::.. . | |::.. . | ufs [AT] ufsoft [DOT] org
`-------' `-------' ufs [AT] sapo [DOT] pt
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---