Ë
    œV+j   ã                   ót   — d Z ddl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  G d	„ d
«      Zy)zFile watching and processingé    N)ÚOptional)Ú
BaseBroker)ÚOrderProcessor)Ú	FileUtils)ÚTradingLogger)ÚConfigc                   ó†   — e Zd ZdZdededededededefd	„Zd
ede	e   fd„Z
dd„Zdededefd„Zdeddfd„Zd
edefd„Zy)ÚFileProcessorz$Handles file watching and processingÚclient_codeÚbrokerÚsymbol_propertiesÚglobal_limitsÚwatch_folderÚprocessed_folderÚconfigc                 óÚ  — || _         || _        || _        || _        || _        || _        || _        t        |«      | _        t        ||||«      | _
        t        j                  | j
                  «       | j                  j                  d|j                  › �«       | j                  j                  d| j                  › �«       | j                  j                  d| j                  › �«       y )Nz"Initialized processor for client: zSymbol Properties: zGlobal Limits: )r   r   r   r   r   r   r   r   Úloggerr   Úorder_processorr   Úensure_directoryÚinfoÚ	client_id)Úselfr   r   r   r   r   r   r   s           ú;/var/www/html/moneyHeistClient/processors/file_processor.pyÚ__init__zFileProcessor.__init__   sÑ   € ð 'ˆÔØˆŒØ!2ˆÔØ*ˆÔØ(ˆÔØ 0ˆÔØˆŒÜ# KÓ0ˆŒä-¨f°kÐCTÐV\Ó]ˆÔä×"Ñ" 4×#8Ñ#8Ô9à�‰×ÑÐ=¸f×>NÑ>NÐ=OÐPÔQØ�‰×ÑÐ.¨t×/EÑ/EÐ.FÐGÔHØ�‰×Ñ˜?¨4×+=Ñ+=Ð*>Ð?Õ@ó    Ú	file_pathÚreturnc                 óŒ  — 	 t         j                  j                  |«      }|j                  d«      }t	        |«      dk  r| j
                  j                  d|› �«       y|d   j                  dd«      |d   |d	   t        |d
   «      |d   dœS # t        $ r+}| j
                  j                  d|› d|› �«       Y d}~yd}~ww xY w)z'Parse filename to extract order detailsÚ__é   zInvalid file format: Nr   ú:ú-é   é   é   é   )ÚtimeÚsymbolÚactionÚno_lotsÚnoteszFailed to parse file ú: )
ÚosÚpathÚbasenameÚsplitÚlenr   ÚerrorÚreplaceÚintÚ	Exception)r   r   Ú	file_nameÚpartsÚes        r   Úparse_file_infozFileProcessor.parse_file_info$   sÆ   € ð	ÜŸ™×(Ñ(¨Ó3ˆIØ—O‘O DÓ)ˆEä�5‹z˜AŠ~Ø—‘×!Ñ!Ð$9¸)¸Ð"EÔFØð ˜a™×(Ñ(¨¨cÓ2Ø ™(Ø ™(Ü˜u Q™x›=Ø˜q™ñð øô ò 	Ø�K‰K×ÑÐ 5°i°[ÀÀ1À#ÐFÔGÜûð	ús   ‚AB Á/B Â	CÂ!B>Â>CNc                 óš  — | j                   j                  sJ| j                   j                  «       s0| j                  j	                  d«       t        j                  d«       | j                  j                  dd«      }| j                  j                  dd«      }| j                   j                  ||| j                   j                  «      r0| j                  j                  d«       t        j                  d«       t        j                  j                  | j                  «      s)| j                  j!                  d| j                  › �«       y| j"                  j%                  «       }|j                  d	d
dg«      }d}t'        t        j(                  | j                  «      «      D ]g  }| j+                  ||«      sŒt        j                  j-                  | j                  |«      }| j/                  |«      sŒR| j1                  |«       |dz  }Œi |dkD  r| j                  j                  d|› d�«       | j2                  j5                  «        y)zMain processing loopzFailed to login, exitingr#   Úmax_profit_targetr   Úmax_loss_limitzStop limits reached, exitingzWatch folder not found: NÚfile_extensionsz.txtz.ordz
Processed z new file(s))r   Úis_logged_inÚloginr   r2   ÚsysÚexitr   ÚgetÚclose_all_positionsÚdynamic_profit_enabledr   r-   r.   Úexistsr   Úwarningr   Úget_runtime_settingsÚsortedÚlistdirÚ_is_valid_fileÚjoinÚ_process_single_fileÚ_replicate_filer   Úprocess_profit_orders)r   Ú
max_profitÚmax_lossÚruntime_settingsÚallowed_extensionsÚprocessed_countr6   Ú	full_paths           r   Úprocess_fileszFileProcessor.process_files9   sÇ  € à�{‰{×'Ò'Ø—;‘;×$Ñ$Ô&Ø—‘×!Ñ!Ð"<Ô=Ü—‘˜”à×'Ñ'×+Ñ+Ð,?ÀÓCˆ
Ø×%Ñ%×)Ñ)Ð*:¸AÓ>ˆà�;‰;×*Ñ*¨:°xÀÇÁ×AcÑAcÔdØ�K‰K×ÑÐ;Ô<Ü�H‰H�QŒKä�w‰w�~‰~˜d×/Ñ/Ô0Ø�K‰K×ÑÐ":¸4×;LÑ;LÐ:MÐ NÔOØàŸ;™;×;Ñ;Ó=ÐØ-×1Ñ1Ð2CÀfÈfÐEUÓVÐàˆä¤§
¡
¨4×+<Ñ+<Ó =Ó>ò 	%ˆIØ×&Ñ& yÐ2DÔEØäŸ™Ÿ™ T×%6Ñ%6¸	ÓBˆIà×(Ñ(¨Õ3Ø×$Ñ$ YÔ/Ø 1Ñ$‘ð	%ð ˜QÒØ�K‰K×Ñ˜z¨/Ð):¸,ÐGÔHà×Ñ×2Ñ2Õ4r   r6   rR   c                 óV  ‡— t         j                  j                  | j                  ‰«      }t         j                  j                  | j                  ‰«      }t         j                  j                  |«      st         j                  j                  |«      ryt        ˆfd„|D «       «      syy)z!Check if file should be processedFc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Úendswith)Ú.0Úextr6   s     €r   ú	<genexpr>z/FileProcessor._is_valid_file.<locals>.<genexpr>g   s   øè ø€ ÒI¨s�9×%Ñ% c×*ÑIùs   ƒT)r-   r.   rK   r   r   ÚisdirrE   Úany)r   r6   rR   Úsource_pathÚtarget_paths    `   r   rJ   zFileProcessor._is_valid_file_   sn   ø€ ä—g‘g—l‘l 4×#4Ñ#4°iÓ@ˆÜ—g‘g—l‘l 4×#8Ñ#8¸)ÓDˆä�7‰7�=‰=˜Ô%¬¯©¯©¸Ô)DØäÓIÐ6HÔIÔIØàr   c                 ó„  — t         j                  j                  | j                  |«      }t         j                  j                  | j                  |«      }	 t        j                  ||«       | j                  j                  d|› �«       y# t        $ r+}| j                  j                  d|› d|› �«       Y d}~yd}~ww xY w)z$Copy processed file to client folderzReplicated file: zFailed to replicate file r,   N)r-   r.   rK   r   r   r   Úcopy_file_with_permissionsr   Údebugr5   r2   )r   r6   ÚsrcÚdstr8   s        r   rM   zFileProcessor._replicate_filel   s›   € ä�g‰g�l‰l˜4×,Ñ,¨iÓ8ˆÜ�g‰g�l‰l˜4×0Ñ0°)Ó<ˆð	LÜ×0Ñ0°°cÔ:Ø�K‰K×ÑÐ 1°)°Ð=Õ>øÜò 	LØ�K‰K×ÑÐ 9¸)¸ÀBÀqÀcÐJ×KÑKûð	Lús   Á4B Â	B?Â!B:Â:B?c           	      ó  — | j                  |«      }|syd}| j                  D ]  }|d   j                  |«      sŒ|} n |s"| j                  j	                  d|d   › �«       y| j                  |   }|j                  dd«      s| j                  j                  d|› �«       y| j                  j                  ||d   «      }|j                  d«      }|j                  d	«      }d
|d   › d|d   › d|d   › �}	| j                  j                  d|d   › d|› d|d   › �«       | j                  j                  ||d   ||||	¬«      }
|
r#| j                  j                  d|d   › �«       |
S | j                  j	                  d|d   › �«       |
S )zProcess individual order fileFNr(   zUnrecognized symbol: ÚenabledzTrading disabled for symbol: r*   ÚexchangeÚexpiryÚtest__r'   r   Ú_r+   zPlacing order: z - Qty: z
, Action: r)   )r(   r)   Úquantityrg   rh   ÚremarkszOrder placed successfully: zFailed to place order: )r9   r   Ú
startswithr   r2   rB   r   r   Úcalculate_quantityÚplace_order_with_splitÚsuccess)r   r   r   Úbase_symbolÚsymÚpropsrk   rg   rh   rl   rp   s              r   rL   z"FileProcessor._process_single_filew   s¿  € à×#Ñ# IÓ.ˆÙØàˆØ×)Ñ)ò 	ˆCØ�H‰~×(Ñ(¨Õ-Ø!�Ùð	ñ
 Ø�K‰K×ÑÐ 5°d¸8±nÐ5EÐFÔGØà×&Ñ& {Ñ3ˆØ�y‰y˜ EÔ*Ø�K‰K×ÑÐ<¸[¸MÐJÔKØà×'Ñ'×:Ñ:¸;ÈÈYÉÓXˆØ—9‘9˜ZÓ(ˆØ—‘˜8Ó$ˆà˜4 ™<˜.¨¨4°	©?Ð*;¸1¸TÀ'¹]¸OÐLˆà�‰×Ñ˜?¨4°©>Ð*:¸(À8À*ÈJÐW[Ð\dÑWeÐVfÐgÔhà×&Ñ&×=Ñ=ØØ˜‘>ØØØØð >ó 
ˆñ Ø�K‰K×ÑÐ"=¸dÀ8¹nÐ=MÐ NÔOð ˆð �K‰K×ÑÐ 7¸¸X¹Ð7GÐHÔIàˆr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Údictr   r   r   r9   rU   ÚlistÚboolrJ   rM   rL   © r   r   r
   r
      s¨   „ Ù.ðA Cð A°ð AØ$(ðAØ9=ðAà"ðAà69ðAàCIóAð(¨ð °¸$±ó ó*$5ðL¨ð Àð È$ó ð	L¨ð 	L°ó 	Lð+¨cð +°dô +r   r
   )rw   r-   r@   Útypingr   Úbrokers.base_brokerr   Úprocessors.order_processorr   Úutils.file_utilsr   Úutils.loggerr   Úconfig.configr   r
   r|   r   r   ú<module>rƒ      s,   ðÙ "ã 	Û 
Ý å *Ý 5Ý &Ý &Ý  ÷Uò Ur   