From 383899c5c4bc94975e8c19411902b06e2b46f010 Mon Sep 17 00:00:00 2001
From: Robert Sparks
Date: Tue, 15 Aug 2023 16:49:17 -0500
Subject: [PATCH] chore: checkpoint: docalias mostly removed
---
ietf/doc/utils.py | 2 +-
ietf/ipr/views.py | 10 +-
ietf/review/policies.py | 5 +-
ietf/secr/telechat/views.py | 4 +-
ietf/secr/utils/document.py | 9 -
ietf/settings.py | 1 -
ietf/stats/backfill_data.py | 184 ------------------
ietf/stats/models.py | 4 +
ietf/stats/tests.py | 3 +-
ietf/stats/views.py | 41 ++--
ietf/submit/models.py | 4 +-
ietf/submit/tests.py | 26 ++-
ietf/submit/utils.py | 8 +-
ietf/submit/views.py | 6 +-
ietf/sync/iana.py | 4 +-
ietf/templates/base.html | 2 +-
ietf/templates/doc/document_history.html | 6 +-
.../doc/status_change/edit_related_rows.html | 2 +-
.../group/group_entry_with_charter.txt | 6 +-
ietf/templates/ipr/search_doc_list.html | 4 +-
.../templates/ipr/search_doctitle_result.html | 14 +-
ietf/templates/ipr/search_wg_result.html | 16 +-
.../commands/run_yang_model_checks.py | 4 +-
ietf/utils/test_data.py | 12 +-
24 files changed, 80 insertions(+), 297 deletions(-)
delete mode 100755 ietf/stats/backfill_data.py
diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py
index fcc98804b..4795cb486 100644
--- a/ietf/doc/utils.py
+++ b/ietf/doc/utils.py
@@ -932,7 +932,7 @@ def make_rev_history(doc):
if predecessors is None:
predecessors = []
if hasattr(doc, 'relateddocument_set'):
- for document in in doc.related_that_doc('replaces'):
+ for document in doc.related_that_doc('replaces'):
if document not in predecessors:
predecessors.append(document)
predecessors.extend(get_predecessors(document, predecessors))
diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py
index 77d905321..26e58e8c6 100644
--- a/ietf/ipr/views.py
+++ b/ietf/ipr/views.py
@@ -38,7 +38,8 @@ from ietf.message.models import Message
from ietf.message.utils import infer_message
from ietf.name.models import IprLicenseTypeName
from ietf.person.models import Person
-from ietf.secr.utils.document import get_rfc_num, is_draft
+from ietf.secr.utils.document import is_draft
+from ietf.utils import log
from ietf.utils.draft_search import normalize_draftname
from ietf.utils.mail import send_mail, send_mail_message
from ietf.utils.response import permission_denied
@@ -71,10 +72,13 @@ def get_document_emails(ipr):
for rel in ipr.iprdocrel_set.all():
doc = rel.document.document
- if is_draft(doc):
+ if doc.type_id=="draft":
doc_info = 'Internet-Draft entitled "{}" ({})'.format(doc.title,doc.name)
+ elif doc.type_id=="rfc":
+ doc_info = 'RFC entitled "{}" (RFC{})'.format(doc.title, doc.rfc_number)
else:
- doc_info = 'RFC entitled "{}" (RFC{})'.format(doc.title,get_rfc_num(doc))
+ log.unreachable("2023-08-15")
+ return ""
addrs = gather_address_lists('ipr_posted_on_doc',doc=doc).as_strings(compact=False)
diff --git a/ietf/review/policies.py b/ietf/review/policies.py
index 887d77c8d..68c66c386 100644
--- a/ietf/review/policies.py
+++ b/ietf/review/policies.py
@@ -287,8 +287,6 @@ class AssignmentOrderResolver:
def _collect_context(self):
"""Collect all relevant data about this team, document and review request."""
- self.doc_aliases = DocAlias.objects.filter(docs=self.doc).values_list("name", flat=True)
-
# This data is collected as a dict, keys being person IDs, values being numbers/objects.
self.rotation_index = {p.pk: i for i, p in enumerate(self.rotation_list)}
self.reviewer_settings = self._reviewer_settings_for_person_ids(self.possible_person_ids)
@@ -354,8 +352,7 @@ class AssignmentOrderResolver:
add_boolean_score(+1, email.person_id in self.wish_to_review, "wishes to review document")
add_boolean_score(-1, email.person_id in self.connections,
self.connections.get(email.person_id)) # reviewer is somehow connected: bad
- add_boolean_score(-1, settings.filter_re and any(
- re.search(settings.filter_re, n) for n in self.doc_aliases), "filter regexp matches")
+ add_boolean_score(-1, settings.filter_re and re.search(settings.filter_re, self.doc.name), "filter regexp matches")
# minimum interval between reviews
days_needed = self.days_needed_for_reviewers.get(email.person_id, 0)
diff --git a/ietf/secr/telechat/views.py b/ietf/secr/telechat/views.py
index a37f380e9..356a9b934 100644
--- a/ietf/secr/telechat/views.py
+++ b/ietf/secr/telechat/views.py
@@ -175,7 +175,7 @@ def doc_detail(request, date, name):
This view displays the ballot information for the document, and lets the user make
changes to ballot positions and document state.
'''
- doc = get_object_or_404(Document, docalias__name=name)
+ doc = get_object_or_404(Document, name=name)
if not is_doc_on_telechat(doc, date):
messages.warning(request, 'Dcoument: {name} is not on the Telechat agenda for {date}'.format(
name=doc.name,
@@ -342,7 +342,7 @@ def doc_navigate(request, date, name, nav):
nav - [next|previous] which direction the user wants to navigate in the list of docs
The view retrieves the appropriate document and redirects to the doc view.
'''
- doc = get_object_or_404(Document, docalias__name=name)
+ doc = get_object_or_404(Document, name=name)
agenda = agenda_data(date=date)
target = name
diff --git a/ietf/secr/utils/document.py b/ietf/secr/utils/document.py
index 0a34512a1..361bf836d 100644
--- a/ietf/secr/utils/document.py
+++ b/ietf/secr/utils/document.py
@@ -13,15 +13,6 @@ def get_full_path(doc):
return None
return os.path.join(doc.get_file_path(), doc.uploaded_filename)
-def get_rfc_num(doc):
- qs = doc.docalias.filter(name__startswith='rfc')
- return qs[0].name[3:] if qs else None
-
-def is_draft(doc):
- if doc.docalias.filter(name__startswith='rfc'):
- return False
- else:
- return True
def get_start_date(doc):
'''
diff --git a/ietf/settings.py b/ietf/settings.py
index 27cc2395f..67dbe052b 100644
--- a/ietf/settings.py
+++ b/ietf/settings.py
@@ -600,7 +600,6 @@ TEST_CODE_COVERAGE_EXCLUDE_FILES = [
"ietf/utils/test_runner.py",
"ietf/name/generate_fixtures.py",
"ietf/review/import_from_review_tool.py",
- "ietf/stats/backfill_data.py",
"ietf/utils/patch.py",
"ietf/utils/test_data.py",
]
diff --git a/ietf/stats/backfill_data.py b/ietf/stats/backfill_data.py
deleted file mode 100755
index 176ee3335..000000000
--- a/ietf/stats/backfill_data.py
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/env python
-# Copyright The IETF Trust 2017-2020, All Rights Reserved
-# -*- coding: utf-8 -*-
-
-
-import io
-import sys
-import os
-import os.path
-import argparse
-import time
-
-from typing import Set, Optional # pyflakes:ignore
-
-basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
-sys.path = [ basedir ] + sys.path
-os.environ["DJANGO_SETTINGS_MODULE"] = "ietf.settings"
-
-virtualenv_activation = os.path.join(basedir, "env", "bin", "activate_this.py")
-if os.path.exists(virtualenv_activation):
- exec(compile(io.open(virtualenv_activation, "rb").read(), virtualenv_activation, 'exec'), dict(__file__=virtualenv_activation))
-
-import django
-django.setup()
-
-from django.conf import settings
-
-import debug # pyflakes:ignore
-
-from ietf.doc.models import Document
-from ietf.name.models import FormalLanguageName
-from ietf.utils.draft import PlaintextDraft
-
-parser = argparse.ArgumentParser()
-parser.add_argument("--document", help="specific document name")
-parser.add_argument("--words", action="store_true", help="fill in word count")
-parser.add_argument("--formlang", action="store_true", help="fill in formal languages")
-parser.add_argument("--authors", action="store_true", help="fill in author info")
-args = parser.parse_args()
-
-formal_language_dict = { l.pk: l for l in FormalLanguageName.objects.all() }
-
-docs_qs = Document.objects.filter(type="draft")
-
-if args.document:
- docs_qs = docs_qs.filter(docalias__name=args.document)
-
-ts = time.strftime("%Y-%m-%d_%H:%M%z")
-logfile = io.open('backfill-authorstats-%s.log'%ts, 'w')
-print("Writing log to %s" % os.path.abspath(logfile.name))
-
-def say(msg):
- msg = msg.encode('utf8')
- sys.stderr.write(msg)
- sys.stderr.write('\n')
- logfile.write(msg)
- logfile.write('\n')
-
-def unicode(text):
- if text is None:
- return text
- # order matters here:
- for encoding in ['ascii', 'utf8', 'latin1', ]:
- try:
- utext = text.decode(encoding)
-# if encoding == 'latin1':
-# say("Warning: falling back to latin1 decoding for %s ..." % utext[:216]])
- return utext
- except UnicodeDecodeError:
- pass
-
-start = time.time()
-say("Running query for documents to process ...")
-for doc in docs_qs.prefetch_related("docalias", "formal_languages", "documentauthor_set", "documentauthor_set__person", "documentauthor_set__person__alias_set"):
- canonical_name = doc.name
- for n in doc.docalias.all():
- if n.name.startswith("rfc"):
- canonical_name = n.name
-
- if canonical_name.startswith("rfc"):
- path = os.path.join(settings.RFC_PATH, canonical_name + ".txt")
- else:
- path = os.path.join(settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR, canonical_name + "-" + doc.rev + ".txt")
-
- if not os.path.exists(path):
- say("Skipping %s, no txt file found at %s" % (doc.name, path))
- continue
-
- with io.open(path, 'rb') as f:
- say("\nProcessing %s" % doc.name)
- sys.stdout.flush()
- d = PlaintextDraft(unicode(f.read()), path)
-
- updated = False
-
- updates = {}
-
- if args.words:
- words = d.get_wordcount()
- if words != doc.words:
- updates["words"] = words
-
- if args.formlang:
- langs = d.get_formal_languages()
-
- new_formal_languages = set(formal_language_dict[l] for l in langs)
- old_formal_languages = set(doc.formal_languages.all())
-
- if new_formal_languages != old_formal_languages:
- for l in new_formal_languages - old_formal_languages:
- doc.formal_languages.add(l)
- updated = True
- for l in old_formal_languages - new_formal_languages:
- doc.formal_languages.remove(l)
- updated = True
-
- if args.authors:
- old_authors = doc.documentauthor_set.all()
- old_authors_by_name = {}
- old_authors_by_email = {}
- for author in old_authors:
- for alias in author.person.alias_set.all():
- old_authors_by_name[alias.name] = author
- old_authors_by_name[author.person.plain_name()] = author
-
- if author.email_id:
- old_authors_by_email[author.email_id] = author
-
- # the draft parser sometimes has a problem when
- # affiliation isn't in the second line and it then thinks
- # it's an extra author - skip those extra authors
- seen = set() # type: Set[Optional[str]]
- for full, _, _, _, _, email, country, company in d.get_author_list():
- assert full is None or isinstance(full, str)
- assert email is None or isinstance(email, str)
- assert country is None or isinstance(country, str)
- assert isinstance(company, str)
- #full, email, country, company = [ unicode(s) for s in [full, email, country, company, ] ]
- if email in seen:
- continue
- seen.add(email)
-
- old_author = None
- if email:
- old_author = old_authors_by_email.get(email)
- if not old_author:
- old_author = old_authors_by_name.get(full)
-
- if not old_author:
- say("UNKNOWN AUTHOR: %s, %s, %s, %s, %s" % (doc.name, full, email, country, company))
- continue
-
- if old_author.affiliation != company:
- say("new affiliation: %s [ %s <%s> ] %s -> %s" % (canonical_name, full, email, old_author.affiliation, company))
- old_author.affiliation = company
- old_author.save(update_fields=["affiliation"])
- updated = True
-
- if country is None:
- country = ""
-
- if old_author.country != country:
- say("new country: %s [ %s <%s> ] %s -> %s" % (canonical_name , full, email, old_author.country, country))
- old_author.country = country
- old_author.save(update_fields=["country"])
- updated = True
-
-
- if updates:
- Document.objects.filter(pk=doc.pk).update(**updates)
- updated = True
-
- if updated:
- say("updated: %s" % canonical_name)
-
-stop = time.time()
-dur = stop-start
-sec = dur%60
-min = dur//60
-say("Processing time %d:%02d" % (min, sec))
-
-print("\n\nWrote log to %s" % os.path.abspath(logfile.name))
-logfile.close()
-
diff --git a/ietf/stats/models.py b/ietf/stats/models.py
index 0871804b0..699334392 100644
--- a/ietf/stats/models.py
+++ b/ietf/stats/models.py
@@ -11,6 +11,10 @@ from ietf.name.models import CountryName
from ietf.person.models import Person
from ietf.utils.models import ForeignKey
+### NOTE WELL: These models are expected to be removed and the stats app reimplemented.
+# A bare python file that should have been a management command was used to populate
+# these models when the app was first installed - it has been removed from main, but
+# can be seen at https://github.com/ietf-tools/datatracker/blob/f2b716fc052a0152c32b86b428ba6ebfdcdf5cd2/ietf/stats/backfill_data.py
class AffiliationAlias(models.Model):
"""Records that alias should be treated as name for statistical
diff --git a/ietf/stats/tests.py b/ietf/stats/tests.py
index fd3e0a05b..a0b95989f 100644
--- a/ietf/stats/tests.py
+++ b/ietf/stats/tests.py
@@ -20,7 +20,7 @@ import ietf.stats.views
from ietf.submit.models import Submission
from ietf.doc.factories import WgDraftFactory, WgRfcFactory
-from ietf.doc.models import Document, DocAlias, State, RelatedDocument, NewRevisionDocEvent, DocumentAuthor
+from ietf.doc.models import Document, State, RelatedDocument, NewRevisionDocEvent, DocumentAuthor
from ietf.group.factories import RoleFactory
from ietf.meeting.factories import MeetingFactory, AttendedFactory
from ietf.person.factories import PersonFactory
@@ -79,7 +79,6 @@ class StatisticsTests(TestCase):
words=100
)
referencing_draft.set_state(State.objects.get(used=True, type="draft", slug="active"))
- DocAlias.objects.create(name=referencing_draft.name).docs.add(referencing_draft)
RelatedDocument.objects.create(
source=referencing_draft,
target=draft,
diff --git a/ietf/stats/views.py b/ietf/stats/views.py
index 3d7d62c06..c5f09102e 100644
--- a/ietf/stats/views.py
+++ b/ietf/stats/views.py
@@ -34,7 +34,7 @@ from ietf.group.models import Role, Group
from ietf.person.models import Person
from ietf.name.models import ReviewResultName, CountryName, DocRelationshipName, ReviewAssignmentStateName
from ietf.person.name import plain_name
-from ietf.doc.models import DocAlias, Document, State, DocEvent
+from ietf.doc.models import Document, State, DocEvent
from ietf.meeting.models import Meeting
from ietf.stats.models import MeetingRegistration, CountryAlias
from ietf.stats.utils import get_aliased_affiliations, get_aliased_countries, compute_hirsch_index
@@ -214,13 +214,13 @@ def document_stats(request, stats_type=None):
if any(stats_type == t[0] for t in possible_document_stats_types):
# filter documents
- docalias_filters = Q(docs__type="draft")
+ document_filters = Q(docs__type="draft")
rfc_state = State.objects.get(type="draft", slug="rfc")
if document_type == "rfc":
- docalias_filters &= Q(docs__states=rfc_state)
+ document_filters &= Q(docs__states=rfc_state)
elif document_type == "draft":
- docalias_filters &= ~Q(docs__states=rfc_state)
+ document_filters &= ~Q(docs__states=rfc_state)
if from_time:
# this is actually faster than joining in the database,
@@ -231,9 +231,9 @@ def document_stats(request, stats_type=None):
docevent__type__in=["published_rfc", "new_revision"],
).values_list("pk"))
- docalias_filters &= Q(docs__in=docs_within_time_constraint)
+ document_filters &= Q(docs__in=docs_within_time_constraint)
- docalias_qs = DocAlias.objects.filter(docalias_filters)
+ document_qs = Document.objects.filter(document_filters)
if document_type == "rfc":
doc_label = "RFC"
@@ -242,28 +242,15 @@ def document_stats(request, stats_type=None):
else:
doc_label = "document"
- total_docs = docalias_qs.values_list("docs__name").distinct().count()
-
- def generate_canonical_names(values):
- for doc_id, ts in itertools.groupby(values.order_by("docs__name"), lambda a: a[0]):
- chosen = None
- for t in ts:
- if chosen is None:
- chosen = t
- else:
- if t[1].startswith("rfc"):
- chosen = t
- elif t[1].startswith("draft") and not chosen[1].startswith("rfc"):
- chosen = t
- yield chosen
+ total_docs = document_qs.values_list("name").distinct().count()
if stats_type == "authors":
stats_title = "Number of authors for each {}".format(doc_label)
bins = defaultdict(set)
- for name, canonical_name, author_count in generate_canonical_names(docalias_qs.values_list("docs__name", "name").annotate(Count("docs__documentauthor"))):
- bins[author_count or 0].add(canonical_name)
+ for name, author_count in document_qs.values_list("name").annotate(Count("documentauthor")).values_list("name","documentauthor__count")
+ bins[author_count or 0].add(name)
series_data = []
for author_count, names in sorted(bins.items(), key=lambda t: t[0]):
@@ -278,8 +265,8 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, pages in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__pages")):
- bins[pages or 0].add(canonical_name)
+ for name, pages in document_qs.values_list("name", "pages")):
+ bins[pages or 0].add(name)
series_data = []
for pages, names in sorted(bins.items(), key=lambda t: t[0]):
@@ -297,7 +284,7 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, words in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__words")):
+ for name, words in document_qs.values_list("name", "words")):
bins[put_into_bin(words, bin_size)].add(canonical_name)
series_data = []
@@ -322,7 +309,7 @@ def document_stats(request, stats_type=None):
submission_types[doc_name] = file_types
doc_names_with_missing_types = {}
- for doc_name, canonical_name, rev in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__rev")):
+ for doc_name, rev in document_qs.values_list("name", "rev"):
types = submission_types.get(doc_name)
if types:
for dot_ext in types.split(","):
@@ -367,7 +354,7 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, formal_language_name in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__formal_languages__name")):
+ for name, formal_language_name in document_qs.values_list("name", "formal_languages__name")):
bins[formal_language_name or ""].add(canonical_name)
series_data = []
diff --git a/ietf/submit/models.py b/ietf/submit/models.py
index 0f9a86cd2..514659d71 100644
--- a/ietf/submit/models.py
+++ b/ietf/submit/models.py
@@ -108,14 +108,14 @@ class Submission(models.Model):
@property
def active_wg_drafts_replaced(self):
return Document.objects.filter(
- docalias__name__in=self.replaces.split(','),
+ name__in=self.replaces.split(','),
group__in=Group.objects.active_wgs()
)
@property
def closed_wg_drafts_replaced(self):
return Document.objects.filter(
- docalias__name__in=self.replaces.split(','),
+ name__in=self.replaces.split(','),
group__in=Group.objects.closed_wgs()
)
diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py
index 1e6481b35..79b4edf8e 100644
--- a/ietf/submit/tests.py
+++ b/ietf/submit/tests.py
@@ -34,7 +34,7 @@ from ietf.submit.utils import (expirable_submissions, expire_submission, find_su
process_and_validate_submission)
from ietf.doc.factories import (DocumentFactory, WgDraftFactory, IndividualDraftFactory,
ReviewFactory, WgRfcFactory)
-from ietf.doc.models import ( Document, DocAlias, DocEvent, State,
+from ietf.doc.models import ( Document, DocEvent, State,
BallotPositionDocEvent, DocumentAuthor, SubmissionDocEvent )
from ietf.doc.utils import create_ballot_if_not_open, can_edit_docextresources, update_action_holders
from ietf.group.factories import GroupFactory, RoleFactory
@@ -358,8 +358,6 @@ class SubmitTests(BaseSubmitTestCase):
note="",
)
sug_replaced_draft.set_state(State.objects.get(used=True, type="draft", slug="active"))
- sug_replaced_alias = DocAlias.objects.create(name=sug_replaced_draft.name)
- sug_replaced_alias.docs.add(sug_replaced_draft)
name = "draft-ietf-mars-testing-tests"
rev = "00"
@@ -400,7 +398,7 @@ class SubmitTests(BaseSubmitTestCase):
r = self.client.post(status_url, dict(action=action))
self.assertEqual(r.status_code, 302)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
new_revision = draft.latest_event(type="new_revision")
self.assertEqual(draft.group.acronym, "mars")
@@ -420,7 +418,7 @@ class SubmitTests(BaseSubmitTestCase):
self.assertEqual(draft.relations_that_doc("replaces").count(), 1)
self.assertTrue(draft.relations_that_doc("replaces").first().target, draft)
self.assertEqual(draft.relations_that_doc("possibly-replaces").count(), 1)
- self.assertTrue(draft.relations_that_doc("possibly-replaces").first().target, sug_replaced_alias)
+ self.assertTrue(draft.relations_that_doc("possibly-replaces").first().target, sug_replaced_draft)
self.assertEqual(len(outbox), mailbox_before + 5)
self.assertIn(("I-D Action: %s" % name), outbox[-4]["Subject"])
self.assertIn(author.ascii, get_payload_text(outbox[-4]))
@@ -433,7 +431,7 @@ class SubmitTests(BaseSubmitTestCase):
# Check "Review of suggested possible replacements for..." mail
self.assertIn("review", outbox[-1]["Subject"].lower())
self.assertIn(name, get_payload_text(outbox[-1]))
- self.assertIn(sug_replaced_alias.name, get_payload_text(outbox[-1]))
+ self.assertIn(sug_replaced_draft.name, get_payload_text(outbox[-1]))
self.assertIn("ames-chairs@", outbox[-1]["To"].lower())
self.assertIn("mars-chairs@", outbox[-1]["To"].lower())
# Check submission settings
@@ -684,7 +682,7 @@ class SubmitTests(BaseSubmitTestCase):
self.assertTrue('New version approved' in edescs)
self.assertTrue('Uploaded new revision' in edescs)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
self.assertEqual(draft.group.acronym, name.split("-")[2])
#
@@ -911,7 +909,7 @@ class SubmitTests(BaseSubmitTestCase):
r = self.client.post(confirmation_url, {'action':'confirm'})
self.assertEqual(r.status_code, 302)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
new_revision = draft.latest_event()
self.assertEqual(new_revision.type, "new_revision")
@@ -951,7 +949,7 @@ class SubmitTests(BaseSubmitTestCase):
action = force_post_button.parents("form").find('input[type=hidden][name="action"]').val()
r = self.client.post(status_url, dict(action=action))
- doc = Document.objects.get(docalias__name=name)
+ doc = Document.objects.get(name=name)
self.assertEqual(doc.documentauthor_set.count(), 1)
docauth = doc.documentauthor_set.first()
self.assertEqual(docauth.person, author)
@@ -1084,7 +1082,7 @@ class SubmitTests(BaseSubmitTestCase):
self.assertIn("New Version Notification", notification_email["Subject"])
self.assertIn(author.email().address.lower(), notification_email["To"])
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
self.assertEqual(draft.docextresource_set.count(), 0)
new_revision = draft.latest_event()
@@ -1132,7 +1130,7 @@ class SubmitTests(BaseSubmitTestCase):
self._assert_extresources_form_not_present(r)
# Check that the draft itself got the resources
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertCountEqual(
[str(r) for r in draft.docextresource_set.all()],
[str(r) for r in resources],
@@ -1178,7 +1176,7 @@ class SubmitTests(BaseSubmitTestCase):
r = self.client.post(confirmation_url, {'action':'confirm'})
self.assertEqual(r.status_code, 302)
self.assertEqual(len(outbox), mailbox_before+3)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
self.assertEqual(draft.relateddocument_set.filter(relationship_id='replaces').count(), replaces_count)
self.assertEqual(draft.docextresource_set.count(), 0)
@@ -1296,7 +1294,7 @@ class SubmitTests(BaseSubmitTestCase):
r = self.client.post(confirmation_url, {'action':'cancel'})
self.assertEqual(r.status_code, 302)
self.assertEqual(len(outbox), mailbox_before)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, old_rev)
def test_submit_new_wg_with_dash(self):
@@ -1453,7 +1451,7 @@ class SubmitTests(BaseSubmitTestCase):
r = self.client.post(status_url, dict(action=action))
self.assertEqual(r.status_code, 302)
- draft = Document.objects.get(docalias__name=name)
+ draft = Document.objects.get(name=name)
self.assertEqual(draft.rev, rev)
self.assertEqual(draft.docextresource_set.count(), 0)
self.verify_bibxml_ids_creation(draft)
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 17127d474..7a95ee930 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -25,7 +25,7 @@ from django.utils import timezone
import debug # pyflakes:ignore
-from ietf.doc.models import ( Document, State, DocAlias, DocEvent, SubmissionDocEvent,
+from ietf.doc.models import ( Document, State, DocEvent, SubmissionDocEvent,
DocumentAuthor, AddedMessageEvent )
from ietf.doc.models import NewRevisionDocEvent
from ietf.doc.models import RelatedDocument, DocRelationshipName, DocExtResource
@@ -375,10 +375,6 @@ def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
events.append(e)
log.log(f"{submission.name}: created doc events")
- # update related objects
- alias, __ = DocAlias.objects.get_or_create(name=submission.name)
- alias.docs.add(draft)
-
draft.set_state(State.objects.get(used=True, type="draft", slug="active"))
update_authors(draft, submission)
@@ -1000,7 +996,7 @@ def accept_submission(submission: Submission, request: Optional[HttpRequest] = N
docevent_from_submission(submission, desc="Uploaded new revision",
who=requester if requester_is_author else None)
- replaces = DocAlias.objects.filter(name__in=submission.replaces_names)
+ replaces = Document.objects.filter(name__in=submission.replaces_names)
pretty_replaces = '(none)' if not replaces else (
', '.join(prettify_std_name(r.name) for r in replaces)
)
diff --git a/ietf/submit/views.py b/ietf/submit/views.py
index 798fbf307..9301a8229 100644
--- a/ietf/submit/views.py
+++ b/ietf/submit/views.py
@@ -22,7 +22,7 @@ from django.views.decorators.csrf import csrf_exempt
import debug # pyflakes:ignore
-from ietf.doc.models import Document, DocAlias, AddedMessageEvent
+from ietf.doc.models import Document, AddedMessageEvent
from ietf.doc.forms import ExtResourceForm
from ietf.group.models import Group
from ietf.group.utils import group_features_group_filter
@@ -410,7 +410,7 @@ def submission_status(request, submission_id, access_token=None):
)
submitter_form = SubmitterForm(initial=submission.submitter_parsed(), prefix="submitter")
- replaces_form = ReplacesForm(name=submission.name,initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
+ replaces_form = ReplacesForm(name=submission.name,initial=Document.objects.filter(name__in=submission.replaces.split(",")))
extresources_form = ExtResourceForm(
initial=dict(resources=[er['res'] for er in external_resources]),
extresource_model=SubmissionExtResource,
@@ -626,7 +626,7 @@ def edit_submission(request, submission_id, access_token=None):
else:
edit_form = EditSubmissionForm(instance=submission, prefix="edit")
submitter_form = SubmitterForm(initial=submission.submitter_parsed(), prefix="submitter")
- replaces_form = ReplacesForm(name=submission.name,initial=DocAlias.objects.filter(name__in=submission.replaces.split(",")))
+ replaces_form = ReplacesForm(name=submission.name, initial=Document.objects.filter(name__in=submission.replaces.split(",")))
author_forms = [ AuthorForm(initial=author, prefix="authors-%s" % i)
for i, author in enumerate(submission.authors) ]
diff --git a/ietf/sync/iana.py b/ietf/sync/iana.py
index dc61f9159..9ce54a687 100644
--- a/ietf/sync/iana.py
+++ b/ietf/sync/iana.py
@@ -45,7 +45,7 @@ def update_rfc_log_from_protocol_page(rfc_names, rfc_must_published_later_than):
updated = []
- docs = Document.objects.filter(docalias__name__in=rfc_names).exclude(
+ docs = Document.objects.filter(name__in=rfc_names).exclude(
docevent__type="rfc_in_iana_registry").filter(
# only take those that were published after cutoff since we
# have a big bunch of old RFCs that we unfortunately don't have data for
@@ -189,7 +189,7 @@ def update_history_with_changes(changes, send_email=True):
state_type=state_type, state=state)
if not e:
try:
- doc = Document.objects.get(docalias__name=docname)
+ doc = Document.objects.get(name=docname)
except Document.DoesNotExist:
warnings.append("Document %s not found" % docname)
continue
diff --git a/ietf/templates/base.html b/ietf/templates/base.html
index 0d7ddc868..4546594c2 100644
--- a/ietf/templates/base.html
+++ b/ietf/templates/base.html
@@ -67,7 +67,7 @@
diff --git a/ietf/templates/doc/document_history.html b/ietf/templates/doc/document_history.html
index 91d5d393c..c41715f74 100644
--- a/ietf/templates/doc/document_history.html
+++ b/ietf/templates/doc/document_history.html
@@ -23,10 +23,10 @@
Document history
{% if related %}
diff --git a/ietf/templates/doc/status_change/edit_related_rows.html b/ietf/templates/doc/status_change/edit_related_rows.html
index 8912c99fd..21a6d0646 100644
--- a/ietf/templates/doc/status_change/edit_related_rows.html
+++ b/ietf/templates/doc/status_change/edit_related_rows.html
@@ -39,7 +39,7 @@
id="new_relation_row_rfc"
aria-label="Enter new affected RFC"
class="form-control select2-field"
- data-select2-ajax-url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='docalias' doc_type='draft' %}"
+ data-select2-ajax-url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='document' doc_type='draft' %}"
data-result-key="text"
data-max-entries="1"
data-width="resolve"
diff --git a/ietf/templates/group/group_entry_with_charter.txt b/ietf/templates/group/group_entry_with_charter.txt
index cfce907fb..5008b0a01 100644
--- a/ietf/templates/group/group_entry_with_charter.txt
+++ b/ietf/templates/group/group_entry_with_charter.txt
@@ -37,11 +37,11 @@ Goals and Milestones:
{% for milestone in group.milestones %} {% if milestone.resolved %}{{ milestone.resolved }} {% else %}{{ milestone.due|date:"M Y" }}{% endif %} - {{ milestone.desc }}
{% endfor %}
Internet-Drafts:
-{% for alias in group.drafts %} - {{ alias.document.title }} [{{ alias.name }}-{{ alias.document.rev }}] ({{ alias.document.pages }} pages)
+{% for document in group.drafts %} - {{ document.title }} [{{ document.name }}-{{ document.rev }}] ({{ document.pages }} pages)
{% endfor %}
{% if group.rfcs %}Requests for Comments:
-{% for alias in group.rfcs %} {{ alias.name.upper }}: {{ alias.document.title}} ({{ alias.document.pages }} pages){% for r in alias.rel %}
- * {{ r.action }} {{ r.target.name|upper }}{% endfor %}{% for r in alias.invrel %}
+{% for document in group.rfcs %} {{ document.name.upper }}: {{ document.title}} ({{ document.pages }} pages){% for r in document.rel %}
+ * {{ r.action }} {{ r.target.name|upper }}{% endfor %}{% for r in document.invrel %}
* {% if r.relationsship == "obs" %}{{ r.inverse_action|upper }}{% else %}{{ r.action }}{% endif %} {{ r.source.canonical_name|upper }}{% endfor %}
{% endfor %}
{% else %}No Requests for Comments{% endif %}
diff --git a/ietf/templates/ipr/search_doc_list.html b/ietf/templates/ipr/search_doc_list.html
index f67f1e472..e67f67fec 100644
--- a/ietf/templates/ipr/search_doc_list.html
+++ b/ietf/templates/ipr/search_doc_list.html
@@ -13,9 +13,9 @@
Please select one of following I-Ds:
diff --git a/ietf/templates/ipr/search_doctitle_result.html b/ietf/templates/ipr/search_doctitle_result.html
index b7a8a8b31..57fa17e91 100644
--- a/ietf/templates/ipr/search_doctitle_result.html
+++ b/ietf/templates/ipr/search_doctitle_result.html
@@ -24,20 +24,20 @@
Statement
- {% for alias in docs %}
+ {% for doc in docs %}
- IPR that is related to {{ alias.name|prettystdname:""|urlize_ietf_docs }} ("{{ alias.document.title }}")
- {% if alias.related %}
- that was {{ alias.relation|lower }} {{ alias.related.source.name|prettystdname:""|urlize_ietf_docs }} ("{{ alias.related.source.title }}")
+ IPR that is related to {{ doc.name|prettystdname:""|urlize_ietf_docs }} ("{{ doc.title }}")
+ {% if doc.related %}
+ that was {{ doc.relation|lower }} {{ doc.related.source.name|prettystdname:""|urlize_ietf_docs }} ("{{ doc.related.source.title }}")
{% endif %}
- {% if alias.document.ipr %}
- {% for ipr in alias.document.ipr %}
+ {% if doc.ipr %}
+ {% for ipr in doc.ipr %}
{{ ipr.disclosure.time|date:"Y-m-d" }}
{{ ipr.disclosure.id }}
@@ -58,7 +58,7 @@
- No IPR disclosures related to {{ alias.name|prettystdname|urlize_ietf_docs }} have been submitted.
+ No IPR disclosures related to {{ doc.name|prettystdname|urlize_ietf_docs }} have been submitted.
{% endif %}
diff --git a/ietf/templates/ipr/search_wg_result.html b/ietf/templates/ipr/search_wg_result.html
index ae477a269..1561e05ba 100644
--- a/ietf/templates/ipr/search_wg_result.html
+++ b/ietf/templates/ipr/search_wg_result.html
@@ -20,22 +20,22 @@
Statement
- {% for alias in docs %}
+ {% for doc in docs %}
- IPR related to {{ alias.name|prettystdname|urlize_ietf_docs }} ("{{ alias.document.title }}")
- {% if alias.related %}
- that was {{ alias.relation|lower }} {{ alias.related.source|prettystdname|urlize_ietf_docs }} ("{{ alias.related.source.title|escape }}")
+ IPR related to {{ doc.name|prettystdname|urlize_ietf_docs }} ("{{ doc.title }}")
+ {% if doc.related %}
+ that was {{ doc.relation|lower }} {{ doc.related.source|prettystdname|urlize_ietf_docs }} ("{{ doc.related.source.title|escape }}")
{% endif %}
- {% if alias.product_of_this_wg %}, a product of the {{ q }} WG{% endif %}
+ {% if doc.product_of_this_wg %}, a product of the {{ q }} WG{% endif %}
:
- {% if alias.document.ipr %}
- {% for ipr in alias.document.ipr %}
+ {% if doc.ipr %}
+ {% for ipr in doc.ipr %}
{{ ipr.disclosure.time|date:"Y-m-d" }}
{{ ipr.disclosure.id }}
@@ -57,7 +57,7 @@
- No IPR disclosures related to {{ alias.name|prettystdname|urlize_ietf_docs }} have been submitted.
+ No IPR disclosures related to {{ doc.name|prettystdname|urlize_ietf_docs }} have been submitted.
{% endif %}
diff --git a/ietf/utils/management/commands/run_yang_model_checks.py b/ietf/utils/management/commands/run_yang_model_checks.py
index 13fb61c46..7e2f7165b 100644
--- a/ietf/utils/management/commands/run_yang_model_checks.py
+++ b/ietf/utils/management/commands/run_yang_model_checks.py
@@ -10,7 +10,7 @@ from django.core.management.base import BaseCommand
import debug # pyflakes:ignore
-from ietf.doc.models import Document, State, DocAlias
+from ietf.doc.models import Document, State
from ietf.submit.models import Submission
from ietf.submit.checkers import DraftYangChecker
@@ -78,7 +78,7 @@ class Command(BaseCommand):
parts = name.rsplit('-',1)
if len(parts)==2 and len(parts[1])==2 and parts[1].isdigit():
name = parts[0]
- draft = DocAlias.objects.get(name=name).document
+ draft = Document.objects.get(name=name)
self.check_yang(checker, draft, force=True)
else:
for draft in Document.objects.filter(states=active_state, type_id='draft'):
diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py
index 2efe4ed1c..9f077bdcf 100644
--- a/ietf/utils/test_data.py
+++ b/ietf/utils/test_data.py
@@ -11,7 +11,7 @@ from django.utils.encoding import smart_str
import debug # pyflakes:ignore
-from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, DocEvent, RelatedDocument, NewRevisionDocEvent
+from ietf.doc.models import Document, State, DocumentAuthor, DocEvent, RelatedDocument, NewRevisionDocEvent
from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory, StatusChangeFactory, WgDraftFactory, WgRfcFactory
from ietf.group.models import Group, GroupHistory, Role, RoleHistory
from ietf.iesg.models import TelechatDate
@@ -177,7 +177,6 @@ def make_test_data():
charter.set_state(State.objects.get(used=True, slug="approved", type="charter"))
group.charter = charter
group.save()
- DocAlias.objects.create(name=charter.name).docs.add(charter)
setup_default_community_list_for_group(group)
# ames WG
@@ -199,7 +198,6 @@ def make_test_data():
rev="00",
)
charter.set_state(State.objects.get(used=True, slug="infrev", type="charter"))
- DocAlias.objects.create(name=charter.name).docs.add(charter)
group.charter = charter
group.save()
setup_default_community_list_for_group(group)
@@ -244,7 +242,6 @@ def make_test_data():
# rev="00",
# )
#charter.set_state(State.objects.get(used=True, slug="infrev", type="charter"))
- #DocAlias.objects.create(name=charter.name).docs.add(charter)
#group.charter = charter
#group.save()
@@ -288,8 +285,6 @@ def make_test_data():
expires=timezone.now(),
)
old_draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
- old_alias = DocAlias.objects.create(name=old_draft.name)
- old_alias.docs.add(old_draft)
# draft
draft = Document.objects.create(
@@ -314,9 +309,6 @@ def make_test_data():
draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="pub-req"))
draft.set_state(State.objects.get(used=True, type="draft-stream-%s" % draft.stream_id, slug="wg-doc"))
- doc_alias = DocAlias.objects.create(name=draft.name)
- doc_alias.docs.add(draft)
-
RelatedDocument.objects.create(source=draft, target=old_draft, relationship=DocRelationshipName.objects.get(slug='replaces'))
old_draft.set_state(State.objects.get(type='draft', slug='repl'))
@@ -363,7 +355,7 @@ def make_test_data():
IprDocRel.objects.create(
disclosure=ipr,
- document=doc_alias,
+ document=draft,
revisions='00',
)