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:
Ole Laursen 2013-08-13 16:44:07 +00:00
parent a8fefd9454
commit 2cf79bb04c
11 changed files with 83 additions and 147 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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