Skip to content

Commit

Permalink
more model cleanups
Browse files Browse the repository at this point in the history
  • Loading branch information
tobes committed Apr 26, 2012
1 parent fc58cb0 commit b73e1cc
Show file tree
Hide file tree
Showing 17 changed files with 77 additions and 34 deletions.
11 changes: 10 additions & 1 deletion ckan/model/__init__.py
Expand Up @@ -50,6 +50,8 @@

Activity = activity.Activity
ActivityDetail = activity.ActivityDetail
#activity_table
#activity_detail_table

NotRealUserException = authz.NotRealUserException
Enum = authz.Enum
Expand Down Expand Up @@ -80,8 +82,12 @@
member_revision_table = group.member_revision_table
group_table = group.group_table
GroupRevision = group.GroupRevision
#MemberRevision
#member_table

GroupExtra = group_extra.GroupExtra
#group_extra_table
#GroupExtraRevision

Package = package.Package
PACKAGE_NAME_MIN_LENGTH = package.PACKAGE_NAME_MIN_LENGTH
Expand All @@ -106,10 +112,12 @@
Resource = resource.Resource
ResourceGroup = resource.ResourceGroup
ResourceRevision = resource.ResourceRevision
DictProxy = resource.DictProxy
#DictProxy = resource.DictProxy
resource_group_table = resource.resource_group_table
resource_table = resource.resource_table
resource_revision_table = resource.resource_revision_table
#ResourceGroupRevision
#resource_group_revision_table

Tag = tag.Tag
PackageTag = tag.PackageTag
Expand All @@ -121,6 +129,7 @@
package_tag_revision_table = tag.package_tag_revision_table

TaskStatus = task_status.TaskStatus
#task_status_table

User = user.User
user_table = user.user_table
Expand Down
4 changes: 4 additions & 0 deletions ckan/model/authorization_group.py
Expand Up @@ -7,6 +7,10 @@
import types as _types
import domain_object

__all__ = ['AuthorizationGroup', 'AuthorizationGroupUser',
'user_in_authorization_group', 'add_user_to_authorization_group',
'remove_user_from_authorization_group']

authorization_group_table = Table('authorization_group', meta.metadata,
Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid),
Column('name', types.UnicodeText),
Expand Down
15 changes: 13 additions & 2 deletions ckan/model/authz.py
Expand Up @@ -2,6 +2,8 @@
doc/authorization.rst.
'''
import simplejson as json

from sqlalchemy import orm, types, Column, Table, ForeignKey
from pylons import config

Expand All @@ -13,7 +15,16 @@
import authorization_group as auth_group
import domain_object
import types as _types
import ckan.lib.helpers as h

__all__ = ['NotRealUserException', 'Enum', 'Action', 'Role', 'RoleAction',
'UserObjectRole', 'PackageRole', 'GroupRole',
'AuthorizationGroupRole', 'SystemRole', 'PSEUDO_USER__VISITOR',
'PSEUDO_USER__LOGGED_IN', 'init_authz_const_data',
'init_authz_configuration_data', 'add_user_to_role',
'add_authorization_group_to_role', 'setup_user_roles',
'setup_default_user_roles', 'give_all_packages_default_user_roles',
'user_has_role', 'remove_user_from_role',
'remove_authorization_group_from_role', 'clear_user_roles']

PSEUDO_USER__LOGGED_IN = u'logged_in'
PSEUDO_USER__VISITOR = u'visitor'
Expand Down Expand Up @@ -412,7 +423,7 @@ def _get_default_user_roles(_domain_object):
if user_roles_json is None:
user_roles_str = default_default_user_roles[obj_type]
else:
user_roles_str = h.json.loads(user_roles_json) if user_roles_json else {}
user_roles_str = json.loads(user_roles_json) if user_roles_json else {}
unknown_keys = set(user_roles_str.keys()) - set(('visitor', 'logged_in'))
assert not unknown_keys, 'Auth config for %r has unknown key %r' % \
(_domain_object, unknown_keys)
Expand Down
3 changes: 3 additions & 0 deletions ckan/model/core.py
Expand Up @@ -6,6 +6,9 @@
import meta
import domain_object


__all__= ['System', 'Revision', 'State', 'revision_table']

## VDM-specific tables
revision_table = vdm.sqlalchemy.make_revision_table(meta.metadata)
revision_table.append_column(Column('approved_timestamp', DateTime))
Expand Down
2 changes: 2 additions & 0 deletions ckan/model/domain_object.py
Expand Up @@ -7,6 +7,8 @@
import meta
import core

__all__ = ['DomainObject']

class Enum(set):
'''Simple enumeration
e.g. Animal = Enum("dog", "cat", "horse")
Expand Down
8 changes: 3 additions & 5 deletions ckan/model/group.py
@@ -1,18 +1,16 @@
import datetime

from sqlalchemy import orm, types, Column, Table, ForeignKey
import vdm.sqlalchemy

import meta
import core
import package as _package
import types as _types
import domain_object
import vdm.sqlalchemy
import user as _user

# FIXME why are we passing this around here?
package_revision_table = _package.package_revision_table

__all__ = ['group_table', 'Group', 'package_revision_table',
__all__ = ['group_table', 'Group',
'Member', 'GroupRevision', 'MemberRevision',
'member_revision_table', 'member_table']

Expand Down
2 changes: 1 addition & 1 deletion ckan/model/group_extra.py
@@ -1,4 +1,5 @@
import vdm.sqlalchemy
import vdm.sqlalchemy.stateful
from sqlalchemy import orm, types, Column, Table, ForeignKey

import group
Expand Down Expand Up @@ -45,7 +46,6 @@ class GroupExtra(vdm.sqlalchemy.RevisionedObjectMixin,
def _create_extra(key, value):
return GroupExtra(key=unicode(key), value=value)

import vdm.sqlalchemy.stateful
_extras_active = vdm.sqlalchemy.stateful.DeferredProperty('_extras',
vdm.sqlalchemy.stateful.StatefulDict, base_modifier=lambda x: x.get_as_of())
setattr(group.Group, 'extras_active', _extras_active)
Expand Down
4 changes: 2 additions & 2 deletions ckan/model/license.py
@@ -1,11 +1,11 @@
import datetime
import urllib2
import re
import simplejson as json

from pylons import config
from pylons.i18n import _

import ckan.lib.helpers as h

class License(object):
"""Domain object for a license."""
Expand Down Expand Up @@ -261,7 +261,7 @@ def load_licenses(self, license_url):
msg = "Couldn't connect to licenses service %r: %s" % (license_url, inst)
raise Exception, msg
try:
license_data = h.json.loads(response_body)
license_data = json.loads(response_body)
except Exception, inst:
msg = "Couldn't read response from licenses service %r: %s" % (response_body, inst)
raise Exception, inst
Expand Down
3 changes: 3 additions & 0 deletions ckan/model/meta.py
Expand Up @@ -10,6 +10,9 @@
import extension
import ckan.lib.activity

__all__ = ['Session', 'engine_is_sqlite']


class CkanCacheExtension(SessionExtension):
''' This extension checks what tables have been affected by
database access and allows us to act on them. Currently this is
Expand Down
2 changes: 2 additions & 0 deletions ckan/model/modification.py
Expand Up @@ -8,6 +8,8 @@

log = logging.getLogger(__name__)

__all__ = ['DomainObjectModificationExtension']

class DomainObjectModificationExtension(plugins.SingletonPlugin, extension.ObserverNotifier):
"""
A domain object level interface to change notifications
Expand Down
3 changes: 3 additions & 0 deletions ckan/model/package_relationship.py
Expand Up @@ -16,6 +16,9 @@
def _(txt):
return txt

__all__ = ['PackageRelationship', 'package_relationship_table',
'package_relationship_revision_table']

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')),
Expand Down
14 changes: 9 additions & 5 deletions ckan/model/related.py
@@ -1,11 +1,15 @@
import datetime
import meta

from sqlalchemy import orm
from sqlalchemy import types, Column, Table, ForeignKey, and_

import meta
import domain_object
import types as _types
from package import Package
import package as _package

__all__ = ['Related', 'RelatedDataset', 'related_dataset_table',
'related_table']

related_table = Table('related',meta.metadata,
Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid),
Expand Down Expand Up @@ -61,12 +65,12 @@ def deactivate(self, package):
# the caller will have to use get_for_dataset() in Related.
meta.mapper(RelatedDataset, related_dataset_table, properties={
'related': orm.relation(Related),
'dataset': orm.relation(Package)
'dataset': orm.relation(_package.Package)
})
meta.mapper(Related, related_table, properties={
'datasets': orm.relation(Package,
'datasets': orm.relation(_package.Package,
backref=orm.backref('related'),
secondary=related_dataset_table,
secondaryjoin=and_(related_dataset_table.c.dataset_id==Package.id,
secondaryjoin=and_(related_dataset_table.c.dataset_id==_package.Package.id,
RelatedDataset.status=='active'))
})
18 changes: 9 additions & 9 deletions ckan/model/resource.py
@@ -1,18 +1,22 @@
import datetime

from sqlalchemy.util import OrderedDict
from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy import orm
from pylons import config
import vdm.sqlalchemy
import vdm.sqlalchemy.stateful
from sqlalchemy import types, Column, Table, ForeignKey, and_

import meta
import core
import package as _package
import types as _types
from ckan.model import extension
from ckan.model.activity import ActivityDetail
import extension
import activity
import domain_object
import tracking as _tracking
import ckan.lib.dictization

__all__ = ['Resource', 'resource_table',
'ResourceGroup', 'resource_group_table',
Expand Down Expand Up @@ -111,8 +115,7 @@ def as_dict(self, core_columns_only=False):
_dict[k] = v
if self.resource_group and not core_columns_only:
_dict["package_id"] = self.resource_group.package_id
import ckan.model as model
tracking = model.TrackingSummary.get_for_resource(self.url)
tracking = _tracking.TrackingSummary.get_for_resource(self.url)
_dict['tracking_summary'] = tracking
return _dict

Expand Down Expand Up @@ -149,7 +152,6 @@ def related_packages(self):

def activity_stream_detail(self, activity_id, activity_type):
import ckan.model as model
import ckan.lib.dictization

# Handle 'deleted' resources.
# When the user marks a resource as deleted this comes through here as
Expand All @@ -160,7 +162,7 @@ def activity_stream_detail(self, activity_id, activity_type):

res_dict = ckan.lib.dictization.table_dictize(self,
context={'model':model})
return ActivityDetail(activity_id, self.id, u"Resource", activity_type,
return activity.ActivityDetail(activity_id, self.id, u"Resource", activity_type,
{'resource': res_dict})

class ResourceGroup(vdm.sqlalchemy.RevisionedObjectMixin,
Expand Down Expand Up @@ -258,13 +260,11 @@ def get_extra_columns(cls):
ResourceGroupRevision.related_packages = lambda self: [self.continuity.package]
ResourceRevision.related_packages = lambda self: [self.continuity.resouce_group.package]

import vdm.sqlalchemy.stateful
# TODO: move this into vdm
def add_stateful_m21(object_to_alter, m21_property_name,
underlying_m21_attrname, identifier, **kwargs):
from sqlalchemy.orm import object_session
def _f(obj_to_delete):
sess = object_session(obj_to_delete)
sess = orm.object_session(obj_to_delete)
if sess: # for tests at least must support obj not being sqlalchemy
sess.expunge(obj_to_delete)

Expand Down
6 changes: 3 additions & 3 deletions ckan/model/tag.py
Expand Up @@ -10,7 +10,7 @@
import domain_object
import vocabulary
import activity
import ckan
import ckan # this import is needed
import ckan.lib.dictization

__all__ = ['tag_table', 'package_tag_table', 'Tag', 'PackageTag',
Expand Down Expand Up @@ -216,8 +216,8 @@ def activity_stream_detail(self, activity_id, activity_type):
return None

# Return an 'added tag' or 'removed tag' activity.
import ckan.model
c = {'model': ckan.model}
import ckan.model as model
c = {'model': model}
d = {'tag': ckan.lib.dictization.table_dictize(self.tag, c),
'package': ckan.lib.dictization.table_dictize(self.package, c)}
return activity.ActivityDetail(
Expand Down
3 changes: 1 addition & 2 deletions ckan/model/task_status.py
@@ -1,10 +1,9 @@
from datetime import datetime
from sqlalchemy import types, Column, Table, UniqueConstraint

import meta
import types as _types
import domain_object
# se overwrite datetime somewhere in our importing
from datetime import datetime

__all__ = ['TaskStatus', 'task_status_table']

Expand Down
2 changes: 2 additions & 0 deletions ckan/model/tracking.py
Expand Up @@ -3,6 +3,8 @@
import meta
import domain_object

__all__ = ['tracking_summary_table', 'TrackingSummary']

tracking_summary_table = Table('tracking_summary', meta.metadata,
Column('url', types.UnicodeText, primary_key=True, nullable=False),
Column('package_id', types.UnicodeText),
Expand Down
11 changes: 7 additions & 4 deletions ckan/model/types.py
Expand Up @@ -2,11 +2,14 @@
import datetime
import copy
import uuid
import simplejson as json

from sqlalchemy import types

import meta
import ckan.lib.helpers as h

__all__ = ['iso_date_to_datetime_for_sqlite', 'make_uuid', 'UuidType',
'JsonType', 'JsonDictType']

def make_uuid():
return unicode(uuid.uuid4())
Expand Down Expand Up @@ -44,13 +47,13 @@ def process_bind_param(self, value, engine):
return None
else:
# ensure_ascii=False => allow unicode but still need to convert
return unicode(h.json.dumps(value, ensure_ascii=False))
return unicode(json.dumps(value, ensure_ascii=False))

def process_result_value(self, value, engine):
if value is None:
return {}
else:
return h.json.loads(value)
return json.loads(value)

def copy(self):
return JsonType(self.impl.length)
Expand All @@ -72,7 +75,7 @@ def process_bind_param(self, value, engine):
if isinstance(value, basestring):
return unicode(value)
else:
return unicode(h.json.dumps(value, ensure_ascii=False))
return unicode(json.dumps(value, ensure_ascii=False))

def copy(self):
return JsonDictType(self.impl.length)
Expand Down

0 comments on commit b73e1cc

Please sign in to comment.