
    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dS )    N)abort)render_template)request)Database)DoesNotExist)Model)Proxy)SelectQuery)connectc                   4    e Zd Z	 	 d
dZd Zd Zd Zdd	ZdS )PaginatedQuerypageNFc                     || _         || _        |pd | _        || _        t	          |t
                    r|| _        | j        j        | _        d S || _        | j                                        | _        d S N)	paginate_bypage_varr   check_bounds
isinstancer
   querymodelselect)selfquery_or_modelr   r   r   r   s         S/var/www/html/marketdash/venv/lib/python3.11/site-packages/playhouse/flask_utils.py__init__zPaginatedQuery.__init__   sm    & LD	(nk22 	-'DJ)DJJJ'DJ**,,DJJJ    c                     | j         | j         S t          j                            | j                  }|r1|                                rt          dt          |                    S dS )N   )r   r   argsgetr   isdigitmaxint)r   	curr_pages     r   get_pagezPaginatedQuery.get_page   s_    9 9L$$T]33	 	***,, 	*q#i..)))qr   c                     t          | d          sRt          t          j        t	          | j                                                  | j        z                      | _        | j        S )N_page_count)	hasattrr#   mathceilfloatr   countr   r'   r   s    r   get_page_countzPaginatedQuery.get_page_count'   s^    t]++ 	?"49dj&&(())D,<<$> $>  ?  ?Dr   c                     | j         r9|                                 |                                 k    rt          d           | j                            |                                 | j                  S Ni  )r   r%   r.   r   r   paginater   r-   s    r   get_object_listzPaginatedQuery.get_object_list-   sY     	43F3F3H3H!H!H#JJJz""4==??D4DE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   sr     TTQY'!,,54<''!+Ctd{++Q//E%&&uu-...r   )r   NF)r3   )__name__
__module____qualname__r   r%   r.   r2   r=    r   r   r   r      sr        JN#- - - -       F F F
/ / / / / /r   r   c                     t          | t                    s|                                 } 	  | j        |                                 S # t
          $ r t          d           Y d S w xY wr0   )r   r
   r   wherer    r   r   )r   r   s     r   get_object_or_404rD   <   sr    nk22 1'..00#~#U+//111   c





s   A A$#A$object_list   r   Tc                     t          |||||          }|                                ||<   t          | f||                                d|S )N)r   r   r   r   )
paginationr   )r   r2   r   r%   )	template_namer   context_variabler   r   r   r   kwargspaginated_querys	            r   rE   rE   D   s{     %!# # #O  />>@@F"%%''  	  r   c                  h    t           j        st           j        S t           j        dt           j        S )N?)r   query_stringpathrA   r   r   get_current_urlrQ   T   s,     |lllG$8$899r   /c                     t           j                            d          rt           j        d         S t           j                            d          rt           j        d         S | S )Nnext)r   r   r    form)defaults    r   get_next_urlrW   Y   sQ    | $|F##			&	!	! $|F##Nr   c                   b    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dS )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                     d | _         || _        || _        || _        |pd| _        ||                     |           d S d S )NrA   )databasebase_model_class_app_db_excluded_routesinit_app)r   appr[   model_classexcluded_routess        r   r   zFlaskDB.__init__   sP     +	 / 52?MM# ?r   c                 6   || _         | j        =d|j        v r|j        d         }n-d|j        v r|j        d         }nt          d          | j        }d|j        v r|j        d         | _        |                     ||           |                     |           d S )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   ra   
initial_dbs      r   r`   zFlaskDB.init_app   s    	8SZ'' Z
3

3:-- Z7

  "G H H H J$
22$'J/H$ID!C,,,$$$$$r   c                 >   t          |t                    r|}nGt          |t                    r#|                     t          |                    }nt	          |          }t          | j        t                    r| j                            |           d S || _        d S r   )r   r   dict_load_from_config_dictdb_url_connectr[   r	   
initialize)r   ra   config_valuer[   s       r   rj   zFlaskDB._load_database   s    lH-- 	4#HHd++ 	42243E3EFFHH &l33HdmU++ 	%M$$X.....$DMMMr   c                 *   	 |                     d          }|                     d          }n# t          $ r t          d          w xY wd|v r|                    dd          \  }}nd|}}	 t	          |           t
          j        |         }t          ||          }t          |t                    sJ nV# t          $ r t          d|z            t          $ r t          d|z            t          $ r t          d	|z            w xY w ||fi |S )
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_dictrt   ru   rP   
class_namemoduledatabase_classs           r   ro   zFlaskDB._load_from_config_dict   su   	7??6**D __X..FF 	7 	7 	7  6 7 7 7	7 &==%}}S!44D**'*D	?t[&F$VZ88Nnh777777 	? 	? 	?4v=>>> 	H 	H 	H=FGGG 	? 	? 	?  57= > ? ? ?	? ~d22k222s   *- A-AB6 6AD	c                 n    |                     | j                   |                    | j                   d S r   )before_request
connect_dbteardown_requestclose_db)r   ra   s     r   rk   zFlaskDB._register_handlers   s4    4?+++T]+++++r   c                 ^      j         t          d           G  fdd j                  }|S )NzDatabase must be initialized.c                   .    e Zd Z G  fdd          ZdS )*FlaskDB.get_model_class.<locals>.BaseModelc                       e Zd Z j        ZdS )/FlaskDB.get_model_class.<locals>.BaseModel.MetaN)r>   r?   r@   r[   r-   s   r   Metar      s        =r   r   N)r>   r?   r@   r   r-   s   r   	BaseModelr      sG        ) ) ) ) ) ) ) ) ) ) ) )r   r   )r[   rz   r\   )r   r   s   ` r   get_model_classzFlaskDB.get_model_class   sY    = >???	) 	) 	) 	) 	) 	) 	)- 	) 	) 	) r   c                     | j         &t          | dd           }|t                      | _        t	          | d          s|                                 | _        | j        S )Nr[   _model_class)r]   r   r	   r[   r(   r   r   )r   r[   s     r   r   zFlaskDB.Model   s[    9tZ66H %t^,, 	7 $ 4 4 6 6D  r   c                 p    | j         rt          j        | j         v rd S | j                                         d S r   )r_   r   endpointr[   r   r-   s    r   r   zFlaskDB.connect_db   s<      	W%59N%N%NFr   c                     | j         rt          j        | j         v rd S | j                                        s| j                                         d S d S r   )r_   r   r   r[   	is_closedclose)r   excs     r   r   zFlaskDB.close_db   s\      	W%59N%N%NF}&&(( 	"M!!!!!	" 	"r   )r>   r?   r@   __doc__r   r   r`   rj   ro   rk   r   propertyr   r   rA   r   r   rY   rY   `   s        % %L  $E!%   % % %(% % %3 3 38, , ,   ! ! X!     
" " " " "r   rY   )rE   rF   r   NT)rR   )r)   r}   flaskr   r   r   rw   r   r   r   r	   r
   playhouse.db_urlr   rp   objectr   rD   rE   rQ   rW   rY   rA   r   r   <module>r      sq    



       ! ! ! ! ! !                                     6 6 6 6 6 6*/ */ */ */ */V */ */ */Z   8EIM    : : :
   Q" Q" Q" Q" Q"f Q" Q" Q" Q" Q"r   