
    i                         d dl m Z  d dlmZmZmZ d dlmZmZ ej                  j                  dd      Z
 G d d      Z G d d	      Z G d
 d      Z G d d      Z G d de      Z G d de      Z G d d      Zy)    )datetime)AnyListOptional)config_managertmdb_clientTMDBapi_keyc                       e Zd Z	 	 	 d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ee   dee   dee   fdZd Zy)EpisodeNidvideo_idnumbernamedurationurlmpd_idchannelcategorydescriptionimageposteryear
is_specialc                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        |j                         D ]  \  }}t        | ||        y N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   itemssetattr)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   kwargskeyvalues                     ]/home/nidran/Documenti/script/streaming-community/StreamingCommunity/services/_base/object.py__init__zEpisode.__init__   s    
  	  &
	$ ,,. 	&JCD#u%	&    c           	      p    d| j                    d| j                   d| j                   d| j                   d	S )NzEpisode(id=	, number=, name='z', duration=z sec))r   r   r   r   r   s    r#   __str__zEpisode.__str__'   s8    TWWIYt{{m8DII;l[_[h[hZiinoor%   )NNNNNNNNNNNNNN)	__name__
__module____qualname__r   r   strboolr$   r*    r%   r#   r   r      s     FJ [_ `d&8C= &8C= &YabeYf &u}  B  vC &3-&-5c]&KSTW=&jrsvjw& KS  TW  KX&c]&2:3-&PXY\P]&ltuxly& OW  X\  O]&.pr%   r   c                   H    e Zd Zd ZdefdZdedefdZddZdefd	Z	d
 Z
y)EpisodeManagerc                     g | _         y r   episodesr)   s    r#   r$   zEpisodeManager.__init__+   s	    ')r%   episodec                 :    | j                   j                  |       y)z3
        Add a new episode to the manager.
        N)r5   append)r   r6   s     r#   addzEpisodeManager.add.   s     	W%r%   indexreturnc                      | j                   |   S )zH
        Retrieve an episode by its index in the episodes list.
        r4   r   r:   s     r#   getzEpisodeManager.get4   s     }}U##r%   Nc                 8    | j                   j                          y)z7
        This method clears the episodes list.
        N)r5   clearr)   s    r#   r@   zEpisodeManager.clear:   s     	r%   c                 ,    t        | j                        S )z<
        Get the number of episodes in the manager.
        lenr5   r)   s    r#   __len__zEpisodeManager.__len__@   s     4==!!r%   c                 4    dt        | j                         dS )NzEpisodeManager(num_episodes=)rB   r)   s    r#   r*   zEpisodeManager.__str__F   s    -c$--.@-ACCr%   r;   N)r+   r,   r-   r$   r   r9   intr>   r@   rD   r*   r0   r%   r#   r2   r2   *   s=    *&7 &$ $ $" "Dr%   r2   c                   N    e Zd Zd	dee   dee   dee   dee   dee   f
dZd Zy)
SeasonNr   r   r   slugtypec                     || _         || _        || _        || _        || _        t               | _        |j                         D ]  \  }}t        | ||        y r   )	r   r   r   rK   rL   r2   r5   r   r   )	r   r   r   r   rK   rL   r    r!   r"   s	            r#   r$   zSeason.__init__K   sT    			(6(8 ,,. 	&JCD#u%	&r%   c           	          d| j                    d| j                   d| j                   d| j                  j	                          d	S )Nz
Season(id=r'   r(   z', episodes=rF   )r   r   r   r5   rD   r)   s    r#   r*   zSeason.__str__V   sA    DGG9Idkk](499+\Z^ZgZgZoZoZqYrrsttr%   )NNNNN)r+   r,   r-   r   rH   r.   r$   r*   r0   r%   r#   rJ   rJ   J   sY    	&8C= 	&# 	&U]^aUb 	&qyz}q~ 	&  NV  WZ  N[ 	&ur%   rJ   c                   D    e Zd Zd ZdedefdZdedee   fdZdefdZ	y)	SeasonManagerc                     g | _         y r   )seasonsr)   s    r#   r$   zSeasonManager.__init__Z   s	    %'r%   seasonr;   c                 v    | j                   j                  |       | j                   j                  d        |S )z@
        Add a new season to the manager and return it.
        c                     | j                   S r   )r   )xs    r#   <lambda>z#SeasonManager.add.<locals>.<lambda>b   s
     r%   )r!   )rR   r8   sort)r   rS   s     r#   r9   zSeasonManager.add]   s1     	F#01r%   r   c                     t        | j                        dk(  r| j                  d   S | j                  D ]  }|j                  |k(  s|c S  y)z-
        Get a season by its number.
           r   N)rC   rR   r   )r   r   rS   s      r#   get_season_by_numberz"SeasonManager.get_season_by_numbere   sL     t||!<<?"ll 	F}}&	 r%   c                 ,    t        | j                        S )z7
        Return the number of seasons managed.
        )rC   rR   r)   s    r#   rD   zSeasonManager.__len__r   s     4<<  r%   N)
r+   r,   r-   r$   rJ   r9   rH   r   r[   rD   r0   r%   r#   rP   rP   Y   s>    (& V 3 8F3C ! !r%   rP   c                        e Zd Z fdZ xZS )MediaItemMetac                 X    d }||d<   d }||d<   d }||d<   t         |   | |||      S )Nc                 N    |j                         D ]  \  }}t        | ||        y r   )r   r   )r   r    r!   r"   s       r#   initz#MediaItemMeta.__new__.<locals>.init{   s'    $lln *
Uc5)*r%   r$   c                 :    | j                   j                  |d       S r   )__dict__r>   )r   items     r#   get_attrz'MediaItemMeta.__new__.<locals>.get_attr   s    ==$$T400r%   __getattr__c                 "    || j                   |<   y r   )rc   )r   r!   r"   s      r#   set_attrz'MediaItemMeta.__new__.<locals>.set_attr   s    !&DMM#r%   __setattr__)super__new__)clsr   basesdctra   re   rh   	__class__s          r#   rk   zMediaItemMeta.__new__z   sJ    	* J	1 &M	' &MwsD%55r%   )r+   r,   r-   rk   __classcell__)ro   s   @r#   r^   r^   y   s    6 6r%   r^   c                   r    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
<   y)	MediaItemr   r   rL   r   sizescoredescrK   r   provider_languageN)r+   r,   r-   rH   __annotations__r.   r0   r%   r#   rr   rr      s5    G
I
I	H
IJ
I
I
Ir%   rr   )	metaclassc                   L    e Zd Zd ZdeddfdZdedefdZdefdZdd	Z	d
 Z
y)MediaManagerc                     g | _         y r   
media_listr)   s    r#   r$   zMediaManager.__init__   s	    +-r%   mediar;   Nc                    |j                   dk(  rt        dk7  rt        |j                  r|j                  dk7  rt        d|j                   d|j                          t        t        j                  |j                  |j                        xs d      |_         |j                   dk(  rt        d       t        t        j                         j                         |_         n|j                  r|j                  dk7  rt        d|j                   d|j                          t        t        j                  |j                  j                  dd	      j                         |j                        xs d      |_         |j                   dk(  r7t        d       t        t        j                         j                         |_         | j                  j                  |       y)
zi
        Add media to the list.

        Args:
            media (MediaItem): Media item to add.
        9999 NzFetching year for slug: z, type: z%Cant fetch year setting current year.zFetching year for name:  -)r   TMDB_KEYrK   printrL   r.   r   get_year_by_slug_and_typer   nowr   replacelowerr}   r8   )r   r~   s     r#   r9   zMediaManager.add   s^    ::B8#7JJ5::#34UZZLUV!$[%J%J5::W\WaWa%b%lfl!mEJzzV+EF%()<)<%=
jjUZZ2%54UZZLUV!$[%J%J5::K]K]^acfKgKmKmKoqvq{q{%|  &G  AG  "HEJzzV+EF%()<)<%=
u%r%   r:   c                      | j                   |   S )z:
        Get a media item from the list by index.
        r|   r=   s     r#   r>   zMediaManager.get   s     u%%r%   c                 ,    t        | j                        S )z<
        Get the number of media items in the list.
        rC   r}   r)   s    r#   
get_lengthzMediaManager.get_length   s     4??##r%   c                 8    | j                   j                          y)z4
        This method clears the media list.
        N)r}   r@   r)   s    r#   r@   zMediaManager.clear   s     	r%   c                 4    dt        | j                         dS )NzMediaManager(num_media=rF   r   r)   s    r#   r*   zMediaManager.__str__   s    (T__)=(>a@@r%   rG   )r+   r,   r-   r$   rr   r9   rH   r>   r   r@   r*   r0   r%   r#   rz   rz      sD    .& &t &4& & &$C $ Ar%   rz   N)r   typingr   r   r   StreamingCommunity.utilsr   r   loginr>   r   r   r2   rJ   rP   rL   r^   rr   rz   r0   r%   r#   <module>r      s     & & A ##FI6p p6D D@u u! !@6D 6(
- 
1A 1Ar%   