
    ce,&                       U d Z ddlmZ g dZddlZddlZddlZddlmZ ddl	Z	ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ej        rddl
mZ  G d dej        d          Z G d dej        ej        df                   Z  e             Z!de"d<    G d dej#                  Z$ ej%        e$          Z&de"d<   dS )z)Storage for detected and fetched widgets.    )annotations)PartnerPoolPOOLUPDATERN)parse)QtCore)config)preferences)extra_collections)logger)
singletons)workers   )core)	resources)simple_advertisement)	QtWidgetsc                      e Zd ZU dZded<   dS )PartnerConfigurationzdDictionary of an additional configuration, that might be used by advertisements and the application.strutm_campaignN)__name__
__module____qualname____doc____annotations__     Ilib/python3.11/site-packages/anaconda_navigator/utils/attribution/pool.pyr   r      s$         nnr   r   F)totalc                  ^    e Zd ZdZdZddZedd            Zdd
ZddZ	ddZ
ddZddZdS )r   z.Collection of widgets for partner attribution.)	__content
__settingsreturnNonec                D    t          j                    | _        i | _        dS )z.Initialize new :class:`~PartnerPool` instance.N)r   PartnerSettings_PartnerPool__settings_PartnerPool__contentselfs    r   __init__zPartnerPool.__init__(   s    040D0F0Fegr   core.PartnerSettingsc                    | j         S )zXCommon configuration that might be used by widgets and different application components.)r(   r*   s    r   settingszPartnerPool.settings-   s     r   value7typing.Union[core.PartnerSettings, 'core.SettingsDict']c                p    t          |t          j                  st          j        |          }|| _        dS )z$Update value of the `configuration`.N)
isinstancer   r'   r(   )r+   r0   s     r   _set_settingszPartnerPool._set_settings2   s2    %!566 	0(//Er   widgetcore.PartnerWidgetc                $    || j         |j        <   dS )z Register new widget in the pool.N)r)   	placement)r+   r5   s     r   registerzPartnerPool.register8   s    +1v'(((r   keycore.PartnerWidgetPlacement"typing.Optional[QtWidgets.QWidget]c                h    | j                             |d          }|dS |                                S )z8Retrieve widget that should be placed in `key` location.N)r)   getr5   )r+   r:   r0   s      r   __getitem__zPartnerPool.__getitem__<   s1    59^5G5GT5R5R=4||~~r   ,typing.Iterator[core.PartnerWidgetPlacement]c                4    t          t          j                  S )z+Iterate through available location options.)iterr   PartnerWidgetPlacementr*   s    r   __iter__zPartnerPool.__iter__C   s    D/000r   intc                4    t          t          j                  S )zTotal number of )lenr   rC   r*   s    r   __len__zPartnerPool.__len__G   s    4.///r   Nr$   r%   )r$   r-   )r0   r1   r$   r%   )r5   r6   r$   r%   )r:   r;   r$   r<   )r$   r@   )r$   rE   )r   r   r   r   	__slots__r,   propertyr/   r4   r9   r?   rD   rH   r   r   r   r   r   #   s        88+Ih h h h
    X       2 2 2 2   1 1 1 10 0 0 0 0 0r   r   zQtWidgets.QWidgetztyping.Final[PartnerPool]r   c                       e Zd ZdZ ej                    Zd fdZedd            Z	edd            Z
ej        dd	            ZddZ xZS )Updaterz,Core for updating advertisement information.r$   r%   c                V    t                                                       d| _        dS )z*Initialize new :class:`~Updater` instance.N)superr,   _Updater__partner_configuration)r+   	__class__s    r   r,   zUpdater.__init__T   s'    PT$$$r   'PartnerConfiguration'c                   | j         kt          j        D ]}	 t          |dd          5 }t	          j        |          }t          |t          j                  s"t          j
        d|           	 ddd           f|| _         	 ddd            nO# 1 swxY w Y   # t          $ r Y t          t          j        f$ r t          j
        d|           Y w xY wi | _         | j                             dd           t          | j         d         t                    st          j        d           d| j         d<   t#          | j         d                   d	k    rt          j        d
           d| j         d<   | j         S )zConfiguration for partners.Nrtutf8)encodingz'broken partner configuration file at %sr    z6utm_campaign in partner configuration must be a string@   zutm_campaign value is too long)rP   r
   AD_CONFIGURATION_PATHSopenyaml	safe_loadr3   typingMappingr   	exceptionFileNotFoundErrorOSError	YAMLError
setdefaultr   warningrG   )r+   pathstreamresults       r   partner_configurationzUpdater.partner_configurationZ   s    '/#: 2 2dD6::: f9=9O9O)&&.AA %",-VX\]]]$       8>4                 )   H0   $%NPTUUUH
 02, (33NBGGGd:>JCPP BWXXX?A,^<4/?@@2EE?@@@?A,^<++sG   BAB/B;BBB	BB	B
C(*CC!extra_collections.OrderedSet[str]c           
        t           j                            dd          }dt          j        | j        d                   i}d |D             }d |                                D             }t          j                    }t          j
        D ]}d}	 |                     |j        di |           n# t          $ r d}Y nw xY wt          j        t          j         |j        di |                              d	d
          |          r|r|                    |           d}|                    |           |                    d           |S )zList of URLs to fetch ads from.mainadvertisement_urlpartner_identityr   c                    i | ]}|d S )   ✫r   ).0r:   s     r   
<dictcomp>z#Updater.sources.<locals>.<dictcomp>   s    8]8]8]e8]8]8]r   c                    i | ]
\  }}|||S r   r   rp   r:   r0   s      r   rq   z#Updater.sources.<locals>.<dictcomp>   s#    UUU
UuUeUUUr   FTro   z.+rW   r   )r	   CONFr>   r   quoterh   itemsr   
OrderedSetr
   
AD_SOURCESaddformatKeyErrorre	fullmatchescapereplacediscard)r+   rl   source_valuessource_placeholdersrg   sourcependings          r   sourceszUpdater.sources   s    "(9L!M!M D,F~,V W W3
 9^8]}8]8]8]UUm6I6I6K6KUUU 5F4P4R4R!, 
	' 
	'F!G

=6=99=99::::    |BImfm&J&J6I&J&JKKSSTY[_``bstt ' 2JJ0111$&! 	

$%%% 	rs    B11C ?C c                P   |                                  }t                              |d                    |d         D ]O}t          j        t          j        d|          t          j                  }t                              |           P| j	        
                                 dS )zAFetch and apply advertisement configuration to the :data:`~POOL`.r/   widgetsz/simple_advertisement.CompositeAdvertisementDict)
definitionr/   N)_Updater__fetch_configurationr   r4   r   CompositeAdvertisementWidgetr]   castr/   r9   sig_updatedemit)r+   configurationr5   instances       r   updatezUpdater.update   s     150J0J0L0L 	=4555 $I. 	$ 	$F ,H!;'XZ`aa  H
 MM(#### 	r   core.ConfigurationDictc                   g di id}| j         D ]}	 t          j        |          }|st          j        j        t          j        |          d}|d         sJ|d                             |           |d         D ]a}d|vr|d         d         	                    d t          j        t          j        |d                   j                  D                         t          j                            d	d
|            n%# t"          $ r t%          j        d           Y w xY w| j        d         r| j        d         |d         d         d<   |d         d                             dd           |S )z)Collect configuration for advertisements.url_parameters)r   r/   )r8   advertisementsr   r   redirect_urlr/   c              3  N   K   | ] \  }}|                     d           ||fV  !dS )utm_N)
startswithrs   s      r   	<genexpr>z0Updater.__fetch_configuration.<locals>.<genexpr>   sY       @ @&C>>&11@e@ @ @ @ @ @r   rk   rl   z"failed to initialize advertisementr   
utm_sourceanaconda_navigator)r   r   load_resourcer   rC   BOTTOM_LEFT_CORNERjsonloadsappendr   r   	parse_qslurlparsequeryr	   rt   setBaseExceptionr   r_   rh   rc   )r+   rg   rl   advertisement_contentr   items         r   __fetch_configurationzUpdater.__fetch_configuration   s     "*
 *
 "& #	G #	G"G@I@WXi@j@j%,  "&!<!O&*j1F&G&GQ Q
 ""23  y!((444 ''78 	 	D%T11 :&'78?? @ @*//%.nI]:^:^:d*e*e@ @ @   
  (;=NOOO  G G G !EFFFFFG %n5 	nCGC]^lCmF:/0@ 	z+,77FZ[[[s   D.DB&DD#"D#rI   )r$   rR   )r$   ri   )r$   r   )r   r   r   r   r   Signalr   r,   rK   rh   r   r   Taskr   r   __classcell__)rQ   s   @r   rM   rM   O   s        66&-//KU U U U U U $, $, $, X$,L ! ! ! X!F \      \ 66 6 6 6 6 6 6 6r   rM   z+typing.Final[singletons.Singleton[Updater]]r   )'r   
__future__r   __all__r   r|   r]   urllibr   r[   qtpyr   r   r	   anaconda_navigator.configr
   anaconda_navigator.utilsr   %anaconda_navigator.utils.logs.loggersr   r   r   rW   r   r   r   TYPE_CHECKINGr   	TypedDictr   r^   rC   r   r   r   QObjectrM   SingleInstanceOfr   r   r   r   <module>r      s   0 / / " " " " " "
,
,
,  				               % % % % % % 1 1 1 1 1 1 6 6 6 6 6 6 8 8 8 8 8 8 / / / / / / , , , , , ,             " " " " " "	     6+5    &0 &0 &0 &0 &0&.!<>Q!QR &0 &0 &0R #.+-- / / / /h h h h hfn h h hV 8Sz7RSZ7[7[ [ [ [ [ [ [r   