o
    SDi2                     @   s   d dl Z d dl mZmZ d dlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZ G d	d
 d
eZdS )    N)AnyUnion)MetaData
SchemaItem   )CustomTablePrefix)IdentifierOptionIdentifierOptionTypeKeywordOptionTypeTableOptionKeyTargetLagOptionTargetLagOptionType)KeywordOption)TableFromQueryBasec                       s   e Zd ZdZejgZdZej	ej
ejgZedeje fddZedeje fddZdddd	d
ededededeeef dededdf fddZd
ededededdf
ddZdefddZ  ZS )DynamicTablea  
    A class representing a dynamic table with configurable options and settings.

    The `DynamicTable` class allows for the creation and querying of tables with
    specific options, such as `Warehouse` and `TargetLag`.

    While it does not support reflection at this time, it provides a flexible
    interface for creating dynamic tables and management.

    For further information on this clause, please refer to: https://docs.snowflake.com/en/sql-reference/sql/create-dynamic-table

    Example using option values:
        DynamicTable(
        "dynamic_test_table_1",
        metadata,
        Column("id", Integer),
        Column("name", String),
        target_lag=(1, TimeUnit.HOURS),
        warehouse='warehouse_name',
        refresh_mode=SnowflakeKeyword.AUTO
        as_query="SELECT id, name from test_table_1;"
    )

    Example using explicit options:
        DynamicTable(
        "dynamic_test_table_1",
        metadata,
        Column("id", Integer),
        Column("name", String),
        target_lag=TargetLag(1, TimeUnit.HOURS),
        warehouse=Identifier('warehouse_name'),
        refresh_mode=KeywordOption(SnowflakeKeyword.AUTO)
        as_query=AsQuery("SELECT id, name from test_table_1;")
    )
    Freturnc                 C      |  tjS N)_get_dialect_optionr   	WAREHOUSEself r   m/var/www/Datamplify/venv/lib/python3.10/site-packages/snowflake/sqlalchemy/sql/custom_schema/dynamic_table.py	warehouseD      zDynamicTable.warehousec                 C   r   r   )r   r   
TARGET_LAGr   r   r   r   
target_lagH   r   zDynamicTable.target_lagN)r   r   refresh_modenamemetadataargsr   r   r   kwc          	         sd   | ddrd S ttj|t|ttj|g}|| 	| t
 j||g|R i | d S )N_no_initT)getr   creater   r   r   r   REFRESH_MODEupdate_as_dialect_optionssuper__init__)	r   r   r    r   r   r   r!   r"   options	__class__r   r   r*   L   s   
 zDynamicTable.__init__c                 O   s"   | j ||g|R ddi| d S )Nr#   F)r*   )r   r   r    r!   r"   r   r   r   _initb   s   "zDynamicTable._initc                    st   dd t jgt jg dd  jD  t jg t jg t jg t jg  fdddD   S )NzDynamicTable(%s)z, c                 S   s   g | ]}t |qS r   )repr).0xr   r   r   
<listcomp>o   s    z)DynamicTable.__repr__.<locals>.<listcomp>c                    s$   g | ]}| d t t | qS )=)r/   getattr)r0   kr   r   r   r2   t   s   $ )schema)	joinr/   r   r    columnsr   r   
cluster_byas_queryr   r   r   r   __repr__k   s"   





zDynamicTable.__repr__) __name__
__module____qualname____doc__r   DYNAMIC__table_prefixes__!_support_primary_and_foreign_keysr   r   AS_QUERYr   _required_parameterspropertytypingOptionalr   r   r   r   strr   r   r	   r   r   r
   r   r*   r.   r;   __classcell__r   r   r,   r   r      sX    $
	
	r   )rF   r   r   sqlalchemy.sql.schemar   r   custom_table_prefixr   r+   r   r	   r
   r   r   r   options.keyword_optionr   table_from_queryr   r   r   r   r   r   <module>   s    