o
    AeJ                     @   sd   d dl Z d dlZd dlZd dlT d dlZd dlT d dlZd dlZd dlT d dlT dd Zdd ZdS )    N)*c                 C   s  d}i }|d d d }|d d d d }|d }d| d	 | }|d d
 }	t dt j}
d|d< ||d< ||d< | d d |d< |d d }t ddd ||d< |d d |d< ||d< ||d< d|d< d|d< d|d< d|d< d|d < |	d!ur/d"|d#< |	d$}|d d% }|d d  d&krd"|d < t|d'krd"|d< tt|}d(tt| d) tt| |d< t|t|krd*tt| d) tt| |d< g }t|d'kr|	d |D ]F}|d+}|d' }|

|rd"|d< |	|d,  nd-|d< |	|d.  d|d< |D ]}d"|d< t||kr'd/tt| |d< qq||d0< nd1|d#< d2g|d0< d|d< t| |S )3a  
    Parses a Planning Center arrangment, and check if it is configuree correct.
    Checks if lyrics is in place, if lyrics has the needed line shifts, if each verse element has a description
    that the sequence is configure. check number of unique verse elements towards unique sequence elements.
    Inserts/update arrangment in local database with the result from check

    :param song_data the json data object from a song request
    :param arr_data - the json data object from a arrangment request
    :param person_data - the json data object from a person request
    :return - a Json-file containing the results from the checks

    2   data
attributes	full_namerelationshipssongidz0https://services.planningcenteronline.com/songs/z/arrangements/lyricsz~^(verse?|v|chorus|c|refreng|bridge|bro|prechorus|instrumental|intro|outro|vamp|breakdown|ending|interlude|tag|misc)\s*(\d*):?$Trueall_ok
created_bysong_idtitle
song_titlenamez&[\x00-\x1f\x7f-\x9f\u2028\u2029\u0022]c                 S   s   d t| dS )Nz\u{:04x}r   )formatordgroup)x r   */var/www/bmteknikk.ddns.net/check_tools.py<lambda>4   s    zcheck_song.<locals>.<lambda>arrangement_name
created_atarrangement_idsong_url verse_startuniqe_verse_elementsline_lengthFalsesequence_oklyrics_enabledNOK
has_lyricsz

sequence_shorttruer   zOK. Antall sekvenslement: z Antall verselement: zAdvarsel. Sjekk av antall sekvenselementer(sequence) og antall sangelementer (vers, ref, intro osv) stemmer ikke. Sjekk sangoppsettet.<br>Antall unike sekvenselement: 
z-> OKerrorz-> errorz"Warning - Lines is to long. Is -> verse_resultzMissing lyricszerror with verse)recompile
IGNORECASEsubsplitlenlistsetstrappendsearch
insertData)	song_dataarr_dataperson_dataMAX_LINE_LENGTHsongcheck_resultr   r   r   r   r
   verse_marker_patternarrangment_name_to_checklyrics_elementssequenceuniq_sequenceverse_check_elementselementlines
first_lineliner   r   r   
check_song   st   

$$




rF   c                  C   s
  t t} d}d}| jdkr|r|  }|d }|D ]I}|d }tt|d |d  d |d	 d
   d|d  d }t |}| }|d D ]}	d|	d d d d  }
t |
 }t||	| qGqd|  d v rtt |d d } nd}| jdkr|sdS dS dS dS )z
    Function to be called by schedluer.
    Runs through all songs in Planning Center and runs a check_song on all songs with arrangment
    Tr      r      z - id: r	   z song title - r   r   z7https://api.planningcenteronline.com/services/v2/songs/z/arrangementsz8https://api.planningcenteronline.com/services/v2/people/r   r   nextlinksFN)request_endpointapi_endpoint_start_fromstatus_codejsonprintr3   rF   )responsemoreindexr   arrayr   arrengments_endpointrequestarrangments_dataarrperson_endpointr9   r   r   r   check_all_songs_in_PCx   s*   (rY   )	datetimerN   
song_toolssong_writersDBtoolsr+   callAPIrF   rY   r   r   r   r   <module>   s   f