From 6afd71b6283a03e14050e1fcfc68d255c62095b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?= Date: Mon, 17 Jan 2011 18:16:57 +0000 Subject: [PATCH] Util functions to get workflows, states and annotation tags for a draft. See #543 - Legacy-Id: 2743 --- ietf/ietfworkflows/utils.py | 96 ++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/ietf/ietfworkflows/utils.py b/ietf/ietfworkflows/utils.py index 5096d7bb9..4dff8d10b 100644 --- a/ietf/ietfworkflows/utils.py +++ b/ietf/ietfworkflows/utils.py @@ -1,8 +1,18 @@ import copy +import datetime -from workflows.utils import get_workflow_for_object, set_workflow_for_object +from django.contrib.contenttypes.models import ContentType -from ietf.ietfworkflows.models import WGWorkflow +from workflows.models import State +from workflows.utils import (get_workflow_for_object, set_workflow_for_object, + get_state) + +from ietf.ietfworkflows.models import (WGWorkflow, AnnotationTagObjectRelation, + AnnotationTag, ObjectAnnotationTagHistoryEntry) + + +WAITING_WRITEUP = 'WG Consensus: Waiting for Write-Up' +FOLLOWUP_TAG = 'Doc Shepherd Follow-up Underway' def get_default_workflow_for_wg(): @@ -51,3 +61,85 @@ def get_workflow_for_wg(wg): workflow = clone_workflow(workflow, name='%s workflow' % wg) set_workflow_for_object(wg, workflow) return workflow + +def get_workflow_for_draft(draft): + workflow = get_workflow_for_object(draft) + try: + workflow = workflow and workflow.wgworkflow + except WGWorkflow.DoesNotExist: + workflow = None + if not workflow: + workflow = get_workflow_for_wg(draft.group.ietfwg) + set_workflow_for_object(draft, workflow) + return workflow + + +def get_annotation_tags_for_draft(draft): + ctype = ContentType.objects.get_for_model(draft) + tags = AnnotationTagObjectRelation.objects.filter(content_type=ctype, content_id=draft.pk) + return tags + + +def get_state_for_draft(draft): + return get_state(draft) + + +def get_state_by_name(state_name): + try: + return State.objects.get(name=state_name) + except State.DoesNotExist: + return None + + +def get_annotation_tag_by_name(tag_name): + try: + return AnnotationTag.objects.get(name=tag_name) + except AnnotationTag.DoesNotExist: + return None + +def set_tag_by_name(obj, tag_name): + ctype = ContentType.objects.get_for_model(obj) + try: + tag = AnnotationTag.objects.get(name=tag_name) + (relation, created) = AnnotationTagObjectRelation.objects.get_or_create( + content_type=ctype, + content_id=obj.pk, + annotation_tag=tag) + except AnnotationTag.DoesNotExist: + return None + return relation + + +def reset_tag_by_name(obj, tag_name): + ctype = ContentType.objects.get_for_model(obj) + try: + tag = AnnotationTag.objects.get(name=tag_name) + tag_relation = AnnotationTagObjectRelation.objects.get( + content_type=ctype, + content_id=obj.pk, + annotation_tag=tag) + tag_relation.delete() + return True + except AnnotationTagObjectRelation.DoesNotExist: + return False + except AnnotationTag.DoesNotExist: + return False + + +def update_tags(obj, comment, set_tags=[], reset_tags=[]): + ctype = ContentType.objects.get_for_model(obj) + setted = [] + resetted = [] + for name in set_tags: + if set_tag_by_name(obj, name): + setted.append(name) + for name in reset_tags: + if reset_tag_by_name(obj, name): + resetted.append(name) + ObjectAnnotationTagHistoryEntry.objects.create( + content_type=ctype, + content_id=obj.pk, + setted = ','.join(setted), + unsetted = ','.join(resetted), + change_date = datetime.datetime.now(), + comment = comment)