
    hf              	       |   S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S S
KJrJr  S SKJrJr   " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S\\\5      r " S S\5      r " S S\\5      r " S S\\5      r  " S S\\ 5      r! " S  S!\\\5      r" " S" S#\\"5      r# " S$ S%\\\5      r$ " S& S'\\$5      r% " S( S)\\\\5      r& " S* S+\\&5      r' " S, S-\&5      r( " S. S/\\(5      r) " S0 S1\\\\\5      r* " S2 S3\\*5      r+ S7S4 jr,S5 r-S6 r.g)8    N)settings)ImproperlyConfigured)models)Http404)timezone)cached_property)gettext)View)BaseDetailView!SingleObjectTemplateResponseMixin)MultipleObjectMixin#MultipleObjectTemplateResponseMixinc                   D    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
 rSrg)	YearMixin   z-Mixin for views manipulating year-based data.z%YNc                     U R                   $ )z^
Get a year format string in strptime syntax to be used to parse the
year from url variables.
)year_formatselfs    L/var/www/html/env/lib/python3.13/site-packages/django/views/generic/dates.pyget_year_formatYearMixin.get_year_format       
     c                     U R                   nUc   U R                  S   nU$ U$ ! [         a@     U R                  R                  S   n U$ ! [         a    [        [        S5      5      ef = ff = f)z8Return the year for which this view should display data.yearzNo year specified)r   kwargsKeyErrorrequestGETr   _)r   r   s     r   get_yearYearMixin.get_year"       yy<:{{6* t  ::<<++F3D    :!!$7"899::   $ 
A.AA**A.c                     [        XSSS9$ )zGet the next valid year.Fr   is_previousperiod_get_next_prevr   dates     r   get_next_yearYearMixin.get_next_year/       deFKKr   c                     [        XSSS9$ )zGet the previous valid year.Tr   r'   r*   r,   s     r   get_previous_yearYearMixin.get_previous_year3       dd6JJr   c                      UR                  UR                  S-   SSS9$ ! [         a    [        [	        S5      5      ef = f)t
Return the start date of the next interval.

The interval is defined by start date <= item date < next start date.
   r   monthdayDate out of range)replacer   
ValueErrorr   r!   r,   s     r   _get_next_yearYearMixin._get_next_year7   sD    	2<<TYY]!<CC 	2!/011	2s     ?c                 "    UR                  SSS9$ ).Return the start date of the current interval.r7   r9   r:   r<   r,   s     r   _get_current_yearYearMixin._get_current_yearB   s    ||!|++r    )__name__
__module____qualname____firstlineno____doc__r   r   r   r"   r.   r2   r>   rD   __static_attributes__rF   r   r   r   r      s/    7KD LK	2,r   r   c                   D    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
 rSrg)
MonthMixinG   z.Mixin for views manipulating month-based data.z%bNc                     U R                   $ )z`
Get a month format string in strptime syntax to be used to parse the
month from url variables.
)month_formatr   s    r   get_month_formatMonthMixin.get_month_formatM       
    r   c                     U R                   nUc   U R                  S   nU$ U$ ! [         a@     U R                  R                  S   n U$ ! [         a    [        [        S5      5      ef = ff = f)z9Return the month for which this view should display data.r9   zNo month specified)r9   r   r   r   r    r   r!   )r   r9   s     r   	get_monthMonthMixin.get_monthT   s    

=;G, u  ;; LL,,W5E    ;!!$8"9::;;r%   c                     [        XSSS9$ )zGet the next valid month.Fr9   r'   r*   r,   s     r   get_next_monthMonthMixin.get_next_montha   s    deGLLr   c                     [        XSSS9$ )zGet the previous valid month.Tr9   r'   r*   r,   s     r   get_previous_monthMonthMixin.get_previous_monthe   s    dd7KKr   c                     UR                   S:X  a   UR                  UR                  S-   SSS9$ UR                  UR                   S-   SS9$ ! [         a    [	        [        S5      5      ef = f)r6      r7   r8   r;   rB   )r9   r<   r   r=   r   r!   r,   s     r   _get_next_monthMonthMixin._get_next_monthi   sq     ::6||QaQ|GG <<djj1n!<<<  6a 34556s   A A,c                      UR                  SS9$ )z/Return the start date of the previous interval.r7   )r:   rC   r,   s     r   _get_current_monthMonthMixin._get_current_monthw   s    |||""r   rF   )rG   rH   rI   rJ   rK   rQ   r9   rR   rV   rY   r\   r`   rc   rL   rF   r   r   rN   rN   G   s/    8LE!ML=#r   rN   c                   D    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
 rSrg)DayMixin|   z,Mixin for views manipulating day-based data.z%dNc                     U R                   $ )z\
Get a day format string in strptime syntax to be used to parse the day
from url variables.
)
day_formatr   s    r   get_day_formatDayMixin.get_day_format   s    
 r   c                     U R                   nUc   U R                  S   nU$ U$ ! [         a@     U R                  R                  S   n U$ ! [         a    [        [        S5      5      ef = ff = f)z7Return the day for which this view should display data.r:   zNo day specified)r:   r   r   r   r    r   r!   )r   r:   s     r   get_dayDayMixin.get_day   s    hh;9kk%( 
s
  99,,**51C 
   9!!$6"78899r%   c                     [        XSSS9$ )zGet the next valid day.Fr:   r'   r*   r,   s     r   get_next_dayDayMixin.get_next_day   s    deEJJr   c                     [        XSSS9$ )zGet the previous valid day.Tr:   r'   r*   r,   s     r   get_previous_dayDayMixin.get_previous_day   s    dd5IIr   c                 0    U[         R                  " SS9-   $ )r6   r7   days)datetime	timedeltar,   s     r   _get_next_dayDayMixin._get_next_day   s     h((a000r   c                     U$ rA   rF   r,   s     r   _get_current_dayDayMixin._get_current_day   s    r   rF   )rG   rH   rI   rJ   rK   ri   r:   rj   rm   rp   rs   rz   r~   rL   rF   r   r   rf   rf   |   s/    6J
CKJ1r   rf   c                   J    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
 rS rSrg)	WeekMixin   z-Mixin for views manipulating week-based data.%UNc                     U R                   $ )z^
Get a week format string in strptime syntax to be used to parse the
week from url variables.
)week_formatr   s    r   get_week_formatWeekMixin.get_week_format   r   r   c                     U R                   nUc   U R                  S   nU$ U$ ! [         a@     U R                  R                  S   n U$ ! [         a    [        [        S5      5      ef = ff = f)z8Return the week for which this view should display data.weekzNo week specified)r   r   r   r   r    r   r!   )r   r   s     r   get_weekWeekMixin.get_week   r$   r%   c                     [        XSSS9$ )zGet the next valid week.Fr   r'   r*   r,   s     r   get_next_weekWeekMixin.get_next_week   r0   r   c                     [        XSSS9$ )zGet the previous valid week.Tr   r'   r*   r,   s     r   get_previous_weekWeekMixin.get_previous_week   r4   r   c                      U[         R                  " SU R                  U5      -
  S9-   $ ! [         a    [	        [        S5      5      ef = f)r6      rv   r;   )rx   ry   _get_weekdayOverflowErrorr   r!   r,   s     r   _get_next_weekWeekMixin._get_next_week   sM    	2(,,!d6G6G6M2MNNN 	2!/011	2s	   (+ A
c                 R    U[         R                  " U R                  U5      5      -
  $ r}   )rx   ry   r   r,   s     r   _get_current_weekWeekMixin._get_current_week   s#    h(():):4)@AAAr   c                     U R                  5       nUS;   a  UR                  5       $ US:X  a  UR                  5       S-   S-  $ [        SU-  5      e)zn
Return the weekday for a given date.

The first day according to the week format is 0 and the last day is 6.
>   %V%Wr   r7   r   zunknown week format: %s)r   weekdayr=   )r   r-   r   s      r   r   WeekMixin._get_weekday   sU     **,,&<<>!D LLNQ&!++6DEEr   rF   )rG   rH   rI   rJ   rK   r   r   r   r   r   r   r   r   r   rL   rF   r   r   r   r      s6    7KD LK	2BFr   r   c                   H    \ rS rSrSrSrSrS rS r\	S 5       r
S rS	 rS
rg)	DateMixin   z3Mixin class for views manipulating date-based data.NFc                 x    U R                   c"  [        SU R                  R                  -  5      eU R                   $ )z7Get the name of the date field to be used to filter by.z%s.date_field is required.)
date_fieldr   	__class__rG   r   s    r   get_date_fieldDateMixin.get_date_field   s7    ??"&,t~~/F/FF  r   c                     U R                   $ )zQ
Return `True` if the view should be allowed to display objects from
the future.
)allow_futurer   s    r   get_allow_futureDateMixin.get_allow_future   rT   r   c                     U R                   c  U R                  5       R                   OU R                   nUR                  R                  U R	                  5       5      n[        U[        R                  5      $ )zY
Return `True` if the date field is a `DateTimeField` and `False`
if it's a `DateField`.
)modelget_queryset_meta	get_fieldr   
isinstancer   DateTimeField)r   r   fields      r   uses_datetime_fieldDateMixin.uses_datetime_field  sW     .2ZZ-?!!#))TZZ%%d&9&9&;<%!5!566r   c                     U R                   (       ac  [        R                  R                  U[        R                  R                  5      n[
        R                  (       a  [        R                  " U5      nU$ )z
Convert a date into a datetime when the date field is a DateTimeField.

When time zone support is enabled, `date` is assumed to be in the
current time zone, so that displayed items are consistent with the URL.
)	r   rx   combinetimeminr   USE_TZr   
make_aware)r   values     r   _make_date_lookup_argDateMixin._make_date_lookup_arg  sK     ##%%--eX]]5F5FGE ++E2r   c                     U R                  5       nU R                  (       aC  U R                  U5      nU R                  U[        R                  " SS9-   5      nSU-  USU-  U0$ X!0$ )z
Get the lookup kwargs for filtering on a single date.

If the date field is a DateTimeField, we can't just filter on
date_field=date because that doesn't take the time into account.
r7   rv   %s__gte%s__lt)r   r   r   rx   ry   )r   r-   r   sinceuntils        r   _make_single_date_lookup"DateMixin._make_single_date_lookup  st     ((*
##..t4E..th6H6Ha6P/PQEJ&:%u  %%r   rF   )rG   rH   rI   rJ   rK   r   r   r   r   r   r   r   r   rL   rF   r   r   r   r      s7    =JL! 7 7&r   r   c                   H    \ rS rSrSrSrSrS rS rS r	S r
S	 rSS jrSrg
)BaseDateListViewi.  zFAbstract base class for date-based views displaying a list of objects.Fr   c                     U R                  5       u  U l        U l        nU R                  " SU R                  U R                  S.UD6nU R	                  U5      $ )N)object_list	date_listrF   )get_dated_itemsr   r   get_context_datarender_to_response)r   r   argsr   extra_contextcontexts         r   getBaseDateListView.get4  s[    :>:N:N:P7(-'' 
((DNN
FS
 &&w//r   c                     [        S5      e)z#Obtain the list of dates and items.z>A DateView must provide an implementation of get_dated_items())NotImplementedErrorr   s    r   r    BaseDateListView.get_dated_items;  s    !L
 	
r   c                 Z    U R                   c  SU R                  5       -  $ U R                   $ )z]
Return the field or fields to use for ordering the queryset; use the
date field by default.
-%s)orderingr   r   s    r   get_orderingBaseDateListView.get_orderingA  s*    
 150Eut**,,X4==Xr   c                 ,   U R                  5       R                  " S0 UD6nU R                  5       nU R                  5       nU R	                  5       nU R                  U5      nU(       dG  U R                  (       a  [        R                  " 5       O	[        5       nUR                  " S0 SU-  U0D6nU(       d]  Uc  U(       + OUR                  5       (       + nU(       a7  [        [        S5      SUR                  R                  R                  0-  5      eU$ )z[
Get a queryset properly filtered according to `allow_future` and any
extra lookup kwargs.
%s__lte$No %(verbose_name_plural)s availableverbose_name_pluralrF   )r   filterr   r   get_allow_emptyget_paginate_byr   r   nowtimezone_todayexistsr   r!   r   r   r   )	r   lookupqsr   r   allow_emptypaginate_byr   is_emptys	            r   get_dated_queryset#BaseDateListView.get_dated_querysetH  s    
  ''1&1((*
,,.**,**2.$($<$<(,,..BRC;i*4c:;B "-!42vbiik/H<=-rxx~~/Q/Q  	r   c                     U R                   $ )zN
Get the aggregation period for the list of dates: 'year', 'month', or
'day'.
)date_list_periodr   s    r   get_date_list_period%BaseDateListView.get_date_list_periode      
 $$$r   Nc                 h   U R                  5       nU R                  5       nUc  U R                  5       nU R                  (       a  UR	                  XBU5      nOUR                  XBU5      nUbE  U(       d>  U(       d7  [        [        S5      SUR                  R                  R                  0-  5      eU$ )zv
Get a date list by calling `queryset.dates/datetimes()`, checking
along the way for empty lists that aren't allowed.
r   r   )r   r   r   r   	datetimesdatesr   r!   r   r   r   )r   queryset	date_typer   r   r   r   s          r   get_date_listBaseDateListView.get_date_listl  s    
 ((*
**,113I## **:(KI zhGI ;89)8>>+?+?+S+S  r   )r   r   )NASC)rG   rH   rI   rJ   rK   r   r   r   r   r   r   r   r   rL   rF   r   r   r   r   .  s/    PK0
Y:%r   r   c                   "    \ rS rSrSrSrS rSrg)BaseArchiveIndexViewi  zI
Base class for archives of date-based items. Requires a response mixin.
latestc                 x    U R                  5       nU R                  USS9nU(       d  UR                  5       nX!0 4$ ):Return (date_list, items, extra_context) for this request.DESC)r   )r   r   none)r   r   r   s      r   r   $BaseArchiveIndexView.get_dated_items  s>    $$&&&rF&;	Br""r   rF   N)rG   rH   rI   rJ   rK   context_object_namer   rL   rF   r   r   r   r     s     ##r   r   c                       \ rS rSrSrSrSrg)ArchiveIndexViewi  z&Top-level archive of date-based items._archiverF   NrG   rH   rI   rJ   rK   template_name_suffixrL   rF   r   r   r  r    s    0%r   r  c                   ,    \ rS rSrSrSrSrS rS rSr	g)	BaseYearArchiveViewi  *List of objects published in a given year.r9   Fc                    U R                  5       nU R                  5       n[        XR                  5       5      nU R	                  U5      nU R	                  U R                  U5      5      nSU-  USU-  U0nU R                  " S0 UD6nU R                  U5      nU R                  5       (       d  UR                  5       nUUUU R                  U5      U R                  U5      S.4$ )r   r   r   )r   	next_yearprevious_yearrF   )r"   r   _date_from_stringr   r   r>   r   r   get_make_object_listr   r.   r2   )	r   r   r   r-   r   r   lookup_kwargsr   r   s	            r   r   #BaseYearArchiveView.get_dated_items  s    }}((*
 ';';'=>**40**4+>+>t+DE
"Ez!5

 $$5}5&&r*	((** B !//5!%!7!7!=
 	
r   c                     U R                   $ )zW
Return `True` if this view should contain the full list of objects in
the given year.
)make_object_listr   s    r   r  (BaseYearArchiveView.get_make_object_list  r   r   rF   N)
rG   rH   rI   rJ   rK   r   r  r   r  rL   rF   r   r   r  r    s    4
@%r   r  c                       \ rS rSrSrSrSrg)YearArchiveViewi  r	  _archive_yearrF   Nr  rF   r   r   r  r        4*r   r  c                   "    \ rS rSrSrSrS rSrg)BaseMonthArchiveViewi  +List of objects published in a given month.r:   c                    U R                  5       nU R                  5       nU R                  5       n[        XR	                  5       X R                  5       5      nU R                  U5      nU R                  U R                  U5      5      nSU-  USU-  U0nU R                  " S0 UD6nU R                  U5      n	U	UUU R                  U5      U R                  U5      S.4$ )r   r   r   )r9   
next_monthprevious_monthrF   )r"   rV   r   r  r   rR   r   r`   r   r   rY   r\   )
r   r   r9   r   r-   r   r   r  r   r   s
             r   r   $BaseMonthArchiveView.get_dated_items  s    }} ((*
 &&(%1F1F1H
 **40**4+?+?+EF
"Ez!5

 $$5}5&&r*	 "11$7"&"9"9$"?
 	
r   rF   N)rG   rH   rI   rJ   rK   r   r   rL   rF   r   r   r  r    s    5
r   r  c                       \ rS rSrSrSrSrg)MonthArchiveViewi  r  _archive_monthrF   Nr  rF   r   r   r   r     s    5+r   r   c                       \ rS rSrSrS rSrg)BaseWeekArchiveViewi  *List of objects published in a given week.c                 r   U R                  5       nU R                  5       nU R                  5       nU R                  5       nSSSS.n XT   nU R                  5       nUS:X  a  US:w  a  [        S	U< S
U< S35      e[        XUSX$5      nU R                  U5      n	U R                  U R                  U5      5      n
SU-  U	SU-  U
0nU R                  " S0 UD6nSUUU R                  U5      U R                  U5      S.4$ ! [         a,    [        SU< SSR                  [        U5      5      < 35      ef = f)r   10)r   r   r   zUnknown week format z. Choices are: z, r   z%GzISO week directive 'z+' is incompatible with the year directive 'z!'. Use the ISO year '%G' instead.z%wr   r   N)r   	next_weekprevious_weekrF   )r"   r   r   r   r   r=   joinsortedr   r  r   r   r   r   r   )r   r   r   r   r   week_choices
week_startr   r-   r   r   r  r   s                r   r   #BaseWeekArchiveView.get_dated_items  sb   }}}}((*
**,!C8		%2J **,$;$#6  	  !JdX**40**4+>+>t+DE
"Ez!5

 $$5}5 !//5!%!7!7!=
 	
9  	  IIf\23 	s   D   6D6rF   NrG   rH   rI   rJ   rK   r   rL   rF   r   r   r#  r#    s
    4.
r   r#  c                       \ rS rSrSrSrSrg)WeekArchiveViewi/  r$  _archive_weekrF   Nr  rF   r   r   r1  r1  /  r  r   r1  c                   $    \ rS rSrSrS rS rSrg)BaseDayArchiveViewi5  )List of objects published on a given day.c           	          U R                  5       nU R                  5       nU R                  5       n[        UU R	                  5       UU R                  5       UU R                  5       5      nU R                  U5      $ r   )r"   rV   rm   r  r   rR   rj   _get_dated_items)r   r   r9   r:   r-   s        r   r   "BaseDayArchiveView.get_dated_items8  sn    }} lln   "!!#!
 $$T**r   c           	          U R                  U5      nU R                  " S0 UD6nSUUU R                  U5      U R                  U5      U R	                  U5      U R                  U5      S.4$ )z}
Do the actual heavy lifting of getting the dated items; this accepts a
date object so that TodayArchiveView can be trivial.
N)r:   previous_daynext_dayr  r  rF   )r   r   rs   rp   r\   rY   )r   r-   r  r   s       r   r8  #BaseDayArchiveView._get_dated_itemsI  sy    
 55d;$$5}5  $ 5 5d ; --d3"&"9"9$"?"11$7

 
	
r   rF   N)rG   rH   rI   rJ   rK   r   r8  rL   rF   r   r   r4  r4  5  s    3+"
r   r4  c                       \ rS rSrSrSrSrg)DayArchiveViewi^  r5  _archive_dayrF   Nr  rF   r   r   r?  r?  ^  s    3)r   r?  c                       \ rS rSrSrS rSrg)BaseTodayArchiveViewid   List of objects published today.c                 \    U R                  [        R                  R                  5       5      $ r7  )r8  rx   r-   todayr   s    r   r   $BaseTodayArchiveView.get_dated_itemsg  s     $$X]]%8%8%:;;r   rF   Nr/  rF   r   r   rB  rB  d  s
    *<r   rB  c                       \ rS rSrSrSrSrg)TodayArchiveViewil  rC  r@  rF   Nr  rF   r   r   rH  rH  l  s    *)r   rH  c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )BaseDateDetailViewir  
Detail view of a single object on a single date; this differs from the
standard DetailView by accepting a year/month/day in the URL.
c           	      h  > U R                  5       nU R                  5       nU R                  5       n[        UU R	                  5       UU R                  5       UU R                  5       5      nUc  U R                  5       OUnU R                  5       (       dn  U[        R                  R                  5       :  aL  [        [        S5      UR                  R                  R                   U R"                  R$                  S.-  5      eU R'                  U5      nUR(                  " S0 UD6n[*        TU ]Y  US9$ )z%Get the object this request displays.zZFuture %(verbose_name_plural)s not available because %(class_name)s.allow_future is False.)r   
class_name)r   rF   )r"   rV   rm   r  r   rR   rj   r   r   rx   r-   rE  r   r!   r   r   r   r   rG   r   r   super
get_object)	r   r   r   r9   r:   r-   r   r  r   s	           r   rO  BaseDateDetailView.get_objectx  s   }} lln   "!!#!
 %-$4T ($$&&4(--2E2E2G+G<
 ,.88>>+M+M"&.."9"9		 	 55d;YY''w!2!..r   rF   )N)rG   rH   rI   rJ   rK   rO  rL   __classcell__)r   s   @r   rJ  rJ  r  s    
#/ #/r   rJ  c                       \ rS rSrSrSrSrg)DateDetailViewi  rK  _detailrF   Nr  rF   r   r   rS  rS    s    
 %r   rS  c                    X-   U-   U-   U-   n[        U 5      U-   [        U5      -   U-   [        U5      -   n [        R                  R                  X5      R                  5       $ ! [         a    [        [        S5      UUS.-  5      ef = f)z
Get a datetime.date object given a format string and a year, month, and day
(only year is mandatory). Raise a 404 for an invalid date.
uC   Invalid date string “%(datestr)s” given format “%(format)s”)datestrformat)strrx   strptimer-   r=   r   r!   )	r   r   r9   rQ   r:   ri   delimrW  rV  s	            r   r  r    s      </%7*DF$i%#e*,u4s3x?G	
  ))':??AA 
ST" 
 	

s   ,A% %%B
c                    U R                  5       nU R                  5       nU R                  5       n[        U SU-  5      n[        U SU-  5      nU" U5      U" U5      pU(       a?  U(       a  U" U	[        R
                  " SS9-
  5      nOU
nU(       d  U[        5       ::  a  U$ gU(       a  SU-  U R                  U	5      0nSU-  nOSU-  U R                  U
5      0nUnU(       d8  U R                  (       a  [        R                  " 5       nO
[        5       nXS	U-  '   U R                  5       R                  " S0 UD6R                  U5      n [        US
   U5      nU R                  (       a;  [        R                   (       a  [        R"                  " U5      nUR%                  5       nU" U5      $ ! [         a     gf = f)a  
Get the next or the previous valid date. The idea is to allow links on
month/day views to never be 404s by never providing a date that'll be
invalid for the given view.

This is a bit complicated since it handles different intervals of time,
hence the coupling to generic_view.

However in essence the logic comes down to:

    * If allow_empty and allow_future are both true, this is easy: just
      return the naive result (just the next/previous day/week/month,
      regardless of object existence.)

    * If allow_empty is true, allow_future is false, and the naive result
      isn't in the future, then return it; otherwise return None.

    * If allow_empty is false and allow_future is true, return the next
      date *that contains a valid object*, even if it's in the future. If
      there are no next objects, return None.

    * If allow_empty is false and allow_future is false, return the next
      date that contains a valid object. If that date is in the future, or
      if there are no next objects, return None.
z_get_current_%sz_get_next_%sr7   rv   Nr   r   r   r   r   rF   )r   r   r   getattrrx   ry   r   r   r   r   r   r   r   order_by
IndexErrorr   r   	localtimer-   )generic_viewr-   r(   r)   r   r   r   get_currentget_nextstartendresultr   r   r   r   s                   r   r+   r+     s   4 ,,.J..0K002L,(9F(BCK|^f%<=H T"HTN3  ););)C!CDFF6^%55M +\-O-OPU-VWFz)H*,l.P.PQT.UVF!H  //lln$&-09z)*&&(//9&9BB8L	RUJ/F
 ++!++F3[[]F 6""  		s   F1 1
F>=F>c                      [         R                  (       a  [        R                  " 5       $ [        R
                  R                  5       $ )z1Return the current date in the current time zone.)r   r   r   	localdaterx   r-   rE  rF   r   r   r   r     s+    !!##}}""$$r   ) rh  rh  rh  __)/rx   django.confr   django.core.exceptionsr   	django.dbr   django.httpr   django.utilsr   django.utils.functionalr   django.utils.translationr	   r!   django.views.generic.baser
   django.views.generic.detailr   r   django.views.generic.listr   r   r   rN   rf   r   r   r   r   r  r  r  r  r   r#  r1  r4  r?  rB  rH  rJ  rS  r  r+   r   rF   r   r   <module>rt     sx      7   ! 3 1 */, /,d2# 2#j, ,^=F =F@@& @&FT*It Tn#+ #$&:<P &+%)%5 +%\+9;N +!
9j2B !
H,:<P ,1
)Y0@ 1
h+9;N +&
J:J &
R*8:L *<- <*:<P *)/J)^ )/X%68J % PT
*W#t%r   