§
   Â¡9£Ûkã            	       óx  — d Z ddlZddlZddlmZ ddlmZmZ dZdZ	dZ
d\  ZZZZZej                             ej                             ej                             e¦  «        ¦  «        d	d	d	d
dd¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ Z ed¬¦  «        d„ ¦   «         Zd„ Zd„ ZdS )a  The demo titles: loading and validation of resources/demo/millionaire/titles/*.json.

A file holds one film or series with its nine questions (3 easy, 3 medium, 3 hard). Pure Python, no Kodi imports, so
the data can be checked offline (tests/test_millionaire_demo.py).
é    N)Ú	lru_cache)Ú
NamedTupleÚTupleé	   é   )ÚmovieÚseries)éŒ   é   é  r   éZ   z..Ú	resourcesÚdemoÚmillionairec                   óR   — e Zd ZU eed<   eedf         ed<   eed<   eed<   eed<   dS )ÚQuestionÚtext.ÚoptionsÚcorrectÚexplanationÚtipN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úint© ó    úd/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/demo/catalog.pyr   r      sK   € € € € € € Ø
€I€I�IØ�3˜�8Œ_ÐÐÑØ€L€L�LØÐÐÑØ	€H€H�H€H€Hr   r   c                   ó˜   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eedf         ed<   dS )Ú	DemoTitleÚidÚmediaÚtitleÚyearÚtmdb_idÚgenreÚplotÚtaglineÚwin_lineÚposterÚfanart.Ú	questionsN)r   r   r   r   r   r   r   r   r   r   r    r"   r"      sŠ   € € € € € € Ø€G€G�GØ€J€J�JØ€J€J�JØ
€I€I�IØ€L€L�LØ€J€J�JØ
€I€I�IØ€L€L�LØ€M€M�MØ€K€K�KØ€K€K�KØ�X˜s�]Ô#Ð#Ð#Ñ#Ð#Ð#r   r"   c                 óô   — t          |t          ¦  «        r|                     ¦   «         sd                     | ¦  «        gS t	          |¦  «        |k    r%d                     | t	          |¦  «        |¦  «        gng S )Nz{}: missing textz{}: {} chars (max {}))Ú
isinstancer   ÚstripÚformatÚlen)ÚlabelÚvalueÚlimits      r    Ú_text_problemsr7   +   ss   € Ý�e�SÑ!Ô!ð 2¨¯ª©¬ð 2Ø"×)Ò)¨%Ñ0Ô0Ð1Ð1ÝILÈUÉÌÐV[ÒI[ÐI[Ð#×*Ò*¨5µ#°e±*´*¸eÑDÔDÐEÐEÐacÐcr   c           	      ó,  — g }dD ])}|t          ||                      |¦  «        d¦  «        z  }Œ*dD ].}|t          ||                      |¦  «        t          ¦  «        z  }Œ/|                      d¦  «        t          vr;|                     d                     |                      d¦  «        ¦  «        ¦  «         dD ]R}t          |                      |¦  «        t          ¦  «        s(|                     d                     |¦  «        ¦  «         ŒS|                      d¦  «        }t          |t          ¦  «        rt          |¦  «        t          k    r|d	                     t          ¦  «        gz   S t          ¦   «         }t          |d
¦  «        D �]V\  }}d                     |¦  «        }|t          |dz   |                     d¦  «        t          ¦  «        z  }|t          |dz   |                     d¦  «        t          ¦  «        z  }|t          |dz   |                     d¦  «        t          ¦  «        z  }|                     d¦  «        }t          |t          ¦  «        rt          |¦  «        t           k    r1|                     |d                     t           ¦  «        z   ¦  «         n}t#          d|¦  «        D ]2\  }	}
|t          d                     ||	¦  «        |
t$          ¦  «        z  }Œ3t          d„ |D ¦   «         ¦  «        t           k    r|                     |dz   ¦  «         |                     d¦  «        t'          t           ¦  «        vr>|                     |d                     |                     d¦  «        ¦  «        z   ¦  «         |                     d¦  «        |v r|                     |dz   ¦  «         |                     |                     d¦  «        ¦  «         �ŒXt          d„ |D ¦   «         ¦  «        dk     r|                     d¦  «         |S )z@Everything wrong with one parsed title file (empty list: valid).)r#   r%   r(   r)   r,   r-   i�  )r*   r+   r$   zmedia: {!r})r&   r'   Úorderz{}: not a numberr.   zquestions: need exactly {}é   zq{}z	.questionÚquestionz.explanationr   z.tipr   r   z.options: need exactly {}ÚABCDz{}.{}c                 ót   — h | ]5}t          |¦  «                             ¦   «                              ¦   «         ’Œ6S r   )r   r1   Úlower)Ú.0Úos     r    ú	<setcomp>zproblems.<locals>.<setcomp>L   s2   € Ð<Ð<Ð<¨q•C˜‘F”F—L’L‘N”N×(Ò(Ñ*Ô*Ð<Ð<Ð<r   z.options: duplicatesr   z.correct: {!r}z: repeated questionc                 ó8   — h | ]}|                      d ¦  «        ’ŒS )r   )Úget)r?   Úitems     r    rA   zproblems.<locals>.<setcomp>S   s$   € Ð6Ð6Ð6 DˆD�HŠH�YÑÔÐ6Ð6Ð6r   é   z@correct: the right answer sits on fewer than 3 different letters)r7   rC   ÚMAX_LINEÚMEDIAÚappendr2   r0   r   Úlistr3   ÚROUNDSÚsetÚ	enumerateÚMAX_QUESTIONÚMAX_EXPLANATIONÚMAX_TIPÚOPTIONSÚzipÚ
MAX_OPTIONÚrangeÚadd)ÚrawÚfoundÚkeyr.   ÚseenÚnumberrD   r4   r   ÚletterÚoptions              r    Úproblemsr\   1   s¨  € à€EØCð 8ð 8ˆØ•  S§W¢W¨S¡\¤\°3Ñ7Ô7Ñ7ˆˆØ&ð =ð =ˆØ•  S§W¢W¨S¡\¤\µ8Ñ<Ô<Ñ<ˆˆØ
‡w‚wˆwÑÔ�uÐ$Ð$Ø�Š�]×)Ò)¨#¯'ª'°'Ñ*:Ô*:Ñ;Ô;Ñ<Ô<Ð<Ø+ð 9ð 9ˆÝ˜#Ÿ'š' #™,œ,­Ñ,Ô,ð 	9Ø�LŠLÐ+×2Ò2°3Ñ7Ô7Ñ8Ô8Ð8øØ—’˜Ñ$Ô$€IÝ�i¥Ñ&Ô&ð E­#¨i©.¬.½FÒ*BÐ*BØÐ4×;Ò;½FÑCÔCÐDÑDÐDÝ‰5Œ5€DÝ! )¨QÑ/Ô/ð 'ñ '‰ˆ�Ø—’˜VÑ$Ô$ˆØ• ¨Ñ 3°T·X²X¸jÑ5IÔ5IÍ<ÑXÔXÑXˆØ• ¨Ñ 6¸¿ºÀÑ8OÔ8OÕQ`ÑaÔaÑaˆØ• ¨¡°·²¸±´ÅÑIÔIÑIˆØ—(’(˜9Ñ%Ô%ˆÝ˜'¥4Ñ(Ô(ð 	=­C°©L¬L½GÒ,CÐ,CØ�LŠL˜Ð!<×!CÒ!CÅGÑ!LÔ!LÑLÑMÔMÐMÐMå"% f¨gÑ"6Ô"6ð [ð [‘�˜Ø�¨¯ª°u¸fÑ(EÔ(EÀvÍzÑZÔZÑZ��ÝÐ<Ð<°GÐ<Ñ<Ô<Ñ=Ô=ÅÒHÐHØ—’˜UÐ%;Ñ;Ñ<Ô<Ð<Ø�8Š8�IÑÔ¥e­G¡n¤nÐ4Ð4Ø�LŠL˜Ð!1×!8Ò!8¸¿ºÀ)Ñ9LÔ9LÑ!MÔ!MÑMÑNÔNÐNØ�8Š8�JÑÔ 4Ð'Ð'Ø�LŠL˜Ð!6Ñ6Ñ7Ô7Ð7Ø�Š�—’˜*Ñ%Ô%Ñ&Ô&Ð&Ñ&Ý
Ð6Ð6¨IÐ6Ñ6Ô6Ñ7Ô7¸!Ò;Ð;Ø�ŠÐWÑXÔXÐXØ€Lr   c                 ó®  — t          | ¦  «        }|rJt          d                     |                      dd¦  «        d                     |¦  «        ¦  «        ¦  «        ‚t          d„ | d         D ¦   «         ¦  «        }t          | d         | d         | d         | d	         | d
         | d         | d         | d         | d         | d         | d         |¦  «        S )zEDemoTitle of a valid file; ValueError listing the problems otherwise.z{}: {}r#   ú?z; c           	   3   ó’   K  — | ]B}t          |d          t          |d         ¦  «        |d         |d         |d         ¦  «        V — ŒCdS )r;   r   r   r   r   N)r   Útuple)r?   Úqs     r    ú	<genexpr>zparse.<locals>.<genexpr>]   sh   è è € ð 1ð 1Øõ ˜q œ}­e°A°i´LÑ.AÔ.AÀ1ÀYÄ<ÐQRÐS`ÔQaÐcdÐejÔckÑlÔlð 1ð 1ð 1ð 1ð 1ð 1r   r.   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   )r\   Ú
ValueErrorr2   rC   Újoinr`   r"   )rU   Úissuesr.   s      r    Úparserf   X   sÝ   € å�c‰]Œ]€FØð QÝ˜Ÿš¨¯ª°°sÑ);Ô);¸T¿YºYÀvÑ=NÔ=NÑOÔOÑPÔPÐPÝð 1ð 1Ø" ;Ô/ð1ñ 1ô 1ñ 1ô 1€Iå�S˜”Y  G¤¨c°'¬l¸CÀ¼KÈÈYÌÐY\Ð]dÔYeÐgjÐkqÔgrØ˜”^ S¨¤_°c¸(´mÀSÈÄ]ÐT]ñ_ô _ð _r   c                  ó´   — t          t          j        j        t          g| ¢R Ž d¬¦  «        5 }t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nzutf-8)Úencoding)ÚopenÚosÚpathrd   ÚPACK_DIRÚjsonÚload)ÚpartsÚhandles     r    Ú	read_jsonrq   c   s—   € Ý	�bŒgŒl�8Ð, eÐ,Ð,Ð,°wÐ	?Ñ	?Ô	?ð !À6ÝŒy˜Ñ Ô ð!ð !ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð !ð !s   ¬AÁAÁAr:   )Úmaxsizec                  ó  — t           j                             t          d¦  «        } g }t           j                             | ¦  «        r!t          t          j        | ¦  «        ¦  «        ndD ]÷}|                     d¦  «        sŒ	 t          d|¦  «        }| 	                    | 
                    d¦  «        t          v r t                               |d         ¦  «        nt          t          ¦  «        | 
                    dd¦  «        t          |¦  «        f¦  «         Œ±# t          t           t"          f$ r-}t%          d                     ||¦  «        ¦  «         Y d}~Œðd}~ww xY wt)          d	„ t          |d
„ ¬¦  «        D ¦   «         ¦  «        S )zfAll valid demo titles, movies first, each group in its `order`. A broken file is skipped, never fatal.Útitlesr   z.jsonr$   r9   r   u    [MilionÃ¡Å™ Demo] {} skipped: {}Nc              3   ó"   K  — | ]
\  }}}|V — Œd S ©Nr   )r?   Ú_mediaÚ_orderr%   s       r    rb   ztitles.<locals>.<genexpr>v   s)   è è € Ð`Ð`Ñ0˜6 6¨5�Ð`Ð`Ð`Ð`Ð`Ð`r   c                 ó   — | d d…         S )Né   r   )Úentrys    r    ú<lambda>ztitles.<locals>.<lambda>v   s   € ÐUZÐ[]Ð\]Ð[]ÔU^€ r   )rW   )rj   rk   rd   rl   ÚisdirÚsortedÚlistdirÚendswithrq   rH   rC   rG   Úindexr3   rf   ÚOSErrorrc   ÚKeyErrorÚprintr2   r`   )ÚfolderÚloadedÚnamerU   Úerrors        r    rt   rt   h   s{  € õ ŒW�\Š\�( HÑ-Ô-€FØ€FÝ.0¬g¯mªm¸FÑ.CÔ.CÐK••r”z &Ñ)Ô)Ñ*Ô*Ð*Èð Jð JˆØ�}Š}˜WÑ%Ô%ð 	Øð	JÝ˜H dÑ+Ô+ˆCØ�MŠM¸¿ºÀÑ8HÔ8HÍEÐ8QÐ8Q�5Ÿ;š; s¨7¤|Ñ4Ô4Ð4ÕWZÕ[`ÑWaÔWaØŸ7š7 7¨AÑ.Ô.µ°c±
´
ð<ñ =ô =ð =ð =øå�¥XÐ.ð 	Jð 	Jð 	JÝÐ4×;Ò;¸DÀ%ÑHÔHÑIÔIÐIÐIÐIÐIÐIÐIøøøøð	JøøøåÐ`Ð`µF¸6ÐG^ÐG^Ð4_Ñ4_Ô4_Ð`Ñ`Ô`Ñ`Ô`Ð`s   ÂBDÄEÄ2#EÅEc                 ó8   ‡ — ˆ fd„t          ¦   «         D ¦   «         S )Nc                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r   ©r$   )r?   r%   r$   s     €r    ú
<listcomp>zby_media.<locals>.<listcomp>z   s%   ø€ Ð@Ð@Ð@�e¨5¬;¸%Ò+?Ð+?ˆEÐ+?Ð+?Ð+?r   )rt   r‹   s   `r    Úby_mediar�   y   s!   ø€ Ø@Ð@Ð@Ð@�v™xœxÐ@Ñ@Ô@Ð@r   c                 óT   ‡ — t          ˆ fd„t          ¦   «         D ¦   «         d¦  «        S )z%The demo title with this id, or None.c              3   ó2   •K  — | ]}|j         ‰k    ¯|V — Œd S rv   )r#   )r?   r%   Útitle_ids     €r    rb   zget.<locals>.<genexpr>   s/   øè è € ÐEÐE˜5°´¸HÒ0DÐ0D�Ð0DÐ0DÐ0DÐ0DÐEÐEr   N)Únextrt   )r�   s   `r    rC   rC   }   s,   ø€ åÐEÐEÐEÐE¥F¡H¤HÐEÑEÔEÀtÑLÔLÐLr   )Ú__doc__rm   rj   Ú	functoolsr   Útypingr   r   rJ   rP   rG   rM   rR   rN   rO   rF   rk   rd   ÚdirnameÚabspathÚ__file__rl   r   r"   r7   r\   rf   rq   rt   r�   rC   r   r   r    ú<module>r˜      sž  ððð ð
 €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à	
€Ø
€Ø€Ø?TÑ <€ˆj˜/¨7°HàŒ7�<Š<˜œŸš¨¬¯ª¸Ñ(AÔ(AÑBÔBÀDÈ$ÐPTÐVaÐciÐkxÑyÔy€ðð ð ð ð ˆzñ ô ð ð$ð $ð $ð $ð $�
ñ $ô $ð $ðdð dð dð$ð $ð $ðN_ð _ð _ð!ð !ð !ð
 €�1ÐÑÔðað añ Ôðað Að Að AðMð Mð Mð Mð Mr   