1010from workflows .utils import (get_workflow_for_object , set_workflow_for_object ,
1111 get_state )
1212
13+ from ietf .ietfworkflows .streams import get_streamed_draft
1314from ietf .ietfworkflows .models import (WGWorkflow , AnnotationTagObjectRelation ,
14- AnnotationTag , ObjectAnnotationTagHistoryEntry )
15+ AnnotationTag , ObjectAnnotationTagHistoryEntry ,
16+ ObjectHistoryEntry )
1517
1618
1719WAITING_WRITEUP = 'WG Consensus: Waiting for Write-Up'
@@ -24,7 +26,8 @@ def get_default_workflow_for_wg():
2426 return workflow
2527 except WGWorkflow .DoesNotExist :
2628 return None
27-
29+
30+
2831def clone_transition (transition ):
2932 new = copy .copy (transition )
3033 new .pk = None
@@ -35,6 +38,7 @@ def clone_transition(transition):
3538 new .states .add (state )
3639 return new
3740
41+
3842def clone_workflow (workflow , name ):
3943 new = WGWorkflow .objects .create (name = name , initial_state = workflow .initial_state )
4044
@@ -51,32 +55,55 @@ def clone_workflow(workflow, name):
5155 new .transitions .add (clone_transition (transition ))
5256 return new
5357
54- def get_workflow_for_wg (wg ):
58+
59+ def get_workflow_for_wg (wg , default = None ):
5560 workflow = get_workflow_for_object (wg )
5661 try :
5762 workflow = workflow and workflow .wgworkflow
5863 except WGWorkflow .DoesNotExist :
5964 workflow = None
6065 if not workflow :
61- workflow = get_default_workflow_for_wg ()
66+ if default :
67+ workflow = default
68+ else :
69+ workflow = get_default_workflow_for_wg ()
6270 if not workflow :
6371 return None
6472 workflow = clone_workflow (workflow , name = '%s workflow' % wg )
6573 set_workflow_for_object (wg , workflow )
6674 return workflow
6775
76+
6877def get_workflow_for_draft (draft ):
6978 workflow = get_workflow_for_object (draft )
7079 try :
7180 workflow = workflow and workflow .wgworkflow
7281 except WGWorkflow .DoesNotExist :
7382 workflow = None
7483 if not workflow :
75- workflow = get_workflow_for_wg (draft .group .ietfwg )
84+ streamed_draft = get_streamed_draft (draft )
85+ if not streamed_draft or not streamed_draft .stream :
86+ return None
87+ stream = streamed_draft .stream
88+ if stream .with_groups :
89+ if not streamed_draft .group :
90+ return None
91+ else :
92+ workflow = get_workflow_for_wg (streamed_draft .group , streamed_draft .stream .workflow )
93+ else :
94+ workflow = stream .workflow
7695 set_workflow_for_object (draft , workflow )
7796 return workflow
7897
7998
99+ def get_workflow_history_for_draft (draft ):
100+ ctype = ContentType .objects .get_for_model (draft )
101+ history = ObjectHistoryEntry .objects .filter (content_type = ctype , content_id = draft .pk ).\
102+ select_related ('objectworkflowhistoryentry' , 'objectannotationtaghistoryentry' ,
103+ 'objectstreamhistoryentry' )
104+ return history
105+
106+
80107def get_annotation_tags_for_draft (draft ):
81108 ctype = ContentType .objects .get_for_model (draft )
82109 tags = AnnotationTagObjectRelation .objects .filter (content_type = ctype , content_id = draft .pk )
@@ -100,6 +127,7 @@ def get_annotation_tag_by_name(tag_name):
100127 except AnnotationTag .DoesNotExist :
101128 return None
102129
130+
103131def set_tag_by_name (obj , tag_name ):
104132 ctype = ContentType .objects .get_for_model (obj )
105133 try :
@@ -159,7 +187,7 @@ def notify_tag_entry(entry, extra_notify=[]):
159187def notify_state_entry (entry , extra_notify = []):
160188 return notify_entry (entry , 'ietfworkflows/state_updated_mail.txt' , extra_notify )
161189
162-
190+
163191def update_tags (obj , comment , person , set_tags = [], reset_tags = [], extra_notify = []):
164192 ctype = ContentType .objects .get_for_model (obj )
165193 setted = []
@@ -173,9 +201,9 @@ def update_tags(obj, comment, person, set_tags=[], reset_tags=[], extra_notify=[
173201 entry = ObjectAnnotationTagHistoryEntry .objects .create (
174202 content_type = ctype ,
175203 content_id = obj .pk ,
176- setted = ',' .join (setted ),
177- unsetted = ',' .join (resetted ),
178- change_date = datetime .datetime .now (),
179- comment = comment ,
204+ setted = ',' .join (setted ),
205+ unsetted = ',' .join (resetted ),
206+ date = datetime .datetime .now (),
207+ comment = comment ,
180208 person = person )
181209 notify_tag_entry (entry , extra_notify )
0 commit comments