Changed DocAlias to be many-to-many, in order to be able to handle STD aliases referring to multiple RFCs.
- Legacy-Id: 16249
This commit is contained in:
parent
815602351f
commit
a2cafded25
|
@ -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 = []
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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("<a href=\"%s\">%s</a>" % (urlreverse('ietf.doc.views_doc.document_main', kwargs=dict(name=alias.document)), alias.document) for alias in rs))
|
||||
return mark_safe("Replaced by " + ", ".join("<a href=\"%s\">%s</a>" % (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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"))
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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"))
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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 <random@example.com>")
|
||||
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
|
||||
|
|
|
@ -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"))
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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('<html><a href="/go/rfc1234/">RFC 1234</a></html>')
|
||||
|
@ -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.")
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue