o
    ޭh                     @  s   d dl mZ d dlZd dlZd dlmZmZmZ d dlZejd%ddZ	ejd&d	d
Z
d'ddZejd(ddZd)ddZd*d+ddZd,ddZd,ddZ	d*d-d!d"Zd.d/d#d$ZdS )0    )annotationsN)datetimetimetzinforeturnboolc                   C  s   t jddkS )z5
    Get use_tz from env set in Tortoise config.
    USE_TZTrueosenvironget r   r   V/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/tortoise/timezone.py
get_use_tz
      r   strc                   C  s   t jdpdS )z7
    Get timezone from env set in Tortoise config.
    TIMEZONEUTCr
   r   r   r   r   get_timezone   r   r   r   c                   C  s    t  r
tjtjdS tt S )zN
    Return an aware datetime.datetime, depending on use_tz and timezone.
    )tz)r   r   nowpytzutcget_default_timezoner   r   r   r   r      s   r   r   c                   C  s   t t S )zs
    Return the default time zone as a tzinfo instance.

    This is the time zone defined by Tortoise config.
    )r   timezoner   r   r   r   r   r   $   s   r   Nonec                   C  s   t   t  t  dS )z,Reset timezone cache. For internal use only.N)r   cache_clearr   r   r   r   r   r   _reset_timezone_cache.   s   r   valuedatetime | Noner   
str | Nonec                 C  s@   | du rt  } |du rt nt|}t| rtd| |S )a(  
    Convert an aware datetime.datetime to local time.

    Only aware datetime are allowed. When value is omitted, it defaults to
    now().

    Local time is defined by the current time zone, unless another time zone
    is specified.

    :raises ValueError: when value is naive datetime
    Nz1localtime() cannot be applied to a naive datetime)r   r   r   r   is_naive
ValueError
astimezoner   r   r   r   r   r   	localtime5   s   
r&   datetime | timec                 C  s   |   duS )a:  
    Determine if a given datetime.datetime or datetime.time is aware.

    The concept is defined in Python's docs:
    https://docs.python.org/library/datetime.html#datetime.tzinfo

    Assuming value.tzinfo is either None or a proper datetime.tzinfo,
    value.utcoffset() implements the appropriate logic.
    N	utcoffsetr   r   r   r   is_awareI      
r+   c                 C  s   |   du S )a:  
    Determine if a given datetime.datetime or datetime.time is naive.

    The concept is defined in Python's docs:
    https://docs.python.org/library/datetime.html#datetime.tzinfo

    Assuming value.tzinfo is either None or a proper datetime.tzinfo,
    value.utcoffset() implements the appropriate logic.
    Nr(   r*   r   r   r   r"   V   r,   r"   is_dstbool | Nonec                 C  sR   |du rt  nt|}t|dr|j| |dS t| r#td|  | j|dS )z~
    Make a naive datetime.datetime in a given time zone aware.

    :raises ValueError: when value is not naive datetime
    Nlocalize)r-   z)make_aware expects a naive datetime, got r   )r   r   r   hasattrr/   r+   r#   replace)r   r   r-   r   r   r   r   
make_awarec   s   
r3   c                 C  s:   |du rt  nt|}t| rtd| |jddS )z{
    Make an aware datetime.datetime naive in a given time zone.

    :raises ValueError: when value is naive datetime
    Nz2make_naive() cannot be applied to a naive datetimer0   )r   r   r   r"   r#   r$   r2   r%   r   r   r   
make_naivet   s   r4   )r   r   )r   r   )r   r   )r   r   )r   r   )NN)r   r    r   r!   r   r   )r   r'   r   r   )r   r   r   r!   r-   r.   r   r   )N)r   r   r   r!   r   r   )
__future__r   	functoolsr   r   r   r   r   cacher   r   r   r   r   r&   r+   r"   r3   r4   r   r   r   r   <module>   s&    


	

