diff --git a/circle/common/operations.py b/circle/common/operations.py index ccacc25..2367713 100644 --- a/circle/common/operations.py +++ b/circle/common/operations.py @@ -1,7 +1,7 @@ from inspect import getargspec from logging import getLogger -from .models import activity_context, activity_code_separator +from .models import activity_context, has_suffix from django.core.exceptions import PermissionDenied @@ -172,11 +172,15 @@ class OperatedMixin(object): yield op def get_operation_from_activity_code(self, activity_code): - sep = activity_code_separator - ops = getattr(self, operation_registry_name, {}).values() - for op in ops: - if activity_code.endswith(sep + op.activity_code_suffix): - return op + """Get an instance of the Operation corresponding to the specified + activity code. + + :returns: A bound instance of an operation, or None if no matching + operation could be found. + """ + for op in getattr(self, operation_registry_name, {}).itervalues(): + if has_suffix(activity_code, op.activity_code_suffix): + return op(self) else: return None diff --git a/circle/vm/models/activity.py b/circle/vm/models/activity.py index ed91c41..d48dcc2 100644 --- a/circle/vm/models/activity.py +++ b/circle/vm/models/activity.py @@ -10,7 +10,7 @@ from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from common.models import ( - ActivityModel, activitycontextimpl, join_activity_code, + ActivityModel, activitycontextimpl, join_activity_code, split_activity_code ) from manager.mancelery import celery @@ -56,7 +56,8 @@ class InstanceActivity(ActivityModel): return reverse('dashboard.views.vm-activity', args=[self.pk]) def get_readable_name(self): - return self.activity_code.split('.')[-1].replace('_', ' ').capitalize() + activity_code_last_suffix = split_activity_code(self.activity_code)[-1] + return activity_code_last_suffix.replace('_', ' ').capitalize() def get_status_id(self): if self.succeeded is None: