
    ug-                        d dl mZ d dlZd dlZd dlZedk(  r}d dlZd dlZd dlZd dl mZ  ee	      j                  j                  Zej                  j                  d  ee             ej                  j!                  dd        ej"                          d dlmZmZmZmZ d dlmZ ded	efd
Z G d d      Zedk(  r'	  ed      Z e e!ed      jE                               Z#yy)    )PathN__main__DJANGO_SETTINGS_MODULEzdjphys.settings)MeetingURLconvert_longurlsconvert_shorturls)CourseRecordtxtreturnc                    t         j                  t         j                  z  }d}t               }d}t        j                  || |      D ]Z  }|d   }|d   j                  d      }| dj                  |dd        }||vs9d|d   j                  d	      d   z  ||<   |dz  }\ |j                         D ]  \  }	}
| j                  |	|
      }  	 | S )
z
    Scan txt for urls of the form https://saeta.physics.hmc.edu/order_field/XX-xxxx.html
    Replace with a reference of the form {xx-xxxx}.
    See course.models.convert_shorturls() for the reverse operation.

    z1(https?://saeta.physics.hmc.edu/)([^ #"]*?\.html)r   flags   /Nz{%s}.)
re	MULTILINEDOTALLdictfindallsplitjoinitemsreplaceindex)r   r   regexurlsctubasefieldsurlkvustartnmmappings                  !/var/www/djphys/courses/script.py	scan_urlsr,      s     LL299$E@E6D	
BZZs%0 t1Csxxs,-.d?&*"2"23"7":;DI!GB 

  1kk!Q   J    c                       e Zd Zej                  ej
                  z  Zed        ZddZ	e
d        Ze
d        Ze
d        ZdefdZd Zd	 Zd
 ZdedefdZe
d        Zd ZdefdZdefdZy)Scripterc                 ,   d }t        | t              rt        |       }nt        | t              r| }|r9t        |dd      j	                         D cg c]  }|j                  d       }}n7| j	                         D cg c]  }t        |d      j                  d        }}t        |      }t        |      dk7  rt        d|  d      t               }	 	 t        |      j                  d      \  }}|||<   $c c}w c c}w #  Y nxY wt        |j                  d	d
            }|j                  dd      }	t        |j                  dd
            }
|j                  d      }d }	 t        j                  j                  |	|
|      }nI#  t        j                  j                  |	      }t        j                  j!                  ||
|      }Y nxY wt#        |      }||_        t               |_        |j)                          |j+                          |S )Nrutf8)encoding
# CourseDumpzFile z# is not a CourseDump formatted file = course_recordr   course yearsemester)course__order_fieldr:   r;   order_field)r8   r:   r;   )
isinstancestrr   open	readlinesrstripiternext	Exceptionr   r   intgetr
   objectsCoursecreater/   linesr   	load_urlsload_meetings)filepathx	all_linesrL   infor%   r&   cridr8   r:   r;   crcrsscs                  r+   loadzScripter.load=   s   dC :Dd#D15cF2,,5IK9A$ 9I 9 #'.."24 Q077= 4I 4Y;.(v@AC CvE{((/1Q 94488OQ/0(B'488FA&'88J'	:%%))$* * JB	:..$$$8C%%,, - :B b\&

	s%   C:>#C?"D D'"F
 
AGc                 2   || _         |rd }t        |t        t        f      r.t        |      | _        t        | j                  d      | _        d}n#t        |t        j                        r	d}|| _        | j                          | j                          |dk(  ro| j                  j                          t        | j                  d      j                         }t        |      }t        | j                  d      j                  |       y | j                  j                          | j                  j!                         }t        |      }| j                  j#                  d       | j                  j                  |       | j                  j                          y y )Nwdiskramr1   r   )r7   r?   r@   r   rP   rA   rO   ioIOBaseheadermeetingsclosereadr   writeflushgetvalueseek)selfr7   filenameftyper   	urlsubbeds         r+   __init__zScripter.__init__l   s   *E(S$K0 N	 C0	Hbii0$	KKMMMO		!499c*//1,S1	TYY$**95		!ii((*,S1			q!			*		!- r-   c                 .    | j                   j                  S N)r7   r8   rg   s    r+   r8   zScripter.course   s    !!(((r-   c                 .    | j                   j                  S rm   )r8   r>   rn   s    r+   r>   zScripter.order_field   s    {{&&&r-   c                 "    d| j                    dS )Nz/c/r   r=   rn   s    r+   r$   zScripter.url   s    T%%&a((r-   sc                 R    t        |j                  dd      | j                         y )Nr9   )rO   )printr   rO   )rg   rq   s     r+   rc   zScripter.write   s    aiib!		2r-   c                 &   | j                  d       | j                  d| j                  j                          | j                  d| j                          | j                  d| j                  j                          | j                  d| j                  j
                          | j                  d       t        | d      rM| j                  d       | j                  D ]  \  }}| j                  | d	|         | j                  d       y y )
Nr5   zcourse_record = z	course = zyear = zsemester = r9   r   # URLsr6   )rc   r7   idr>   r:   r;   hasattrr   )rg   r%   r&   s      r+   r_   zScripter.header   s    

>"

%d&8&8&;&;%<=>

Yt//012

WT//44567

[!3!3!<!< =>?

24 JJx 		 )1

aSA3<()JJrN	 !r-   c                    | j                  d       t        j                  j                  | j                        j                  d      D ]  }| j                  d|j                          | j                  d|j                          | j                  d|j                          dD ])  }t        ||d      }|d}| j                  | d	|        + |j                  j                         d
kD  r=|j                  j                         D ]   }| j                  d|j                          " |j                  s	 | j                  d       |j                  r*| j                  | j                  |j                               | j                  d       | j                  dt!        |j"                                | j                  d        y )Nz
# Meetings)r7   datezid = zdate = ztype = )topichomeworkreadingexamr9   r6   r   zurl = znotes = ''''''zhide = )rc   r   rI   filterr7   order_byrw   isosession_typegetattrr   countallscriptnotessub_dollarsr@   hide)rg   r)   fldvalr!   s        r+   r`   zScripter.meetings   sq   

< ''d6H6H'IRRSYZ 	AJJqttf~&JJ()JJ 012? -ab);C

cU#cU+,	-
 vv||~! 4AJJz234ww$

=)77JJt//89

5!JJQVV./JJrN%	r-   c                     d}	 t        | j                        }|j                  d      r|j                  d      rd};y	 |j                         j	                  d      \  }}|| j
                  |<   n#  Y xY w)z
        Any urls in the file should be in a section headed by
        # URLs
        We will look for lines that start with #
        When we see # Meetings, we know we're done with URLs
        FTz# rv   r6   N)rE   rL   
startswithstripr   r   )rg   seenhashlr%   r&   s        r+   rM   zScripter.load_urls   sv     TZZ A||D!<<)#Hwwyu-1 		! s    1A2 2A6meetingurl_strc                    	 t        || j                        }t        j                  d|      }|j	                  d      }|j	                  d      }t
        j                  j                  |      }|j                         dk(  r"t
        j                  j                  ||      }n|d   }|j                  j                  |       y# t        $ r
}Y d}~yd}~ww xY w)z
        The url should points to a page link to this meeting. Identify it in
        URL.objects, adding as necessary, and make sure that the urls field
        of the meeting reflects reality.
        z<a href="(.*?)">(.*?)</a>r      )r$   r   )r$   descriptionN)r	   r>   r   matchgroupr   rI   r   r   rK   r   addrF   )	rg   r   r   tr)   r$   r   r!   eepss	            r+   add_urlzScripter.add_url   s    	!'4+;+;<A5q9A''!*C''!*K""s"+AwwyA~KK&&3K&HaDLLQ 		s   CC 	CCc                     t        | j                        }t        j                  d|      }|r0|j	                  d      }|j                  || j                  |         }|S )Nz
(URL[a-z])r   )rE   rL   r   searchr   r   r   )rg   r   urlhackr!   s       r+   	next_linezScripter.next_line   sN    ))M1-a A		!TYYq\*Ar-   c                 L   	 d }	 | j                   }|dk(  r|d }d|v r|j                  d      }nt        d|        d|v r%t        j                  j                  |d         |d<   t        j                  j                  | j                  |d         j                  d      }|j                         dkD  r |d   }|dd  D ]  }|j                           n|j                         dk(  r|d   }d|v r|j                  d      }nd }|s.| j                  |d	<   t        j                  j                  di |}|j                  j                         D ]  }|j                  j!                  |        |r|D ]  }	| j#                  ||	        |j%                         D ]  \  }
}t'        ||
|        |j)                          t        d
|j*                   d|        d\  }}nd|v r	 |j-                  d      \  }
}
j1                         j1                         }}
|
dk(  rt3        t5        |            }n|
dk(  r||d<   n|
dk(  r	|dk(  |d<   nv|
dk(  rd|vrg |d<   |d   j7                  |       nS|
dv rJg }	 | j                   }|dk(  r$| j9                  dj;                  |            |d<   n|j7                  |       G|||
<   # t.        $ r}t        d| d|        Y d }~d }~ww xY w# t.        $ r*}t=        |t>              st        |       Y d }~y Y d }~y d }~ww xY w)Nr9   rw   zThere is a problem in rz   )r7   rz   r   r   r   r7   zSaved [z] )NN=zI ran into error z analyzing line )rw   typer   r   Truer$   )r   mdr   r4   r    ) r   poprt   datetimerz   fromisoformatr   rI   r   r7   r   r   deleterK   r   r   remover   r   setattrsaverw   r   rF   r   r   rG   appendmake_markdownr   r?   StopIteration)rg   r)   r   r   pk
candidatescr   r!   r$   r%   r&   oopsrL   r   s                  r+   rN   zScripter.load_meetings   s9   T	ANN7y "GqyUU4[ 6qc:;{$,MM$?$?&	$J&	!(!7!7&*&8&8vY "8 " htn  "'')A-",Q-!+AB 'AHHJ'#))+q0",Q-{ uuV}#"-1-?-?/*")//"8"8"=1"= %\\--/ /++A./ #' 7C LL#67 !"	 /1A./LLNGGJJ<r';<!+JAwAXM wws|1 779aggiqADy CFOf,-.)f$%K&	e!?(*AfI&	((+o- "" $A Ez-1-?-?$(IIe$4.6'
 % %Q #  !!] l % M 1$7GsKLLM4  	dM2d 3	sC   G&K0 )K	 =CK0 		K-K(#K0 (K--K0 0	L#9LL#c                 X    d|v r%t        j                  dd|| j                        }|S |S )zv
        Convert text into acceptable markdown. This means converting single
        dollar signs into \( \).
        $z	\$(.*?)\$z\\\( \1 \\\)r   )r   subr   rg   rq   r   s      r+   r   zScripter.make_markdownE  s-    
 !8|_atzzJAHr-   c                 l    t        j                  dd|| j                        }|j                  dd      S )Nz\\\\\( (.*?) \\\\\)z$\1$r   rs   r9   )r   r   r   r   r   s      r+   r   zScripter.sub_dollarsO  s,    FF)7ATZZHyyr""r-   N)r9   )__name__
__module____qualname__r   r   r   r   staticmethodrX   rk   propertyr8   r>   r$   r@   rc   r_   r`   rM   r   r   r   rN   r   r   r   r-   r+   r/   r/   :   s    LL299$E, ,\"4 ) ) ' ' ) )3s 3,,w  ,  Uns #S #r-   r/   z6/Users/saeta/Documents/Courses/p064/2023/p064-2023.txtr1   )$pathlibr   r   r   r]   r   djangosysos__file__parenthomerP   insertr@   environ
setdefaultsetupcourses.modelsr   r   r   r	   people.modelsr
   r,   r/   rI   rH   rU   rW   rt   absoluterA   rb   r   r   r-   r+   <module>r      s     	  	z>  ''DHHOOAs4y!JJ24EFFLLN L L &#3 #3 #LW# W#t z
 LMdC--/0 r-   