;i@4ddlmZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlZddlmZddlmZddlmZdd lmZd d lm Z d d l!m"Z"d d l!m#Z#ej$rddl%Z%ddl&m'Z'ddl&m(Z(ddl&m)Z)d dl*m+Z+Gddej,Z-ddZ.ddZ/ddZ0dd!Z1ej2 ddd'Z3ej2 ddd+Z3 ddd,Z3dd4Z4ej5d5gd6d7e4d"d"8Z6Gd9d:Z7ej8e7d";Z9ej:dZ>Gd?d@ej?Z@ddBZAej5dCdDgdEdFd"d7eAGZBddIZCej5dJgdKd7eCLZDddMZEej5dNdOgejFd"d7PdQd"d7eERZGGdSdTe@ZHddVZI dddYZJdd\ZKGd]d^ejLZMdd_ZNGd`daejFZOejPdbdcdejQdedfdgdhiejQdjdkdldmiejQdneMdod"pejQdqejFd"d7d"reNd7dstejQduddviejQdwddxiejQdyd"dziejQd{deOd|e jRjSd}~ejQddeOde jRjSd}~e9ddZTeTjUVdeDejPddde>ddZWejPdddejQddejXdddejQdd"de>ddZYeHddZZddZ[e\dkr e[dSdS)) annotationsN)update_wrapper) itemgetter) ModuleType)ParameterSource) run_simple)is_running_from_reloader) import_string) current_app)get_debug_flag)get_load_dotenv) StartResponse)WSGIApplication)WSGIEnvironmentFlaskceZdZdZdS)NoAppExceptionz3Raised if an application cannot be found or loaded.N)__name__ __module__ __qualname____doc__=C:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\flask/cli.pyrr%s====rrmodulerreturnrc ddlmdD]'}t||d}t|r|cS(fd|jD}t |dkr|dSt |dkr td|jd|jd d D]}t||d}tj |ri |}t|r|cSG#t$r<}t|std |d |jd |jd|d |d}~wwxYwtd|jd|jd)zwGiven a module instance this tries to find the best possible application in the module or raises an exception. r r)app applicationNc4g|]}t||Sr) isinstance).0vrs r z!find_best_app..7s(KKKQjE6J6JKqKKKrrz0Detected multiple Flask applications in module 'z'. Use 'z":name' to specify the correct one.) create_appmake_appzDetected factory 'z ' in module 'z1', but could not call it without arguments. Use ':z(args)' to specify arguments.z7Failed to find Flask application or factory in module 'z:name' to specify one.) rgetattrr#__dict__valueslenrrinspect isfunction TypeError_called_with_wrong_args)r attr_namer matches app_factoryers @r find_best_appr7)s, fi.. c5 ! ! JJJ LKKK&/0022KKKG 7||qqz W   + + +*0/ + + +   0 fi66  k * *  !kmmc5))JJJ   .{;;$-------+4---     "   _  &,o     sC.. D487D//D4ft.Callable[..., Flask]boolctjd} | |jj|jur ~dS|j}| ~dS#~wxYw)zCheck whether calling a function raised a ``TypeError`` because the call failed or because something in the factory raised the error. :param f: The function that was called. :return: ``True`` if the call failed. NFT)sysexc_infotb_framef_code__code__tb_next)r8tbs rr2r2^se  B n{!QZ// BBB n BBBsA AAapp_namestrcddlm} tj|dj}n"#t $rtd|ddwxYwt|tj r |j }g}i}nt|tj rt|j tj std|d |j j } d |j D}d |jD}n5#t$rtd |d dwxYwtd|d t!||}n.#t"$r!}td |d|jd |d}~wwxYwt'j|rH ||i|} n@#t*$r1}t-|std|d|jd|d}~wwxYw|} t| |r| Std|jd|d)zCheck if the given string is a variable name or a function. Call a function to get the app instance, or return the variable directly. r reval)modezFailed to parse z' as an attribute name or function call.Nz*Function reference must be a simple name: .c6g|]}tj|Sr)ast literal_eval)r$args rr&z&find_app_by_string..s#???cC$S))???rcZi|](}|j |jtj|j)SN)rMrKrLvalue)r$kws r z&find_app_by_string..s;6%(22%%%rz-Failed to parse arguments as literal values: zFailed to find attribute z in z The factory z in module z2 could not be called with the specified arguments.z1A valid Flask application was not obtained from 'r)z'.)r*rrKparsestripbody SyntaxErrorrr#NameidCallfuncargskeywords ValueErrorr+AttributeErrorrr/r0r1r2) rrDrexprnamer[kwargsattrr6r s rfind_app_by_stringrcxsy))777<  Rx R R R    $!! w D#( # # $)SX..  JXJJJ y| ??TY???D-FF    !MMMM   Rx R R R   vt$$  H H HFO H H H   $  $'''CC   *400  (x((O(((    #u  , _ , ,' , , ,  sE-6A"C::D0E E, E''E,F G,GGpathctj|}tj|\}}|dkr|}tj|dkrtj|}g} tj|\}}||tjtj |dsnvtjd|kr tj d|d |dddS) zGiven a filename this will try to calculate the python path, add it to the search path and return the actual module name that is expected. z.py__init__Tz __init__.pyrrIN) osrdrealpathsplitextbasenamedirnamesplitappendexistsjoinr=insert)rdfnameext module_namer`s rprepare_importrus 7  D ! !D!!$''JE3 e|| w++wt$$KW]]4(( d4   w~~bgll4??@@    x{d 4   88K"% & &&rTrt str | Noneraise_if_not_foundt.Literal[True]cdSrOrrtrDrws r locate_appr{s  Cr.t.Literal[False] Flask | NonecdSrOrrzs rr{r{s 3rcb t|nl#t$r_tjdjr't d|dt jd|rt d|ddYdSwxYwtj|}|t|St||S)Nr<zWhile importing z, an ImportError was raised: zCould not import rI) __import__ ImportErrorr=r>rBr traceback format_excmodulesr7rc)rtrDrwrs rr{r{s ;     <>>!  $  8;88(35588    !E[!E!E!EFFD P44 [ %FV$$$!&(333sA%A;:A;ctx click.Contextparamclick.ParameterrPt.AnyNonec*|r|jrdStjd}tjd}t jdt jd|d||j| dS)NflaskwerkzeugPython z Flask z Werkzeug )color) resilient_parsing importlibmetadataversionclickechoplatformpython_versionrexit)rrrP flask_versionwerkzeug_versions r get_versionr s C)&..w77M )11*== J '()++ ' ' ' '$ ' 'i  HHJJJJJrz --versionzShow the Flask version.F)help expose_valuecallbackis_flagis_eagerc,eZdZdZ ddd ZddZdS) ScriptInfoaHelper object to deal with Flask applications. This is usually not necessary to interface with as it's used internally in the dispatching to click. In future versions of Flask this object will most likely play a bigger role. Typically it's created automatically by the :class:`FlaskGroup` but you can also manually create it and pass it onwards as click object. .. versionchanged:: 3.1 Added the ``load_dotenv_defaults`` parameter and attribute. NTapp_import_pathrvr't.Callable[..., Flask] | Noneset_debug_flagr:load_dotenv_defaultsrrcv||_||_i|_||_t ||_ d|_dSrO)rr'datarrr _loaded_app)selfrr'rrs rrfzScriptInfo.__init__1sL /%)+ ,$34H$I$I! *.rrc|j|jSd}|j|}n||jrKtjd|jddgzdd\}}t |}t ||}n*dD]'}t |}t |dd}|n(|td |jrt|_ ||_|S) zLoads the Flask app (if not yet loaded) and returns it. Calling this multiple times will just result in the already loaded app to be returned. Nz :(?![\\/])r )maxsplitr<)zwsgi.pyzapp.pyF)rwzCould not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.) rr'rrermrur{rrr debug)rr rdr` import_names rload_appzScriptInfo.load_appMs   '# #  ? &//##CC# H]D,@1MMMQUPVV1" d-T22  d331D"0"6"6K$[$5QQQC' ; &    )'((CI r)NNTT) rrvr'rrr:rr:rr)rr)rrrrrfrrrrrr%sY  '+48#%) .....8''''''rr)ensureF)boundcTtjdfd }t|S) aWraps a callback so that it's guaranteed to be executed with the script's application context. Custom commands (and their options) registered under ``app.cli`` or ``blueprint.cli`` will always have an app context available, this decorator is not required in that case. .. versionchanged:: 2.2 The app context is active for subcommands as well as the decorated callback. The app context is always available to ``app.cli`` command and parameter callbacks. rrr[rrarctsS|t}|||jg|Ri|SrO)r ensure_objectrr with_resource app_contextinvoke)rr[rar r8s r decoratorz"with_appcontext..decoratorsj 1##J//88::C   coo// 0 0 0sz!-d---f---r)rrr[rrarrr)r pass_contextr)r8rs` rwith_appcontextr|sC ...... )Q ' ''rc0eZdZdZd fd Zd fd ZxZS) AppGroupaThis works similar to a regular click :class:`~click.Group` but it changes the behavior of the :meth:`command` decorator so that it automatically wraps the functions in :func:`with_appcontext`. Not to be confused with :class:`FlaskGroup`. r[rrar3t.Callable[[t.Callable[..., t.Any]], click.Command]cPdddfd }|S) zThis works exactly like the method of the same name on a regular :class:`click.Group` but it wraps callbacks in :func:`with_appcontext` unless it's disabled by passing ``with_appcontext=False``. rTr8t.Callable[..., t.Any]r click.Commandcxrt|}ttji|SrO)rsuperrcommand)r8 __class__r[rar wrap_for_ctxs rrz#AppGroup.command..decoratorsE '#A&&A054((0$A&AA!DD Dr)r8rrr)pop)rr[rarrrs``` @rrzAppGroup.commandsazz"3T::  E E E E E E E E E E r1t.Callable[[t.Callable[..., t.Any]], click.Group]cl|dttj|i|S)zThis works exactly like the method of the same name on a regular :class:`click.Group` but it defaults the group class to :class:`AppGroup`. cls) setdefaultrrgroup)rr[rars rrzAppGroup.groups6 %***uww}d-f---r)r[rrarrr)r[rrarrr)rrrrrr __classcell__rs@rrrse ..........rr click.OptioncP|dS|t}||_|SrO)rrr)rrrPinfos r_set_apprs, }t   Z ( (D D Lrz-Az--appIMPORTzThe Flask application or factory function to load, in the form 'module:name'. Module can be a dotted import or file path. Name is not required if it is 'app', 'application', 'create_app', or 'make_app', and can be 'name(args)' to pass arguments.)metavarrrrr bool | Nonec||j}||tjtjfvrdS|rdndt jd<|S)N10 FLASK_DEBUG)get_parameter_sourcer`rDEFAULT DEFAULT_MAPrhenviron)rrrPsources r _set_debugrs_ % %ej 1 1F f#)t(- 5#BJ} Lrz--debug/--no-debugzSet debug mode.)rrrc ddl}n*#t$r|tjd||dYnwxYw| |jjrt ||jj|S)Nrz4python-dotenv must be installed to load an env file.)rr) load_defaults)dotenvrr BadParameterobjr load_dotenv)rrrPrs r_env_file_callbackrs    $F     CG8E)EFFFF Ls $..z-ez --env-file)rodir_okayzLoad environment variables from this file, taking precedence over those set by '.env' and '.flaskenv'. Variables set directly in the environment take highest precedence. python-dotenv must be installed.)typerrrrcleZdZdZ d d!fd Zd"dZd#fd Zd$fd Z d%d&fd Zd'fd Z xZ S)( FlaskGroupaSpecial subclass of the :class:`AppGroup` group that supports loading more commands from the configured Flask app. Normally a developer does not have to interface with this class but there are some very advanced use cases for which it makes sense to create an instance of this. see :ref:`custom-scripts`. :param add_default_commands: if this is True then the default run and shell commands will be added. :param add_version_option: adds the ``--version`` option. :param create_app: an optional callback that is passed the script info and returns the loaded app. :param load_dotenv: Load the nearest :file:`.env` and :file:`.flaskenv` files to set environment variables. Will also change the working directory to the directory containing the first file found. :param set_debug_flag: Set the app's debug flag. .. versionchanged:: 3.1 ``-e path`` takes precedence over default ``.env`` and ``.flaskenv`` files. .. versionchanged:: 2.2 Added the ``-A/--app``, ``--debug/--no-debug``, ``-e/--env-file`` options. .. versionchanged:: 2.2 An app context is pushed when running ``app.cli`` commands, so ``@with_appcontext`` is no longer required for those commands. .. versionchanged:: 1.0 If installed, python-dotenv will be used to load environment variables from :file:`.env` and :file:`.flaskenv` files. TNadd_default_commandsr:r'radd_version_optionrrextrarrrc 0t|ddpd}|ttt f|r|td|vri|d<|dddtj dd|i|||_ ||_ ||_ |rN|t|t |t"d|_dS)Nparamsrcontext_settingsauto_envvar_prefixFLASKF)listrextend_env_file_option _app_option _debug_optionrnversion_optionrrrfr'rr add_command run_command shell_commandroutes_command_loaded_plugin_commands) rrr'rrrrrrs rrfzFlaskGroup.__init__3s)-UYYx-F-F-L"(M(M  'mDEEE  * MM. ) ) ) U * *(*E$ %  !,,-A7KKK000%000$&,  -   [ ) ) )   ] + + +   ^ , , ,',$$$rc|jrdStjdkrddlm}nddl}|dD]/}|||j 0d|_dS)N) r)rzflask.commands)rT) rr= version_inforrimportlib_metadata entry_pointsrloadr`)rreps r_load_plugin_commandsz FlaskGroup._load_plugin_commandsXs  '  F  w & & * * * * * * * 2 1 1 1''.>'?? 1 1B   RWWYY 0 0 0 0'+$$$rrrr`rEclick.Command | Nonec|t||}||S|t} |}nE#t $r8}tjd| dddYd}~dSd}~wwxYwtrtj |ur'| | |j||SNzError:  Tred)errfg)rr get_commandrrrrrsechoformat_messager _get_current_objectrrcli)rrr`rvrr r6rs rrzFlaskGroup.get_commandis ""$$$WW d + + >I  ,, --//CC    K8!"2"2"4"4888du M M M M44444  1k=??sJJ   coo// 0 0 0w""3---sA,, B.6-B))B. list[str]cP|tt|}|t } ||j|nz#t$r7}tj d| dddYd}~n>d}~wt$r.tj tjdddYnwxYwt!|Sr )rsetr list_commandsrrupdaterrrrrr Exceptionrrsorted)rrrrr6rs rrzFlaskGroup.list_commandss2 ""$$$ &&s++ , ,  ,, K IIdmmoo)77<< = = = = N N N K8!"2"2"4"4888du M M M M M M M M M K K K K9/115554E J J J J J J K bzzs?B D)-C8DD info_namervr[parentclick.Context | Nonec dtjd<d|vr-d|jvr$t|j|j|j|d<tj||fd|i|S)NtrueFLASK_RUN_FROM_CLIr)r'rrr) rhrrrr'rrr make_context)rrr[rrrs rr"zFlaskGroup.make_contexts{,2 '(   %t/D"D"D%?#2%)%5E%L $uww#ItLLFLeLLLrc*|s|js0t|dkrU|d||vr8t|igt |igt ||S)Nr r)no_args_is_helpr.get_help_option_namesrhandle_parse_resultrr parse_args)rrr[rs rr'zFlaskGroup.parse_argss 9- 9 IINNtAw$*D*DS*I*III  0 0b" = = =  + +CR 8 8 8ww!!#t,,,r)TNTTT)rr:r'rrr:rr:rr:rrrrrr)rrr`rErr)rrrrrO) rrvr[rrrrrrr)rrr[rrr) rrrrrfrrrr"r'rrs@rrrsB&*48#' # #-#-#-#-#-#-#-J,,,,"......62(, MMMMMMM* - - - - - - - - - -rrotherctj||t|dtj|kS)zTake ``other`` and remove the length of ``path`` from it. Then join it to ``path``. If it is the original value, ``path`` is an ancestor of ``other``.N)rhrdrpr.lstripsep)rdr)s r_path_is_ancestorr-s> 7<<eCIIKK077?? @ @E IIrstr | os.PathLike[str] | Nonerc` ddl}nh#t$r[|s>tjdstjdrt jdddYd SwxYwi}|r9d D]6}||d x}s|||d z}7|9tj|r|||d z}| D]%\}}|tj vs||tj |<&t|S)acLoad "dotenv" files to set environment variables. A given path takes precedence over ``.env``, which takes precedence over ``.flaskenv``. After loading and combining these files, values are only set if the key is not already set in ``os.environ``. This is a no-op if `python-dotenv`_ is not installed. .. _python-dotenv: https://github.com/theskumar/python-dotenv#readme :param path: Load the file at this location. :param load_defaults: Search for and load the default ``.flaskenv`` and ``.env`` files. :return: ``True`` if at least one env var was loaded. .. versionchanged:: 3.1 Added the ``load_defaults`` parameter. A given path takes precedence over default files. .. versionchanged:: 2.0 The current directory is not changed to the location of the loaded file. .. versionchanged:: 2.0 When loading the env files, set the default encoding to UTF-8. .. versionchanged:: 1.1.0 Returns ``False`` when python-dotenv is not installed, or when the given path isn't a file. .. versionadded:: 1.0 rN.env .flaskenvzH * Tip: There are .env files present. Install python-dotenv to use them.yellowT)rr F)r1r0)usecwdzutf-8)encoding) rrrhrdisfilerr find_dotenv dotenv_valuesitemsrr:)rdrrr default_name default_pathkeyrPs rrrsnD       27>>&)) RW^^K-H-H  K      uu #%DI1 I IL$*$6$6|D$6$Q$QQL  F(((HH HDD BGNN400 $$TG$<<<jjll  U "*    3 ::sA!A,+A,rrctrdS|tjd|d|tjd|rdnddSdS)z]Show extra startup messages the first time the server is run, ignoring the reloader. Nz * Serving Flask app ''z * Debug mode: onoff)r rr)rrs rshow_server_bannerr@so !!" >O>>>???  ?U%=TT??@@@@@rc&eZdZdZdZddZdd Zd S) CertParamTypezClick option type for the ``--cert`` option. Allows either an existing file, the string ``'adhoc'``, or an import for a :class:`~ssl.SSLContext` object. rdrrc>tjddd|_dS)NTFror resolve_path)rPath path_type)rs rrfzCertParamType.__init__s4%dSSSrrPrrclick.Parameter | Nonerrc ddl}n%#t$rtjd||dwxYw ||||S#tj$rtj|||}|dkr/ ddl}n%#t$rtjd||dwxYw|cYSt|d}t||j r|cYSwxYw)Nrz?Using "--cert" requires Python to be compiled with SSL support.adhocz>%44 4!   Ls3399;;E '''''"   ,V    d333C#s~..  ) s7")A=CBC"B))C0(CCNr(rPrrrHrrrr)rrrrr`rfrQrrrrBrBsQ DTTTT""""""rrBc|jd}|dk} ddl}t||j}n#t $rd}YnwxYw|U|rt jd|||rt jd|||st jd||||f|jd<n|r|s|st jd |||S) zThe ``--key`` option must be specified when ``--cert`` is a file. Modifies the ``cert`` param to be a ``(cert, key)`` pair if needed. certrJrNFz.When "--cert" is "adhoc", "--key" is not used.z;When "--cert" is an SSLContext object, "--key" is not used.z "--cert" must also be specified.zRequired when using "--cert".)rgetrLr#rPrrr)rrrPrTis_adhocrL is_contexts r _validate_keyrXDs' :>>& ! !DwH6  cn55       $@#u   $M   U$%GeTT T!5[ 6  R RZ R$%Dc5QQ Q Ls< A  A c$eZdZdZd fd ZxZS) SeparatedPathTypezClick option type that accepts a list of values separated by the OS's path separator (``:``, ``;`` on Windows). Each value is validated as a :class:`click.Path` type. rPrrrHrrrcz||}tjfd|DS)Nc*g|]}|Srr)r$itemrr super_converts rr&z-SeparatedPathType.convert..ws'BBBD dE3//BBBr)split_envvar_valuerrQ)rrPrrr8r^rs `` @rrQzSeparatedPathType.convertqsF''.. BBBBBBEBBBBrrR)rrrrrQrrs@rrZrZksQ CCCCCCCCCCrrZrunzRun a development server.) short_helpz--hostz-hz 127.0.0.1zThe interface to bind to.)defaultrz--portz-pizThe port to bind to.z--certz(Specify a certificate file to use HTTPS.)rrrz--keyrDz2The key file to use when specifying a certificate.)rrrrz--reload/--no-reloadzVEnable or disable the reloader. By default the reloader is active if debug is enabled.z--debugger/--no-debuggerzVEnable or disable the debugger. By default the debugger is active if debug is enabled.z --with-threads/--without-threadsz!Enable or disable multithreading.z --extra-fileszMExtra files that trigger a reload on change. Multiple paths are separated by rI)rbrrz--exclude-patternsznFiles matching these fnmatch patterns will not trigger a reload on change. Multiple patterns are separated by rhostportintreloaddebugger with_threadsrTCssl.SSLContext | tuple[str, str | None] | t.Literal['adhoc'] | None extra_fileslist[str] | Noneexclude_patternsc B |} nD#t$r7} trtj| d fd } n| dYd} ~ nd} ~ wwxYwt } || }|| }t | |jt||| |||||| dS) aRun a local development server. This server is for development purposes only. It does not provide the stability, security, or performance of production WSGI servers. The reloader and debugger are enabled by default with the '--debug' option. rrstart_responserrcabc.Iterable[bytes]c drOr)rrnr s rr zrun_command..apps t#rN) use_reloader use_debuggerthreaded ssl_contextrjrl)rrrnrrro) rrr r print_excr r@rr) rrcrdrfrgrhrTrjrlr r6rr s @rrrzsP#}}  # % %    ! ! !C $ $ $ $ $ $ $  $ $ $ $ $"   E ~ud2333   )      s A-AAshellzRun a shell in the app context.cddl}dtjdtjdtjdtj}i}tj d}|rwtj |rXt|5}tt||d|dddn #1swxYwY|t jt%td d}|I ddl}dd lm}|||jn#t0$rYnwxYw|||| dS) a:Run an interactive Python shell in the context of a given Flask application. The application will populate the default namespace of this shell according to its configuration. This is useful for executing small snippets of management code without having to manually configure the application. rNrz on z App: z Instance: PYTHONSTARTUPexec__interactivehook__) Completer)bannerlocal)coder=rrr r instance_pathrhrrUrdr5openrGcompilereadrmake_shell_contextr+readline rlcompleterr{ set_completercompleterinteract)r~r|rstartupr8interactive_hookrr{s rrrsKKK 1#+ 1 13< 1 1' 1 1 . 1 1 Cjnn_--G:27>>'**: ']] :a 7F33S 9 9 9 : : : : : : : : : : : : : : :JJ{-//000 s$94@@# < OOO - - - - - -  " "99S>>#: ; ; ; ;     D  MMsM+++++s$ 2C  CC E EErouteszShow the routes for the app.z--sortz-s)endpointmethodsdomainrulematchrzgMethod to sort routes by. 'match' is the order that Flask will match routes when dispatching a request.)rrbrz --all-methodszShow HEAD and OPTIONS methods.)rrsort all_methodsc ttj}|st jddS|rt nddh}tjj t fd|D}g |D]}|j d t|j p t |z g}|r%| r|jn|jpd| |j |dd g}d d g}|r.| rd nd | d| d| d t%||n#t($rYnwxYw d| fdt-t/|D} dd| Dd dt1| D} D]}t j| j|dS)z6Show all registered routes with endpoints and methods.zNo routes were registered.NHEADOPTIONSc38K|]}r|jn|jVdSrO)rc subdomain)r$r host_matchings r z!routes_command..7s0VV-CTYYT^VVVVVVrz, r*EndpointMethodsrrHost SubdomainrRuler)r;rcHg|]tfdDS)c3BK|]}t|VdSrO)r.)r$rowis rrz,routes_command...Vs-..##c!f++......r)max)r$rrowss @rr&z"routes_command..Vs7 L L L1c......... L L Lrr cg|]}d|zS)-r)r$ws rr&z"routes_command..Ws,,,C!G,,,rz c3.K|]\}}d|d|dVdS){z:<}Nr)r$rrs rrz!routes_command..Xs4GGTQa1GGGGGGr)rr url_map iter_rulesrrrranyrrprrrnrcrrrrindexr]rqranger. enumerateformat) rrrulesignored_methods has_domainrrheaderssortswidthstemplaterrs @@rrr s $//11 2 2E  /000*Cceee0CO'5MVVVVPUVVVVVJ D   M IIfdl3ceeFGG H H   O JJ]F M2 N N N 49 C9%G  #E?vvK@@@ X NN6 LL  jT!2!233 4444       KK7 L L L Lc'll8K8K L L LFKK,,V,,,---yyGGYv5F5FGGGGGH** ?8?C())))**s6F<< G G rzA general utility script for Flask applications. An application to load must be given with the '--app' option, 'FLASK_APP' environment variable, or with a 'wsgi.py' or 'app.py' file in the current directory. )r`rc8tdSrO)rmainrrrrrjsHHJJJJJr__main__)rrrr)r8r9rr:)rrrDrErr)rdrErrE)T)rtrErDrvrwrxrr).)rtrErDrvrwr|rr})rtrErDrvrwr:rr})rrrrrPrrr)r8rrr)rrrrrPrvrrv)rrrrrPr:rr)rdrEr)rErr:)NT)rdr.rr:rr:)rr:rrvrr)rrrrrPrrr)rrrcrErdrerfr:rgr:rhr:rTrirjrkrlrkrrr()rrErr:rr)] __future__rrKcollections.abcabccabcimportlib.metadatarr/rhrrr=rtypingt functoolsroperatorrtypesrr click.corerrrwerkzeug.servingr werkzeug.utilsr globalsr helpersr r TYPE_CHECKINGrL_typeshed.wsgirrrr r UsageErrorrr7r2rcruoverloadr{rOptionrrmake_pass_decoratorpass_script_infoTypeVarCallableAnyrrGrouprrrrrrrFrrr-rr@ ParamTyperBrXrZroptionrdpathseprrrqrChoicerrrrrrrrs""""""   $$$$$$ &&&&&&555555(((((( ######$$$$$$?JJJ,,,,,,............>>>>>U%>>>2222j4MMMM`'''':RV  SV  HL444444     M "    OOOOOOOOd-5,ZEEE AIcCJ/000((((2 . . . . .u{ . . .Fel 7O        "     0 5< < 4% 0 0 0 Q    e-e-e-e-e-e-e-e-PJJJJGKAAAAAH A A A A-----EO---`$$$$N C C C C C C C Cu!<=== hk8STTT hd1GHHH   3    4%d C C C  =   %   % &  ,       2W_ 2 2 2       ! GO ! ! !   :::      IHUT>=j:z !]+++w#DEEE,,,,,,FE,,^x$BCCC   H I I  '   ot2RSSS.*.*.*TS  DC.*bj      zDFFFFFr