
    {i*	                     ~    d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z
 e
j                  e      Z G d de      Zy)	z4
Base seeder class for database seeding operations.
    )ABCabstractmethod)Session)SessionLocal)	GeneratorNc                   `    e Zd ZdZd Zdeeddf   fdZededdfd       Z	d
dZ
dedefd	Zy)
BaseSeederz
    Abstract base class for database seeders.
    
    Provides common functionality for seeding operations including
    session management and error handling.
    c                 :    | j                   j                  | _        y)zInitialize the seeder.N)	__class____name__name)selfs    _/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/base/seeders/base_seeder.py__init__zBaseSeeder.__init__   s    NN++	    returnNc              #     K   t               }	 | 	 |j                          y# t        $ r;}t        j                  d| j                   d|        |j                           d}~ww xY w# |j                          w xY ww)zv
        Get a database session for seeding operations.
        
        Yields:
            Database session
        zError in seeder z: N)r   	Exceptionloggererrorr   rollbackcloser   dbes      r   get_sessionzBaseSeeder.get_session   sk      ^	H HHJ  	LL+DII;b<=KKM	
 HHJs0   B $ B 	A(6A##A((A+ +A==B r   c                      y)z
        Abstract method to implement seeding logic with a provided session.
        
        Args:
            db: Database session to use for seeding operations
        N r   r   s     r   seedzBaseSeeder.seed+   s     	r   c                    t         j                  d| j                          	 t        | j	                               5 }| j                  |      s-t         j                  d| j                   d       	 ddd       y| j                  |       |j                          t         j                  d| j                   d       ddd       y# 1 sw Y   yxY w# t        $ r+}t         j                  d| j                   d|         d}~ww xY w)zS
        Run the seeder with proper session management and error handling.
        zRunning seeder: zSkipping seeder z (conditions not met)NzSeeder z completed successfullyz	 failed: )
r   infor   nextr   
should_runr    commitr   r   r   s      r   runzBaseSeeder.run5   s     	&tyyk23	d&&() JRr*KK"2499+=R ST	J J 		"		gdii[0GHIJ J J  	LL7499+Yqc:;	sA   C 6C	3C <AC	 C 	CC C 	D	&DD	c                      y)a  
        Determine if the seeder should run.
        
        Override this method to implement conditional seeding logic.
        
        Args:
            db: Database session
            
        Returns:
            True if the seeder should run, False otherwise
        Tr   r   s     r   r$   zBaseSeeder.should_runI   s     r   )r   N)r   
__module____qualname____doc__r   r   r   r   r   r    r&   boolr$   r   r   r   r	   r	      s^    ,Ywd':; " w 4  (W  r   r	   )r*   abcr   r   sqlalchemy.ormr   src.core.databaser   typingr   logging	getLoggerr   r   r	   r   r   r   <module>r2      s;    $ " *  			8	$G Gr   