diff --git a/attract/__init__.py b/attract/__init__.py index ddb029b..01f5f1e 100644 --- a/attract/__init__.py +++ b/attract/__init__.py @@ -3,6 +3,7 @@ import logging import flask from werkzeug.local import LocalProxy from pillar.extension import PillarExtension +import pillar.web.subquery from pillar.web.system_util import pillar_api import pillarsdk @@ -84,13 +85,12 @@ class AttractExtension(PillarExtension): def setup_app(self, app): """Connects Blinker signals and sets up other app-dependent stuff in submodules.""" - from . import subversion, tasks, eve_hooks, subquery, shots + from . import subversion, tasks, eve_hooks, shots subversion.task_logged.connect(self.task_manager.task_logged_in_svn) tasks.setup_app(app) shots.setup_app(app) eve_hooks.setup_app(app) - subquery.setup_app(app) # Imports for side-effects from . import node_url_finders @@ -165,8 +165,6 @@ class AttractExtension(PillarExtension): :returns: {'_items': [task, task, ...], '_meta': {Eve metadata}} """ - from . import subquery - api = pillar_api() activities = pillarsdk.Activity.all({ 'where': { @@ -180,7 +178,7 @@ class AttractExtension(PillarExtension): # Fetch more info for each activity. for act in activities['_items']: - act.actor_user = subquery.get_user_info(act.actor_user) + act.actor_user = pillar.web.subquery.get_user_info(act.actor_user) return activities diff --git a/attract/routes.py b/attract/routes.py index 3e55d90..3c07ee0 100644 --- a/attract/routes.py +++ b/attract/routes.py @@ -5,10 +5,11 @@ from flask import Blueprint, render_template, url_for import flask_login from pillar.api.utils import jsonify +import pillar.web.subquery from pillar.web.system_util import pillar_api import pillarsdk -from attract import current_attract, subquery +from attract import current_attract from attract.node_types.task import node_type_task from attract.node_types.shot import node_type_shot @@ -47,7 +48,7 @@ def index(): node_type_task_name = node_type_task['name'] node_type_shot_name = node_type_shot['name'] for act in activities['_items']: - act.actor_user = subquery.get_user_info(act.actor_user) + act.actor_user = pillar.web.subquery.get_user_info(act.actor_user) act.project = id_to_proj[act.project] if act.node_type == node_type_task_name: diff --git a/attract/subquery.py b/attract/subquery.py deleted file mode 100644 index c5f2597..0000000 --- a/attract/subquery.py +++ /dev/null @@ -1,36 +0,0 @@ -"""Sub-query stuff, for things we would otherwise let Eve embed (but don't want to). - -Uses app.cache.memoize() to cache the results. However, since this decorator needs -to run in Flask Application context, it is manually applied in setup_app(). -""" - -import pillarsdk -from pillar.web.system_util import pillar_api - - -def get_user_info(user_id): - """Returns email & full name of the user. - - Only returns those two fields, so the return value is the same - for authenticated & non-authenticated users, which is why we're - allowed to cache it globally. - - Returns an empty dict when the user cannot be found. - """ - - if user_id is None: - return {} - - user = pillarsdk.User.find(user_id, api=pillar_api()) - if not user: - return {} - - return {'email': user.email, - 'full_name': user.full_name} - - -def setup_app(app): - global get_user_info - - decorator = app.cache.memoize(timeout=300, make_name='%s.get_user_info' % __name__) - get_user_info = decorator(get_user_info) diff --git a/attract/tasks/eve_hooks.py b/attract/tasks/eve_hooks.py index 8f90f22..5d7f4e3 100644 --- a/attract/tasks/eve_hooks.py +++ b/attract/tasks/eve_hooks.py @@ -9,7 +9,6 @@ import pillar.api.utils.authentication import pillar.web.jinja from attract.node_types.task import node_type_task -from attract import subquery log = logging.getLogger(__name__) only_for_task = only_for_node_type_decorator(node_type_task['name']) diff --git a/attract/tasks/routes.py b/attract/tasks/routes.py index 3893aff..89b02c2 100644 --- a/attract/tasks/routes.py +++ b/attract/tasks/routes.py @@ -8,10 +8,11 @@ import werkzeug.exceptions as wz_exceptions import pillarsdk from pillar.web.system_util import pillar_api import pillar.api.utils +import pillar.web.subquery from attract.routes import attract_project_view from attract.node_types.task import node_type_task -from attract import current_attract, ROLES_REQUIRED_TO_VIEW_ITEMS, subquery +from attract import current_attract, ROLES_REQUIRED_TO_VIEW_ITEMS blueprint = Blueprint('attract.tasks', __name__, url_prefix='/tasks') perproject_blueprint = Blueprint('attract.tasks.perproject', __name__, @@ -70,7 +71,7 @@ def view_task(project, attract_props, task_id): users = project.get_users(api=api) project.users = users['_items'] else: - task.properties.assigned_to.users = [subquery.get_user_info(uid) + task.properties.assigned_to.users = [pillar.web.subquery.get_user_info(uid) for uid in task.properties.assigned_to.users] return render_template('attract/tasks/view_task_embed.html',