@attract_project_view() can now also fetch & check for extension props.

This commit is contained in:
2016-09-20 16:51:46 +02:00
parent 25cfe7789c
commit 959549eec0

View File

@@ -20,7 +20,7 @@ def error_project_not_setup_for_attract():
return render_template('attract/errors/project_not_setup.html') return render_template('attract/errors/project_not_setup.html')
def attract_project_view(extra_project_projections=None): def attract_project_view(extra_project_projections=None, extension_props=False):
"""Decorator, replaces the first parameter project_url with the actual project. """Decorator, replaces the first parameter project_url with the actual project.
Assumes the first parameter to the decorated function is 'project_url'. It then Assumes the first parameter to the decorated function is 'project_url'. It then
@@ -33,8 +33,14 @@ def attract_project_view(extra_project_projections=None):
:param extra_project_projections: extra projections to use on top of the ones already :param extra_project_projections: extra projections to use on top of the ones already
used by this decorator. used by this decorator.
:type extra_project_projections: dict :type extra_project_projections: dict
:param extension_props: whether extension properties should be included. Includes them
in the projections, and verifies that they are there.
:type extension_props: bool
""" """
from .node_types.task import node_type_task
from . import EXTENSION_NAME
if callable(extra_project_projections): if callable(extra_project_projections):
raise TypeError('Use with @attract_project_view() <-- note the parentheses') raise TypeError('Use with @attract_project_view() <-- note the parentheses')
@@ -48,6 +54,8 @@ def attract_project_view(extra_project_projections=None):
} }
if extra_project_projections: if extra_project_projections:
projections.update(extra_project_projections) projections.update(extra_project_projections)
if extension_props:
projections['extension_props.%s' % EXTENSION_NAME] = 1
def decorator(wrapped): def decorator(wrapped):
@functools.wraps(wrapped) @functools.wraps(wrapped)
@@ -59,12 +67,29 @@ def attract_project_view(extra_project_projections=None):
{'projection': projections}, {'projection': projections},
api=api) api=api)
node_type = project.get_node_type('attract_task') node_type_name = node_type_task['name']
node_type = project.get_node_type(node_type_name)
if not node_type: if not node_type:
log.warning('createProject url=%s does not have node type attract.task', log.warning('createProject url=%s does not have node type %r',
project_url) project_url, node_type_name)
return error_project_not_setup_for_attract() return error_project_not_setup_for_attract()
if extension_props:
try:
pprops = project.extension_props.attract
except AttributeError:
log.warning("attract_project_view(%s): Project url=%r doesn't have any"
" extension properties.", wrapped, project_url)
if log.isEnabledFor(logging.DEBUG):
import pprint
log.debug('Project: %s', pprint.pformat(project.to_dict()))
return error_project_not_setup_for_attract()
if pprops is None:
log.warning("attract_project_view(%s): Project url=%r doesn't have Attract"
" extension properties.", wrapped, project_url)
return error_project_not_setup_for_attract()
return wrapped(project, *args, **kwargs) return wrapped(project, *args, **kwargs)
return wrapper return wrapper
@@ -73,16 +98,11 @@ def attract_project_view(extra_project_projections=None):
@blueprint.route('/<project_url>/subversion/kick') @blueprint.route('/<project_url>/subversion/kick')
@attract_project_view() @attract_project_view(extension_props=True)
def subversion_kick(project): def subversion_kick(project):
from . import subversion from . import subversion
try: pprops = project.extension_props.attract
pprops = project.extension_props.attract
except AttributeError:
log.warning("subversion_kick(): Project url=%s doesn't have Attract extension properties.",
project.url)
return error_project_not_setup_for_attract()
svn_server_url = pprops.svn_url # 'svn://localhost/agent327' svn_server_url = pprops.svn_url # 'svn://localhost/agent327'
log.info('Re-examining SVN server %s', svn_server_url) log.info('Re-examining SVN server %s', svn_server_url)