Util functions to get workflows, states and annotation tags for a draft. See #543

- Legacy-Id: 2743
This commit is contained in:
Emilio A. Sánchez López 2011-01-17 18:16:57 +00:00
parent 6729180833
commit 6afd71b628

View file

@ -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)