K i ddlZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd l m ZGd d eZd Z ddZdZddZGddeZy)N)abort)render_template)request)Database) DoesNotExist)Model)Proxy) SelectQuery)connectc2eZdZ ddZdZdZdZddZy) PaginatedQueryNc||_||_|xsd|_||_t |t r#||_|j j|_y||_|jj|_yN) paginate_bypage_varpage check_bounds isinstancer querymodelselect)selfquery_or_modelrrrrs [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/playhouse/flask_utils.py__init__zPaginatedQuery.__init__sa&  LD ( nk 2'DJ))DJ'DJ**,DJc|j |jStjj|j}|r%|j rt dt|Sy)N)rrargsgetrisdigitmaxint)r curr_pages rget_pagezPaginatedQuery.get_pagesP 99 99 LL$$T]]3 **,q#i.) )rct|dsQttjt |j j |jz |_|jS)N _page_count) hasattrr#mathceilfloatrcountrr'rs rget_page_countzPaginatedQuery.get_page_count'sPt]+"499djj&&()D,<,<<$> ?D rc|jr,|j|jkDr td|jj |j|j SNi)rr%r.rrpaginaterr-s rget_object_listzPaginatedQuery.get_object_list-sK   43F3F3H!H #Jzz""4==?D4D4DEErct||dzz d}t||z|dz}tt|||z d}tt||d|S)Nr)r"minlistrange)rrtotalshowstartstops rget_page_rangezPaginatedQuery.get_page_range2s^TTQY'!,54<'!+Ctd{+Q/E%&u-..r)rNF))__name__ __module__ __qualname__rr%r.r2r<rrr r s"JN# - F /rr ct|ts|j} |j|j S#t $rt dYywxYwr0)rr rwherer rr)rrs rget_object_or_404rD<sQ nk 2'..0#~##U+//11  c s?AAc t|||||}|j||<t|f||jd|S)N)rrrr) paginationr)r r2rr%) template_namercontext_variablerrrrkwargspaginated_querys r object_listrKDsa%  ! #O />>@F   "  % % '    rctjstjStjdtjS)N?)r query_stringpathrArrget_current_urlrPTs*   ||llG$8$8 99rctjjdrtjdStjjdrtjdS|S)Nnext)rrr form)defaults r get_next_urlrUYsI||||F##   & !||F## NrcZeZdZdZddedfdZdZdZdZdZ dZ e d Zd 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() Nczd|_||_||_||_|xsd|_||j |yy)NrA)databasebase_model_class_app_db_excluded_routesinit_app)rapprY model_classexcluded_routess rrzFlaskDB.__init__sB +  / 52 ? MM#  rcZ||_|jGd|jvr|jd}n5d|jvr|jd}ntd|j}d|jvr|jd|_|j |||j |y)NDATABASE DATABASE_URLzKMissing required configuration data for database: DATABASE or DATABASE_URL.FLASKDB_EXCLUDED_ROUTES)r[r\config ValueErrorr]_load_database_register_handlers)rr_ initial_dbs rr^zFlaskDB.init_apps 88 SZZ' ZZ 3 3::- ZZ7  "GHHJ $ 2$'JJ/H$ID ! C, $rct|tr|}n6t|tr|jt|}n t |}t|j t r|j j|y||_yr)rrdict_load_from_config_dictdb_url_connectrYr initialize)rr_ config_valuerYs rrhzFlaskDB._load_databasesc lH -#H  d +224 3EFH&l3H dmmU + MM $ $X .$DMrc |jd}|jd}d|vr|jdd\}}nd|}} t |t j |}t||}t|tsJ ||fi|S#t$r tdwxYw#t$rtd|zt$rtd|zt$rtd |zwxYw) Nnameenginez:DATABASE configuration must specify a `name` and `engine`..rpeeweezUnable to import %szDatabase engine not found %sz5Database engine not a subclass of peewee.Database: %s) popKeyError RuntimeErrorrsplit __import__sysmodulesgetattr issubclassr ImportErrorAttributeErrorAssertionError)r config_dictrrrsrO class_namemoduledatabase_classs rrmzFlaskDB._load_from_config_dicts 7??6*D __X.F &=%}}S!4 D*'*D ? t [[&F$VZ8Nnh7 77d2k22- 7 67 7 7 ?4v=> > H=FG G ? 57= >? ? ?s"B .BaseModelc(eZdZWjZy)/FlaskDB.get_model_class..BaseModel.MetaN)r>r?r@rYr-srMetars ==rrN)r>r?r@rr-sr BaseModelrs  ) )rr)rYrxrZ)rrs` rget_model_classzFlaskDB.get_model_classs3 == >? ? )-- )rc|jt|dd}|t|_t |ds|j |_|j S)NrY _model_class)r[r}r rYr(rr)rrYs rrz FlaskDB.ModelsP 99 tZ6H % t^, $ 4 4 6D    rc|jrtj|jvry|jj yr)r]rendpointrYr r-s rrzFlaskDB.connect_dbs1  W%5%59N9N%N  rc|jrtj|jvry|jj s|jj yyr)r]rrrY is_closedclose)rexcs rrzFlaskDB.close_dbsF  W%5%59N9N%N }}&&( MM   !)r)r>r?r@__doc__rrr^rhrmrirpropertyrrrArrrWrW`sP%L $E!%%( %38,!! "rrW)rKrNT)/)r)r{flaskrrrrurrrr r playhouse.db_urlr rnobjectr rDrKrPrUrWrArrrs^ !6*/V*/Z8EIM : Q"fQ"r