o
    PDi                     @   sF   d dl mZ d dlmZ d dlmZ d dlmZ G dd dedZdS )	   )
ArrowArray)DataFrameImpl)BaseMetaClass)errorsc                   @   s   e Zd ZdZdd Zedd Zedd Zdd	 Zdd
dZ	de
e fddZde
e fddZdedefddZdedefddZdefddZdefddZdS )	DataFrameNc                 C   s   t t j d S N)r   
_raise_errERR_INTERNAL_CREATION_REQUIREDself r   K/var/www/Datamplify/venv/lib/python3.10/site-packages/oracledb/dataframe.py__init__)   s   zDataFrame.__init__c                 C   s   |  | }|t| |S r   )__new___initializer   from_arrow_stream)clsobjdfr   r   r   _from_arrow,   s   
zDataFrame._from_arrowc                 C   s   |  | }|| |S r   )r   r   )r   implr   r   r   r   
_from_impl2   s   

zDataFrame._from_implc                 C   s<   || _ dd | D | _i | _| jD ]}|| j|j< qdS )zB
        Initializes the object given the implementation.
        c                 S   s   g | ]}t |qS r   )r   r   .0ar   r   r   
<listcomp>=   s    z)DataFrame._initialize.<locals>.<listcomp>N)_impl
get_arrays_arrays_arrays_by_namename)r   r   arrayr   r   r   r   8   s   
zDataFrame._initializec                 C   s   |durt d| j S )z
        Returns the ArrowArrayStream PyCapsule which allows direct conversion
        to foreign data frames that support this interface.
        Nrequested_schema)NotImplementedErrorr   get_stream_capsule)r   r"   r   r   r   __arrow_c_stream__B   s   
zDataFrame.__arrow_c_stream__returnc                 C   s   | j S )ze
        Returns a list of ArrowArray objects, each containing a select list
        column.
        r   r
   r   r   r   column_arraysK   s   zDataFrame.column_arraysc                 C   s   dd | j D S )zG
        Returns a list of the column names in the data frame.
        c                 S   s   g | ]}|j qS r   )r    r   r   r   r   r   V   s    z*DataFrame.column_names.<locals>.<listcomp>r'   r
   r   r   r   column_namesR   s   zDataFrame.column_namesic                 C   s8   |dk s
||   krtd| d|    d| j| S )z
        Returns an :ref:`ArrowArray <oraclearrowarrayobj>` object for the
        column at the given index ``i``. If the index is out of range, an
        IndexError exception is raised.
            zColumn index z% is out of bounds for DataFrame with z columns)num_columns
IndexErrorr   )r   r*   r   r   r   
get_columnX   s   
zDataFrame.get_columnr    c                 C   s,   z| j | W S  ty   td| dw )z
        Returns an :ref:`ArrowArray <oraclearrowarrayobj>` object for the
        column with the given name ``name``. If the column name is not found,
        a KeyError exception is raised.
        zColumn z not found in DataFrame)r   KeyError)r   r    r   r   r   get_column_by_namee   s
   zDataFrame.get_column_by_namec                 C   s
   t | jS )zB
        Returns the number of columns in the data frame.
        lenr   r
   r   r   r   r,   p   s   
zDataFrame.num_columnsc                 C   s   t | jd S )z?
        Returns the number of rows in the data frame.
        r+   r1   r
   r   r   r   num_rowsv   s   zDataFrame.num_rowsr   )__name__
__module____qualname__r   r   classmethodr   r   r   r%   listr   r(   strr)   intr.   r0   r,   r3   r   r   r   r   r   &   s    



	r   )	metaclassN)	arrow_arrayr   
arrow_implr   baser    r   r   r   r   r   r   <module>   s
   