Move update_telechat from idrfc.utils to doc.utils, port remaining
code to using log_state_changed from doc.utils, remove idrfc/utils.py - Legacy-Id: 6050
This commit is contained in:
parent
a8fefd9454
commit
2cf79bb04c
|
@ -239,3 +239,54 @@ def nice_consensus(consensus):
|
|||
False: "No"
|
||||
}
|
||||
return mapping[consensus]
|
||||
|
||||
def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None):
|
||||
from ietf.doc.models import TelechatDocEvent
|
||||
|
||||
on_agenda = bool(new_telechat_date)
|
||||
|
||||
prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
|
||||
prev_returning = bool(prev and prev.returning_item)
|
||||
prev_telechat = prev.telechat_date if prev else None
|
||||
prev_agenda = bool(prev_telechat)
|
||||
|
||||
returning_item_changed = bool(new_returning_item != None and new_returning_item != prev_returning)
|
||||
|
||||
if new_returning_item == None:
|
||||
returning = prev_returning
|
||||
else:
|
||||
returning = new_returning_item
|
||||
|
||||
if returning == prev_returning and new_telechat_date == prev_telechat:
|
||||
# fully updated, nothing to do
|
||||
return
|
||||
|
||||
# auto-update returning item
|
||||
if (not returning_item_changed and on_agenda and prev_agenda
|
||||
and new_telechat_date != prev_telechat):
|
||||
returning = True
|
||||
|
||||
e = TelechatDocEvent()
|
||||
e.type = "scheduled_for_telechat"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.returning_item = returning
|
||||
e.telechat_date = new_telechat_date
|
||||
|
||||
if on_agenda != prev_agenda:
|
||||
if on_agenda:
|
||||
e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date)
|
||||
else:
|
||||
e.desc = "Removed from agenda for telechat"
|
||||
elif on_agenda and new_telechat_date != prev_telechat:
|
||||
e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % (
|
||||
new_telechat_date, prev_telechat)
|
||||
else:
|
||||
# we didn't reschedule but flipped returning item bit - let's
|
||||
# just explain that
|
||||
if returning:
|
||||
e.desc = "Set telechat returning item indication"
|
||||
else:
|
||||
e.desc = "Removed telechat returning item indication"
|
||||
|
||||
e.save()
|
||||
|
|
|
@ -8,9 +8,7 @@ from django.template import RequestContext
|
|||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.idrfc.utils import update_telechat
|
||||
|
||||
from ietf.doc.utils import log_state_changed
|
||||
from ietf.doc.utils import log_state_changed, update_telechat
|
||||
|
||||
from ietf.doc.models import save_document_in_history
|
||||
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
||||
|
|
|
@ -8,8 +8,7 @@ from django.template import RequestContext
|
|||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.idrfc.utils import update_telechat
|
||||
from ietf.doc.utils import log_state_changed
|
||||
from ietf.doc.utils import log_state_changed, update_telechat
|
||||
from ietf.doc.models import save_document_in_history
|
||||
|
||||
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
||||
|
|
|
@ -4,13 +4,13 @@ from django.conf import settings
|
|||
from django.template.loader import render_to_string
|
||||
from django.db.models import Q
|
||||
|
||||
import datetime, os, shutil, glob, re, itertools
|
||||
import datetime, os, shutil, glob, re
|
||||
|
||||
from ietf.utils.mail import send_mail, send_mail_subj
|
||||
from ietf.idrfc.utils import log_state_changed
|
||||
from ietf.doc.models import Document, DocEvent, State, save_document_in_history, IESG_SUBSTATE_TAGS
|
||||
from ietf.person.models import Person, Email
|
||||
from ietf.meeting.models import Meeting
|
||||
from ietf.doc.utils import log_state_changed
|
||||
|
||||
def expirable_draft(draft):
|
||||
"""Return whether draft is in an expirable state or not. This is
|
||||
|
@ -128,14 +128,14 @@ def expire_draft(doc):
|
|||
save_document_in_history(doc)
|
||||
if doc.latest_event(type='started_iesg_process'):
|
||||
dead_state = State.objects.get(used=True, type="draft-iesg", slug="dead")
|
||||
prev = doc.get_state("draft-iesg")
|
||||
prev_state = doc.friendly_state()
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev != dead_state:
|
||||
if doc.get_state("draft-iesg") != dead_state:
|
||||
doc.set_state(dead_state)
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
log_state_changed(None, doc, system, prev, prev_tag)
|
||||
log_state_changed(None, doc, system, doc.friendly_state(), prev_state)
|
||||
|
||||
e = DocEvent(doc=doc, by=system)
|
||||
e.type = "expired_document"
|
||||
|
|
|
@ -4,11 +4,10 @@ import datetime
|
|||
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.idrfc.mails import *
|
||||
from ietf.idrfc.utils import *
|
||||
|
||||
from ietf.doc.models import *
|
||||
from ietf.person.models import Person
|
||||
from ietf.doc.utils import log_state_changed
|
||||
from ietf.idrfc.mails import *
|
||||
|
||||
def request_last_call(request, doc):
|
||||
if not doc.latest_event(type="changed_ballot_writeup_text"):
|
||||
|
@ -45,7 +44,7 @@ def expire_last_call(doc):
|
|||
|
||||
save_document_in_history(doc)
|
||||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
prev_state = doc.friendly_state()
|
||||
doc.set_state(state)
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
|
@ -53,7 +52,7 @@ def expire_last_call(doc):
|
|||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), prev, prev_tag)
|
||||
e = log_state_changed(None, doc, Person.objects.get(name="(System)"), doc.friendly_state(), prev_state)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# generation of mails
|
||||
|
||||
import textwrap
|
||||
from datetime import datetime, date, time, timedelta
|
||||
import textwrap, datetime
|
||||
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.html import strip_tags
|
||||
|
@ -100,11 +99,11 @@ def generate_ballot_writeup(request, doc):
|
|||
return e
|
||||
|
||||
def generate_last_call_announcement(request, doc):
|
||||
expiration_date = date.today() + timedelta(days=14)
|
||||
expiration_date = datetime.date.today() + datetime.timedelta(days=14)
|
||||
cc = []
|
||||
if doc.group.type_id in ("individ", "area"):
|
||||
group = "an individual submitter"
|
||||
expiration_date += timedelta(days=14)
|
||||
expiration_date += datetime.timedelta(days=14)
|
||||
else:
|
||||
group = "the %s WG (%s)" % (doc.group.name, doc.group.acronym)
|
||||
if doc.group.list_email:
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
from django.conf import settings
|
||||
|
||||
from ietf.idrfc.mails import *
|
||||
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream
|
||||
|
||||
def add_document_comment(request, doc, text, ballot=None):
|
||||
if request:
|
||||
login = IESGLogin.objects.get(login_name=request.user.username)
|
||||
else:
|
||||
login = None
|
||||
|
||||
c = DocumentComment()
|
||||
c.document = doc.idinternal
|
||||
c.public_flag = True
|
||||
c.version = doc.revision_display()
|
||||
c.comment_text = text
|
||||
c.created_by = login
|
||||
if ballot:
|
||||
c.ballot = ballot
|
||||
c.rfc_flag = doc.idinternal.rfc_flag
|
||||
c.save()
|
||||
|
||||
def generate_ballot(request, doc):
|
||||
ballot = BallotInfo()
|
||||
ballot.ballot = doc.idinternal.ballot_id
|
||||
ballot.active = False
|
||||
ballot.last_call_text = generate_last_call_announcement(request, doc)
|
||||
ballot.approval_text = generate_approval_mail(request, doc)
|
||||
ballot.ballot_writeup = render_to_string("idrfc/ballot_writeup.txt")
|
||||
ballot.save()
|
||||
doc.idinternal.ballot = ballot
|
||||
return ballot
|
||||
|
||||
def log_state_changed(request, doc, by, prev_iesg_state, prev_iesg_tag):
|
||||
from ietf.doc.models import DocEvent, IESG_SUBSTATE_TAGS
|
||||
|
||||
state = doc.get_state("draft-iesg")
|
||||
|
||||
state_name = state.name
|
||||
tags = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
if tags:
|
||||
state_name += "::" + tags[0].name
|
||||
|
||||
prev_state_name = prev_iesg_state.name if prev_iesg_state else "I-D Exists"
|
||||
if prev_iesg_tag:
|
||||
prev_state_name += "::" + prev_iesg_tag.name
|
||||
|
||||
e = DocEvent(doc=doc, by=by)
|
||||
e.type = "changed_document"
|
||||
e.desc = u"State changed to <b>%s</b> from %s" % (state_name, prev_state_name)
|
||||
e.save()
|
||||
return e
|
||||
|
||||
def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None):
|
||||
from ietf.doc.models import TelechatDocEvent
|
||||
|
||||
on_agenda = bool(new_telechat_date)
|
||||
|
||||
prev = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
|
||||
prev_returning = bool(prev and prev.returning_item)
|
||||
prev_telechat = prev.telechat_date if prev else None
|
||||
prev_agenda = bool(prev_telechat)
|
||||
|
||||
returning_item_changed = bool(new_returning_item != None and new_returning_item != prev_returning)
|
||||
|
||||
if new_returning_item == None:
|
||||
returning = prev_returning
|
||||
else:
|
||||
returning = new_returning_item
|
||||
|
||||
if returning == prev_returning and new_telechat_date == prev_telechat:
|
||||
# fully updated, nothing to do
|
||||
return
|
||||
|
||||
# auto-update returning item
|
||||
if (not returning_item_changed and on_agenda and prev_agenda
|
||||
and new_telechat_date != prev_telechat):
|
||||
returning = True
|
||||
|
||||
e = TelechatDocEvent()
|
||||
e.type = "scheduled_for_telechat"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.returning_item = returning
|
||||
e.telechat_date = new_telechat_date
|
||||
|
||||
if on_agenda != prev_agenda:
|
||||
if on_agenda:
|
||||
e.desc = "Placed on agenda for telechat - %s" % (new_telechat_date)
|
||||
else:
|
||||
e.desc = "Removed from agenda for telechat"
|
||||
elif on_agenda and new_telechat_date != prev_telechat:
|
||||
e.desc = "Telechat date has been changed to <b>%s</b> from <b>%s</b>" % (
|
||||
new_telechat_date, prev_telechat)
|
||||
else:
|
||||
# we didn't reschedule but flipped returning item bit - let's
|
||||
# just explain that
|
||||
if returning:
|
||||
e.desc = "Set telechat returning item indication"
|
||||
else:
|
||||
e.desc = "Removed telechat returning item indication"
|
||||
|
||||
e.save()
|
|
@ -21,7 +21,6 @@ from ietf.iesg.models import TelechatDate
|
|||
from ietf.ipr.models import IprDetail
|
||||
from ietf.ipr.search import iprs_from_docs
|
||||
from ietf.idrfc.mails import *
|
||||
from ietf.idrfc.utils import *
|
||||
from ietf.idrfc.lastcall import request_last_call
|
||||
|
||||
from ietf.doc.utils import *
|
||||
|
@ -31,9 +30,6 @@ from ietf.name.models import BallotPositionName
|
|||
from ietf.message.utils import infer_message
|
||||
from ietf.person.models import Person
|
||||
|
||||
from ietf.doc.utils import log_state_changed as docutil_log_state_changed
|
||||
from ietf.idrfc.utils import log_state_changed as idrfcutil_log_state_changed
|
||||
|
||||
BALLOT_CHOICES = (("yes", "Yes"),
|
||||
("noobj", "No Objection"),
|
||||
("discuss", "Discuss"),
|
||||
|
@ -57,14 +53,14 @@ def do_undefer_ballot(request, doc):
|
|||
prev_state = doc.friendly_state()
|
||||
if doc.type_id == 'draft':
|
||||
doc.set_state(State.objects.get(used=True, type="draft-iesg", slug='iesg-eva'))
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
elif doc.type_id == 'conflrev':
|
||||
doc.set_state(State.objects.get(used=True, type='conflrev',slug='iesgeval'))
|
||||
|
||||
e = docutil_log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -368,7 +364,7 @@ def defer_ballot(request, name):
|
|||
elif doc.type_id == 'conflrev':
|
||||
doc.set_state(State.objects.get(used=True, type='conflrev', slug='defer'))
|
||||
|
||||
e = docutil_log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -450,7 +446,7 @@ def lastcalltext(request, name):
|
|||
if "send_last_call_request" in request.POST:
|
||||
save_document_in_history(doc)
|
||||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
prev_state = doc.friendly_state()
|
||||
doc.set_state(State.objects.get(used=True, type="draft-iesg", slug='lc-req'))
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
|
@ -458,7 +454,7 @@ def lastcalltext(request, name):
|
|||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = idrfcutil_log_state_changed(request, doc, login, prev, prev_tag)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -669,6 +665,7 @@ def approve_ballot(request, name):
|
|||
else:
|
||||
new_state = State.objects.get(used=True, type="draft-iesg", slug="ann")
|
||||
|
||||
prev_friendly_state = doc.friendly_state()
|
||||
prev_state = doc.get_state("draft-iesg")
|
||||
if new_state.slug == "ann" and new_state.slug != prev_state.slug and not request.REQUEST.get("skiprfceditorpost"):
|
||||
# start by notifying the RFC Editor
|
||||
|
@ -705,7 +702,7 @@ def approve_ballot(request, name):
|
|||
|
||||
change_description = e.desc + " and state has been changed to %s" % doc.get_state("draft-iesg").name
|
||||
|
||||
e = idrfcutil_log_state_changed(request, doc, login, prev_state, prev_tag)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_friendly_state)
|
||||
|
||||
doc.time = e.time
|
||||
doc.save()
|
||||
|
@ -770,24 +767,21 @@ def make_last_call(request, name):
|
|||
|
||||
save_document_in_history(doc)
|
||||
|
||||
prev_state = doc.get_state("draft-iesg")
|
||||
if doc.type.slug == 'draft':
|
||||
|
||||
prev = doc.get_state("draft-iesg")
|
||||
doc.set_state(State.objects.get(used=True, type="draft-iesg", slug='lc'))
|
||||
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
if prev_tag:
|
||||
doc.tags.remove(prev_tag)
|
||||
|
||||
e = idrfcutil_log_state_changed(request, doc, login, prev, prev_tag)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
change_description = "Last call has been made for %s and state has been changed to %s" % (doc.name, doc.get_state("draft-iesg").name)
|
||||
|
||||
elif doc.type.slug == 'statchg':
|
||||
|
||||
prev = doc.friendly_state()
|
||||
doc.set_state(State.objects.get(used=True, type="statchg", slug='in-lc'))
|
||||
e = docutil_log_state_changed(request, doc, login, doc.friendly_state(), prev)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_state)
|
||||
change_description = "Last call has been made for %s and state has been changed to %s" % (doc.name, doc.friendly_state())
|
||||
|
||||
doc.time = e.time
|
||||
|
|
|
@ -16,11 +16,10 @@ from django.forms.util import ErrorList
|
|||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
from ietf.utils.mail import send_mail_text, send_mail_message
|
||||
from ietf.ietfauth.decorators import has_role, role_required
|
||||
from ietf.ietfauth.utils import user_is_person
|
||||
from ietf.ietfauth.decorators import role_required
|
||||
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream, user_is_person
|
||||
from ietf.iesg.models import TelechatDate
|
||||
from ietf.idrfc.mails import *
|
||||
from ietf.idrfc.utils import *
|
||||
from ietf.idrfc.lastcall import request_last_call
|
||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||
from ietf.person.forms import EmailsField
|
||||
|
@ -36,7 +35,6 @@ from ietf.doc.utils import *
|
|||
from ietf.name.models import IntendedStdLevelName, DocTagName, StreamName
|
||||
from ietf.person.models import Person, Email
|
||||
from ietf.message.models import Message
|
||||
from ietf.idrfc.utils import log_state_changed
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
state = forms.ModelChoiceField(State.objects.filter(used=True, type="draft-iesg"), empty_label=None, required=True)
|
||||
|
@ -53,7 +51,7 @@ class ChangeStateForm(forms.Form):
|
|||
|
||||
# tag handling is a bit awkward since the UI still works
|
||||
# as if IESG tags are a substate
|
||||
prev_tag = doc.tags.filter(slug__in=('point', 'ad-f-up', 'need-rev', 'extpty'))
|
||||
prev_tag = doc.tags.filter(slug__in=IESG_SUBSTATE_TAGS)
|
||||
prev_tag = prev_tag[0] if prev_tag else None
|
||||
|
||||
if state == prev and tag == prev_tag:
|
||||
|
@ -76,6 +74,7 @@ def change_state(request, name):
|
|||
if form.is_valid():
|
||||
next_state = form.cleaned_data['state']
|
||||
prev_state = doc.get_state("draft-iesg")
|
||||
prev_friendly_state = doc.friendly_state()
|
||||
|
||||
tag = form.cleaned_data['substate']
|
||||
comment = form.cleaned_data['comment'].strip()
|
||||
|
@ -96,7 +95,7 @@ def change_state(request, name):
|
|||
if tag:
|
||||
doc.tags.add(tag)
|
||||
|
||||
e = log_state_changed(request, doc, login, prev_state, prev_tag)
|
||||
e = log_state_changed(request, doc, login, doc.friendly_state(), prev_friendly_state)
|
||||
|
||||
if comment:
|
||||
c = DocEvent(type="added_comment")
|
||||
|
|
|
@ -49,7 +49,7 @@ from django.utils import simplejson as json
|
|||
from django import forms
|
||||
from ietf.iesg.models import TelechatDates, TelechatAgendaItem, WGAction
|
||||
from ietf.idrfc.idrfc_wrapper import IdWrapper, RfcWrapper
|
||||
from ietf.idrfc.utils import update_telechat
|
||||
from ietf.doc.utils import update_telechat
|
||||
from ietf.ietfauth.decorators import group_required, role_required
|
||||
from ietf.idtracker.templatetags.ietf_filters import in_group
|
||||
from ietf.ipr.models import IprDocAlias
|
||||
|
|
|
@ -83,7 +83,7 @@ def historic_milestones_for_charter(charter, rev):
|
|||
|
||||
|
||||
def update_telechat(request, doc, by, new_telechat_date):
|
||||
# FIXME: reuse function in idrfc/utils.py instead of this one
|
||||
# FIXME: reuse function in doc/utils.py instead of this one
|
||||
# (need to fix auto-setting returning item problem first though)
|
||||
from ietf.doc.models import TelechatDocEvent
|
||||
|
||||
|
|
Loading…
Reference in a new issue