
    i                     8    d Z ddlZddlZ G d d      Zd Zd Zy)u   
Shared Data Loader Module
يتم تحميل البيانات من API مرة واحدة فقط ومشاركتها بين جميع السكريبتات
    Nc                   T     e Zd ZdZdZdZdZ fdZd Zd Z	ddZ
d Zd	 Zd
 Z xZS )
DataLoaderuK   
    كلاس لتحميل البيانات من API مرة واحدة
    NFc                 d    | j                   t        t        |   |       | _         | j                   S )u@   Singleton pattern - نسخة واحدة فقط من الكلاس)	_instancesuperr   __new__)cls	__class__s    0/var/www/zoho/zoho_quality/shared_data_loader.pyr   zDataLoader.__new__   s*    == !*c:3?CM}}    c                     d| _         y)u   تهيئة الكلاسz6http://quality.kalamcxapp.site/zoho_quality/export.phpN)api_urlselfs    r   __init__zDataLoader.__init__   s	    Or   c                     |j                   j                         sg S 	 |j                         S # t        $ r5}t	        d|        t	        d|j                   dd         g cY d}~S d}~ww xY w)uK   
        تحويل الاستجابة إلى JSON بشكل آمن
        z[!] Error parsing JSON: z [!] Response (first 200 chars): N   )textstripjson	Exceptionprint)r   responsees      r   	safe_jsonzDataLoader.safe_json   sk     }}""$I	==?" 	,QC014X]]4C5H4IJKI	s   . 	A,*A'!A,'A,c                 0   | j                   r|st        d       | j                  S t        d       	 t        j                  | j
                  d      }t        d|j                          |j                  dk(  rJ| j                  |      | _        d| _         t        dt        | j                                | j                  S t        d	|j                          g S # t        j                  j                  $ r}t        d
|        g cY d}~S d}~ww xY w)u  
        تحميل البيانات من API
        
        Args:
            force_reload (bool): إعادة تحميل البيانات حتى لو كانت محملة مسبقاً
            
        Returns:
            list: قائمة البيانات المحملة
        z[*] Using cached data...z[*] Fetching data from API...   )timeoutz[*] API Response Status: r   Tz[*] Total items loaded: z[!] API returned status code: z"[!] Error fetching data from API: N)_loadedr   _datarequestsgetr   status_coder   len
exceptionsRequestException)r   force_reloadr   r   s       r   	load_datazDataLoader.load_data+   s     <<,-:: 	-.	||DLL"=H-h.B.B-CDE##s*!^^H5
#0TZZ0ABCzz!6x7K7K6LMN	""33 	6qc:;I	s$   BC C D;D
DDc                 R    | j                   s| j                         S | j                  S )u   
        الحصول على البيانات المحملة
        
        Returns:
            list: قائمة البيانات
        )r   r(   r    r   s    r   get_datazDataLoader.get_dataM   s"     ||>>##zzr   c                     | j                   s| j                          | j                  rt        | j                        S dS )u   
        الحصول على عدد العناصر المحملة
        
        Returns:
            int: عدد العناصر
        r   )r   r(   r    r$   r   s    r   	get_countzDataLoader.get_countX   s.     ||NN"&**s4::3!3r   c                     | j                   s| j                          | j                  sg S | j                  D cg c](  }t        |t              r|j                  d      |k(  r|* c}S c c}w )u  
        فلترة البيانات حسب اسم قاعدة البيانات
        
        Args:
            database_name (str): اسم قاعدة البيانات
            
        Returns:
            list: قائمة البيانات المفلترة
        database)r   r(   r    
isinstancedictr"   )r   database_nameitems      r   filter_by_databasezDataLoader.filter_by_databasec   sa     ||NNzzI "ZZ
$%$((:*>-*O 
 	
 
s   -A))F)__name__
__module____qualname____doc__r   r    r   r   r   r   r(   r*   r,   r3   __classcell__)r
   s   @r   r   r   
   s>     IEGP D		4
r   r   c                  6    t               } | j                         S )u   
    دالة مساعدة للحصول على البيانات المشتركة
    
    Returns:
        list: قائمة البيانات
    )r   r*   loaders    r   get_shared_datar<   |   s     \F??r   c                  6    t               } | j                         S )u~   
    دالة مساعدة للحصول على عدد العناصر
    
    Returns:
        int: عدد العناصر
    )r   r,   r:   s    r   get_data_countr>      s     \Fr   )r7   r!   r   r   r<   r>    r   r   <module>r@      s)   
  l
 l
dr   