diff --git a/bin/add-old-drafts-from-archive.py b/bin/add-old-drafts-from-archive.py
index 195501a26..9717e607b 100755
--- a/bin/add-old-drafts-from-archive.py
+++ b/bin/add-old-drafts-from-archive.py
@@ -79,7 +79,7 @@ for name in sorted(names):
words=draft.get_wordcount(),
expires=time+datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE),
)
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
doc.states.add(expired)
# update authors
authors = []
diff --git a/ietf/doc/admin.py b/ietf/doc/admin.py
index d61ccb191..73c1a37ed 100644
--- a/ietf/doc/admin.py
+++ b/ietf/doc/admin.py
@@ -19,9 +19,9 @@ class StateAdmin(admin.ModelAdmin):
filter_horizontal = ["next_states"]
admin.site.register(State, StateAdmin)
-class DocAliasInline(admin.TabularInline):
- model = DocAlias
- extra = 1
+# class DocAliasInline(admin.TabularInline):
+# model = DocAlias
+# extra = 1
class DocAuthorInline(admin.TabularInline):
model = DocumentAuthor
@@ -58,7 +58,7 @@ class DocumentAdmin(admin.ModelAdmin):
search_fields = ['name']
list_filter = ['type']
raw_id_fields = ['group', 'shepherd', 'ad']
- inlines = [DocAliasInline, DocAuthorInline, RelatedDocumentInline, ]
+ inlines = [DocAuthorInline, RelatedDocumentInline, ]
form = DocumentForm
def save_model(self, request, obj, form, change):
@@ -88,9 +88,9 @@ class DocHistoryAdmin(admin.ModelAdmin):
admin.site.register(DocHistory, DocHistoryAdmin)
class DocAliasAdmin(admin.ModelAdmin):
- list_display = ['name', 'document_link']
- search_fields = ['name', 'document__name']
- raw_id_fields = ['document']
+# list_display = ['name', 'document_link']
+# search_fields = ['name', 'document__name']
+ raw_id_fields = ['docs']
admin.site.register(DocAlias, DocAliasAdmin)
class DocReminderAdmin(admin.ModelAdmin):
@@ -102,7 +102,7 @@ admin.site.register(DocReminder, DocReminderAdmin)
class RelatedDocumentAdmin(admin.ModelAdmin):
list_display = ['source', 'target', 'relationship', ]
list_filter = ['relationship', ]
- search_fields = ['source__name', 'target__name', 'target__document__name', ]
+ search_fields = ['source__name', 'target__name', 'target__docs__name', ]
raw_id_fields = ['source', 'target', ]
admin.site.register(RelatedDocument, RelatedDocumentAdmin)
diff --git a/ietf/doc/factories.py b/ietf/doc/factories.py
index f5f669181..6d12779ac 100644
--- a/ietf/doc/factories.py
+++ b/ietf/doc/factories.py
@@ -33,13 +33,14 @@ class BaseDocumentFactory(factory.DjangoModelFactory):
newrevisiondocevent = factory.RelatedFactory('ietf.doc.factories.NewRevisionDocEventFactory','doc')
- alias = factory.RelatedFactory('ietf.doc.factories.DocAliasFactory','document')
-
@factory.post_generation
def other_aliases(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
+ alias = DocAliasFactory(name=obj.name)
+ alias.docs.add(obj)
if create and extracted:
- for alias in extracted:
- obj.docalias_set.create(name=alias)
+ for name in extracted:
+ alias = DocAliasFactory(name=name)
+ alias.docs.add(obj)
@factory.post_generation
def states(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
@@ -61,10 +62,14 @@ class BaseDocumentFactory(factory.DjangoModelFactory):
@factory.post_generation
def relations(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
if create and extracted:
- for (rel_id,docalias) in extracted:
- if isinstance(docalias,Document):
- docalias = docalias.docalias_set.first()
- obj.relateddocument_set.create(relationship_id=rel_id,target=docalias)
+ for (rel_id, doc) in extracted:
+ if isinstance(doc, Document):
+ docalias = doc.docalias.first()
+ elif isinstance(doc, DocAlias):
+ docalias = doc
+ else:
+ continue
+ obj.relateddocument_set.create(relationship_id=rel_id, target=docalias)
@classmethod
def _after_postgeneration(cls, obj, create, results=None):
@@ -195,9 +200,9 @@ class ConflictReviewFactory(BaseDocumentFactory):
if not create:
return
if extracted:
- obj.relateddocument_set.create(relationship_id='conflrev',target=extracted.docalias_set.first())
+ obj.relateddocument_set.create(relationship_id='conflrev',target=extracted.docalias.first())
else:
- obj.relateddocument_set.create(relationship_id='conflrev',target=DocumentFactory(type_id='draft',group=Group.objects.get(type_id='individ')).docalias_set.first())
+ obj.relateddocument_set.create(relationship_id='conflrev',target=DocumentFactory(type_id='draft',group=Group.objects.get(type_id='individ')).docalias.first())
@factory.post_generation
def states(obj, create, extracted, **kwargs):
@@ -219,12 +224,19 @@ class DocAliasFactory(factory.DjangoModelFactory):
class Meta:
model = DocAlias
- document = factory.SubFactory('ietf.doc.factories.DocumentFactory')
+ @factory.post_generation
+ def document(self, create, extracted, **kwargs):
+ if create and extracted:
+ self.docs.add(extracted)
+ self.name = extracted.name
+
+ @factory.post_generation
+ def docs(self, create, extracted, **kwargs):
+ if create and extracted:
+ for doc in extracted:
+ if not doc in self.docs.all():
+ self.docs.add(doc)
- @factory.lazy_attribute
- def name(self):
- return self.document.name
-
class DocEventFactory(factory.DjangoModelFactory):
class Meta:
diff --git a/ietf/doc/fields.py b/ietf/doc/fields.py
index 3285e1416..0ec3d10c9 100644
--- a/ietf/doc/fields.py
+++ b/ietf/doc/fields.py
@@ -59,7 +59,7 @@ class SearchableDocumentsField(forms.CharField):
value = self.model.objects.filter(Q(name__in=names)|Q(id__in=ids))
filter_args = {}
if self.model == DocAlias:
- filter_args["document__type"] = self.doc_type
+ filter_args["docs__type"] = self.doc_type
else:
filter_args["type"] = self.doc_type
value = value.filter(**filter_args)
diff --git a/ietf/doc/models.py b/ietf/doc/models.py
index 87ada27cc..746bb6b90 100644
--- a/ietf/doc/models.py
+++ b/ietf/doc/models.py
@@ -323,7 +323,7 @@ class DocumentInfo(models.Model):
elif state.slug == "repl":
rs = self.related_that("replaces")
if rs:
- return mark_safe("Replaced by " + ", ".join("%s" % (urlreverse('ietf.doc.views_doc.document_main', kwargs=dict(name=alias.document)), alias.document) for alias in rs))
+ return mark_safe("Replaced by " + ", ".join("%s" % (urlreverse('ietf.doc.views_doc.document_main', kwargs=dict(name=alias.document.name)), alias.document) for alias in rs))
else:
return "Replaced"
elif state.slug == "active":
@@ -411,9 +411,9 @@ class DocumentInfo(models.Model):
if not isinstance(relationship, tuple):
raise TypeError("Expected a string or tuple, received %s" % type(relationship))
if isinstance(self, Document):
- return RelatedDocument.objects.filter(target__document=self, relationship__in=relationship).select_related('source')
+ return RelatedDocument.objects.filter(target__docs=self, relationship__in=relationship).select_related('source')
elif isinstance(self, DocHistory):
- return RelatedDocHistory.objects.filter(target__document=self.doc, relationship__in=relationship).select_related('source')
+ return RelatedDocHistory.objects.filter(target__docs=self.doc, relationship__in=relationship).select_related('source')
else:
raise TypeError("Expected method called on Document or DocHistory")
@@ -434,9 +434,9 @@ class DocumentInfo(models.Model):
if not isinstance(relationship, tuple):
raise TypeError("Expected a string or tuple, received %s" % type(relationship))
if isinstance(self, Document):
- return RelatedDocument.objects.filter(source=self, relationship__in=relationship).select_related('target__document')
+ return RelatedDocument.objects.filter(source=self, relationship__in=relationship).select_related('target')
elif isinstance(self, DocHistory):
- return RelatedDocHistory.objects.filter(source=self, relationship__in=relationship).select_related('target__document')
+ return RelatedDocHistory.objects.filter(source=self, relationship__in=relationship).select_related('target')
else:
raise TypeError("Expected method called on Document or DocHistory")
@@ -447,14 +447,15 @@ class DocumentInfo(models.Model):
for r in rels:
if not r in related:
related += ( r, )
- related = r.target.document.all_relations_that_doc(relationship, related)
+ for doc in r.target.docs.all():
+ related = doc.all_relations_that_doc(relationship, related)
return related
def related_that(self, relationship):
- return list(set([x.source.docalias_set.get(name=x.source.name) for x in self.relations_that(relationship)]))
+ return list(set([x.source.docalias.get(name=x.source.name) for x in self.relations_that(relationship)]))
def all_related_that(self, relationship, related=None):
- return list(set([x.source.docalias_set.get(name=x.source.name) for x in self.all_relations_that(relationship)]))
+ return list(set([x.source.docalias.get(name=x.source.name) for x in self.all_relations_that(relationship)]))
def related_that_doc(self, relationship):
return list(set([x.target for x in self.relations_that_doc(relationship)]))
@@ -463,7 +464,7 @@ class DocumentInfo(models.Model):
return list(set([x.target for x in self.all_relations_that_doc(relationship)]))
def replaces(self):
- return set([ r.document for r in self.related_that_doc("replaces")])
+ return set([ d for r in self.related_that_doc("replaces") for d in r.docs.all() ])
def replaces_canonical_name(self):
s = set([ r.document for r in self.related_that_doc("replaces")])
@@ -657,7 +658,7 @@ class Document(DocumentInfo):
if not hasattr(self, '_canonical_name'):
name = self.name
if self.type_id == "draft" and self.get_state_slug() == "rfc":
- a = self.docalias_set.filter(name__startswith="rfc").order_by('-name').first()
+ a = self.docalias.filter(name__startswith="rfc").order_by('-name').first()
if a:
name = a.name
elif self.type_id == "charter":
@@ -671,7 +672,7 @@ class Document(DocumentInfo):
def canonical_docalias(self):
- return self.docalias_set.get(name=self.name)
+ return self.docalias.get(name=self.name)
def display_name(self):
name = self.canonical_name()
@@ -766,14 +767,14 @@ class Document(DocumentInfo):
def ipr(self,states=('posted','removed')):
"""Returns the IPR disclosures against this document (as a queryset over IprDocRel)."""
from ietf.ipr.models import IprDocRel
- return IprDocRel.objects.filter(document__document=self,disclosure__state__in=states)
+ return IprDocRel.objects.filter(document__docs=self, disclosure__state__in=states)
def related_ipr(self):
"""Returns the IPR disclosures against this document and those documents this
document directly or indirectly obsoletes or replaces
"""
from ietf.ipr.models import IprDocRel
- iprs = IprDocRel.objects.filter(document__in=list(self.docalias_set.all())+self.all_related_that_doc(('obs','replaces'))).filter(disclosure__state__in=('posted','removed')).values_list('disclosure', flat=True).distinct()
+ iprs = IprDocRel.objects.filter(document__in=list(self.docalias.all())+self.all_related_that_doc(('obs','replaces'))).filter(disclosure__state__in=('posted','removed')).values_list('disclosure', flat=True).distinct()
return iprs
def future_presentations(self):
@@ -889,8 +890,9 @@ class DocHistory(DocumentInfo):
return self.doc.groupmilestone_set
@property
- def docalias_set(self):
- return self.doc.docalias_set
+ def docalias(self):
+ log.unreachable('2019-06-11')
+ return self.doc.docalias
def is_dochistory(self):
return True
@@ -909,11 +911,14 @@ class DocAlias(models.Model):
to by RFC number, primarily, after achieving RFC status.
"""
name = models.CharField(max_length=255, unique=True)
- document = ForeignKey(Document)
-# docs = models.ManyToManyField(Document, related_name='aliases')
+ docs = models.ManyToManyField(Document, related_name='docalias')
+
+ @property
+ def document(self):
+ return self.docs.first()
def __unicode__(self):
- return "%s-->%s" % (self.name, self.document.name)
+ return "%s-->%s" % (self.name, ','.join([unicode(d.name) for d in self.docs.all() if isinstance(d, Document) ]))
document_link = admin_link("document")
class Meta:
verbose_name = "document alias"
diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py
index 7fac55de8..43629e278 100644
--- a/ietf/doc/tests.py
+++ b/ietf/doc/tests.py
@@ -216,7 +216,7 @@ class SearchTests(TestCase):
draft.set_state(State.objects.get(type='draft-iesg', slug='lc'))
rfc = IndividualDraftFactory(ad=ad)
rfc.set_state(State.objects.get(type='draft', slug='rfc'))
- rfc.docalias_set.create(name='rfc6666')
+ DocAlias.objects.create(name='rfc6666').docs.add(rfc)
conflrev = DocumentFactory(type_id='conflrev',ad=ad)
conflrev.set_state(State.objects.get(type='conflrev', slug='iesgeval'))
statchg = DocumentFactory(type_id='statchg',ad=ad)
@@ -278,7 +278,7 @@ class SearchTests(TestCase):
self.assertEqual(data[0]["id"], draft.pk)
# DocAlias
- doc_alias = draft.docalias_set.get()
+ doc_alias = draft.docalias.first()
url = urlreverse('ietf.doc.views_search.ajax_select2_search_docs', kwargs={
"model_name": "docalias",
@@ -499,7 +499,7 @@ Man Expires September 22, 2015 [Page 3]
draft = WgDraftFactory(name='draft-ietf-mars-test',rev='01')
HolderIprDisclosureFactory(docs=[draft])
replaced = IndividualDraftFactory()
- draft.relateddocument_set.create(relationship_id='replaces',source=draft,target=replaced.docalias_set.first())
+ draft.relateddocument_set.create(relationship_id='replaces',source=draft,target=replaced.docalias.first())
# these tests aren't testing all attributes yet, feel free to
# expand them
@@ -580,7 +580,7 @@ Man Expires September 22, 2015 [Page 3]
shepherd_id=draft.shepherd_id, ad_id=draft.ad_id, expires=draft.expires,
notify=draft.notify, note=draft.note)
rel = RelatedDocument.objects.create(source=replacement,
- target=draft.docalias_set.get(name__startswith="draft"),
+ target=draft.docalias.get(name__startswith="draft"),
relationship_id="replaces")
r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=draft.name)))
@@ -595,8 +595,10 @@ Man Expires September 22, 2015 [Page 3]
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="published_rfc", by=Person.objects.get(name="(System)"))])
- rfc_alias = DocAlias.objects.create(name="rfc123456", document=draft)
- bcp_alias = DocAlias.objects.create(name="bcp123456", document=draft)
+ rfc_alias = DocAlias.objects.create(name="rfc123456")
+ rfc_alias.docs.add(draft)
+ bcp_alias = DocAlias.objects.create(name="bcp123456")
+ bcp_alias.docs.add(draft)
r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=draft.name)))
self.assertEqual(r.status_code, 302)
@@ -759,8 +761,8 @@ class DocTestCase(TestCase):
self.assertFalse('more YES or NO' in unicontent(r))
# status change
- IndividualDraftFactory().docalias_set.create(name='rfc9998')
- IndividualDraftFactory().docalias_set.create(name='rfc9999')
+ DocAlias.objects.create(name='rfc9998').docs.add(IndividualDraftFactory())
+ DocAlias.objects.create(name='rfc9999').docs.add(IndividualDraftFactory())
doc = DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review')
iesgeval_pk = str(State.objects.get(slug='iesgeval',type__slug='statchg').pk)
self.client.login(username='ad', password='ad+password')
@@ -1003,7 +1005,7 @@ class ReferencesTest(TestCase):
def test_references(self):
doc1 = WgDraftFactory(name='draft-ietf-mars-test')
- doc2 = IndividualDraftFactory(name='draft-imaginary-independent-submission').docalias_set.first()
+ doc2 = IndividualDraftFactory(name='draft-imaginary-independent-submission').docalias.first()
RelatedDocument.objects.get_or_create(source=doc1,target=doc2,relationship=DocRelationshipName.objects.get(slug='refnorm'))
url = urlreverse('ietf.doc.views_doc.document_references', kwargs=dict(name=doc1.name))
r = self.client.get(url)
diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py
index 46340abf8..dcd24ebeb 100644
--- a/ietf/doc/tests_ballot.py
+++ b/ietf/doc/tests_ballot.py
@@ -741,7 +741,7 @@ class ApproveBallotTests(TestCase):
self.assertTrue("No downward references for" in r.content)
# Add a downref, the page should ask if it should be added to the registry
- rel = draft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'),relationship_id='refnorm')
+ rel = draft.relateddocument_set.create(target=rfc.docalias.get(name='rfc6666'),relationship_id='refnorm')
d = [rdoc for rdoc in draft.relateddocument_set.all() if rel.is_approved_downref()]
original_len = len(d)
r = self.client.get(url)
@@ -970,7 +970,7 @@ class RegenerateLastCallTestCase(TestCase):
std_level_id='inf',
)
- draft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'),relationship_id='refnorm')
+ draft.relateddocument_set.create(target=rfc.docalias.get(name='rfc6666'),relationship_id='refnorm')
r = self.client.post(url, dict(regenerate_last_call_text="1"))
self.assertEqual(r.status_code, 200)
@@ -980,7 +980,7 @@ class RegenerateLastCallTestCase(TestCase):
self.assertTrue("rfc6666" in lc_text)
self.assertTrue("Independent Submission Editor stream" in lc_text)
- draft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'),relationship_id='downref-approval')
+ draft.relateddocument_set.create(target=rfc.docalias.get(name='rfc6666'),relationship_id='downref-approval')
r = self.client.post(url, dict(regenerate_last_call_text="1"))
self.assertEqual(r.status_code, 200)
diff --git a/ietf/doc/tests_downref.py b/ietf/doc/tests_downref.py
index ad35e89c1..41b2a165c 100644
--- a/ietf/doc/tests_downref.py
+++ b/ietf/doc/tests_downref.py
@@ -21,7 +21,7 @@ class Downref(TestCase):
WgDraftFactory(name='draft-ietf-mars-test')
doc = WgDraftFactory(name='draft-ietf-mars-approved-document',states=[('draft-iesg','rfcqueue')])
rfc = WgRfcFactory(alias2__name='rfc9998')
- RelatedDocument.objects.create(source=doc, target=rfc.docalias_set.get(name='rfc9998'),relationship_id='downref-approval')
+ RelatedDocument.objects.create(source=doc, target=rfc.docalias.get(name='rfc9998'),relationship_id='downref-approval')
def test_downref_registry(self):
url = urlreverse('ietf.doc.views_downref.downref_registry')
@@ -118,7 +118,7 @@ class Downref(TestCase):
draft = WgDraftFactory(name='draft-ietf-mars-ready-for-lc-document',intended_std_level_id='ps',states=[('draft-iesg','iesg-eva')])
WgDraftFactory(name='draft-ietf-mars-another-approved-document',states=[('draft-iesg','rfcqueue')])
rfc9999 = WgRfcFactory(alias2__name='rfc9999', std_level_id=None)
- RelatedDocument.objects.create(source=draft, target=rfc9999.docalias_set.get(name='rfc9999'), relationship_id='refnorm')
+ RelatedDocument.objects.create(source=draft, target=rfc9999.docalias.get(name='rfc9999'), relationship_id='refnorm')
url = urlreverse('ietf.doc.views_ballot.lastcalltext', kwargs=dict(name=draft.name))
login_testing_unauthorized(self, "secretary", url)
@@ -130,7 +130,7 @@ class Downref(TestCase):
self.assertIn('The document contains these normative downward references', text)
# now, the announcement text about the downref to RFC 9999 should be gone
- RelatedDocument.objects.create(source=draft, target=rfc9999.docalias_set.get(name='rfc9999'),relationship_id='downref-approval')
+ RelatedDocument.objects.create(source=draft, target=rfc9999.docalias.get(name='rfc9999'),relationship_id='downref-approval')
r = self.client.post(url, dict(regenerate_last_call_text="1"))
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py
index 13c551d1c..9aa2f909b 100644
--- a/ietf/doc/tests_draft.py
+++ b/ietf/doc/tests_draft.py
@@ -1569,7 +1569,7 @@ class ChangeReplacesTests(TestCase):
# Post that says replacea replaces base a
empty_outbox()
- RelatedDocument.objects.create(source=self.replacea, target=self.basea.docalias_set.first(),
+ RelatedDocument.objects.create(source=self.replacea, target=self.basea.docalias.first(),
relationship=DocRelationshipName.objects.get(slug="possibly-replaces"))
self.assertEqual(self.basea.get_state().slug,'active')
r = self.client.post(url, dict(replaces=self.basea.name))
@@ -1617,7 +1617,7 @@ class ChangeReplacesTests(TestCase):
def test_review_possibly_replaces(self):
- replaced = self.basea.docalias_set.first()
+ replaced = self.basea.docalias.first()
RelatedDocument.objects.create(source=self.replacea, target=replaced,
relationship=DocRelationshipName.objects.get(slug="possibly-replaces"))
diff --git a/ietf/doc/tests_material.py b/ietf/doc/tests_material.py
index 687719a5c..a963ac1a6 100644
--- a/ietf/doc/tests_material.py
+++ b/ietf/doc/tests_material.py
@@ -52,7 +52,7 @@ class GroupMaterialTests(TestCase):
doc = Document.objects.create(name="slides-testteam-test-file", rev="01", type_id="slides", group=group)
doc.set_state(State.objects.get(type="slides", slug="active"))
doc.set_state(State.objects.get(type="reuse_policy", slug="multiple"))
- DocAlias.objects.create(name=doc.name, document=doc)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
NewRevisionDocEvent.objects.create(doc=doc,by=Person.objects.get(name="(System)"),rev='00',type='new_revision',desc='New revision available')
NewRevisionDocEvent.objects.create(doc=doc,by=Person.objects.get(name="(System)"),rev='01',type='new_revision',desc='New revision available')
diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py
index d78c31437..857cc1155 100644
--- a/ietf/doc/tests_review.py
+++ b/ietf/doc/tests_review.py
@@ -144,8 +144,8 @@ class ReviewTests(TestCase):
# check we can fish it out
old_doc = WgDraftFactory(name="draft-foo-mars-test")
older_doc = WgDraftFactory(name="draft-older")
- RelatedDocument.objects.create(source=old_doc, target=older_doc.docalias_set.first(), relationship_id='replaces')
- RelatedDocument.objects.create(source=doc, target=old_doc.docalias_set.first(), relationship_id='replaces')
+ RelatedDocument.objects.create(source=old_doc, target=older_doc.docalias.first(), relationship_id='replaces')
+ RelatedDocument.objects.create(source=doc, target=old_doc.docalias.first(), relationship_id='replaces')
review_req.doc = older_doc
review_req.save()
diff --git a/ietf/doc/tests_status_change.py b/ietf/doc/tests_status_change.py
index 937191d6c..30477b9e8 100644
--- a/ietf/doc/tests_status_change.py
+++ b/ietf/doc/tests_status_change.py
@@ -74,7 +74,7 @@ class StatusChangeTests(TestCase):
self.assertEqual(status_change.rev,u'00')
self.assertEqual(status_change.ad.name,u'Areaư Irector')
self.assertEqual(status_change.notify,u'ipu@ietf.org')
- self.assertTrue(status_change.relateddocument_set.filter(relationship__slug='tois',target__document__name='draft-ietf-random-thing'))
+ self.assertTrue(status_change.relateddocument_set.filter(relationship__slug='tois',target__docs__name='draft-ietf-random-thing'))
def test_change_state(self):
diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py
index c5a05ad1e..d07d158c1 100644
--- a/ietf/doc/utils.py
+++ b/ietf/doc/utils.py
@@ -684,10 +684,8 @@ def extract_complete_replaces_ancestor_mapping_for_docs(names):
if not front:
break
- relations = RelatedDocument.objects.filter(
- source__name__in=front, relationship="replaces"
- ).select_related("target").values_list("source__name", "target__document__name")
-
+ relations = ( RelatedDocument.objects.filter(source__name__in=front, relationship="replaces")
+ .select_related("target").values_list("source__name", "target__docs__name") )
if not relations:
break
diff --git a/ietf/doc/utils_search.py b/ietf/doc/utils_search.py
index d042616d1..f99b7a24f 100644
--- a/ietf/doc/utils_search.py
+++ b/ietf/doc/utils_search.py
@@ -49,7 +49,7 @@ def fill_in_document_table_attributes(docs, have_telechat_date=False):
doc_dict = dict((d.pk, d) for d in docs)
doc_ids = doc_dict.keys()
- rfc_aliases = dict(DocAlias.objects.filter(name__startswith="rfc", document__id__in=doc_ids).values_list("document__id", "name"))
+ rfc_aliases = dict([ (a.document.id, a.name) for a in DocAlias.objects.filter(name__startswith="rfc", docs__id__in=doc_ids) ])
# latest event cache
event_types = ("published_rfc",
@@ -122,11 +122,10 @@ def fill_in_document_table_attributes(docs, have_telechat_date=False):
d.updated_by_list = []
xed_by = RelatedDocument.objects.filter(target__name__in=rfc_aliases.values(),
- relationship__in=("obs", "updates")).select_related('target__document')
- rel_rfc_aliases = dict(DocAlias.objects.filter(name__startswith="rfc",
- document__in=[rel.source_id for rel in xed_by]).values_list('document', 'name'))
+ relationship__in=("obs", "updates")).select_related('target')
+ rel_rfc_aliases = dict([ (a.document.id, a.name) for a in DocAlias.objects.filter(name__startswith="rfc", docs__id__in=[rel.source_id for rel in xed_by]) ])
for rel in xed_by:
- d = doc_dict[rel.target.document_id]
+ d = doc_dict[rel.target.document.id]
if rel.relationship_id == "obs":
l = d.obsoleted_by_list
elif rel.relationship_id == "updates":
@@ -146,7 +145,7 @@ def prepare_document_table(request, docs, query=None, max_results=200):
# the number of queries
docs = docs.select_related("ad", "std_level", "intended_std_level", "group", "stream", "shepherd", )
docs = docs.prefetch_related("states__type", "tags", "groupmilestone_set__group", "reviewrequest_set__team",
- "submission_set__checks", "ad__email_set", "docalias_set__iprdocrel_set")
+ "submission_set__checks", "ad__email_set", "docalias__iprdocrel_set")
if docs.count() > max_results:
docs = docs[:max_results]
diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py
index 39e8eac99..8aae5b259 100644
--- a/ietf/doc/views_charter.py
+++ b/ietf/doc/views_charter.py
@@ -392,7 +392,7 @@ def submit(request, name, option=None):
abstract=group.name,
rev=next_rev,
)
- DocAlias.objects.create(name=charter.name, document=charter)
+ DocAlias.objects.create(name=charter.name).docs.add(charter)
charter.set_state(State.objects.get(used=True, type="charter", slug="notrev"))
diff --git a/ietf/doc/views_conflict_review.py b/ietf/doc/views_conflict_review.py
index 350d5a4c4..5705bbf39 100644
--- a/ietf/doc/views_conflict_review.py
+++ b/ietf/doc/views_conflict_review.py
@@ -388,7 +388,7 @@ def start_review_sanity_check(request, name):
raise Http404
# sanity check that there's not already a conflict review document for this document
- if [ rel.source for alias in doc_to_review.docalias_set.all() for rel in alias.relateddocument_set.filter(relationship='conflrev') ]:
+ if [ rel.source for alias in doc_to_review.docalias.all() for rel in alias.relateddocument_set.filter(relationship='conflrev') ]:
raise Http404
return doc_to_review
@@ -421,7 +421,8 @@ def build_conflict_review_document(login, doc_to_review, ad, notify, create_in_s
)
conflict_review.set_state(create_in_state)
- DocAlias.objects.create( name=review_name , document=conflict_review )
+ DocAlias.objects.create( name=review_name).docs.add( conflict_review )
+
conflict_review.relateddocument_set.create(target=DocAlias.objects.get(name=doc_to_review.name),relationship_id='conflrev')
diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py
index cd2ee59a9..444d071f0 100644
--- a/ietf/doc/views_doc.py
+++ b/ietf/doc/views_doc.py
@@ -103,7 +103,7 @@ def document_main(request, name, rev=None):
doc = get_object_or_404(Document.objects.select_related(), docalias__name=name)
# take care of possible redirections
- aliases = DocAlias.objects.filter(document=doc).values_list("name", flat=True)
+ aliases = DocAlias.objects.filter(docs=doc).values_list("name", flat=True)
if rev==None and doc.type_id == "draft" and not name.startswith("rfc"):
for a in aliases:
if a.startswith("rfc"):
@@ -714,7 +714,7 @@ def document_history(request, name):
if doc.get_state_slug() == "rfc":
e = doc.latest_event(type="published_rfc")
- aliases = doc.docalias_set.filter(name__startswith="rfc")
+ aliases = doc.docalias.filter(name__startswith="rfc")
if aliases:
name = aliases[0].name
diff_revisions.append((name, "", e.time if e else doc.time, name))
@@ -1009,7 +1009,7 @@ def document_json(request, name, rev=None):
data["expires"] = doc.expires.strftime("%Y-%m-%d %H:%M:%S") if doc.expires else None
data["title"] = doc.title
data["abstract"] = doc.abstract
- data["aliases"] = list(doc.docalias_set.values_list("name", flat=True))
+ data["aliases"] = list(doc.docalias.values_list("name", flat=True))
data["state"] = extract_name(doc.get_state())
data["intended_std_level"] = extract_name(doc.intended_std_level)
data["std_level"] = extract_name(doc.std_level)
diff --git a/ietf/doc/views_material.py b/ietf/doc/views_material.py
index dbbc98369..d270e5cd1 100644
--- a/ietf/doc/views_material.py
+++ b/ietf/doc/views_material.py
@@ -142,7 +142,8 @@ def edit_material(request, name=None, acronym=None, action=None, doc_type=None):
dest.write(chunk)
if action == "new":
- DocAlias.objects.get_or_create(name=doc.name, document=doc)
+ alias, __ = DocAlias.objects.get_or_create(name=doc.name)
+ alias.docs.add(doc)
if prev_rev != doc.rev:
e = NewRevisionDocEvent(type="new_revision", doc=doc, rev=doc.rev)
diff --git a/ietf/doc/views_review.py b/ietf/doc/views_review.py
index 8101226b7..2c00abe63 100644
--- a/ietf/doc/views_review.py
+++ b/ietf/doc/views_review.py
@@ -593,7 +593,7 @@ def complete_review(request, name, assignment_id):
name = "-".join(c for c in name_components if c).lower()
if not Document.objects.filter(name=name).exists():
review = Document.objects.create(name=name)
- DocAlias.objects.create(document=review, name=review.name)
+ DocAlias.objects.create(name=review.name).docs.add(review)
break
review.type = DocTypeName.objects.get(slug="review")
diff --git a/ietf/doc/views_search.py b/ietf/doc/views_search.py
index f91a20254..f93f139d9 100644
--- a/ietf/doc/views_search.py
+++ b/ietf/doc/views_search.py
@@ -478,7 +478,7 @@ def index_all_drafts(request):
else:
heading = "%s Internet-Drafts" % state.name
- draft_names = DocAlias.objects.filter(document__states=state).values_list("name", "document__name")
+ draft_names = DocAlias.objects.filter(docs__states=state).values_list("name", "docs__name")
names = []
names_to_skip = set()
@@ -528,7 +528,7 @@ def ajax_select2_search_docs(request, model_name, doc_type):
if model == Document:
qs = qs.filter(type=doc_type)
elif model == DocAlias:
- qs = qs.filter(document__type=doc_type)
+ qs = qs.filter(docs__type=doc_type)
for t in q:
qs = qs.filter(name__icontains=t)
diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py
index 5be43e3c7..f1f4b7080 100644
--- a/ietf/doc/views_status_change.py
+++ b/ietf/doc/views_status_change.py
@@ -527,7 +527,7 @@ def start_rfc_status_change(request,name):
)
status_change.set_state(form.cleaned_data['create_in_state'])
- DocAlias.objects.create( name= 'status-change-'+form.cleaned_data['document_name'], document=status_change )
+ DocAlias.objects.create( name= 'status-change-'+form.cleaned_data['document_name']).docs.add(status_change)
for key in form.cleaned_data['relations']:
status_change.relateddocument_set.create(target=DocAlias.objects.get(name=key),
diff --git a/ietf/group/dot.py b/ietf/group/dot.py
index 00a65f733..adafb111e 100644
--- a/ietf/group/dot.py
+++ b/ietf/group/dot.py
@@ -100,7 +100,7 @@ def get_node_styles(node, group):
def make_dot(group):
references = Q(source__group=group, source__type='draft', relationship__slug__startswith='ref')
- both_rfcs = Q(source__states__slug='rfc', target__document__states__slug='rfc')
+ both_rfcs = Q(source__states__slug='rfc', target__docs__states__slug='rfc')
inactive = Q(source__states__slug__in=['expired', 'repl'])
attractor = Q(target__name__in=['rfc5000', 'rfc5741'])
removed = Q(source__states__slug__in=['auth-rm', 'ietf-rm'])
@@ -114,7 +114,7 @@ def make_dot(group):
edges.add(Edge(x))
replacements = RelatedDocument.objects.filter(relationship__slug='replaces',
- target__document__in=[x.relateddocument.target.document for x in edges])
+ target__docs__in=[x.relateddocument.target.document for x in edges])
for x in replacements:
edges.add(Edge(x))
diff --git a/ietf/group/tests.py b/ietf/group/tests.py
index 752eb2584..bae5be447 100644
--- a/ietf/group/tests.py
+++ b/ietf/group/tests.py
@@ -71,7 +71,7 @@ class GroupDocDependencyGraphTests(TestCase):
set_coverage_checking(False)
a = WgDraftFactory()
b = WgDraftFactory()
- RelatedDocument.objects.create(source=a,target=b.docalias_set.first(),relationship_id='normref')
+ RelatedDocument.objects.create(source=a,target=b.docalias.first(),relationship_id='normref')
def tearDown(self):
set_coverage_checking(True)
diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py
index c6e7bf186..89d35b5fa 100644
--- a/ietf/group/tests_info.py
+++ b/ietf/group/tests_info.py
@@ -325,7 +325,7 @@ class GroupPagesTests(TestCase):
type_id="slides",
)
doc.set_state(State.objects.get(type="slides", slug="active"))
- DocAlias.objects.create(name=doc.name, document=doc)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
for url in group_urlreverse_list(group, 'ietf.group.views.materials'):
r = self.client.get(url)
diff --git a/ietf/group/views.py b/ietf/group/views.py
index 18c407de4..6fce21fd4 100644
--- a/ietf/group/views.py
+++ b/ietf/group/views.py
@@ -188,7 +188,7 @@ def fill_in_wg_roles(group):
group.secretaries = get_roles("secr", [])
def fill_in_wg_drafts(group):
- aliases = DocAlias.objects.filter(document__type="draft", document__group=group).select_related('document').order_by("name")
+ aliases = DocAlias.objects.filter(docs__type="draft", docs__group=group).prefetch_related('docs').order_by("name")
group.drafts = []
group.rfcs = []
for a in aliases:
@@ -804,7 +804,7 @@ def group_photos(request, group_type=None, acronym=None):
# charter.set_state(State.objects.get(used=True, type="charter", slug="notrev"))
#
# # Create an alias as well
-# DocAlias.objects.create(name=charter.name, document=charter)
+# DocAlias.objects.create(name=charter.name).docs.add(charter)
#
# return charter
#
diff --git a/ietf/idindex/index.py b/ietf/idindex/index.py
index d97f9b544..8eb0f6e6b 100644
--- a/ietf/idindex/index.py
+++ b/ietf/idindex/index.py
@@ -29,9 +29,9 @@ def all_id_txt():
return t.strftime("%Y-%m-%d") if t else ""
rfc_aliases = dict(DocAlias.objects.filter(name__startswith="rfc",
- document__states=State.objects.get(type="draft", slug="rfc")).values_list("document__name", "name"))
+ docs__states=State.objects.get(type="draft", slug="rfc")).values_list("docs__name", "name"))
- replacements = dict(RelatedDocument.objects.filter(target__document__states=State.objects.get(type="draft", slug="repl"),
+ replacements = dict(RelatedDocument.objects.filter(target__docs__states=State.objects.get(type="draft", slug="repl"),
relationship="replaces").values_list("target__name", "source__name"))
@@ -110,9 +110,9 @@ def all_id2_txt():
drafts = drafts.prefetch_related("states")
rfc_aliases = dict(DocAlias.objects.filter(name__startswith="rfc",
- document__states=State.objects.get(type="draft", slug="rfc")).values_list("document__name", "name"))
+ docs__states=State.objects.get(type="draft", slug="rfc")).values_list("docs__name", "name"))
- replacements = dict(RelatedDocument.objects.filter(target__document__states=State.objects.get(type="draft", slug="repl"),
+ replacements = dict(RelatedDocument.objects.filter(target__docs__states=State.objects.get(type="draft", slug="repl"),
relationship="replaces").values_list("target__name", "source__name"))
revision_time = dict(DocEvent.objects.filter(type="new_revision", doc__name__startswith="draft-").order_by('time').values_list("doc__name", "time"))
diff --git a/ietf/idindex/tests.py b/ietf/idindex/tests.py
index d4979087e..2412e7c76 100644
--- a/ietf/idindex/tests.py
+++ b/ietf/idindex/tests.py
@@ -47,7 +47,7 @@ class IndexTests(TestCase):
# published
draft.set_state(State.objects.get(type="draft", slug="rfc"))
- DocAlias.objects.create(name="rfc1234", document=draft)
+ DocAlias.objects.create(name="rfc1234").docs.add(draft)
txt = all_id_txt()
self.assertTrue(draft.name + "-" + draft.rev in txt)
@@ -59,7 +59,7 @@ class IndexTests(TestCase):
RelatedDocument.objects.create(
relationship=DocRelationshipName.objects.get(slug="replaces"),
source=Document.objects.create(type_id="draft", rev="00", name="draft-test-replacement"),
- target=draft.docalias_set.get(name__startswith="draft"))
+ target=draft.docalias.get(name__startswith="draft"))
txt = all_id_txt()
self.assertTrue(draft.name + "-" + draft.rev in txt)
@@ -109,7 +109,7 @@ class IndexTests(TestCase):
# test RFC
draft.set_state(State.objects.get(type="draft", slug="rfc"))
- DocAlias.objects.create(name="rfc1234", document=draft)
+ DocAlias.objects.create(name="rfc1234").docs.add(draft)
t = get_fields(all_id2_txt())
self.assertEqual(t[4], "1234")
@@ -118,7 +118,7 @@ class IndexTests(TestCase):
RelatedDocument.objects.create(
relationship=DocRelationshipName.objects.get(slug="replaces"),
source=Document.objects.create(type_id="draft", rev="00", name="draft-test-replacement"),
- target=draft.docalias_set.get(name__startswith="draft"))
+ target=draft.docalias.get(name__startswith="draft"))
t = get_fields(all_id2_txt())
self.assertEqual(t[5], "draft-test-replacement")
diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py
index 16a738512..5a8e91751 100644
--- a/ietf/iesg/tests.py
+++ b/ietf/iesg/tests.py
@@ -92,7 +92,7 @@ class IESGAgendaTests(TestCase):
mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut'))
wgdraft = WgDraftFactory(name='draft-ietf-mars-test', group=mars, intended_std_level_id='ps')
rfc = IndividualRfcFactory.create(stream_id='irtf', other_aliases=['rfc6666',], states=[('draft','rfc'),('draft-iesg','pub')], std_level_id='inf', )
- wgdraft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'), relationship_id='refnorm')
+ wgdraft.relateddocument_set.create(target=rfc.docalias.get(name='rfc6666'), relationship_id='refnorm')
ise_draft = IndividualDraftFactory(name='draft-imaginary-independent-submission')
ise_draft.stream = StreamName.objects.get(slug="ise")
ise_draft.save_with_history([DocEvent(doc=ise_draft, rev=ise_draft.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
@@ -216,7 +216,7 @@ class IESGAgendaTests(TestCase):
relation = RelatedDocument.objects.create(
source=statchg,
- target=DocAlias.objects.filter(name__startswith='rfc', document__std_level="ps")[0],
+ target=DocAlias.objects.filter(name__startswith='rfc', docs__std_level="ps")[0],
relationship_id="tohist")
statchg.group = Group.objects.get(acronym="mars")
@@ -234,7 +234,7 @@ class IESGAgendaTests(TestCase):
self.assertTrue(statchg in agenda_data(date_str)["sections"]["2.3.3"]["docs"])
# 3.3 document status changes
- relation.target = DocAlias.objects.filter(name__startswith='rfc', document__std_level="inf")[0]
+ relation.target = DocAlias.objects.filter(name__startswith='rfc', docs__std_level="inf")[0]
relation.save()
statchg.group = Group.objects.get(acronym="mars")
diff --git a/ietf/ipr/admin.py b/ietf/ipr/admin.py
index 2656dce90..c22a57f40 100644
--- a/ietf/ipr/admin.py
+++ b/ietf/ipr/admin.py
@@ -91,7 +91,7 @@ admin.site.register(IprDocRel, IprDocRelAdmin)
class RelatedIprAdmin(admin.ModelAdmin):
list_display = ['source', 'target', 'relationship', ]
- search_fields = ['source__name', 'target__name', 'target__document__name', ]
+ search_fields = ['source__name', 'target__name', 'target__docs__name', ]
raw_id_fields = ['source', 'target', ]
admin.site.register(RelatedIpr, RelatedIprAdmin)
diff --git a/ietf/ipr/factories.py b/ietf/ipr/factories.py
index f7c333625..8758b5fc7 100644
--- a/ietf/ipr/factories.py
+++ b/ietf/ipr/factories.py
@@ -34,7 +34,7 @@ class IprDisclosureBaseFactory(factory.DjangoModelFactory):
return
if extracted:
for doc in extracted:
- IprDocRel.objects.create(disclosure=self,document=doc.docalias_set.first())
+ IprDocRel.objects.create(disclosure=self,document=doc.docalias.first())
@factory.post_generation
def updates(self, create, extracted, **kwargs):
diff --git a/ietf/ipr/tests.py b/ietf/ipr/tests.py
index fe03a3c28..4870170d8 100644
--- a/ietf/ipr/tests.py
+++ b/ietf/ipr/tests.py
@@ -157,7 +157,7 @@ class IprTests(TestCase):
self.assertTrue(draft.name in unicontent(r))
self.assertTrue(ipr.title not in unicontent(r))
- DocAlias.objects.create(name="rfc321", document=draft)
+ DocAlias.objects.create(name="rfc321").docs.add(draft)
# find RFC
r = self.client.get(url + "?submit=rfc&rfc=321")
@@ -260,7 +260,7 @@ class IprTests(TestCase):
"ietfer_contact_info": "555-555-0101",
"iprdocrel_set-TOTAL_FORMS": 2,
"iprdocrel_set-INITIAL_FORMS": 0,
- "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().name,
+ "iprdocrel_set-0-document": "%s" % draft.docalias.first().name,
"iprdocrel_set-0-revisions": '00',
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().name,
"patent_number": "SE12345678901",
@@ -303,7 +303,7 @@ class IprTests(TestCase):
"ietfer_contact_info": "555-555-0101",
"iprdocrel_set-TOTAL_FORMS": 2,
"iprdocrel_set-INITIAL_FORMS": 0,
- "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().name,
+ "iprdocrel_set-0-document": "%s" % draft.docalias.first().name,
"iprdocrel_set-0-revisions": '00',
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().name,
"patent_number": "SE12345678901",
@@ -351,7 +351,7 @@ class IprTests(TestCase):
"holder_legal_name": "Test Legal",
"ietfer_contact_info": "555-555-0101",
"ietfer_name": "Test Participant",
- "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().name,
+ "iprdocrel_set-0-document": "%s" % draft.docalias.first().name,
"iprdocrel_set-0-revisions": '00',
"iprdocrel_set-INITIAL_FORMS": 0,
"iprdocrel_set-TOTAL_FORMS": 1,
@@ -400,7 +400,7 @@ class IprTests(TestCase):
"ietfer_contact_info": "555-555-0101",
"iprdocrel_set-TOTAL_FORMS": 2,
"iprdocrel_set-INITIAL_FORMS": 0,
- "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().name,
+ "iprdocrel_set-0-document": "%s" % draft.docalias.first().name,
"iprdocrel_set-0-revisions": '00',
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().name,
"patent_number": "SE12345678901",
@@ -438,7 +438,7 @@ class IprTests(TestCase):
"holder_contact_email": "test@holder.com",
"iprdocrel_set-TOTAL_FORMS": 1,
"iprdocrel_set-INITIAL_FORMS": 0,
- "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().name,
+ "iprdocrel_set-0-document": "%s" % draft.docalias.first().name,
"iprdocrel_set-0-revisions": '00',
"patent_number": "SE12345678901",
"patent_inventor": "A. Nonymous",
diff --git a/ietf/ipr/utils.py b/ietf/ipr/utils.py
index 04bab1e39..2cb05aa29 100644
--- a/ietf/ipr/utils.py
+++ b/ietf/ipr/utils.py
@@ -1,3 +1,8 @@
+# Copyright The IETF Trust 2014-2019, All Rights Reserved
+# -*- coding: utf-8 -*-
+
+import debug # pyflakes:ignore
+
def get_genitive(name):
"""Return the genitive form of name"""
return name + "'" if name.endswith('s') else name + "'s"
@@ -29,23 +34,30 @@ def iprs_from_docs(aliases,**kwargs):
"""Returns a list of IPRs related to doc aliases"""
iprdocrels = []
for alias in aliases:
- if alias.document.ipr(**kwargs):
- iprdocrels += alias.document.ipr(**kwargs)
+ for document in alias.docs.all():
+ if document.ipr(**kwargs):
+ iprdocrels += document.ipr(**kwargs)
return list(set([i.disclosure for i in iprdocrels]))
def related_docs(alias, relationship=('replaces', 'obs')):
"""Returns list of related documents"""
- results = list(alias.document.docalias_set.all())
+
+ results = []
+ for doc in alias.docs.all():
+ results += list(doc.docalias.all())
- rels = alias.document.all_relations_that_doc(relationship)
+ rels = []
+ for doc in alias.docs.all():
+ rels += list(doc.all_relations_that_doc(relationship))
for rel in rels:
- rel_aliases = list(rel.target.document.docalias_set.all())
+ rel_aliases = list(rel.target.document.docalias.all())
for x in rel_aliases:
x.related = rel
x.relation = rel.relationship.revname
results += rel_aliases
+
return list(set(results))
diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py
index c5d9614df..4f150d016 100644
--- a/ietf/ipr/views.py
+++ b/ietf/ipr/views.py
@@ -460,16 +460,16 @@ def by_draft_recursive_txt(request):
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
alias = o.document
- document = alias.document
name = alias.name
- related = set(document.docalias_set.all()) | set(document.all_related_that_doc(('obs', 'replaces')))
- for alias in related:
- name = alias.name
- if name.startswith("rfc"):
- name = name.upper()
- if not name in docipr:
- docipr[name] = []
- docipr[name].append(o.disclosure_id)
+ for document in alias.docs.all():
+ related = set(document.docalias.all()) | set(document.all_related_that_doc(('obs', 'replaces')))
+ for alias in related:
+ name = alias.name
+ if name.startswith("rfc"):
+ name = name.upper()
+ if not name in docipr:
+ docipr[name] = []
+ docipr[name].append(o.disclosure_id)
lines = [ u"# Machine-readable list of IPR disclosures by draft name" ]
for name, iprs in docipr.iteritems():
@@ -700,7 +700,7 @@ def search(request):
# Search by wg acronym
# Document list with IPRs
elif search_type == "group":
- docs = list(DocAlias.objects.filter(document__group=q))
+ docs = list(DocAlias.objects.filter(docs__group=q))
related = []
for doc in docs:
doc.product_of_this_wg = True
@@ -714,7 +714,7 @@ def search(request):
# Search by rfc and id title
# Document list with IPRs
elif search_type == "doctitle":
- docs = list(DocAlias.objects.filter(document__title__icontains=q))
+ docs = list(DocAlias.objects.filter(docs__title__icontains=q))
related = []
for doc in docs:
related += related_docs(doc)
diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py
index b059ed5f2..8ec66e40a 100644
--- a/ietf/liaisons/forms.py
+++ b/ietf/liaisons/forms.py
@@ -25,7 +25,7 @@ from ietf.liaisons.fields import SearchableLiaisonStatementsField
from ietf.group.models import Group
from ietf.person.models import Email
from ietf.person.fields import SearchableEmailField
-from ietf.doc.models import Document
+from ietf.doc.models import Document, DocAlias
from ietf.utils.fields import DatepickerDateField
'''
@@ -370,7 +370,7 @@ class LiaisonModelForm(BetterModelForm):
)
)
if created:
- attach.docalias_set.create(name=attach.name)
+ DocAlias.objects.create(name=attach.name).docs.add(attach)
LiaisonStatementAttachment.objects.create(statement=self.instance,document=attach)
attach_file = open(os.path.join(settings.LIAISON_ATTACH_PATH, attach.name + extension), 'w')
attach_file.write(attached_file.read())
diff --git a/ietf/meeting/forms.py b/ietf/meeting/forms.py
index 645ad6b40..3a1a3ae5e 100644
--- a/ietf/meeting/forms.py
+++ b/ietf/meeting/forms.py
@@ -271,7 +271,7 @@ class InterimSessionModelForm(forms.ModelForm):
# FIXME: What about agendas in html or markdown format?
uploaded_filename='{}-00.txt'.format(filename))
doc.set_state(State.objects.get(type__slug=doc.type.slug, slug='active'))
- DocAlias.objects.create(name=doc.name, document=doc)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
self.instance.sessionpresentation_set.create(document=doc, rev=doc.rev)
NewRevisionDocEvent.objects.create(
type='new_revision',
diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py
index 19de5cf03..57d906da1 100644
--- a/ietf/meeting/views.py
+++ b/ietf/meeting/views.py
@@ -38,7 +38,7 @@ from django.views.generic import RedirectView
from ietf.doc.fields import SearchableDocumentsField
-from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent
+from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias
from ietf.group.models import Group
from ietf.group.utils import can_manage_materials
from ietf.ietfauth.utils import role_required, has_role
@@ -1218,7 +1218,7 @@ def upload_session_bluesheets(request, session_id, num):
rev = '00',
)
doc.states.add(State.objects.get(type_id='bluesheets',slug='active'))
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
session.sessionpresentation_set.create(document=doc,rev='00')
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.uploaded_filename = filename
@@ -1307,7 +1307,7 @@ def upload_session_minutes(request, session_id, num):
group = session.group,
rev = '00',
)
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
doc.states.add(State.objects.get(type_id='minutes',slug='active'))
if session.sessionpresentation_set.filter(document=doc).exists():
sp = session.sessionpresentation_set.get(document=doc)
@@ -1410,7 +1410,7 @@ def upload_session_agenda(request, session_id, num):
group = session.group,
rev = '00',
)
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
doc.states.add(State.objects.get(type_id='agenda',slug='active'))
if session.sessionpresentation_set.filter(document=doc).exists():
sp = session.sessionpresentation_set.get(document=doc)
@@ -1513,7 +1513,7 @@ def upload_session_slides(request, session_id, num, name):
group = session.group,
rev = '00',
)
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
doc.states.add(State.objects.get(type_id='slides',slug='active'))
doc.states.add(State.objects.get(type_id='reuse_policy',slug='single'))
if session.sessionpresentation_set.filter(document=doc).exists():
@@ -2448,7 +2448,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
group = submission.session.group,
rev = '00',
)
- doc.docalias_set.create(name=doc.name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
doc.states.add(State.objects.get(type_id='slides',slug='active'))
doc.states.add(State.objects.get(type_id='reuse_policy',slug='single'))
if submission.session.sessionpresentation_set.filter(document=doc).exists():
diff --git a/ietf/review/utils.py b/ietf/review/utils.py
index 5b8ce5bc5..3d2754423 100644
--- a/ietf/review/utils.py
+++ b/ietf/review/utils.py
@@ -834,7 +834,7 @@ def make_assignment_choices(email_queryset, review_req):
possible_emails = list(email_queryset)
possible_person_ids = [e.person_id for e in possible_emails]
- aliases = DocAlias.objects.filter(document=doc).values_list("name", flat=True)
+ aliases = DocAlias.objects.filter(docs=doc).values_list("name", flat=True)
# settings
reviewer_settings = {
diff --git a/ietf/secr/drafts/views.py b/ietf/secr/drafts/views.py
index 3c0b0f621..524e9f47a 100644
--- a/ietf/secr/drafts/views.py
+++ b/ietf/secr/drafts/views.py
@@ -579,7 +579,7 @@ def view(request, id):
draft.rfc_number = get_rfc_num(draft)
# check for replaced bys
- qs = Document.objects.filter(relateddocument__target__document=draft, relateddocument__relationship='replaces')
+ qs = Document.objects.filter(relateddocument__target__docs=draft, relateddocument__relationship='replaces')
if qs:
draft.replaced_by = qs[0]
diff --git a/ietf/secr/proceedings/proc_utils.py b/ietf/secr/proceedings/proc_utils.py
index f696c5e27..5a4e5245b 100644
--- a/ietf/secr/proceedings/proc_utils.py
+++ b/ietf/secr/proceedings/proc_utils.py
@@ -113,10 +113,10 @@ def attach_recording(doc, sessions):
document=doc,
rev=doc.rev)
session.sessionpresentation_set.add(presentation)
- if not doc.docalias_set.filter(name__startswith='recording-{}-{}'.format(session.meeting.number,session.group.acronym)):
+ if not doc.docalias.filter(name__startswith='recording-{}-{}'.format(session.meeting.number,session.group.acronym)):
sequence = get_next_sequence(session.group,session.meeting,'recording')
name = 'recording-{}-{}-{}'.format(session.meeting.number,session.group.acronym,sequence)
- doc.docalias_set.create(name=name)
+ DocAlias.objects.create(name=name).docs.add(doc)
def normalize_room_name(name):
'''Returns room name converted to be used as portion of filename'''
@@ -150,7 +150,7 @@ def create_recording(session, url, title=None, user=None):
type_id='recording')
doc.set_state(State.objects.get(type='recording', slug='active'))
- doc.docalias_set.create(name=name)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
# create DocEvent
NewRevisionDocEvent.objects.create(type='new_revision',
diff --git a/ietf/secr/proceedings/tests.py b/ietf/secr/proceedings/tests.py
index 8da4b99a8..5997c6463 100644
--- a/ietf/secr/proceedings/tests.py
+++ b/ietf/secr/proceedings/tests.py
@@ -132,8 +132,8 @@ class RecordingTestCase(TestCase):
import_audio_files(meeting)
doc = mars_session.materials.filter(type='recording').first()
self.assertTrue(doc in ames_session.materials.all())
- self.assertTrue(doc.docalias_set.filter(name='recording-42-mars-1'))
- self.assertTrue(doc.docalias_set.filter(name='recording-42-ames-1'))
+ self.assertTrue(doc.docalias.filter(name='recording-42-mars-1'))
+ self.assertTrue(doc.docalias.filter(name='recording-42-ames-1'))
def test_normalize_room_name(self):
self.assertEqual(normalize_room_name('Test Room'),'testroom')
diff --git a/ietf/secr/telechat/tests.py b/ietf/secr/telechat/tests.py
index 3dd066e6e..8c01842b8 100644
--- a/ietf/secr/telechat/tests.py
+++ b/ietf/secr/telechat/tests.py
@@ -63,7 +63,7 @@ class SecrTelechatTestCase(TestCase):
draft = WgDraftFactory(ad=ad, intended_std_level_id='ps', states=[('draft-iesg','pub-req'),])
rfc = IndividualRfcFactory.create(stream_id='irtf', other_aliases=['rfc6666',],
states=[('draft','rfc'),('draft-iesg','pub')], std_level_id='inf', )
- draft.relateddocument_set.create(target=rfc.docalias_set.get(name='rfc6666'),
+ draft.relateddocument_set.create(target=rfc.docalias.get(name='rfc6666'),
relationship_id='refnorm')
create_ballot_if_not_open(None, draft, ad, 'approve')
d = get_next_telechat_date()
diff --git a/ietf/secr/utils/document.py b/ietf/secr/utils/document.py
index 535758425..ecdc1166f 100644
--- a/ietf/secr/utils/document.py
+++ b/ietf/secr/utils/document.py
@@ -10,11 +10,11 @@ def get_full_path(doc):
return os.path.join(doc.get_file_path(), doc.uploaded_filename)
def get_rfc_num(doc):
- qs = doc.docalias_set.filter(name__startswith='rfc')
+ qs = doc.docalias.filter(name__startswith='rfc')
return qs[0].name[3:] if qs else None
def is_draft(doc):
- if doc.docalias_set.filter(name__startswith='rfc'):
+ if doc.docalias.filter(name__startswith='rfc'):
return False
else:
return True
diff --git a/ietf/stats/backfill_data.py b/ietf/stats/backfill_data.py
index 8af30442f..88819adb0 100755
--- a/ietf/stats/backfill_data.py
+++ b/ietf/stats/backfill_data.py
@@ -68,9 +68,9 @@ def unicode(text):
start = time.time()
say("Running query for documents to process ...")
-for doc in docs_qs.prefetch_related("docalias_set", "formal_languages", "documentauthor_set", "documentauthor_set__person", "documentauthor_set__person__alias_set"):
+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_set.all():
+ for n in doc.docalias.all():
if n.name.startswith("rfc"):
canonical_name = n.name
diff --git a/ietf/stats/tests.py b/ietf/stats/tests.py
index 13656a723..c2ca7ccec 100644
--- a/ietf/stats/tests.py
+++ b/ietf/stats/tests.py
@@ -71,10 +71,10 @@ class StatisticsTests(TestCase):
words=100
)
referencing_draft.set_state(State.objects.get(used=True, type="draft", slug="active"))
- DocAlias.objects.create(document=referencing_draft, name=referencing_draft.name)
+ DocAlias.objects.create(name=referencing_draft.name).docs.add(referencing_draft)
RelatedDocument.objects.create(
source=referencing_draft,
- target=draft.docalias_set.first(),
+ target=draft.docalias.first(),
relationship=DocRelationshipName.objects.get(slug="refinfo")
)
NewRevisionDocEvent.objects.create(
diff --git a/ietf/stats/views.py b/ietf/stats/views.py
index 4eeac6506..baf888d7d 100644
--- a/ietf/stats/views.py
+++ b/ietf/stats/views.py
@@ -205,13 +205,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(document__type="draft")
+ docalias_filters = Q(docs__type="draft")
rfc_state = State.objects.get(type="draft", slug="rfc")
if document_type == "rfc":
- docalias_filters &= Q(document__states=rfc_state)
+ docalias_filters &= Q(docs__states=rfc_state)
elif document_type == "draft":
- docalias_filters &= ~Q(document__states=rfc_state)
+ docalias_filters &= ~Q(docs__states=rfc_state)
if from_time:
# this is actually faster than joining in the database,
@@ -222,7 +222,7 @@ def document_stats(request, stats_type=None):
docevent__type__in=["published_rfc", "new_revision"],
).values_list("pk"))
- docalias_filters &= Q(document__in=docs_within_time_constraint)
+ docalias_filters &= Q(docs__in=docs_within_time_constraint)
docalias_qs = DocAlias.objects.filter(docalias_filters)
@@ -233,10 +233,10 @@ def document_stats(request, stats_type=None):
else:
doc_label = "document"
- total_docs = docalias_qs.values_list("document").distinct().count()
+ total_docs = docalias_qs.values_list("docs__name").distinct().count()
def generate_canonical_names(docalias_qs):
- for doc_id, ts in itertools.groupby(docalias_qs.order_by("document"), lambda t: t[0]):
+ for doc_id, ts in itertools.groupby(docalias_qs.order_by("docs__name"), lambda t: t[0]):
chosen = None
for t in ts:
if chosen is None:
@@ -254,7 +254,7 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, author_count in generate_canonical_names(docalias_qs.values_list("document", "name").annotate(Count("document__documentauthor"))):
+ for name, canonical_name, author_count in generate_canonical_names(docalias_qs.values_list("docs__name", "name").annotate(Count("docs__documentauthor"))):
bins[author_count].add(canonical_name)
series_data = []
@@ -270,7 +270,7 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, pages in generate_canonical_names(docalias_qs.values_list("document", "name", "document__pages")):
+ for name, canonical_name, pages in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__pages")):
bins[pages].add(canonical_name)
series_data = []
@@ -289,7 +289,7 @@ def document_stats(request, stats_type=None):
bins = defaultdict(set)
- for name, canonical_name, words in generate_canonical_names(docalias_qs.values_list("document", "name", "document__words")):
+ for name, canonical_name, words in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__words")):
bins[put_into_bin(words, bin_size)].add(canonical_name)
series_data = []
@@ -314,7 +314,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("document", "name", "document__rev")):
+ for doc_name, canonical_name, rev in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__rev")):
types = submission_types.get(doc_name)
if types:
for dot_ext in types.split(","):
@@ -359,7 +359,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("document", "name", "document__formal_languages__name")):
+ for name, canonical_name, formal_language_name in generate_canonical_names(docalias_qs.values_list("docs__name", "name", "docs__formal_languages__name")):
bins[formal_language_name].add(canonical_name)
series_data = []
diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py
index 7f978d4a5..c33f1fe2b 100644
--- a/ietf/submit/tests.py
+++ b/ietf/submit/tests.py
@@ -224,8 +224,8 @@ class SubmitTests(TestCase):
note="",
)
sug_replaced_draft.set_state(State.objects.get(used=True, type="draft", slug="active"))
- sug_replaced_alias = DocAlias.objects.create(document=sug_replaced_draft, name=sug_replaced_draft.name)
-
+ 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"
@@ -235,7 +235,7 @@ class SubmitTests(TestCase):
# supply submitter info, then draft should be in and ready for approval
mailbox_before = len(outbox)
- replaced_alias = draft.docalias_set.first()
+ replaced_alias = draft.docalias.first()
r = self.supply_extra_metadata(name, status_url, author.ascii, author.email().address.lower(),
replaces=str(replaced_alias.name) + "," + str(sug_replaced_alias.name))
@@ -593,7 +593,7 @@ class SubmitTests(TestCase):
rev = '%02d'%(int(draft.rev)+1)
status_url, author = self.do_submission(name,rev)
mailbox_before = len(outbox)
- replaced_alias = draft.docalias_set.first()
+ replaced_alias = draft.docalias.first()
r = self.supply_extra_metadata(name, status_url, "Submitter Name", "author@example.com", replaces=str(replaced_alias.name))
self.assertEqual(r.status_code, 200)
self.assertTrue('cannot replace itself' in unicontent(r))
@@ -737,7 +737,7 @@ class SubmitTests(TestCase):
"edit-pages": "123",
"submitter-name": "Some Random Test Person",
"submitter-email": "random@example.com",
- "replaces": str(draft.docalias_set.all().first().name),
+ "replaces": str(draft.docalias.first().name),
"edit-note": "no comments",
"authors-0-name": "Person 1",
"authors-0-email": "person1@example.com",
@@ -757,7 +757,7 @@ class SubmitTests(TestCase):
self.assertEqual(submission.pages, 123)
self.assertEqual(submission.note, "no comments")
self.assertEqual(submission.submitter, "Some Random Test Person ")
- self.assertEqual(submission.replaces, draft.docalias_set.all().first().name)
+ self.assertEqual(submission.replaces, draft.docalias.first().name)
self.assertEqual(submission.state_id, "manual")
authors = submission.authors
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 3aa6c05db..43b1b07f2 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -1,8 +1,9 @@
# Copyright The IETF Trust 2011-2019, All Rights Reserved
# -*- coding: utf-8 -*-
-import os
import datetime
+import os
+import re
import six # pyflakes:ignore
import xml2rfc
@@ -259,7 +260,8 @@ def post_submission(request, submission, approvedDesc):
events.append(e)
# update related objects
- DocAlias.objects.get_or_create(name=submission.name, document=draft)
+ 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"))
@@ -373,7 +375,7 @@ def update_replaces_from_submission(request, submission, draft):
if request.user.is_authenticated:
is_chair_of = list(Group.objects.filter(role__person__user=request.user, role__name="chair"))
- replaces = DocAlias.objects.filter(name__in=submission.replaces.split(",")).select_related("document", "document__group")
+ replaces = DocAlias.objects.filter(name__in=submission.replaces.split(",")).prefetch_related("docs", "docs__group")
existing_replaces = list(draft.related_that_doc("replaces"))
existing_suggested = set(draft.related_that_doc("possibly-replaces"))
diff --git a/ietf/sync/rfceditor.py b/ietf/sync/rfceditor.py
index aad98a0e5..834937902 100644
--- a/ietf/sync/rfceditor.py
+++ b/ietf/sync/rfceditor.py
@@ -370,7 +370,7 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
# make sure we got the document and alias
doc = None
name = "rfc%s" % rfc_number
- a = DocAlias.objects.filter(name=name).select_related("document")
+ a = DocAlias.objects.filter(name=name)
if a:
doc = a[0].document
else:
@@ -385,7 +385,8 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
doc = Document.objects.create(name=name, type=DocTypeName.objects.get(slug="draft"))
# add alias
- DocAlias.objects.get_or_create(name=name, document=doc)
+ alias, __ = DocAlias.objects.get_or_create(name=name)
+ alias.docs.add(doc)
changes.append("created alias %s" % prettify_std_name(name))
# check attributes
@@ -458,7 +459,7 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
if x[:3] in ("NIC", "IEN", "STD", "RTR"):
# try translating this to RFCs that we can handle
# sensibly; otherwise we'll have to ignore them
- l = DocAlias.objects.filter(name__startswith="rfc", document__docalias__name=x.lower())
+ l = DocAlias.objects.filter(name__startswith="rfc", docs__docalias__name=x.lower())
else:
l = DocAlias.objects.filter(name=x.lower())
@@ -481,7 +482,7 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
for a in also:
a = a.lower()
if not DocAlias.objects.filter(name=a):
- DocAlias.objects.create(name=a, document=doc)
+ DocAlias.objects.create(name=a).docs.add(doc)
changes.append("created alias %s" % prettify_std_name(a))
if has_errata:
diff --git a/ietf/sync/tests.py b/ietf/sync/tests.py
index 134c307ac..6b1aae3a5 100644
--- a/ietf/sync/tests.py
+++ b/ietf/sync/tests.py
@@ -22,7 +22,7 @@ from ietf.utils.test_utils import TestCase
class IANASyncTests(TestCase):
def test_protocol_page_sync(self):
draft = WgDraftFactory()
- DocAlias.objects.create(name="rfc1234", document=draft)
+ DocAlias.objects.create(name="rfc1234").docs.add(draft)
DocEvent.objects.create(doc=draft, rev=draft.rev, type="published_rfc", by=Person.objects.get(name="(System)"))
rfc_names = iana.parse_protocol_page('RFC 1234')
@@ -234,8 +234,8 @@ class RFCSyncTests(TestCase):
# too, but for testing purposes ...
updated_doc = Document.objects.create(name="draft-ietf-something")
- DocAlias.objects.create(name=updated_doc.name, document=updated_doc)
- DocAlias.objects.create(name="rfc123", document=updated_doc)
+ DocAlias.objects.create(name=updated_doc.name).docs.add(updated_doc)
+ DocAlias.objects.create(name="rfc123").docs.add(updated_doc)
today = datetime.date.today()
@@ -337,10 +337,10 @@ class RFCSyncTests(TestCase):
self.assertEqual(doc.docevent_set.all()[1].type, "published_rfc")
self.assertEqual(doc.docevent_set.all()[1].time.date(), today)
self.assertTrue("errata" in doc.tags.all().values_list("slug", flat=True))
- self.assertTrue(DocAlias.objects.filter(name="rfc1234", document=doc))
- self.assertTrue(DocAlias.objects.filter(name="bcp1", document=doc))
- self.assertTrue(DocAlias.objects.filter(name="fyi1", document=doc))
- self.assertTrue(DocAlias.objects.filter(name="std1", document=doc))
+ self.assertTrue(DocAlias.objects.filter(name="rfc1234", docs=doc))
+ self.assertTrue(DocAlias.objects.filter(name="bcp1", docs=doc))
+ self.assertTrue(DocAlias.objects.filter(name="fyi1", docs=doc))
+ self.assertTrue(DocAlias.objects.filter(name="std1", docs=doc))
self.assertTrue(RelatedDocument.objects.filter(source=doc, target__name="rfc123", relationship="updates"))
self.assertEqual(doc.title, "A Testing RFC")
self.assertEqual(doc.abstract, "This is some interesting text.")
diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py
index 04fc0f3a9..d47fff226 100644
--- a/ietf/utils/test_data.py
+++ b/ietf/utils/test_data.py
@@ -158,10 +158,7 @@ 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,
- document=charter
- )
+ DocAlias.objects.create(name=charter.name).docs.add(charter)
setup_default_community_list_for_group(group)
# ames WG
@@ -183,10 +180,7 @@ def make_test_data():
rev="00",
)
charter.set_state(State.objects.get(used=True, slug="infrev", type="charter"))
- DocAlias.objects.create(
- name=charter.name,
- document=charter
- )
+ DocAlias.objects.create(name=charter.name).docs.add(charter)
group.charter = charter
group.save()
setup_default_community_list_for_group(group)
@@ -220,10 +214,7 @@ def make_test_data():
# rev="00",
# )
#charter.set_state(State.objects.get(used=True, slug="infrev", type="charter"))
- #DocAlias.objects.create(
- # name=charter.name,
- # document=charter
- # )
+ #DocAlias.objects.create(name=charter.name).docs.add(charter)
#group.charter = charter
#group.save()
@@ -266,7 +257,8 @@ def make_test_data():
expires=datetime.datetime.now(),
)
old_draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
- old_alias = DocAlias.objects.create(document=old_draft, name=old_draft.name)
+ old_alias = DocAlias.objects.create(name=old_draft.name)
+ old_alias.docs.add(old_draft)
# draft
draft = Document.objects.create(
@@ -291,10 +283,8 @@ 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(
- document=draft,
- name=draft.name,
- )
+ doc_alias = DocAlias.objects.create(name=draft.name)
+ doc_alias.docs.add(draft)
RelatedDocument.objects.create(source=draft, target=old_alias, relationship=DocRelationshipName.objects.get(slug='replaces'))
old_draft.set_state(State.objects.get(type='draft', slug='repl'))
@@ -371,16 +361,17 @@ def make_test_data():
doc = Document.objects.create(name='draft-imaginary-independent-submission',type_id='draft',rev='00',
title="Some Independent Notes on Imagination")
doc.set_state(State.objects.get(used=True, type="draft", slug="active"))
- DocAlias.objects.create(name=doc.name, document=doc)
+ DocAlias.objects.create(name=doc.name).docs.add(doc)
# an irtf submission mid review
doc = Document.objects.create(name='draft-imaginary-irtf-submission', type_id='draft',rev='00',
stream=StreamName.objects.get(slug='irtf'), title="The Importance of Research Imagination")
- docalias = DocAlias.objects.create(name=doc.name, document=doc)
+ docalias = DocAlias.objects.create(name=doc.name)
+ docalias.docs.add(doc)
doc.set_state(State.objects.get(type="draft", slug="active"))
crdoc = Document.objects.create(name='conflict-review-imaginary-irtf-submission', type_id='conflrev',
rev='00', notify="fsm@ietf.org", title="Conflict Review of IRTF Imagination Document")
- DocAlias.objects.create(name=crdoc.name, document=crdoc)
+ DocAlias.objects.create(name=crdoc.name).docs.add(crdoc)
crdoc.set_state(State.objects.get(name='Needs Shepherd', type__slug='conflrev'))
crdoc.relateddocument_set.create(target=docalias,relationship_id='conflrev')
@@ -389,14 +380,15 @@ def make_test_data():
doc = Document.objects.create(name='status-change-imaginary-mid-review',type_id='statchg', rev='00',
notify="fsm@ietf.org", group=iesg, title="Status Change Review without Imagination")
doc.set_state(State.objects.get(slug='needshep',type__slug='statchg'))
- docalias = DocAlias.objects.create(name='status-change-imaginary-mid-review',document=doc)
+ docalias = DocAlias.objects.create(name='status-change-imaginary-mid-review')
+ docalias.docs.add(doc)
# Some things for a status change to affect
def rfc_for_status_change_test_factory(name,rfc_num,std_level_id):
target_rfc = Document.objects.create(name=name, type_id='draft', std_level_id=std_level_id, notify="%s@ietf.org"%name)
target_rfc.set_state(State.objects.get(slug='rfc',type__slug='draft'))
- docalias = DocAlias.objects.create(name=name,document=target_rfc)
- docalias = DocAlias.objects.create(name='rfc%d'%rfc_num,document=target_rfc) # pyflakes:ignore
+ DocAlias.objects.create(name=name).docs.add(target_rfc)
+ DocAlias.objects.create(name='rfc%d'%rfc_num).docs.add(target_rfc)
return target_rfc
rfc_for_status_change_test_factory('draft-ietf-random-thing',9999,'ps')
rfc_for_status_change_test_factory('draft-ietf-random-otherthing',9998,'inf')