def as_view(cls, **initkwargs): view = super(HandlerViewMixin, cls).as_view(**initkwargs) instance = cls(**initkwargs) workflow = get_workflow(cls.workflow_type) workflow.library.handler( message_id=instance.get_message_id(), states_from=instance.states_from, permission_checker=instance.permission_checker, )(instance.perform) return view
def _graph_view(request, workflow_id, build_func): w = get_workflow(workflow_id) if w is None: raise Http404 response = HttpResponse(mimetype='image/png') graph = build_func(w) graph.layout('dot') graph.draw(response, format='png') return response
def get_create_form_html(workflow_type, sender=None): workflow = get_workflow(workflow_type) if workflow is None: raise WorkflowNotLoadedError(workflow_type) form = workflow.create_form_cls() if not workflow.create_form_template: t = template_loader.select_template( ('workflows/%s/create_form.html' % workflow_type, 'workflows/create_form.html')) else: t = template_loader.get_template(workflow.create_form_template) context = Context({'form': form, 'workflow_type': workflow_type}) return t.render(context)
def create(workflow_type, sender, raw_parameters): workflow = get_workflow(workflow_type) if workflow is None: raise WorkflowNotLoadedError(workflow_type) create_form_cls = workflow.get_create_form_cls() form = create_form_cls(raw_parameters) if form.is_valid(): instance = workflow.instance_fabric(sender, form.cleaned_data) # Ensure that we will create, not update instance.id = None # Set workflow type setattr(instance, WORKFLOW_TYPE_ATTR, workflow_type) instance.save() workflow.post_create_hook(sender, form.cleaned_data, instance) return instance else: raise CreateValidationError(form.errors)
def describe_workflow(request, workflow_id): w = get_workflow(workflow_id) if w is None: raise Http404 state_map = dict( ( state, { "verbose_name": w.verbose_state_names.get(state), "messages": sorted(message for (_checker, message) in w.library.get_available_messages(state)), }, ) for state in w.states ) message_map = dict( (message_id, {"spec": spec, "states_from": sorted(w.library.get_handlers_index_for_message(message_id).keys())}) for (message_id, spec) in w.library.get_message_specs().iteritems() ) return TemplateResponse( request, "yawf/describe_workflow.html", {"workflow": w, "state_map": state_map, "message_map": message_map} )
def model(self): workflow = get_workflow(self.workflow_type) if hasattr(workflow, "model_class"): return workflow.model_class
def handle(self, workflow_id, **options): w = get_workflow(workflow_id) print build_handlers_graph(w).to_string()
def get_workflow(self): return yawf.get_workflow(self.workflow_id)