|
43 | 43 | from django.core.urlresolvers import reverse as urlreverse, NoReverseMatch |
44 | 44 | from django.conf import settings |
45 | 45 |
|
46 | | -from ietf.idtracker.models import InternetDraft, IDInternal, BallotInfo, DocumentComment |
47 | | -from ietf.idtracker.templatetags.ietf_filters import format_textarea, fill |
48 | | -from ietf.idrfc import markup_txt |
49 | 46 | from ietf.idrfc.utils import * |
50 | | -from ietf.idrfc.models import RfcIndex, DraftVersions |
51 | | -from ietf.idrfc.idrfc_wrapper import BallotWrapper, IdWrapper, RfcWrapper |
52 | | -from ietf.ietfworkflows.utils import get_full_info_for_draft |
53 | 47 | from ietf.doc.models import * |
54 | 48 | from ietf.doc.utils import * |
55 | 49 | from ietf.utils.history import find_history_active_at |
@@ -84,13 +78,8 @@ def render_document_top(request, doc, tab, name): |
84 | 78 | name=name)) |
85 | 79 |
|
86 | 80 |
|
| 81 | +@decorator_from_middleware(GZipMiddleware) |
87 | 82 | def document_main(request, name, rev=None): |
88 | | - if "old" in request.GET and (name.lower().startswith("draft") or name.lower().startswith("rfc")): |
89 | | - if rev != None: # no support for old revisions at the moment |
90 | | - raise Http404() |
91 | | - return document_main_idrfc(request, name, tab="document") |
92 | | - # generic part |
93 | | - |
94 | 83 | doc = get_object_or_404(Document, docalias__name=name) |
95 | 84 |
|
96 | 85 | # take care of possible redirections |
@@ -643,206 +632,16 @@ def extract_name(s): |
643 | 632 |
|
644 | 633 | return HttpResponse(json.dumps(data, indent=2), mimetype='text/plain') |
645 | 634 |
|
646 | | -def _get_html(key, filename, split=True): |
647 | | - # FIXME |
648 | | - return get_document_content(key, filename, split=split, markup=True), "" |
649 | | - |
650 | | -def include_text(request): |
651 | | - # FIXME |
652 | | - include_text = request.GET.get( 'include_text' ) |
653 | | - if "full_draft" in request.COOKIES: |
654 | | - if request.COOKIES["full_draft"] == "on": |
655 | | - include_text = 1 |
656 | | - return include_text |
657 | | - |
658 | | -def document_main_rfc(request, rfc_number, tab): |
659 | | - # FIXME |
660 | | - rfci = get_object_or_404(RfcIndex, rfc_number=rfc_number, states__type="draft", states__slug="rfc") |
661 | | - rfci.viewing_as_rfc = True |
662 | | - doc = RfcWrapper(rfci) |
663 | | - |
664 | | - info = {} |
665 | | - info['is_rfc'] = True |
666 | | - info['has_pdf'] = (".pdf" in doc.file_types()) |
667 | | - info['has_txt'] = (".txt" in doc.file_types()) |
668 | | - info['has_ps'] = (".ps" in doc.file_types()) |
669 | | - if info['has_txt']: |
670 | | - (content1, content2) = _get_html( |
671 | | - "rfc"+str(rfc_number)+",html", |
672 | | - os.path.join(settings.RFC_PATH, "rfc"+str(rfc_number)+".txt")) |
673 | | - else: |
674 | | - content1 = "" |
675 | | - content2 = "" |
676 | | - |
677 | | - history = _get_history(doc, None) |
678 | | - |
679 | | - template = "idrfc/doc_tab_%s" % tab |
680 | | - if tab == "document": |
681 | | - template += "_rfc" |
682 | | - return render_to_response(template + ".html", |
683 | | - {'content1':content1, 'content2':content2, |
684 | | - 'doc':doc, 'info':info, 'tab':tab, |
685 | | - 'include_text':include_text(request), |
686 | | - 'history':history}, |
687 | | - context_instance=RequestContext(request)); |
688 | | - |
689 | | -@decorator_from_middleware(GZipMiddleware) |
690 | | -def document_main_idrfc(request, name, tab): |
691 | | - # FIXME |
692 | | - r = re.compile("^rfc([1-9][0-9]*)$") |
693 | | - m = r.match(name) |
694 | | - if m: |
695 | | - return document_main_rfc(request, int(m.group(1)), tab) |
696 | | - id = get_object_or_404(InternetDraft, filename=name) |
697 | | - doc = IdWrapper(id) |
698 | | - |
699 | | - info = {} |
700 | | - info['has_pdf'] = (".pdf" in doc.file_types()) |
701 | | - info['is_rfc'] = False |
702 | | - |
703 | | - info['conflict_reviews'] = [ rel.source for alias in id.docalias_set.all() for rel in alias.relateddocument_set.filter(relationship='conflrev') ] |
704 | | - info['rfc_editor_state'] = id.get_state("draft-rfceditor") |
705 | | - info['iana_review_state'] = id.get_state("draft-iana-review") |
706 | | - info['iana_action_state'] = id.get_state("draft-iana-action") |
707 | | - info["consensus"] = None |
708 | | - if id.stream_id in ("ietf", "irtf", "iab"): |
709 | | - e = id.latest_event(ConsensusDocEvent, type="changed_consensus") |
710 | | - info["consensus"] = nice_consensus(e and e.consensus) |
711 | | - info["can_edit_consensus"] = can_edit_consensus(request.user, id) |
712 | | - info["can_edit_intended_std_level"] = can_edit_intended_std_level(request.user, id) |
713 | | - |
714 | | - (content1, content2) = _get_html( |
715 | | - str(name)+","+str(id.revision)+",html", |
716 | | - os.path.join(settings.INTERNET_DRAFT_PATH, name+"-"+id.revision+".txt")) |
717 | | - |
718 | | - versions = _get_versions(id) |
719 | | - history = _get_history(doc, versions) |
720 | | - |
721 | | - template = "idrfc/doc_tab_%s" % tab |
722 | | - if tab == "document": |
723 | | - template += "_id" |
724 | | - return render_to_response(template + ".html", |
725 | | - {'content1':content1, 'content2':content2, |
726 | | - 'doc':doc, 'info':info, 'tab':tab, |
727 | | - 'include_text':include_text(request), |
728 | | - 'stream_info': get_full_info_for_draft(id), |
729 | | - 'milestones': id.groupmilestone_set.filter(state="active"), |
730 | | - 'versions':versions, 'history':history}, |
731 | | - context_instance=RequestContext(request)); |
732 | | - |
733 | | -# doc is either IdWrapper or RfcWrapper |
734 | | -def _get_history(doc, versions): |
735 | | - results = [] |
736 | | - if settings.USE_DB_REDESIGN_PROXY_CLASSES: |
737 | | - versions = [] # clear versions |
738 | | - event_holder = doc._draft if hasattr(doc, "_draft") else doc._rfcindex |
739 | | - for e in event_holder.docevent_set.all().select_related('by').order_by('-time', 'id'): |
740 | | - info = {} |
741 | | - if e.type == "new_revision": |
742 | | - filename = u"%s-%s" % (e.doc.name, e.newrevisiondocevent.rev) |
743 | | - e.desc = 'New version available: <a href="http://tools.ietf.org/id/%s.txt">%s</a>' % (filename, filename) |
744 | | - if int(e.newrevisiondocevent.rev) != 0: |
745 | | - e.desc += ' (<a href="http:%s?url2=%s">diff from -%02d</a>)' % (settings.RFCDIFF_PREFIX, filename, int(e.newrevisiondocevent.rev) - 1) |
746 | | - info["dontmolest"] = True |
747 | | - |
748 | | - multiset_ballot_text = "This was part of a ballot set with: " |
749 | | - if e.desc.startswith(multiset_ballot_text): |
750 | | - names = [ n.strip() for n in e.desc[len(multiset_ballot_text):].split(",") ] |
751 | | - e.desc = multiset_ballot_text + ", ".join(u'<a href="%s">%s</a>' % (urlreverse("doc_view", kwargs={'name': n }), n) for n in names) |
752 | | - info["dontmolest"] = True |
753 | | - |
754 | | - info['text'] = e.desc |
755 | | - info['by'] = e.by.plain_name() |
756 | | - info['textSnippet'] = truncatewords_html(format_textarea(fill(info['text'], 80)), 25) |
757 | | - info['snipped'] = info['textSnippet'][-3:] == "..." and e.type != "new_revision" |
758 | | - results.append({'comment':e, 'info':info, 'date':e.time, 'is_com':True}) |
759 | | - |
760 | | - prev_rev = "00" |
761 | | - # actually, we're already sorted and this ruins the sort from |
762 | | - # the ids which is sometimes needed, so the function should be |
763 | | - # rewritten to not rely on a resort |
764 | | - results.sort(key=lambda x: x['date']) |
765 | | - for o in results: |
766 | | - e = o["comment"] |
767 | | - if e.type == "new_revision": |
768 | | - e.version = e.newrevisiondocevent.rev |
769 | | - else: |
770 | | - e.version = prev_rev |
771 | | - prev_rev = e.version |
772 | | - else: |
773 | | - if doc.is_id_wrapper: |
774 | | - comments = DocumentComment.objects.filter(document=doc.tracker_id).exclude(rfc_flag=1) |
775 | | - else: |
776 | | - comments = DocumentComment.objects.filter(document=doc.rfc_number,rfc_flag=1) |
777 | | - if len(comments) > 0: |
778 | | - # also include rfc_flag=NULL, but only if at least one |
779 | | - # comment with rfc_flag=1 exists (usually NULL means same as 0) |
780 | | - comments = DocumentComment.objects.filter(document=doc.rfc_number).exclude(rfc_flag=0) |
781 | | - for comment in comments.order_by('-date','-time','-id').filter(public_flag=1).select_related('created_by'): |
782 | | - info = {} |
783 | | - info['text'] = comment.comment_text |
784 | | - info['by'] = comment.get_fullname() |
785 | | - info['textSnippet'] = truncatewords_html(format_textarea(fill(info['text'], 80)), 25) |
786 | | - info['snipped'] = info['textSnippet'][-3:] == "..." |
787 | | - results.append({'comment':comment, 'info':info, 'date':comment.datetime(), 'is_com':True}) |
788 | | - |
789 | | - if doc.is_id_wrapper and versions: |
790 | | - for v in versions: |
791 | | - if v['draft_name'] == doc.draft_name: |
792 | | - v = dict(v) # copy it, since we're modifying datetimes later |
793 | | - v['is_rev'] = True |
794 | | - results.insert(0, v) |
795 | | - if not settings.USE_DB_REDESIGN_PROXY_CLASSES and doc.is_id_wrapper and doc.draft_status == "Expired" and doc._draft.expiration_date: |
796 | | - results.append({'is_text':True, 'date':doc._draft.expiration_date, 'text':'Draft expired'}) |
797 | | - if not settings.USE_DB_REDESIGN_PROXY_CLASSES and doc.is_rfc_wrapper: |
798 | | - text = 'RFC Published' |
799 | | - if doc.draft_name: |
800 | | - try: |
801 | | - text = 'RFC Published (see <a href="%s">%s</a> for earlier history)' % (urlreverse('doc_view', args=[doc.draft_name]),doc.draft_name) |
802 | | - except NoReverseMatch: |
803 | | - pass |
804 | | - results.append({'is_text':True, 'date':doc.publication_date, 'text':text}) |
805 | | - |
806 | | - # convert plain dates to datetimes (required for sorting) |
807 | | - for x in results: |
808 | | - if not isinstance(x['date'], datetime.datetime): |
809 | | - if x['date']: |
810 | | - x['date'] = datetime.datetime.combine(x['date'], datetime.time(0,0,0)) |
811 | | - else: |
812 | | - x['date'] = datetime.datetime(1970,1,1) |
813 | | - |
814 | | - results.sort(key=lambda x: x['date']) |
815 | | - results.reverse() |
816 | | - return results |
817 | | - |
818 | | -# takes InternetDraft instance |
819 | | -def _get_versions(draft, include_replaced=True): |
820 | | - ov = [] |
821 | | - ov.append({"draft_name":draft.filename, "revision":draft.revision_display(), "date":draft.revision_date}) |
822 | | - if include_replaced: |
823 | | - draft_list = [draft]+list(draft.replaces_set.all()) |
824 | | - else: |
825 | | - draft_list = [draft] |
826 | | - |
827 | | - if settings.USE_DB_REDESIGN_PROXY_CLASSES: |
828 | | - from ietf.doc.models import NewRevisionDocEvent |
829 | | - for e in NewRevisionDocEvent.objects.filter(type="new_revision", doc__in=draft_list).select_related('doc').order_by("-time", "-id"): |
830 | | - if not (e.doc.name == draft.name and e.rev == draft.rev): |
831 | | - ov.append(dict(draft_name=e.doc.name, revision=e.rev, date=e.time.date())) |
832 | | - |
833 | | - return ov |
834 | | - |
835 | | - for d in draft_list: |
836 | | - for v in DraftVersions.objects.filter(filename=d.filename).order_by('-revision'): |
837 | | - if (d.filename == draft.filename) and (draft.revision_display() == v.revision): |
838 | | - continue |
839 | | - ov.append({"draft_name":d.filename, "revision":v.revision, "date":v.revision_date}) |
840 | | - return ov |
| 635 | +def ballot_for_popup(request, name): |
| 636 | + doc = get_object_or_404(Document, docalias__name=name) |
| 637 | + return HttpResponse(document_ballot_content(request, doc, ballot_id=None, editable=False)) |
841 | 638 |
|
842 | 639 | def get_ballot(name): |
843 | 640 | from ietf.doc.models import DocAlias |
844 | 641 | alias = get_object_or_404(DocAlias, name=name) |
845 | 642 | d = alias.document |
| 643 | + from ietf.idtracker.models import InternetDraft |
| 644 | + from ietf.idrfc.idrfc_wrapper import BallotWrapper, IdWrapper, RfcWrapper |
846 | 645 | id = None |
847 | 646 | bw = None |
848 | 647 | dw = None |
@@ -873,15 +672,6 @@ def get_ballot(name): |
873 | 672 | return (bw, dw, b, d) |
874 | 673 |
|
875 | 674 |
|
876 | | -def ballot_for_popup(request, name): |
877 | | - doc = get_object_or_404(Document, docalias__name=name) |
878 | | - return HttpResponse(document_ballot_content(request, doc, ballot_id=None, editable=False)) |
879 | | - |
880 | | -def ballot_html(request, name): |
881 | | - bw, dw, ballot, doc = get_ballot(name) |
882 | | - content = document_ballot_content(request, doc, ballot.pk, editable=True) |
883 | | - return HttpResponse(content) |
884 | | - |
885 | 675 | def ballot_tsv(request, name): |
886 | 676 | ballot, doc, b, d = get_ballot(name) |
887 | 677 | return HttpResponse(render_to_string('idrfc/ballot.tsv', {'ballot':ballot}, RequestContext(request)), content_type="text/plain") |
|
0 commit comments