
    h8'h                          d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ  G d de      Zd Z	 	 ddZd ZddZ G d de      Zy)    N)abort)render_template)request)Database)DoesNotExist)Model)Proxy)SelectQuery)connectc                   2    e Zd Z	 	 ddZd Zd Zd ZddZy)	PaginatedQueryNc                     || _         || _        |xs d | _        || _        t	        |t
              r#|| _        | j                  j                  | _        y || _        | j                  j                         | _        y N)	paginate_bypage_varpagecheck_bounds
isinstancer
   querymodelselect)selfquery_or_modelr   r   r   r   s         Q/var/www/html/trade_iq/venv/lib/python3.12/site-packages/playhouse/flask_utils.py__init__zPaginatedQuery.__init__   sa    & LD	(nk2'DJ))DJ'DJ**,DJ    c                     | j                   | j                   S t        j                  j                  | j                        }|r%|j                         rt        dt        |            S y)N   )r   r   argsgetr   isdigitmaxint)r   	curr_pages     r   get_pagezPaginatedQuery.get_page   sP    99 99LL$$T]]3	**,q#i.))r   c                     t        | d      sQt        t        j                  t	        | j
                  j                               | j                  z              | _        | j                  S )N_page_count)	hasattrr#   mathceilfloatr   countr   r'   r   s    r   get_page_countzPaginatedQuery.get_page_count'   sP    t]+"499djj&&()D,<,<<$>  ?Dr   c                     | j                   r,| j                         | j                         kD  rt        d       | j                  j                  | j                         | j                        S Ni  )r   r%   r.   r   r   paginater   r-   s    r   get_object_listzPaginatedQuery.get_object_list-   sK    43F3F3H!H#Jzz""4==?D4D4DEEr   c                     t        ||dz  z
  d      }t        ||z   |      dz   }t        t        |||z
        d      }t        t        ||      d |       S )N   r   )r"   minlistrange)r   r   totalshowstartstops         r   get_page_rangezPaginatedQuery.get_page_range2   s^     TTQY'!,54<'!+Ctd{+Q/E%&u-..r   )r   NF)   )__name__
__module____qualname__r   r%   r.   r2   r<    r   r   r   r      s"    JN#- F
/r   r   c                     t        | t              s| j                         } 	  | j                  | j	                         S # t
        $ r t        d       Y y w xY wr0   )r   r
   r   wherer    r   r   )r   r   s     r   get_object_or_404rD   <   sQ    nk2'..0#~##U+//11 c
s   ? AAc                     t        |||||      }|j                         ||<   t        | f||j                         d|S )N)r   r   r   r   )
paginationr   )r   r2   r   r%   )	template_namer   context_variabler   r   r   r   kwargspaginated_querys	            r   object_listrK   D   sa     %!#O  />>@F"%%' 	 r   c                      t         j                  st         j                  S t         j                  dt         j                  S )N?)r   query_stringpathrA   r   r   get_current_urlrP   T   s*    ||llG$8$899r   c                     t         j                  j                  d      rt         j                  d   S t         j                  j                  d      rt         j                  d   S | S )Nnext)r   r   r    form)defaults    r   get_next_urlrU   Y   sI    ||||F##			&	!||F##Nr   c                   Z    e Zd ZdZddedfdZd Zd Zd Zd Z	d Z
ed	        Zd
 Zd Zy)FlaskDBa  
    Convenience wrapper for configuring a Peewee database for use with a Flask
    application. Provides a base `Model` class and registers handlers to manage
    the database connection during the request/response cycle.

    Usage::

        from flask import Flask
        from peewee import *
        from playhouse.flask_utils import FlaskDB


        # The database can be specified using a database URL, or you can pass a
        # Peewee database instance directly:
        DATABASE = 'postgresql:///my_app'
        DATABASE = PostgresqlDatabase('my_app')

        # If we do not want connection-management on any views, we can specify
        # the view names using FLASKDB_EXCLUDED_ROUTES. The db connection will
        # not be opened/closed automatically when these views are requested:
        FLASKDB_EXCLUDED_ROUTES = ('logout',)

        app = Flask(__name__)
        app.config.from_object(__name__)

        # Now we can configure our FlaskDB:
        flask_db = FlaskDB(app)

        # Or use the "deferred initialization" pattern:
        flask_db = FlaskDB()
        flask_db.init_app(app)

        # The `flask_db` provides a base Model-class for easily binding models
        # to the configured database:
        class User(flask_db.Model):
            email = CharField()

    Nc                 z    d | _         || _        || _        || _        |xs d| _        || j                  |       y y )NrA   )databasebase_model_class_app_db_excluded_routesinit_app)r   apprY   model_classexcluded_routess        r   r   zFlaskDB.__init__   sB     +	 / 52?MM# r   c                 Z   || _         | j                  Gd|j                  v r|j                  d   }n5d|j                  v r|j                  d   }nt        d      | j                  }d|j                  v r|j                  d   | _        | j                  ||       | j                  |       y )NDATABASEDATABASE_URLzKMissing required configuration data for database: DATABASE or DATABASE_URL.FLASKDB_EXCLUDED_ROUTES)r[   r\   config
ValueErrorr]   _load_database_register_handlers)r   r_   
initial_dbs      r   r^   zFlaskDB.init_app   s    	88SZZ' ZZ
3
3::- ZZ7
  "G H H J$

2$'JJ/H$ID!C,$r   c                    t        |t              r|}n6t        |t              r| j                  t        |            }nt	        |      }t        | j
                  t              r| j
                  j                  |       y || _        y r   )r   r   dict_load_from_config_dictdb_url_connectrY   r	   
initialize)r   r_   config_valuerY   s       r   rh   zFlaskDB._load_database   sc    lH-#Hd+2243EFH &l3HdmmU+MM$$X.$DMr   c                    	 |j                  d      }|j                  d      }d|v r|j                  dd      \  }}nd|}}	 t	        |       t
        j                  |   }t        ||      }t        |t              sJ 	  ||fi |S # t        $ r t        d      w xY w# t        $ r t        d|z        t        $ r t        d|z        t        $ r t        d	|z        w xY w)
Nnameenginez:DATABASE configuration must specify a `name` and `engine`..r   peeweezUnable to import %szDatabase engine not found %sz5Database engine not a subclass of peewee.Database: %s)popKeyErrorRuntimeErrorrsplit
__import__sysmodulesgetattr
issubclassr   ImportErrorAttributeErrorAssertionError)r   config_dictrr   rs   rO   
class_namemoduledatabase_classs           r   rm   zFlaskDB._load_from_config_dict   s   	7??6*D __X.F
 &=%}}S!4D*'*D	?t[[&F$VZ8Nnh777 d2k22-  	7  6 7 7	7  	?4v=>> 	H=FGG 	?  57= > ? ?	?s   "B	 <B! 	B!AC%c                 p    |j                  | j                         |j                  | j                         y r   )before_request
connect_dbteardown_requestclose_db)r   r_   s     r   ri   zFlaskDB._register_handlers   s&    4??+T]]+r   c                 d      j                   t        d       G  fdd j                        }|S )NzDatabase must be initialized.c                   &    e Zd Z G  fdd      Zy)*FlaskDB.get_model_class.<locals>.BaseModelc                   (    e Zd ZW  j                  Zy)/FlaskDB.get_model_class.<locals>.BaseModel.MetaN)r>   r?   r@   rY   r-   s   r   Metar      s    ==r   r   N)r>   r?   r@   r   r-   s   r   	BaseModelr      s    ) )r   r   )rY   rx   rZ   )r   r   s   ` r   get_model_classzFlaskDB.get_model_class   s3    == >??	)-- 	) r   c                     | j                   t        | dd       }|t               | _        t	        | d      s| j                         | _        | j                  S )NrY   _model_class)r[   r}   r	   rY   r(   r   r   )r   rY   s     r   r   zFlaskDB.Model   sP    99tZ6H %t^, $ 4 4 6D   r   c                     | j                   rt        j                  | j                   v ry | j                  j	                          y r   )r]   r   endpointrY   r   r-   s    r   r   zFlaskDB.connect_db   s1      W%5%59N9N%Nr   c                     | j                   rt        j                  | j                   v ry | j                  j	                         s| j                  j                          y y r   )r]   r   r   rY   	is_closedclose)r   excs     r   r   zFlaskDB.close_db   sF      W%5%59N9N%N}}&&(MM! )r   )r>   r?   r@   __doc__r   r   r^   rh   rm   ri   r   propertyr   r   rA   r   r   rW   rW   `   sP    %L  $E!%%(%38, ! ! 
"r   rW   )rK      r   NT)/)r)   r{   flaskr   r   r   ru   r   r   r   r	   r
   playhouse.db_urlr   rn   objectr   rD   rK   rP   rU   rW   rA   r   r   <module>r      s^     
  !       6*/V */Z 8EIM :
Q"f Q"r   