diff --git a/changelog b/changelog index 2f9270cf4..d5b3283b7 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,13 @@ +ietfdb (2.28) + + * Show full name in document comment log. From Pasi. + + * Optimize meeting agenda page to use less SQL queries. From Pasi. + + * Include version in iesg/agenda/documents.txt. From Pasi. + + -- Henrik Levkowetz 25 Jul 2009 14:38:41 +0200 + ietfdb (2.27) * Add support for an iPhone specific agenda format. Going to the html diff --git a/ietf/idrfc/views_doc.py b/ietf/idrfc/views_doc.py index 0ee99af5a..8f15e6b02 100644 --- a/ietf/idrfc/views_doc.py +++ b/ietf/idrfc/views_doc.py @@ -148,7 +148,7 @@ def document_comments(request, name): info['by'] = m.group(2) else: info['text'] = comment.comment_text - info['by'] = comment.get_username() + info['by'] = comment.get_fullname() info['textSnippet'] = truncatewords_html(format_textarea(fill(info['text'], 80)), 25) info['snipped'] = info['textSnippet'][-3:] == "..." info['commentNumber'] = commentNumber diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 8be423d7d..896c7da2b 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -58,13 +58,13 @@ def get_plenary_agenda(meeting_num, id): def agenda_info(num=None): if not num: num = list(Meeting.objects.all())[-1].meeting_num - timeslots = MeetingTime.objects.filter(meeting=num).order_by("day_id", "time_desc") + timeslots = MeetingTime.objects.select_related().filter(meeting=num).order_by("day_id", "time_desc") update = get_object_or_404(Switches,id=1) meeting=get_object_or_404(Meeting, meeting_num=num) venue = get_object_or_404(MeetingVenue, meeting_num=num) - ads = list(IESGHistory.objects.filter(meeting=num)) + ads = list(IESGHistory.objects.select_related().filter(meeting=num)) if not ads: - ads = list(IESGHistory.objects.filter(meeting=str(int(num)-1))) + ads = list(IESGHistory.objects.select_related().filter(meeting=str(int(num)-1))) ads.sort(key=(lambda item: item.area.area_acronym.acronym)) plenaryw_agenda = get_plenary_agenda(num, -1) plenaryt_agenda = get_plenary_agenda(num, -2) @@ -92,4 +92,4 @@ def text_agenda(request, num=None): {"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads, "plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, }, RequestContext(request)), mimetype="text/plain") - \ No newline at end of file + diff --git a/ietf/proceedings/models.py b/ietf/proceedings/models.py index 5c11d94cd..cf99a96c0 100644 --- a/ietf/proceedings/models.py +++ b/ietf/proceedings/models.py @@ -13,32 +13,40 @@ import datetime # an interim attribute first) class ResolveAcronym(object): def acronym(self): + if hasattr(self, '_acronym_acronym'): + return self._acronym_acronym try: interim = self.interim except AttributeError: interim = False if self.irtf: - acronym = IRTF.objects.get(pk=self.group_acronym_id).acronym + o = IRTF.objects.get(pk=self.group_acronym_id) else: - acronym = Acronym.objects.get(pk=self.group_acronym_id).acronym + o = Acronym.objects.get(pk=self.group_acronym_id) + self._acronym_acronym = o.acronym + self._acronym_name = o.name + acronym = self._acronym_acronym if interim: return "i" + acronym - return acronym + else: + return acronym def acronym_lower(self): return self.acronym().lower() def acronym_name(self): + if not hasattr(self, '_acronym_name'): + self.acronym() try: interim = self.interim except AttributeError: interim = False - if self.irtf: - acronym_name = IRTF.objects.get(pk=self.group_acronym_id).name - else: - acronym_name = Acronym.objects.get(pk=self.group_acronym_id).name + acronym_name = self._acronym_name if interim: return acronym_name + " (interim)" - return acronym_name + else: + return acronym_name def area(self): + if hasattr(self, '_area'): + return self._area if self.irtf: area = "irtf" elif self.group_acronym_id < 0 and self.group_acronym_id > -3: @@ -47,9 +55,10 @@ class ResolveAcronym(object): area = "" else: try: - area = AreaGroup.objects.get(group=self.group_acronym_id).area.area_acronym.acronym + area = AreaGroup.objects.select_related().get(group=self.group_acronym_id).area.area_acronym.acronym except AreaGroup.DoesNotExist: area = "" + self._area = area return area def area_name(self): if self.irtf: @@ -67,28 +76,27 @@ class ResolveAcronym(object): def isWG(self): if self.irtf: return False - else: + if not hasattr(self,'_ietfwg'): try: - g_type_id = IETFWG.objects.get(pk=self.group_acronym_id).group_type_id == 1 - if g_type_id == 1: - return True - else: - return False + self._ietfwg = IETFWG.objects.get(pk=self.group_acronym_id) except IETFWG.DoesNotExist: - return False + self._ietfwg = None + if self._ietfwg and self._ietfwg.group_type_id == 1: + return True + else: + return False def group_type_str(self): if self.irtf: - return "" + return "" else: - try: - g_type_id = IETFWG.objects.get(pk=self.group_acronym_id).group_type_id - if g_type_id == 1: - return "WG" - elif g_type_id == 3: - return "BOF" - else: - return "" - except IETFWG.DoesNotExist: + self.isWG() + if not self._ietfwg: + return "" + elif self._ietfwg.group_type_id == 1: + return "WG" + elif self._ietfwg.group_type_id == 3: + return "BOF" + else: return "" TIME_ZONE_CHOICES = ( @@ -234,7 +242,7 @@ class MeetingTime(models.Model): time_desc = models.CharField(maxlength=100) meeting = models.ForeignKey(Meeting, db_column='meeting_num', unique=True) day_id = models.IntegerField() - session_name = models.ForeignKey(SessionName) + session_name = models.ForeignKey(SessionName,null=True) def __str__(self): return "[%d] |%s| %s" % (self.meeting_id, (self.meeting.start_date + datetime.timedelta(self.day_id)).strftime('%A'), self.time_desc) def sessions(self): @@ -266,8 +274,11 @@ class MeetingTime(models.Model): def meeting_date(self): return self.meeting.get_meeting_date(self.day_id) def registration(self): + if hasattr(self, '_reg_info'): + return self._reg_info reg = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=1) reg.name = reg.non_session_ref.name + self._reg_info = reg return reg def reg_info(self): reg_info = self.registration() @@ -341,6 +352,8 @@ class WgMeetingSession(models.Model, ResolveAcronym): def __str__(self): return "%s at %s" % (self.acronym(), self.meeting) def agenda_file(self,interimvar=0): + if hasattr(self, '_agenda_file'): + return self._agenda_file irtfvar = 0 if self.irtf: irtfvar = self.group_acronym_id @@ -352,10 +365,15 @@ class WgMeetingSession(models.Model, ResolveAcronym): interimvar = 0 try: filename = WgAgenda.objects.get(meeting=self.meeting, group_acronym_id=self.group_acronym_id,irtf=irtfvar,interim=interimvar).filename - dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name + if self.meeting_id in WgMeetingSession._dirs: + dir = WgMeetingSession._dirs[self.meeting_id] + else: + dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name + WgMeetingSession._dirs[self.meeting_id]=dir retvar = "%s/agenda/%s" % (dir,filename) except WgAgenda.DoesNotExist: retvar = "" + self._agenda_file = retvar return retvar def minute_file(self,interimvar=0): irtfvar = 0 @@ -402,6 +420,7 @@ class WgMeetingSession(models.Model, ResolveAcronym): db_table = 'wg_meeting_sessions' class Admin: pass + _dirs = {} class WgAgenda(models.Model, ResolveAcronym): meeting = models.ForeignKey(Meeting, db_column='meeting_num') diff --git a/ietf/templates/idrfc/search_result_row.html b/ietf/templates/idrfc/search_result_row.html index e97bd9060..49bd370c5 100644 --- a/ietf/templates/idrfc/search_result_row.html +++ b/ietf/templates/idrfc/search_result_row.html @@ -41,7 +41,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. {% else %}{{doc.id.draft_name_and_revision}}{% endif %} {{ doc.title|escape }} {{ doc.publication_date }} -{% if doc.publication_date|timesince_days|less_than:"14" %}
new{%endif%} +{% if doc.publication_date|timesince_days|less_than:"14" %}
{% if not doc.rfc%}new{%else%}new{%endif%}{%endif%} {% if doc.id and doc.id.expected_expiration_date and doc.id.expected_expiration_date|timesince_days|greater_than:"-14" %}
expires soon{%endif%} diff --git a/ietf/templates/iesg/agenda_documents.txt b/ietf/templates/iesg/agenda_documents.txt index 634674de6..677ee807b 100644 --- a/ietf/templates/iesg/agenda_documents.txt +++ b/ietf/templates/iesg/agenda_documents.txt @@ -30,5 +30,5 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -{% endcomment %}# Fields: telechat date, filename (draft-foo-bar or rfc1234), intended status, rfc editor submission flag (0=no, 1=yes), area acronym, AD name{% for doc in docs %} -{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {{doc.via_rfc_editor}} {{doc.area_acronym|lower}} {{doc.token_name }}{% endfor %} \ No newline at end of file +{% endcomment %}# Fields: telechat date, filename (draft-foo-bar or rfc1234), intended status, rfc editor submission flag (0=no, 1=yes), area acronym, AD name, version{% for doc in docs %} +{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {{doc.via_rfc_editor}} {{doc.area_acronym|lower}} {{doc.token_name }} {{doc.document.revision}}{% endfor %} \ No newline at end of file