Skip to content

Commit

Permalink
more cleans for model/package_relationship plus __init__
Browse files Browse the repository at this point in the history
  • Loading branch information
tobes committed Mar 29, 2012
1 parent 7274549 commit 478058d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 36 deletions.
30 changes: 17 additions & 13 deletions ckan/model/__init__.py
Expand Up @@ -32,6 +32,10 @@

log = logging.getLogger(__name__)

## CLEANUP related stuff to stop breakages
Session = meta.Session
engine_is_sqlite = meta.engine_is_sqlite

# set up in init_model after metadata is bound
version_table = None

Expand All @@ -45,7 +49,7 @@ def init_model(engine):
# sqlalchemy migrate version table
import sqlalchemy.exc
try:
version_table = Table('migrate_version', metadata, autoload=True)
version_table = Table('migrate_version', meta.metadata, autoload=True)
except sqlalchemy.exc.NoSuchTableError:
pass

Expand Down Expand Up @@ -81,12 +85,12 @@ def init_db(self):
self.tables_created_and_initialised = True

def clean_db(self):
metadata = MetaData(self.metadata.bind)
meta.metadata = MetaData(self.metadata.bind)
with warnings.catch_warnings():
warnings.filterwarnings('ignore', '.*(reflection|tsvector).*')
metadata.reflect()
meta.metadata.reflect()

metadata.drop_all()
meta.metadata.drop_all()
self.tables_created_and_initialised = False

def init_const_data(self):
Expand All @@ -96,20 +100,20 @@ def init_const_data(self):
PSEUDO_USER__VISITOR):
if not User.by_name(username):
user = User(name=username)
Session.add(user)
Session.flush() # so that these objects can be used
meta.Session.add(user)
meta.Session.flush() # so that these objects can be used
# straight away
init_authz_const_data()

def init_configuration_data(self):
'''Default configuration, for when CKAN is first used out of the box.
This state may be subsequently configured by the user.'''
init_authz_configuration_data()
if Session.query(Revision).count() == 0:
if meta.Session.query(Revision).count() == 0:
rev = Revision()
rev.author = 'system'
rev.message = u'Initialising the Repository'
Session.add(rev)
meta.Session.add(rev)
self.commit_and_remove()

def create_db(self):
Expand Down Expand Up @@ -185,9 +189,9 @@ def upgrade_db(self, version=None):
##pprint.pprint(getDiffOfModelAgainstDatabase(self.metadata, self.metadata.bind).colDiffs)

def are_tables_created(self):
metadata = MetaData(self.metadata.bind)
metadata.reflect()
return bool(metadata.tables)
meta.metadata = MetaData(self.metadata.bind)
meta.metadata.reflect()
return bool(meta.metadata.tables)

def purge_revision(self, revision, leave_record=False):
'''Purge all changes associated with a revision.
Expand Down Expand Up @@ -249,7 +253,7 @@ def purge_revision(self, revision, leave_record=False):
self.commit_and_remove()


repo = Repository(metadata, Session,
repo = Repository(meta.metadata, meta.Session,
versioned_objects=[Package, PackageTag, Resource, ResourceGroup, PackageExtra, Member, Group]
)

Expand Down Expand Up @@ -280,7 +284,7 @@ def _get_groups(self):
# could set this up directly on the mapper?
def _get_revision_user(self):
username = unicode(self.author)
user = Session.query(User).filter_by(name=username).first()
user = meta.Session.query(User).filter_by(name=username).first()
return user

Revision.packages = property(_get_packages)
Expand Down
46 changes: 23 additions & 23 deletions ckan/model/package_relationship.py
@@ -1,8 +1,9 @@
import vdm.sqlalchemy
from sqlalchemy import orm, types, Column, Table, ForeignKey

from meta import *
from core import *
from package import *
import meta
import core
import package as _package
import types as _types
import domain_object

Expand All @@ -15,17 +16,16 @@
def _(txt):
return txt


package_relationship_table = Table('package_relationship', metadata,
Column('id', UnicodeText, primary_key=True, default=_types.make_uuid),
Column('subject_package_id', UnicodeText, ForeignKey('package.id')),
Column('object_package_id', UnicodeText, ForeignKey('package.id')),
Column('type', UnicodeText),
Column('comment', UnicodeText),
package_relationship_table = Table('package_relationship', meta.metadata,
Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid),
Column('subject_package_id', types.UnicodeText, ForeignKey('package.id')),
Column('object_package_id', types.UnicodeText, ForeignKey('package.id')),
Column('type', types.UnicodeText),
Column('comment', types.UnicodeText),
)

vdm.sqlalchemy.make_table_stateful(package_relationship_table)
package_relationship_revision_table = make_revisioned_table(package_relationship_table)
package_relationship_revision_table = core.make_revisioned_table(package_relationship_table)

class PackageRelationship(vdm.sqlalchemy.RevisionedObjectMixin,
vdm.sqlalchemy.StatefulObjectMixin,
Expand Down Expand Up @@ -56,8 +56,7 @@ class PackageRelationship(vdm.sqlalchemy.RevisionedObjectMixin,
{'sibling':_('has sibling %s')}

def __str__(self):
from ckan import model
return '<%sPackageRelationship %s %s %s>' % ("*" if self.active != model.State.ACTIVE else "",
return '<%sPackageRelationship %s %s %s>' % ("*" if self.active != core.State.ACTIVE else "",
self.subject.name, self.type, self.object.name)

def __repr__(self):
Expand Down Expand Up @@ -89,25 +88,26 @@ def as_tuple(self, package):
of the given package with the object package object.
e.g. rel.as_tuple(warandpeace) gives (u'depends_on', annakarenina)
meaning warandpeace depends_on annakarenina.'''
assert isinstance(package, Package), package
assert isinstance(package, _package.Package), package
if self.subject == package:
type_str = self.type
other_package = self.object
elif self.object == package:
type_str = self.forward_to_reverse_type(self.type)
other_package = self.subject
else:
raise InputError('Package %s is not in this relationship: %s' % \
# FIXME do we want a more specific error
raise Exception('Package %s is not in this relationship: %s' % \
(package, self))
return (type_str, other_package)

@classmethod
def by_subject(cls, package):
return Session.query(cls).filter(cls.subject_package_id==package.id)
return meta.Session.query(cls).filter(cls.subject_package_id==package.id)

@classmethod
def by_object(cls, package):
return Session.query(cls).filter(cls.object_package_id==package.id)
return meta.Session.query(cls).filter(cls.object_package_id==package.id)

@classmethod
def get_forward_types(cls):
Expand Down Expand Up @@ -158,16 +158,16 @@ def make_type_printable(cls, type_):
return cls.types_printable[i][j]
raise TypeError, type_

mapper(PackageRelationship, package_relationship_table, properties={
'subject':relation(Package, primaryjoin=\
package_relationship_table.c.subject_package_id==Package.id,
meta.mapper(PackageRelationship, package_relationship_table, properties={
'subject':orm.relation(_package.Package, primaryjoin=\
package_relationship_table.c.subject_package_id==_package.Package.id,
backref='relationships_as_subject'),
'object':relation(Package, primaryjoin=package_relationship_table.c.object_package_id==Package.id,
'object':orm.relation(_package.Package, primaryjoin=package_relationship_table.c.object_package_id==_package.Package.id,
backref='relationships_as_object'),
},
extension = [vdm.sqlalchemy.Revisioner(package_relationship_revision_table)]
)

vdm.sqlalchemy.modify_base_object_mapper(PackageRelationship, Revision, State)
vdm.sqlalchemy.modify_base_object_mapper(PackageRelationship, core.Revision, core.State)
PackageRelationshipRevision = vdm.sqlalchemy.create_object_version(
mapper, PackageRelationship, package_relationship_revision_table)
meta.mapper, PackageRelationship, package_relationship_revision_table)

0 comments on commit 478058d

Please sign in to comment.