
    Hh	                        d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ e G d d             Ze G d d             Z G d	 d
e      Zy)    )annotations)ABCabstractmethod)	dataclass)DictAnyListOptionalTuplec                  4    e Zd ZU ded<   dZded<   dZded<   y)
OAuthTokenstraccess_tokenNzOptional[str]refresh_tokenzOptional[int]
expires_at)__name__
__module____qualname____annotations__r   r        J/var/www/html/hubwallet-dev/src/marketing/core/Analytics/providers/base.pyr   r      s    #'M=' $J$r   r   c                  "    e Zd ZU ded<   ded<   y)	DateRanger   startendN)r   r   r   r   r   r   r   r   r      s    J	Hr   r   c                      e Zd ZdZd
dZedd       Zedd       Zedd       Ze	 	 	 	 dd       Z	e	 d	 	 	 	 	 dd       Z
dd	Zy)SocialProviderz6
    Provider interface every network implements.
    c                .    || _         || _        || _        y N)	client_idclient_secretredirect_uri)selfr!   r"   r#   s       r   __init__zSocialProvider.__init__   s    "*(r   c                     y r    r   )r$   statescopess      r   auth_urlzSocialProvider.auth_url       r   c                     y r    r   )r$   codes     r   exchange_codezSocialProvider.exchange_code!   r*   r   c                     y r    r   )r$   tokens     r   refreshzSocialProvider.refresh%   r*   r   c                     y)z<Followers, new_followers, impressions, etc. Normalized keys.Nr   )r$   r/   account_ref
date_ranges       r   fetch_account_metricsz$SocialProvider.fetch_account_metrics*   s     	r   Nc                     y)a   
        Return (posts, next_pagination). Each post includes:
        {
          'external_post_id': str,
          'permalink': str|None,
          'post_type': str,
          'date': 'YYYY-MM-DD',
          'metrics': {
             'impressions': int, 'reach': int, 'likes': int, 'comments': int,
             'shares': int, 'saves': int, 'link_clicks': int,
             'video_views': int, 'video_completions': int,
             'unfollows': int, 'hides': int, 'reports': int
          }
        }
        Nr   )r$   r/   r2   r3   
paginations        r   fetch_post_metricsz!SocialProvider.fetch_post_metrics0   s    & 	r   c                    t         r    )NotImplementedError)r$   r/   r2   payloads       r   publishzSocialProvider.publishF   s    !!r   )r!   r   r"   r   r#   r   )r'   r   r(   z	List[str]returnr   )r,   r   r<   r   )r/   r   r<   r   )r/   r   r2   Dict[str, Any]r3   r   r<   r=   r    )
r/   r   r2   r=   r3   r   r6   zOptional[Dict[str, Any]]r<   z5Tuple[List[Dict[str, Any]], Optional[Dict[str, Any]]])r/   r   r2   r=   r:   r=   r<   r=   )r   r   r   __doc__r%   r   r)   r-   r0   r4   r7   r;   r   r   r   r   r      s    )       *38F 
 Y]'0>V U *"r   r   N)
__future__r   abcr   r   dataclassesr   typingr   r   r	   r
   r   r   r   r   r   r   r   <module>rC      sP    " # ! 3 3
% % %
   5"S 5"r   