Skip to content

Commit

Permalink
Remove revisions from GroupExtra.
Browse files Browse the repository at this point in the history
  • Loading branch information
David Read committed Mar 15, 2019
1 parent 7778e15 commit e5dd58b
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 34 deletions.
2 changes: 1 addition & 1 deletion ckan/lib/dictization/model_dictize.py
Expand Up @@ -228,7 +228,7 @@ def package_dictize(pkg, context):
#extras - no longer revisioned, so always provide latest
extra = model.package_extra_table
q = select([extra]).where(extra.c.package_id == pkg.id)
result = execute(q, extra, context)
result = _execute(q, extra, context)
result_dict["extras"] = extras_list_dictize(result, context)

#groups
Expand Down
Expand Up @@ -6,6 +6,9 @@ def upgrade(migrate_engine):
'''
ALTER TABLE "package_extra_revision"
DROP CONSTRAINT package_extra_revision_continuity_id_fkey;
ALTER TABLE "group_extra_revision"
DROP CONSTRAINT group_extra_revision_continuity_id_fkey;
DELETE FROM "package_extra" WHERE state='deleted';
DELETE FROM "group_extra" WHERE state='deleted';
'''
)
1 change: 0 additions & 1 deletion ckan/model/__init__.py
Expand Up @@ -60,7 +60,6 @@
from group_extra import (
GroupExtra,
group_extra_table,
GroupExtraRevision,
)
from package_extra import (
PackageExtra,
Expand Down
3 changes: 1 addition & 2 deletions ckan/model/group.py
Expand Up @@ -357,12 +357,11 @@ def all_related_revisions(self):
this group. Ordered by most recent first.
'''
results = {}
from group_extra import GroupExtra
for grp_rev in self.all_revisions:
if not grp_rev.revision in results:
results[grp_rev.revision] = []
results[grp_rev.revision].append(grp_rev)
for class_ in [Member, GroupExtra]:
for class_ in [Member]: # GroupExtra is not revisioned any more
rev_class = class_.__revision_class__
obj_revisions = meta.Session.query(rev_class).\
filter_by(group_id=self.id).all()
Expand Down
23 changes: 9 additions & 14 deletions ckan/model/group_extra.py
Expand Up @@ -2,6 +2,7 @@

import vdm.sqlalchemy
from sqlalchemy import orm, types, Column, Table, ForeignKey
from sqlalchemy.ext.associationproxy import association_proxy
from six import text_type

import group
Expand All @@ -11,7 +12,7 @@
import domain_object


__all__ = ['GroupExtra', 'group_extra_table', 'GroupExtraRevision']
__all__ = ['GroupExtra', 'group_extra_table']

group_extra_table = Table('group_extra', meta.metadata,
Column('id', types.UnicodeText, primary_key=True, default=_types.make_uuid),
Expand All @@ -21,11 +22,13 @@
Column('state', types.UnicodeText, default=core.State.ACTIVE),
)

group_extra_revision_table = core.make_revisioned_table(group_extra_table)
# Define the group_extra_revision table, but no need to map it, as it is only
# used by migrate_package_activity.py
group_extra_revision_table = \
core.make_revisioned_table(group_extra_table, frozen=True)


class GroupExtra(vdm.sqlalchemy.RevisionedObjectMixin,
core.StatefulObjectMixin,
class GroupExtra(core.StatefulObjectMixin,
domain_object.DomainObject):
pass

Expand All @@ -38,18 +41,10 @@ class GroupExtra(vdm.sqlalchemy.RevisionedObjectMixin,
)
},
order_by=[group_extra_table.c.group_id, group_extra_table.c.key],
extension=[vdm.sqlalchemy.Revisioner(group_extra_revision_table),],
)

vdm.sqlalchemy.modify_base_object_mapper(GroupExtra, core.Revision, core.State)
GroupExtraRevision = vdm.sqlalchemy.create_object_version(meta.mapper, GroupExtra,
group_extra_revision_table)

def _create_extra(key, value):
return GroupExtra(key=text_type(key), value=value)

_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)
group.Group.extras = vdm.sqlalchemy.stateful.OurAssociationProxy('extras_active', 'value',
creator=_create_extra)
group.Group.extras = association_proxy(
'_extras', 'value', creator=_create_extra)
12 changes: 6 additions & 6 deletions ckan/model/revision.py
Expand Up @@ -15,9 +15,9 @@ def make_revisioned_table(base_table, frozen=False):
@return revision table.
'''
base_table.append_column(
Column('revision_id', UnicodeText, ForeignKey('revision.id'))
Column(u'revision_id', UnicodeText, ForeignKey(u'revision.id'))
)
newtable = Table(base_table.name + '_revision', base_table.metadata)
newtable = Table(base_table.name + u'_revision', base_table.metadata)
copy_table(base_table, newtable)

# create foreign key 'continuity' constraint
Expand All @@ -28,17 +28,17 @@ def make_revisioned_table(base_table, frozen=False):
if col.primary_key:
pkcols.append(col)
assert len(pkcols) <= 1,\
'Do not support versioning objects with multiple primary keys'
fk_name = base_table.name + '.' + pkcols[0].name
u'Do not support versioning objects with multiple primary keys'
fk_name = base_table.name + u'.' + pkcols[0].name
newtable.append_column(
Column('continuity_id', pkcols[0].type,
Column(u'continuity_id', pkcols[0].type,
None if frozen else ForeignKey(fk_name))
)

# TODO: why do we iterate all the way through rather than just using dict
# functionality ...? Surely we always have a revision here ...
for col in newtable.c:
if col.name == 'revision_id':
if col.name == u'revision_id':
col.primary_key = True
newtable.primary_key.columns.add(col)
return newtable
11 changes: 5 additions & 6 deletions ckan/tests/legacy/lib/test_dictization.py
Expand Up @@ -41,11 +41,11 @@ def setup_class(cls):
u'author_email': None,
u'creator_user_id': None,
'extras': [
# extras are no longer revisioned
# {u'key': u'genre',
# u'state': u'active',
# u'value': 'romantic novel'},
# {u'key': u'original media', u'state': u'active', u'value': u'book'}
# extras are no longer revisioned so we get the latest version
{'key': u'david', 'state': u'active', 'value': u'new_value'},
{'key': u'genre', 'state': u'active', 'value': u'new_value'},
{'key': u'original media', 'state': u'active',
'value': u'book'}
],
'groups': [{
u'name': u'david',
Expand Down Expand Up @@ -441,7 +441,6 @@ def test_13_get_package_in_past(self):

third_dictized['tags'].insert(1, {'name': u'newnew_tag', 'display_name': u'newnew_tag', 'state': 'active'})
third_dictized['num_tags'] = third_dictized['num_tags'] + 1
third_dictized['extras'] = [] # extras are no longer revisioned
third_dictized['state'] = 'active'
third_dictized['state'] = 'active'

Expand Down
6 changes: 2 additions & 4 deletions ckan/tests/logic/action/test_delete.py
Expand Up @@ -242,8 +242,7 @@ def test_purged_group_leaves_no_trace_in_the_model(self):
assert_equals(sorted(
[gr.name for gr in model.Session.query(model.GroupRevision)]),
['child', 'parent'])
assert_equals(model.Session.query(model.GroupExtraRevision).all(),
[])
# GroupExtra is not revisioned
# Member is not revisioned

# No Revision objects were purged, in fact 1 is created for the purge
Expand Down Expand Up @@ -345,8 +344,7 @@ def test_purged_organization_leaves_no_trace_in_the_model(self):
assert_equals(sorted(
[gr.name for gr in model.Session.query(model.GroupRevision)]),
['child', 'parent'])
assert_equals(model.Session.query(model.GroupExtraRevision).all(),
[])
# GroupExtra is not revisioned
# Member is not revisioned

# No Revision objects were purged, in fact 1 is created for the purge
Expand Down

0 comments on commit e5dd58b

Please sign in to comment.