diff --git a/ckan/model/activity.py b/ckan/model/activity.py index 252560f4b67..e31e355c11d 100644 --- a/ckan/model/activity.py +++ b/ckan/model/activity.py @@ -6,6 +6,7 @@ from core import * from package import * import types as _types +import domain_object __all__ = ['Activity', 'activity_table', 'ActivityDetail', 'activity_detail_table', @@ -32,7 +33,7 @@ Column('data', _types.JsonDictType), ) -class Activity(DomainObject): +class Activity(domain_object.DomainObject): def __init__(self, user_id, object_id, revision_id, activity_type, data=None): @@ -49,7 +50,7 @@ def __init__(self, user_id, object_id, revision_id, activity_type, mapper(Activity, activity_table) -class ActivityDetail(DomainObject): +class ActivityDetail(domain_object.DomainObject): def __init__(self, activity_id, object_id, object_type, activity_type, data=None): diff --git a/ckan/model/authz.py b/ckan/model/authz.py index d52aace2efc..f39aa0e99ba 100644 --- a/ckan/model/authz.py +++ b/ckan/model/authz.py @@ -5,12 +5,12 @@ from meta import * from core import * from package import * -from group import Group -from types import make_uuid -from user import User +import group +import user as _user from core import System import authorization_group as auth_group import domain_object +import types as _types PSEUDO_USER__LOGGED_IN = u'logged_in' PSEUDO_USER__VISITOR = u'visitor' @@ -88,14 +88,14 @@ class Role(Enum): ## Table Definitions role_action_table = Table('role_action', metadata, - Column('id', UnicodeText, primary_key=True, default=make_uuid), + Column('id', UnicodeText, primary_key=True, default=_types.make_uuid), Column('role', UnicodeText), Column('context', UnicodeText, nullable=False), Column('action', UnicodeText), ) user_object_role_table = Table('user_object_role', metadata, - Column('id', UnicodeText, primary_key=True, default=make_uuid), + Column('id', UnicodeText, primary_key=True, default=_types.make_uuid), Column('user_id', UnicodeText, ForeignKey('user.id'), nullable=True), Column('authorized_group_id', UnicodeText, ForeignKey('authorization_group.id'), nullable=True), Column('context', UnicodeText, nullable=False), # stores subtype @@ -157,7 +157,7 @@ def get_object_role_class(cls, domain_obj): @classmethod def user_has_role(cls, user, role, domain_obj): - assert isinstance(user, User), user + assert isinstance(user, _user.User), user q = cls._user_query(user, role, domain_obj) return q.count() == 1 @@ -252,7 +252,7 @@ def __repr__(self): protected_objects[PackageRole.protected_object] = PackageRole class GroupRole(UserObjectRole): - protected_object = Group + protected_object = group.Group name = 'group' def __repr__(self): @@ -346,18 +346,18 @@ def setup_user_roles(_domain_object, visitor_roles, logged_in_roles, admins=[]): '''NB: leaves caller to commit change''' assert type(admins) == type([]) admin_roles = [Role.ADMIN] - visitor = User.by_name(PSEUDO_USER__VISITOR) + visitor = _user.User.by_name(PSEUDO_USER__VISITOR) assert visitor for role in visitor_roles: add_user_to_role(visitor, role, _domain_object) - logged_in = User.by_name(PSEUDO_USER__LOGGED_IN) + logged_in = _user.User.by_name(PSEUDO_USER__LOGGED_IN) assert logged_in for role in logged_in_roles: add_user_to_role(logged_in, role, _domain_object) for admin in admins: # not sure if admin would reasonably by None if admin is not None: - assert isinstance(admin, User), admin + assert isinstance(admin, _user.User), admin if admin.name in (PSEUDO_USER__LOGGED_IN, PSEUDO_USER__VISITOR): raise NotRealUserException('Invalid user for domain object admin %r' % admin.name) for role in admin_roles: @@ -381,7 +381,7 @@ def give_all_packages_default_user_roles(): for rev in revs: if rev.revision.author: # rev author is not Unicode!! - user = User.by_name(unicode(rev.revision.author)) + user = _user.User.by_name(unicode(rev.revision.author)) if user: admins.append(user) # remove duplicates @@ -431,7 +431,7 @@ def setup_default_user_roles(_domain_object, admins=[]): @param admins - a list of User objects NB: leaves caller to commit change. ''' - assert isinstance(_domain_object, (Package, Group, System, auth_group.AuthorizationGroup)), _domain_object + assert isinstance(_domain_object, (Package, group.Group, System, auth_group.AuthorizationGroup)), _domain_object assert isinstance(admins, list) user_roles_ = get_default_user_roles(_domain_object) setup_user_roles(_domain_object, @@ -443,7 +443,7 @@ def clear_user_roles(_domain_object): assert isinstance(_domain_object, domain_object.DomainObject) if isinstance(_domain_object, Package): q = Session.query(PackageRole).filter_by(package=_domain_object) - elif isinstance(_domain_object, Group): + elif isinstance(_domain_object, group.Group): q = Session.query(GroupRole).filter_by(group=_domain_object) else: raise NotImplementedError() @@ -461,7 +461,7 @@ def clear_user_roles(_domain_object): polymorphic_on=user_object_role_table.c.context, polymorphic_identity=u'user_object', properties={ - 'user': orm.relation(User, + 'user': orm.relation(_user.User, backref=orm.backref('roles', cascade='all, delete, delete-orphan' ) @@ -488,9 +488,9 @@ def clear_user_roles(_domain_object): ) mapper(GroupRole, group_role_table, inherits=UserObjectRole, - polymorphic_identity=unicode(Group.__name__), + polymorphic_identity=unicode(group.Group.__name__), properties={ - 'group': orm.relation(Group, + 'group': orm.relation(group.Group, backref=orm.backref('roles', cascade='all, delete, delete-orphan' ), diff --git a/ckan/model/group.py b/ckan/model/group.py index 70925563811..d935c8cc412 100644 --- a/ckan/model/group.py +++ b/ckan/model/group.py @@ -3,9 +3,9 @@ from meta import * from core import * from sqlalchemy.orm import eagerload_all -from domain_object import DomainObject from package import * -from types import make_uuid +import types as _types +import domain_object import vdm.sqlalchemy from ckan.model import extension, User from sqlalchemy.ext.associationproxy import association_proxy @@ -15,7 +15,7 @@ 'member_revision_table', 'member_table'] member_table = Table('member', metadata, - Column('id', UnicodeText, primary_key=True, default=make_uuid), + Column('id', UnicodeText, primary_key=True, default=_types.make_uuid), Column('table_name', UnicodeText, nullable=False), Column('table_id', UnicodeText, nullable=False), Column('capacity', UnicodeText, nullable=False), @@ -26,7 +26,7 @@ member_revision_table = make_revisioned_table(member_table) group_table = Table('group', metadata, - Column('id', UnicodeText, primary_key=True, default=make_uuid), + Column('id', UnicodeText, primary_key=True, default=_types.make_uuid), Column('name', UnicodeText, nullable=False, unique=True), Column('title', UnicodeText), Column('type', UnicodeText, nullable=False), @@ -41,7 +41,7 @@ class Member(vdm.sqlalchemy.RevisionedObjectMixin, vdm.sqlalchemy.StatefulObjectMixin, - DomainObject): + domain_object.DomainObject): def __init__(self, group=None, table_id=None, group_id=None, table_name=None, capacity='member', state='active'): self.group = group @@ -76,7 +76,7 @@ def related_packages(self): class Group(vdm.sqlalchemy.RevisionedObjectMixin, vdm.sqlalchemy.StatefulObjectMixin, - DomainObject): + domain_object.DomainObject): def __init__(self, name=u'', title=u'', description=u'', type=u'group', approval_status=u'approved' ): @@ -183,7 +183,7 @@ def search_by_name(cls, text_query, group_type=None): return q.order_by(cls.title) def as_dict(self, ref_package_by='name'): - _dict = DomainObject.as_dict(self) + _dict = domain_object.DomainObject.as_dict(self) _dict['packages'] = [getattr(package, ref_package_by) for package in self.packages] _dict['extras'] = dict([(key, value) for key, value in self.extras.items()]) if ( self.type == 'publisher' ): diff --git a/ckan/model/package.py b/ckan/model/package.py index 26f8022a9aa..17d869df3c8 100644 --- a/ckan/model/package.py +++ b/ckan/model/package.py @@ -12,10 +12,10 @@ from meta import metadata, Session import vdm.sqlalchemy -from types import make_uuid, iso_date_to_datetime_for_sqlite from core import make_revisioned_table, Revision, State from license import License, LicenseRegister -from domain_object import DomainObject +import types as _types +import domain_object import ckan.misc from activity import Activity, ActivityDetail @@ -29,7 +29,7 @@ ## Our Domain Object Tables package_table = Table('package', metadata, - Column('id', types.UnicodeText, primary_key=True, default=make_uuid), + Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid), Column('name', types.Unicode(PACKAGE_NAME_MAX_LENGTH), nullable=False, unique=True), Column('title', types.UnicodeText), @@ -53,7 +53,7 @@ class Package(vdm.sqlalchemy.RevisionedObjectMixin, vdm.sqlalchemy.StatefulObjectMixin, - DomainObject): + domain_object.DomainObject): text_search_fields = ['name', 'title'] @@ -248,7 +248,7 @@ def get_average_rating(self): return total / len(self.ratings) def as_dict(self, ref_package_by='name', ref_group_by='name'): - _dict = DomainObject.as_dict(self) + _dict = domain_object.DomainObject.as_dict(self) # Set 'license' in _dict to cater for old clients. # Todo: Remove from Version 2? _dict['license'] = self.license.title if self.license else _dict.get('license_id', '') @@ -554,7 +554,7 @@ def metadata_modified(self): result = conn.execute(query).fetchone() if result: - result_datetime = iso_date_to_datetime_for_sqlite(result[0]) + result_datetime = _types.iso_date_to_datetime_for_sqlite(result[0]) timestamp_without_usecs = result_datetime.utctimetuple() usecs = float(result_datetime.microsecond) / 1e6 # use timegm instead of mktime, because we don't want it localised diff --git a/ckan/model/package_extra.py b/ckan/model/package_extra.py index cf3a3432ef9..7b37a0ce3cb 100644 --- a/ckan/model/package_extra.py +++ b/ckan/model/package_extra.py @@ -1,22 +1,21 @@ from meta import * -from types import make_uuid import vdm.sqlalchemy from core import * from package import * -from types import JsonType from ckan.model import extension import domain_object +import types as _types __all__ = ['PackageExtra', 'package_extra_table', 'PackageExtraRevision', 'extra_revision_table'] package_extra_table = Table('package_extra', metadata, - Column('id', UnicodeText, primary_key=True, default=make_uuid), + Column('id', UnicodeText, primary_key=True, default=_types.make_uuid), # NB: only (package, key) pair is unique Column('package_id', UnicodeText, ForeignKey('package.id')), Column('key', UnicodeText), - Column('value', JsonType), + Column('value', _types.JsonType), ) vdm.sqlalchemy.make_table_stateful(package_extra_table) diff --git a/ckan/model/tag.py b/ckan/model/tag.py index f3fd0f6f148..71d7d5ea0ad 100644 --- a/ckan/model/tag.py +++ b/ckan/model/tag.py @@ -1,11 +1,11 @@ import sqlalchemy import vdm.sqlalchemy -from types import make_uuid from meta import * -from domain_object import DomainObject from package import Package from core import * +import types as _types +import domain_object import vocabulary import activity import ckan @@ -18,7 +18,7 @@ MIN_TAG_LENGTH = 2 tag_table = Table('tag', metadata, - Column('id', types.UnicodeText, primary_key=True, default=make_uuid), + Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid), Column('name', types.Unicode(MAX_TAG_LENGTH), nullable=False), Column('vocabulary_id', types.Unicode(vocabulary.VOCABULARY_NAME_MAX_LENGTH), @@ -27,7 +27,7 @@ ) package_tag_table = Table('package_tag', metadata, - Column('id', types.UnicodeText, primary_key=True, default=make_uuid), + Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid), Column('package_id', types.UnicodeText, ForeignKey('package.id')), Column('tag_id', types.UnicodeText, ForeignKey('tag.id')), ) @@ -36,7 +36,7 @@ # TODO: this has a composite primary key ... package_tag_revision_table = make_revisioned_table(package_tag_table) -class Tag(DomainObject): +class Tag(domain_object.DomainObject): def __init__(self, name='', vocabulary_id=None): self.name = name self.vocabulary_id = vocabulary_id @@ -186,7 +186,7 @@ def __repr__(self): class PackageTag(vdm.sqlalchemy.RevisionedObjectMixin, vdm.sqlalchemy.StatefulObjectMixin, - DomainObject): + domain_object.DomainObject): def __init__(self, package=None, tag=None, state=None, **kwargs): self.package = package self.tag = tag diff --git a/ckan/model/term_translation.py b/ckan/model/term_translation.py index 394754cceed..822ee74c324 100644 --- a/ckan/model/term_translation.py +++ b/ckan/model/term_translation.py @@ -1,8 +1,5 @@ -import sqlalchemy as sa from meta import * from core import * -from types import make_uuid -from datetime import datetime __all__ = ['term_translation_table']