Task #13050 » ckan_performance_fixes_plus_templates13050.diff
src/ckan/ckan/model/activity.py 2019-01-09 16:49:03.538432923 +0100 | ||
---|---|---|
3 | 3 |
import datetime |
4 | 4 | |
5 | 5 |
from sqlalchemy import ( |
6 |
orm, types, Column, Table, ForeignKey, desc, or_, union_all) |
|
6 |
orm, types, Column, Table, ForeignKey, desc, or_, and_, union_all)
|
|
7 | 7 | |
8 | 8 |
import ckan.model |
9 | 9 |
import meta |
... | ... | |
182 | 182 |
# Return a query with no results. |
183 | 183 |
return model.Session.query(model.Activity).filter("0=1") |
184 | 184 | |
185 |
dataset_ids = [dataset.id for dataset in group.packages()] |
|
185 |
q = model.Session.query( |
|
186 |
model.Activity |
|
187 |
).outerjoin( |
|
188 |
model.Member, |
|
189 |
and_( |
|
190 |
model.Activity.object_id == model.Member.table_id, |
|
191 |
model.Member.state == 'active' |
|
192 |
) |
|
193 |
).outerjoin( |
|
194 |
model.Package, |
|
195 |
and_( |
|
196 |
model.Package.id == model.Member.table_id, |
|
197 |
model.Package.private == False, |
|
198 |
model.Package.state == 'active' |
|
199 |
) |
|
200 |
).filter( |
|
201 |
# We only care about activity either on the the group itself or on |
|
202 |
# packages within that group. |
|
203 |
# FIXME: This means that activity that occured while a package belonged |
|
204 |
# to a group but was then removed will not show up. This may not be |
|
205 |
# desired but is consistent with legacy behaviour. |
|
206 |
or_( |
|
207 |
model.Member.group_id == group_id, |
|
208 |
model.Activity.object_id == group_id |
|
209 |
), |
|
210 |
) |
|
186 | 211 | |
187 |
q = model.Session.query(model.Activity) |
|
188 |
if dataset_ids: |
|
189 |
q = q.filter(or_(model.Activity.object_id == group_id, |
|
190 |
model.Activity.object_id.in_(dataset_ids))) |
|
191 |
else: |
|
192 |
q = q.filter(model.Activity.object_id == group_id) |
|
193 | 212 |
return q |
194 | 213 | |
195 | 214 |
src/ckan/ckan/model/resource.py 2019-01-09 16:20:07.946037478 +0100 | ||
---|---|---|
189 | 189 |
), |
190 | 190 |
) |
191 | 191 |
}, |
192 |
order_by=[resource_table.c.package_id], |
|
193 | 192 |
extension=[vdm.sqlalchemy.Revisioner(resource_revision_table), |
194 | 193 |
extension.PluginMapperExtension(), |
195 | 194 |
], |
src/ckan/ckan/model/user.py 2019-01-09 17:03:52.992595940 +0100 | ||
---|---|---|
9 | 9 |
from passlib.hash import pbkdf2_sha512 |
10 | 10 |
from sqlalchemy.sql.expression import or_ |
11 | 11 |
from sqlalchemy.orm import synonym |
12 |
from sqlalchemy import types, Column, Table |
|
12 |
from sqlalchemy import types, Column, Table, func
|
|
13 | 13 |
import vdm.sqlalchemy |
14 | 14 | |
15 | 15 |
import meta |
... | ... | |
194 | 194 |
def number_of_edits(self): |
195 | 195 |
# have to import here to avoid circular imports |
196 | 196 |
import ckan.model as model |
197 |
revisions_q = meta.Session.query(model.Revision) |
|
198 |
revisions_q = revisions_q.filter_by(author=self.name) |
|
199 |
return revisions_q.count() |
|
197 |
# Get count efficiently without spawning the SQLAlchemy subquery |
|
198 |
# wrapper. Reset the VDM-forced order_by on timestamp. |
|
199 |
return meta.Session.execute( |
|
200 |
meta.Session.query( |
|
201 |
model.Revision |
|
202 |
).filter_by( |
|
203 |
author=self.name |
|
204 |
).statement.with_only_columns( |
|
205 |
[func.count()] |
|
206 |
).order_by( |
|
207 |
None |
|
208 |
) |
|
209 |
).scalar() |
|
200 | 210 | |
201 | 211 |
def number_created_packages(self, include_private_and_draft=False): |
202 | 212 |
# have to import here to avoid circular imports |
203 | 213 |
import ckan.model as model |
204 |
q = meta.Session.query(model.Package)\ |
|
205 |
.filter_by(creator_user_id=self.id) |
|
214 |
# Get count efficiently without spawning the SQLAlchemy subquery |
|
215 |
# wrapper. Reset the VDM-forced order_by on timestamp. |
|
216 |
q = meta.Session.query( |
|
217 |
model.Package |
|
218 |
).filter_by( |
|
219 |
creator_user_id=self.id |
|
220 |
) |
|
221 |
|
|
206 | 222 |
if include_private_and_draft: |
207 | 223 |
q = q.filter(model.Package.state != 'deleted') |
208 | 224 |
else: |
209 |
q = q.filter_by(state='active')\ |
|
210 |
.filter_by(private=False) |
|
211 |
return q.count() |
|
225 |
q = q.filter_by(state='active', private=False) |
|
226 |
|
|
227 |
return meta.Session.execute( |
|
228 |
q.statement.with_only_columns( |
|
229 |
[func.count()] |
|
230 |
).order_by( |
|
231 |
None |
|
232 |
) |
|
233 |
).scalar() |
|
212 | 234 | |
213 | 235 |
def activate(self): |
214 | 236 |
''' Activate the user ''' |
src/ckan/ckan/templates/package/resources.html 2019-01-09 17:47:04.523262770 +0100 | ||
---|---|---|
11 | 11 |
{% block primary_content_inner %} |
12 | 12 |
{% if pkg.resources %} |
13 | 13 |
<ul class="resource-list"{% if has_reorder %} data-module="resource-reorder" data-module-id="{{ pkg.id }}"{% endif %}> |
14 |
{% set can_edit = h.check_access('package_update', {'id':pkg.id }) %} |
|
14 | 15 |
{% for resource in pkg.resources %} |
15 |
{% snippet 'package/snippets/resource_item.html', pkg=pkg, res=resource, url_is_edit=true %} |
|
16 |
{% snippet 'package/snippets/resource_item.html', pkg=pkg, res=resource, url_is_edit=true, can_edit=can_edit %}
|
|
16 | 17 |
{% endfor %} |
17 | 18 |
</ul> |
18 | 19 |
{% else %} |
... | ... | |
28 | 29 |
{% resource 'vendor/reorder' %} |
29 | 30 |
{% endif %} |
30 | 31 |
{% endblock %} |
32 |
src/ckan/ckan/templates/package/snippets/resource_item.html 2019-01-09 16:38:40.211725133 +0100 | ||
---|---|---|
1 |
{% set can_edit = h.check_access('package_update', {'id':pkg.id }) %} |
|
2 | 1 |
{% set url_action = 'resource_edit' if url_is_edit and can_edit else 'resource_read' %} |
3 | 2 |
{% set url = h.url_for(controller='package', action=url_action, id=pkg.name, resource_id=res.id) %} |
4 | 3 |
src/ckan/ckan/templates/package/snippets/resources_list.html 2019-01-09 17:48:29.927086043 +0100 | ||
---|---|---|
15 | 15 |
{% if resources %} |
16 | 16 |
<ul class="{% block resource_list_class %}resource-list{% endblock %}"> |
17 | 17 |
{% block resource_list_inner %} |
18 |
{% set can_edit = h.check_access('package_update', {'id':pkg.id }) %} |
|
18 | 19 |
{% for resource in resources %} |
19 |
{% snippet 'package/snippets/resource_item.html', pkg=pkg, res=resource %} |
|
20 |
{% snippet 'package/snippets/resource_item.html', pkg=pkg, res=resource, can_edit=can_edit %}
|
|
20 | 21 |
{% endfor %} |
21 | 22 |
{% endblock %} |
22 | 23 |
</ul> |
... | ... | |
31 | 32 |
{% endif %} |
32 | 33 |
{% endblock %} |
33 | 34 |
</section> |
35 |
- « Previous
- 1
- 2
- Next »