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 »