Skip to content

Commit

Permalink
[1478] add dictization of members table
Browse files Browse the repository at this point in the history
  • Loading branch information
kindly committed Dec 23, 2011
1 parent 643ac44 commit 5c8df89
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 10 deletions.
52 changes: 46 additions & 6 deletions ckan/lib/dictization/model_dictize.py
Expand Up @@ -162,6 +162,17 @@ def package_dictize(pkg, context):

return result_dict

def _get_members(context, group, member_type):

model = context['model']
Entity = getattr(model, member_type[:-1].capitalize())
return model.Session.query(Entity).\
join(model.Member, model.Member.table_id == Entity.id).\
filter(model.Member.group_id == group.id).\
filter(model.Member.state == 'active').\
filter(model.Member.table_name == member_type[:-1]).all()


def group_dictize(group, context):
model = context['model']
result_dict = table_dictize(group, context)
Expand All @@ -171,16 +182,33 @@ def group_dictize(group, context):
result_dict['extras'] = extras_dict_dictize(
group._extras, context)

packages = model.Session.query(model.Package).\
join(model.Member, model.Member.table_id == model.Package.id).\
filter(model.Member.group_id == group.id).\
filter(model.Member.state == 'active').all()

result_dict['packages'] = obj_list_dictize(
packages, context)
_get_members(context, group, 'packages'),
context)

result_dict['tags'] = tag_list_dictize(
_get_members(context, group, 'tags'),
context)

result_dict['groups'] = group_list_dictize(
_get_members(context, group, 'groups'),
context)

result_dict['users'] = user_list_dictize(
_get_members(context, group, 'users'),
context)


return result_dict

def tag_list_dictize(tag_list, context):

result_list = []
for tag in tag_list:
result_list.append(table_dictize(tag, context))

return result_list

def tag_dictize(tag, context):

result_dict = table_dictize(tag, context)
Expand All @@ -190,6 +218,18 @@ def tag_dictize(tag, context):

return result_dict

def user_list_dictize(obj_list, context,
sort_key=lambda x:x['name'], reverse=False):

result_list = []

for obj in obj_list:
user_dict = user_dictize(obj, context)
user_dict.pop('apikey')
result_list.append(user_dict)
return sorted(result_list, key=sort_key, reverse=reverse)


def user_dictize(user, context):

result_dict = table_dictize(user, context)
Expand Down
1 change: 0 additions & 1 deletion ckan/lib/dictization/model_save.py
Expand Up @@ -335,7 +335,6 @@ def group_dict_save(group_dict, context):
group_member_save(context, group_dict, 'packages')
group_member_save(context, group_dict, 'users')
group_member_save(context, group_dict, 'groups')
group_member_save(context, group_dict, 'resources')
group_member_save(context, group_dict, 'tags')

extras = group_extras_save(group_dict.get("extras", {}), context)
Expand Down
40 changes: 37 additions & 3 deletions ckan/tests/lib/test_dictization.py
Expand Up @@ -818,26 +818,60 @@ def test_16_group_dictized(self):

pkg = model.Session.query(model.Package).filter_by(name='annakarenina3').first()

simple_group_dict = {'name': 'simple',
'title': 'simple',
'type': 'publisher',
}
model.repo.new_revision()
group_dict_save(simple_group_dict, context)
model.Session.commit()
model.Session.remove()

context = {"model": model,
"session": model.Session}

group_dict = {'name': 'help',
'title': 'help',
'extras': [{'key': 'genre', 'value': u'"horror"'},
{'key': 'media', 'value': u'"dvd"'}],
'packages':[{'name': 'annakarenina2'}, {'id': pkg.id}]
'packages':[{'name': 'annakarenina2'}, {'id': pkg.id}],
'users':[{'name': 'annafan'}],
'groups':[{'name': 'simple'}],
'tags':[{'name': 'russian'}]
}


model.repo.new_revision()
group_dict_save(group_dict, context)
model.Session.commit()
model.Session.remove()

group = model.Session.query(model.Group).filter_by(name=u'help').one()

context = {"model": model,
"session": model.Session}

group_dictized = group_dictize(group, context)

expected = {'description': u'',
'extras': [{'key': u'genre', 'state': u'active', 'value': u'"horror"'},
{'key': u'media', 'state': u'active', 'value': u'"dvd"'}],
'tags': [{'name': u'russian'}],
'groups': [{'description': u'',
'display_name': u'simple',
'name': u'simple',
'packages': 0,
'state': u'active',
'title': u'simple',
'type': u'publisher'}],
'users': [{'about': u'I love reading Annakarenina. My site: <a href="http://anna.com">anna.com</a>',
'display_name': u'annafan',
'email': None,
'email_hash': 'd41d8cd98f00b204e9800998ecf8427e',
'fullname': None,
'name': u'annafan',
'number_administered_packages': 1L,
'number_of_edits': 0L,
'reset_key': None}],
'name': u'help',
'display_name': u'help',
'packages': [{'author': None,
Expand Down

0 comments on commit 5c8df89

Please sign in to comment.