@@ -97,13 +97,19 @@ class DocumentInfo(models.Model):
9797 shepherd = ForeignKey (Email , related_name = 'shepherd_%(class)s_set' , blank = True , null = True )
9898 expires = models .DateTimeField (blank = True , null = True )
9999 notify = models .CharField (max_length = 255 , blank = True )
100- external_url = models .URLField (blank = True ) # Should be set for documents with type 'External'.
100+ external_url = models .URLField (blank = True )
101+ uploaded_filename = models .TextField (blank = True )
101102 note = models .TextField (blank = True )
102103 internal_comments = models .TextField (blank = True )
103104
104105 def file_extension (self ):
105- _ ,ext = os .path .splitext (self .external_url )
106- return ext .lstrip ("." ).lower ()
106+ if not hasattr (self , '_cached_extension' ):
107+ if self .uploaded_filename :
108+ _ , ext = os .path .splitext (self .uploaded_filename )
109+ self ._cached_extension = ext .lstrip ("." ).lower ()
110+ else :
111+ self ._cached_extension = "txt"
112+ return self ._cached_extension
107113
108114 def get_file_path (self ):
109115 if not hasattr (self , '_cached_file_path' ):
@@ -138,7 +144,9 @@ def get_file_path(self):
138144
139145 def get_base_name (self ):
140146 if not hasattr (self , '_cached_base_name' ):
141- if self .type_id == 'draft' :
147+ if self .uploaded_filename :
148+ self ._cached_base_name = self .uploaded_filename
149+ elif self .type_id == 'draft' :
142150 if self .is_dochistory ():
143151 self ._cached_base_name = "%s-%s.txt" % (self .doc .name , self .rev )
144152 else :
@@ -147,12 +155,9 @@ def get_base_name(self):
147155 else :
148156 self ._cached_base_name = "%s-%s.txt" % (self .name , self .rev )
149157 elif self .type_id in ["slides" , "agenda" , "minutes" , "bluesheets" , ] and self .meeting_related ():
150- if self .external_url :
151- # we need to remove the extension for the globbing below to work
152- self ._cached_base_name = self .external_url
153- else :
154- self ._cached_base_name = "%s.txt" % self .canonical_name () # meeting materials are unversioned at the moment
158+ self ._cached_base_name = "%s-%s.txt" % self .canonical_name ()
155159 elif self .type_id == 'review' :
160+ # TODO: This will be wrong if a review is updated on the same day it was created (or updated more than once on the same day)
156161 self ._cached_base_name = "%s.txt" % self .name
157162 else :
158163 if self .rev :
@@ -195,15 +200,14 @@ def _get_ref(self, meeting=None, meeting_doc_refs=settings.MEETING_DOC_HREFS):
195200 # the earlier resulution order, but there's at the moment one single
196201 # instance which matches this (with correct results), so we won't
197202 # break things all over the place.
198- # XXX TODO: move all non-URL 'external_url' values into a field which is
199- # better named, or regularize the filename based on self.name
200203 if not hasattr (self , '_cached_href' ):
201204 validator = URLValidator ()
202205 if self .external_url and self .external_url .split (':' )[0 ] in validator .schemes :
203206 try :
204207 validator (self .external_url )
205208 return self .external_url
206209 except ValidationError :
210+ log .unreachable ('2018-12-28' )
207211 pass
208212
209213
@@ -223,10 +227,7 @@ def _get_ref(self, meeting=None, meeting_doc_refs=settings.MEETING_DOC_HREFS):
223227 elif self .type_id in meeting_doc_refs :
224228 self .is_meeting_related = True
225229 else :
226- if len (self .external_url ):
227- return self .external_url
228- else :
229- return None
230+ return None
230231
231232 if self .is_meeting_related :
232233 if not meeting :
@@ -625,7 +626,7 @@ def get_absolute_url(self):
625626 if self .type_id == 'recording' :
626627 url = self .external_url
627628 else :
628- filename = self .external_url
629+ filename = self .uploaded_filename
629630 url = '%sproceedings/%s/%s/%s' % (settings .IETF_HOST_URL ,meeting .number ,self .type_id ,filename )
630631 else :
631632 url = urlreverse ('ietf.doc.views_doc.document_main' , kwargs = { 'name' : name }, urlconf = "ietf.urls" )
0 commit comments