
    2h                         d dl mZ d dlm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	Zd
ZdZdZdZ G d de      Zd Zdee   fdZdefdZdeeddededefdZy)    )BaseCommand)	Paginator)sleepN)Q)	AdsManual)!NetworkMonitoringManualSerializer)get_secret_keyz5https://www.hously.cloud/space/receive-advertisement/      g      ?(   c                       e Zd ZdZd Zd Zy)Commandu   Wysyła ogłoszenia do chmury (upsert po URL).
Domyślnie tylko rekordy isSendToMainServer=False i z niepustym images.
Użyj --force, aby wysłać wszystko jak leci.c                     |j                  ddd       |j                  dt        t        dt         d       |j                  d	t        t        d
t         d       y )Nz--force
store_trueu>   Wyślij WSZYSTKO (ignoruje isSendToMainServer i puste images).)actionhelpz--batch-sizeu   Rozmiar paczki (domyślnie: ).)typedefaultr   z	--timeoutu*   Timeout requestu w sekundach (domyślnie: )add_argumentint
BATCH_SIZETIMEOUT)selfparsers     C/var/www/extractly/houslyspace/management/commands/send_to_cloud.pyadd_argumentszCommand.add_arguments   sr    Q 	 	

 	/
|2>	 	 	
 	=gYbI	 	 	
    c                 (   |j                  dd      }t        |j                  dt                    }t        |j                  dt                    }t	        |||       | j
                  j                  | j                  j                  d             y )NforceF
batch_sizetimeoutr    r!   r"   zDone.)	getr   r   r   send_advertisements_to_cloudstdoutwritestyleSUCCESS)r   argskwargsr    r!   r"   s         r   handlezCommand.handle.   sj    

7E*L*=>
fjjG45$5ZQXY$**,,W56r   N)__name__
__module____qualname__r   r   r,    r   r   r   r      s    	9 	
&7r   r   c                     t               }	 | xs i j                  dg       D ]'  }|j                  d      }|s|j                  |       ) 	 |S # t        $ r Y |S w xY w)Nerrorsurl)setr$   add	Exception)response_jsonfailedeus       r   _extract_failed_urls_from_207r;   7   se    UF%2**8R8AeA

1 9 M  Ms   ,A A 	AAurlsc                 |    | sy t         j                  j                  t        |             j	                  d       y )N)url__inTisSendToMainServer)r   objectsfilterlistupdate)r<   s    r   _mark_sent_by_urlsrE   C   s1    T$Z07747Pr   r    c                 \   | r-t         j                  j                         j                  d      S t	        d      t	        d      z  t	        g       z  t	        i       z  }t         j                  j                  d      j                  t	        d      |z        j                  d      S )	u   
    Domyślnie: wysyłamy tylko rekordy nie wysłane i z niepustym images.
    --force: wysyłamy wszystko jak leci (ale dalej wymagamy URLa przy serializacji).
    idT)images__isnull )images__exactFr?   )	is_active)r   rA   allorder_byr   rB   exclude)r    empty_imagess     r   _base_querysetrP   I   s    
   $$&//55 	
				 	
	  		5	)	U#l2	3	$	r   Fr#   r!   r"   c                 N   t               }t        d|d d  d       t        |       }|j                         }|dk(  rt        d       y t	        ||      }|j
                  }t        d| d| d	| d
|  d	       |dd}|j                  D ]   }	|j                  |	      }
t        |
j                  d      j                  }|D cg c]  }|j                  d      s| }}|st        d|	 d| d       l|D ch c]  }|d   	 }}d}|t        k  rs|dz  }	 t        j                  t        d|i||      }|j                   dv r+t#        |       t        d|	 d| dt%        |       d       n.|j                   dk(  rZi }	 |j'                         }t+        |      }||z
  }|rt#        |       t        d|	 d| dt%        |       dt%        |              n|j                   dk(  rJd|j,                  xs dj/                         v r*t#        |       t        d|	 d| dt%        |       d       nlt0        d |dz
  z  z  }t        d|	 d| d!| dt         d"|j                    d#|d$d%       t3        |       	 |t        k  rst        d|	 d| d't         d(       t3        d)       # y c c}w c c}w # t(        $ r Y 1w xY w# t        j4                  $ rG}t0        d |dz
  z  z  }t        d|	 d| d!| dt         d&| d#|d$d%       t3        |       Y d }~d }~ww xY w)*Nz![cloud] Using Authorization key:    z***)r    r   z"[cloud] No advertisements to send.z[cloud] Will send z ads in z pages (batch=z, force=r   zapplication/json)AuthorizationzContent-TypeT)manyr3   z[cloud] Page /u'   : no valid items with URL – skipping.   data)jsonheadersr"   )      z	 OK (all    z PARTIAL: success=z	, failed=i  zalready existsrI   z DUPLICATES -> marked as sent (   z	 attempt z HTTP z. Retrying in z.1fu   s…z NETWORK error: z FAILED after z	 retries.g?)r	   printrP   countr   	num_pages
page_rangepager   object_listrW   r$   RETRY_LIMITrequestspost	CLOUD_URLstatus_coderE   lenrX   r6   r;   textlower
BASE_DELAYr   RequestException)r    r!   r"   
secret_keyqstotal	paginatortotal_pagesrY   page_numrb   
serializedit	page_urlsattemptresppayloadr8   	succeededdelayr9   s                        r   r%   r%   `   s   !J	-j!n-=S
AB	e	$BHHJEz23"j)I%%K	ugXk].T\]b\cce
fg *<NOG((~~h'6t7G7GdSXX
 $.?:Rb:
?M(1[M9`ab)342RY	4#qLG$}}Yfj5ISZdkl##z1&y1M(1[M3y>JZZ\]^%%, G"&))+ ;7CF )F 2I *95M(1[MASTWXaTbScclmpqwmxlyz{%%,1AdiioSUE\E\E^1^&y1M(1[MA`adenao`pprst '!!*<=EM(1[M7)STU`Ta b""&"2"2!3>%DR S%LA #P M(1[M}T]^_c
o )
 @
 5" % ( ,, "aGaK&89hZqYwiqQ\P] ^(()s.s4I Je	sd   J0J0;J5AK
3K
J:AK
AK
5AK
:	KK
KK

L$=LL$)django.core.management.baser   django.core.paginatorr   timer   re   django.db.modelsr   extractly.modelsr   extractly.serializersr   houslyspace.utils.get_secretr	   rg   r   rd   rl   r   r   r;   r4   strrE   boolrP   r   r%   r0   r   r   <module>r      s    4 +    & C 7E	

 7k  7F	QSX Q$ . 38:fm G4 GS G`c Gr   