-
Notifications
You must be signed in to change notification settings - Fork 2k
/
related.py
112 lines (87 loc) · 3.75 KB
/
related.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import ckan.model as model
import ckan.logic as logic
import ckan.lib.base as base
import ckan.lib.helpers as h
import urllib
c = base.c
_get_action=logic.get_action
class RelatedController(base.BaseController):
def dashboard(self):
""" List all related items regardless of dataset """
context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'extras_as_string': True,
'for_view': True}
data_dict = {
'type_filter': base.request.params.get('type', ''),
'sort': base.request.params.get('sort', ''),
'featured': base.request.params.get('featured', '')
}
params_nopage = [(k, v) for k,v in base.request.params.items()
if k != 'page']
try:
page = int(base.request.params.get('page', 1))
except ValueError, e:
base.abort(400, ('"page" parameter must be an integer'))
# Update ordering in the context
query = logic.get_action('related_list')(context,data_dict)
def search_url(params):
url = h.url_for(controller='related', action='dashboard')
params = [(k, v.encode('utf-8')
if isinstance(v, basestring) else str(v))
for k, v in params]
return url + u'?' + urllib.urlencode(params)
def pager_url(q=None, page=None):
params = list(params_nopage)
params.append(('page', page))
return search_url(params)
c.page = h.Page(
collection=query.all(),
page=page,
url=pager_url,
item_count=query.count(),
items_per_page=8
)
c.filters = dict(params_nopage)
return base.render( "related/dashboard.html")
def read(self, id):
context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'extras_as_string': True,
'for_view': True}
data_dict = {'id': id}
try:
logic.check_access('related_show', context, data_dict)
except logic.NotAuthorized:
base.abort(401, _('Not authorized to see this page'))
related = model.Session.query(model.Related).\
filter(model.Related.id == id).first()
if not related:
base.abort(404, _('The requested related item was not found'))
related.view_count = model.Related.view_count + 1
model.Session.add(related)
model.Session.commit()
base.redirect(related.url)
def list(self, id):
""" List all related items for a specific dataset """
context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'extras_as_string': True,
'for_view': True}
data_dict = {'id': id}
try:
logic.check_access('package_show', context, data_dict)
except logic.NotFound:
base.abort(404, base._('Dataset not found'))
except logic.NotAuthorized:
base.abort(401, base._('Not authorized to see this page'))
try:
c.pkg_dict = logic.get_action('package_show')(context, data_dict)
c.pkg = context['package']
c.resources_json = h.json.dumps(c.pkg_dict.get('resources', []))
except logic.NotFound:
base.abort(404, base._('Dataset not found'))
except logic.NotAuthorized:
base.abort(401, base._('Unauthorized to read package %s') % id)
c.action = 'related'
c.related_count = c.pkg.related_count
c.num_followers = _get_action('dataset_follower_count')(context,
{'id':c.pkg.id})
return base.render( "related/related_list.html")