
    7ik                         d dl mZ ddlmZmZmZ  G d dej                        Z G d dej                        Z G d d	ej                        Z	 G d
 dej                        Z
 G d dej                        Zy)    )serializers   )CategoryNewsImageGalleryc                   t    e Zd ZdZ ej
                         Z ej
                         Z G d d      Zd Z	d Z
y)CategorySerializerzSerializer for Category modelc                        e Zd ZeZg dZg dZy)CategorySerializer.Meta)idnameslugdescriptionfeatured_image
news_count
created_at
updated_atr   r   r   N)__name__
__module____qualname__r   modelfieldsread_only_fields     %/var/www/apihucms/news/serializers.pyMetar   
   s    r?r   r   c                 V    |j                   j                  d      j                         S )z6Return the count of active news items in this categoryT)	is_active)
news_itemsfiltercount)selfobjs     r   get_news_countz!CategorySerializer.get_news_count   s#    ~~$$t$4::<<r   c                     | j                   j                  d      }|j                  r,	 |j                  j                  }|r|j                  |      S |S y# t        $ r Y yw xY w)z7Return absolute URL for category featured image or NonerequestN)contextgetr   url
ValueErrorbuild_absolute_uri)r$   r%   r(   r+   s       r   get_featured_imagez%CategorySerializer.get_featured_image   sg    ,,""9-((,, 11#66J  s   A 	A! A!N)r   r   r   __doc__r   SerializerMethodFieldr   r   r   r&   r.   r   r   r   r	   r	      s;    '2224J6[668N@ @
=r   r	   c                   $    e Zd ZdZ G d d      Zy)ImageGallerySerializerz!Serializer for ImageGallery modelc                       e Zd ZeZg dZdgZy)ImageGallerySerializer.Meta)r   imagecaptionorderuploaded_atr8   N)r   r   r   r   r   r   r   r   r   r   r   r4   $   s    C)?r   r   N)r   r   r   r/   r   r   r   r   r2   r2   !   s    ++ +r   r2   c                       e Zd ZdZ ej
                  dd      Z ej
                  dd      Z ej                         Z	 ej                         Z
 G d d      Zd Zd	 Zy
)NewsListSerializerz'Serializer for News list view (summary)category.nameTsource	read_onlycategory.slugc                       e Zd ZeZg dZdgZy)NewsListSerializer.Meta)r   titler   short_descriptioncategorycategory_namecategory_slugpublish_dater   category_featured_imager    r   Nr   r   r   r   r   r   r   r   r   r   r   rA   1   s    

 #8r   r   c                 Z    | j                   j                  d      }|j                  |      S z0Return featured image URL or default placeholderr(   r)   r*   get_featured_image_urlr$   r%   r(   s      r   r.   z%NewsListSerializer.get_featured_image:   '    ,,""9-))'22r   c                     | j                   j                  d      }|j                  }|r8|j                  r,	 |j                  j                  }|r|j                  |      S |S y# t
        $ r Y yw xY w)z/Return category featured image URL if availabler(   Nr)   r*   rD   r   r+   r,   r-   r$   r%   r(   catr+   s        r   get_category_featured_imagez.NewsListSerializer.get_category_featured_image?   sr    ,,""9-ll3%%((,, 11#66J     A# #	A/.A/N)r   r   r   r/   r   	CharFieldrE   rF   r0   r   rH   r   r.   rT   r   r   r   r:   r:   *   sb    1)K))DQM)K))DQM6[668N?k??A$ $3
r   r:   c                       e Zd ZdZ ej
                  dd      Z ej
                  dd      Z edd      Z	 ej                         Z ej                         Z G d d      Zd	 Zd
 Zy)NewsDetailSerializerz.Serializer for News detail view (full content)r;   Tr<   r?   manyr>   c                        e Zd ZeZg dZg dZy)NewsDetailSerializer.Meta)r   rB   r   rC   r   rD   rE   rF   rG   r   rH   r    gallery_imagesr   r   r   NrI   r   r   r   r   r\   V   s    
 @r   r   c                 Z    | j                   j                  d      }|j                  |      S rK   rL   rN   s      r   r.   z'NewsDetailSerializer.get_featured_image`   rO   r   c                     | j                   j                  d      }|j                  }|r8|j                  r,	 |j                  j                  }|r|j                  |      S |S y # t
        $ r Y y w xY w)Nr(   rQ   rR   s        r   rT   z0NewsDetailSerializer.get_category_featured_imagee   sr    ,,""9-ll3%%((,, 11#66J  rU   N)r   r   r   r/   r   rV   rE   rF   r2   r]   r0   r   rH   r   r.   rT   r   r   r   rX   rX   N   sp    8)K))DQM)K))DQM+FN6[668N?k??A@ @3
r   rX   c                   j    e Zd ZdZ edd      Z ej                  d      Z G d d      Z	d Z
d Zy	)
NewsCreateUpdateSerializerz%Serializer for creating/updating NewsTrY   )r>   c                        e Zd ZeZg dZddgZy)NewsCreateUpdateSerializer.Meta)r   rB   r   rC   r   rD   rG   r   featured_image_urlr    r]   r   rd   NrI   r   r   r   r   rc   x   s    

 #$89r   r   c                 Z    | j                   j                  d      }|j                  |      S rK   rL   rN   s      r   rM   z1NewsCreateUpdateSerializer.get_featured_image_url   rO   r   c                 P    |j                         st        j                  d      |S )zEnsure title is not emptyzTitle cannot be empty)stripr   ValidationError)r$   values     r   validate_titlez)NewsCreateUpdateSerializer.validate_title   s"    {{}--.EFFr   N)r   r   r   r/   r2   r]   r   r0   rd   r   rM   rj   r   r   r   ra   ra   s   s8    /+FN:::TJ: :3
r   ra   N)rest_frameworkr   modelsr   r   r   ModelSerializerr	   r2   r:   rX   ra   r   r   r   <module>rn      sj    & 0 044 8+[88 +!44 !H";66 "J!<!< r   