Next design problem for me is version table. I have Document model
with DocumentVersion model, but i dont know how to:
- get the latest version of document
- set creator and updator, automatic behavior for this
- update version number
- fetch thru Document(s) and DocumentVersion(s)
Lets see the code sample i have prepared (raw sketch):
##################################################################
# Tables
##################################################################
users_table = Table("users", metadata,
Column("id", Integer, primary_key=True),
)
languages_table = Table("languages", metadata,
Column("id", Integer, primary_key=True),
Column("alpha2", String(2)),
Column("name", Unicode(100)),
)
documents_table = Table("documents", metadata,
Column("id", Integer, primary_key=True),
# how to get latest version
# Column("latest_version", Integer,
ForeignKey('document_versions.version'), default=1),
Column("created", DateTime, default=datetime.now),
# how to set creator and updator?
Column("creator", Integer, ForeignKey('users.id'),
default=uid_users_id),
)
document_versions_table = Table("document_versions", metadata,
Column("id", Integer, primary_key=True),
Column("document_id", Integer, ForeignKey('documents.id')),
Column("language_id", Integer, ForeignKey('language.id')),
Column("name", Unicode(64)),
Column("content", Unicode),
# how to update DocumentVersion.version ???
Column("version", Integer, default=1,
onupdate=DocumentVersion.version+1),
Column("updated", DateTime, default=datetime.now,
onupdate=datetime.now),
# how to set creator and updator?
Column("updator", Integer, ForeignKey('users.id'),
onupdate=uid_users_id),
)
##################################################################
# Models
##################################################################
class BaseObject(object):
def __init__(self):
self._repr_ = []
def __repr__(self):
from string import join
str = ', '.join("'%s'" % (self.__dict__[v]) for v in
self._repr_)
return "<%s(%s)>" % (self.__class__, str)
class NameObject(BaseObject):
def __init__(self, name):
BaseObject.__init__(self)
self.name = name
def __repr__(self):
self._repr_ = ["name"]
return BaseObject.__repr__(self)
class User(BaseObject):
def __init__(self):
BaseObject.__init__(self)
class Language(NameObject):
def __init__(self, alpha2, name):
NameObject.__init__(self, name)
self.alpha2 = alpha2
def __repr__(self):
self._repr_ = ["alpha2", "name"]
return BaseObject.__repr__(self)
class Document(BaseObject):
def __init__(self):
BaseObject.__init__(self)
def __repr__(self):
self._repr_ = ["created", "creator"]
return BaseObject.__repr__(self)
class DocumentVersion(NameObject):
def __init__(self, name, content = "", language = Null):
NameObject.__init__(self, name)
self.document = Document()
self.content = content
self.language = language
def __repr__(self):
self._repr_ = ["name", "document", "version"]
return BaseObject.__repr__(self)
class UserDocument(object):
pass
class OrganisationDocument(object):
pass
##################################################################
# Mappers
##################################################################
mapper(User, users_table)
mapper(Document, documents_table, properties={
'user':relation(User, backref="documentversions"),
}
)
mapper(DocumentVersion, document_versions_table, properties={
'document':relation(Document, backref="documentversions"),
'language':relation(Language, backref="documentversions"),
'user':relation(User, backref="documentversions"),
}
)
mapper(Language, languages_table)
"""
mapper(UserDocument, user_documents, properties={
'document':relation(DocumentVersion, backref="users"),
}
)
mapper(OrganisationDocument, organisation_documents, properties={
'document':relation(DocumentVersion, backref="organisations"),
}
)
"""
##################################################################
# Fixtures
##################################################################
language_fi = Language('fi', 'Finnish')
language_en = Language('en', 'English')
dv = DocumentVersion("My first document", "some content...",
language_en)
db_sess.save(dv)
# accidental english
dv = DocumentVersion("Toinen dokumentti", "hiukan tavaraa...",
language_en)
db_sess.save(dv)
##################################################################
# Tests and examples
##################################################################
dv = db_sess.query(DocumentVersion).filter_by(name="Toinen
dokumentti").first()
dv.language = language_fi
dv.save()
print dv # should have version 2
# how to fetch thru Document(s) and their DocumentVersion(s)
# how to set up UserDocument(s)
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---