def do_replace(draft, request): 'Perform document replace' save_document_in_history(draft) replaced = request.session['data']['replaced'] # a DocAlias replaced_by = request.session['data']['replaced_by'] # a Document # change state and update last modified draft.set_state(State.objects.get(type="draft", slug="repl")) draft.time = datetime.datetime.now() draft.save() # create relationship RelatedDocument.objects.create(source=replaced_by, target=replaced, relationship=DocRelationshipName.objects.get(slug='replaces')) # create DocEvent # no replace DocEvent at this time, Jan 2012 # move replaced document to archive archive_draft_files(replaced.document.name + '-' + replaced.document.rev) # send announcement announcement_from_form(request.session['email'],by=request.user.person) return
def do_resurrect(draft, request): ''' Actions - restore last archived version - change state to Active - reset expires - create DocEvent ''' # restore latest revision documents file from archive files = glob.glob(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR,draft.name) + '-??.*') sorted_files = sorted(files) latest,ext = os.path.splitext(sorted_files[-1]) files = glob.glob(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR,latest) + '.*') for file in files: shutil.move(file,settings.INTERNET_DRAFT_PATH) # Update draft record draft.set_state(State.objects.get(type="draft", slug="active")) # set expires draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE) draft.time = datetime.datetime.now() draft.save() # create DocEvent NewRevisionDocEvent.objects.create(type='completed_resurrect', by=request.user.person, doc=draft, rev=draft.rev, time=draft.time) # send announcement announcement_from_form(request.session['email'],by=request.user.person) return
def do_withdraw(draft, request): ''' Actions - change state to withdrawn - TODO move file to archive ''' withdraw_type = request.POST.get('withdraw_type') prev_state = draft.get_state("draft") new_state = None if withdraw_type == 'ietf': new_state = State.objects.get(type="draft", slug="ietf-rm") elif withdraw_type == 'author': new_state = State.objects.get(type="draft", slug="auth-rm") if not new_state: return draft.set_state(new_state) e = add_state_change_event(draft, request.user.person, prev_state, new_state) if e: draft.save_with_history([e]) # send announcement form = EmailForm(request.POST) announcement_from_form(form.data, by=request.user.person) return
def do_replace(draft, request): 'Perform document replace' replaced = DocAlias.objects.get( name=request.POST.get('replaced')) # a DocAlias replaced_by = Document.objects.get( name=request.POST.get('replaced_by')) # a Document # create relationship RelatedDocument.objects.create( source=replaced_by, target=replaced, relationship=DocRelationshipName.objects.get(slug='replaces')) draft.set_state(State.objects.get(type="draft", slug="repl")) e = DocEvent.objects.create( type='changed_document', by=request.user.person, doc=replaced_by, rev=replaced_by.rev, time=draft.time, desc='This document now replaces <b>%s</b>' % replaced, ) draft.save_with_history([e]) # move replaced document to archive archive_draft_files(replaced.document.name + '-' + replaced.document.rev) # send announcement form = EmailForm(request.POST) announcement_from_form(form.data, by=request.user.person) return
def do_revision(draft, request): ''' This function handles adding a new revision of an existing Internet-Draft. Prerequisites: draft must be active Input: title, revision_date, pages, abstract, file input fields to upload new draft document(s) Actions - move current doc(s) to archive directory - upload new docs to live dir - save doc in history - increment revision - reset expires - create DocEvent - handle sub-state - schedule notification ''' # TODO this behavior may change with archive strategy archive_draft_files(draft.name + '-' + draft.rev) save_document_in_history(draft) # save form data form = BaseRevisionModelForm(request.session['data'],instance=draft) if form.is_valid(): new_draft = form.save() else: raise Exception(form.errors) raise Exception('Problem with input data %s' % form.data) # set revision and expires new_draft.rev = request.session['filename'][-2:] new_draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE) new_draft.time = datetime.datetime.now() new_draft.save() # create DocEvent NewRevisionDocEvent.objects.create(type='new_revision', by=request.user.person, doc=draft, rev=new_draft.rev, desc='New revision available', time=draft.time) handle_substate(new_draft) # move uploaded files to production directory promote_files(new_draft, request.session['file_type']) # save the submission record post_submission(request) # send announcement if we are in IESG process if new_draft.get_state('draft-iesg'): announcement_from_form(request.session['email'],by=request.user.person) return
def do_update(draft,request): ''' Actions - increment revision # - reset expires - create DocEvent - do substate check - change state to Active ''' save_document_in_history(draft) # save form data form = BaseRevisionModelForm(request.session['data'],instance=draft) if form.is_valid(): new_draft = form.save() else: raise Exception('Problem with input data %s' % form.data) handle_substate(new_draft) # update draft record new_draft.rev = os.path.splitext(request.session['data']['filename'])[0][-2:] new_draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE) new_draft.time = datetime.datetime.now() new_draft.save() new_draft.set_state(State.objects.get(type="draft", slug="active")) # create DocEvent NewRevisionDocEvent.objects.create(type='new_revision', by=request.user.person, doc=new_draft, rev=new_draft.rev, desc='New revision available', time=new_draft.time) # move uploaded files to production directory promote_files(new_draft, request.session['file_type']) # save the submission record post_submission(request) # send announcement announcement_from_form(request.session['email'],by=request.user.person) return
def do_withdraw(draft,request): ''' Actions - change state to withdrawn - TODO move file to archive ''' withdraw_type = request.session['data']['type'] if withdraw_type == 'ietf': draft.set_state(State.objects.get(type="draft", slug="ietf-rm")) elif withdraw_type == 'author': draft.set_state(State.objects.get(type="draft", slug="auth-rm")) draft.time = datetime.datetime.now() draft.save() # no DocEvent ? # send announcement announcement_from_form(request.session['email'],by=request.user.person) return
def do_resurrect(draft, request): ''' Actions - restore last archived version - change state to Active - reset expires - create DocEvent ''' # restore latest revision documents file from archive files = glob.glob( os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, draft.name) + '-??.*') sorted_files = sorted(files) latest, ext = os.path.splitext(sorted_files[-1]) files = glob.glob( os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, latest) + '.*') for file in files: shutil.move(file, settings.INTERNET_DRAFT_PATH) # Update draft record draft.set_state(State.objects.get(type="draft", slug="active")) # set expires draft.expires = datetime.datetime.now() + datetime.timedelta( settings.INTERNET_DRAFT_DAYS_TO_EXPIRE) # create DocEvent e = NewRevisionDocEvent.objects.create(type='completed_resurrect', by=request.user.person, doc=draft, rev=draft.rev, time=draft.time) draft.save_with_history([e]) # send announcement form = EmailForm(request.POST) announcement_from_form(form.data, by=request.user.person) return
def do_extend(draft, request): ''' Actions: - update revision_date - set extension_date ''' save_document_in_history(draft) draft.expires = request.session['data']['expiration_date'] draft.time = datetime.datetime.now() draft.save() DocEvent.objects.create(type='changed_document', by=request.user.person, doc=draft, time=draft.time, desc='extend_expiry') # save scheduled announcement announcement_from_form(request.session['email'],by=request.user.person) return
def announce(request, id): ''' Schedule announcement of new Internet-Draft to I-D Announce list **Templates:** * none **Template Variables:** * none ''' draft = get_object_or_404(Document, name=id) email_form = EmailForm(get_email_initial(draft,type='new')) announcement_from_form(email_form.data, by=request.user.person, from_val='*****@*****.**', content_type='Multipart/Mixed; Boundary="NextPart"') messages.success(request, 'Announcement scheduled successfully!') return redirect('drafts_view', id=id)
def announce(request, id): ''' Schedule announcement of new Internet-Draft to I-D Announce list **Templates:** * none **Template Variables:** * none ''' draft = get_object_or_404(Document, name=id) email_form = EmailForm(get_email_initial(draft, action='new')) announcement_from_form(email_form.data, by=request.user.person, from_val='*****@*****.**', content_type='Multipart/Mixed; Boundary="NextPart"') messages.success(request, 'Announcement scheduled successfully!') return redirect('ietf.secr.drafts.views.view', id=id)
def do_extend(draft, request): ''' Actions: - update revision_date - set extension_date ''' e = DocEvent.objects.create( type='changed_document', by=request.user.person, doc=draft, rev=draft.rev, time=draft.time, desc='Extended expiry', ) draft.expires = parse(request.POST.get('expiration_date')) draft.save_with_history([e]) # save scheduled announcement form = EmailForm(request.POST) announcement_from_form(form.data, by=request.user.person) return
def do_update_announce(draft, request): # send announcement form = EmailForm(request.POST) announcement_from_form(form.data, by=request.user.person) return