B 4]&@sdZddlmZddlmZddlmZddlmZddlmZdd lmZ dd lm Z dd l m Z iZ Gd d d eZGdddeZGdddeZeGdddeZeGdddeZedS)aqStrategies for creating new instances of Engine types. These are semi-private implementation classes which provide the underlying behavior for the "strategy" keyword argument available on :func:`~sqlalchemy.engine.create_engine`. Current available options are ``plain``, ``threadlocal``, and ``mock``. New strategies can be added via new ``EngineStrategy`` classes. ) attrgetter)base) threadlocal)url)event)pool)util)schemac@s eZdZdZddZddZdS)EngineStrategyzAn adaptor that processes input arguments and produces an Engine. Provides a ``create`` method that receives input arguments and produces an instance of base.Engine or a subclass. cCs|t|j<dS)N) strategiesname)selfrO/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/engine/strategies.py__init__(szEngineStrategy.__init__cOs tdS)z/Given arguments, returns a new Engine instance.N)NotImplementedError)rargskwargsrrrcreate+szEngineStrategy.createN)__name__ __module__ __qualname____doc__rrrrrrr sr c@seZdZdZddZdS)DefaultEngineStrategyz#Base class for built-in strategies.c sFt|}|}|jdddd|}||ddr^d'fdd }nj}i}x&tD]}|krt||||<qtWdd} | dkri} x(t j D]}|kr||| |<qWj f| } | |d<x|D]} | |qWf| |\ |d it|d d} | dkrd(fd d } |d | }|dd}|dkr~|}di}dddddddddd }x6t|D](}|||}|kr||||<qWx|D]} | ||qW||f|} n(t| tjjr| j} n| } | _|j}i}x*t|D]}|kr>||||<q>Wdd}rtddddDjj| jj|jf|| |f||r rfd d!}t| d"|t| d#|fd$d%}tj| d"|dd& |k r(| x|D]} | q.WS))NpluginpluginsZ_coerce_configFcs(||}|jkr$j||}|S)N)popZengine_config_types)keydefaultvalue) dialect_clsrrr pop_kwargBs  z/DefaultEngineStrategy.create..pop_kwargmoduledbapiZ connect_argsr cs>jr2x*jjD]}||}|dk r|SqWjS)N) _has_eventsdispatchZ do_connectconnect)connection_recordfn connection)cargscparamsdialectrrr(js z-DefaultEngineStrategy.create..connectcreator poolclassr.Zpool_logging_nameZ echo_poolZ pool_timeoutZ pool_recycleZ pool_eventsZpool_threadlocalZpool_reset_on_returnZ pool_pre_pingZ pool_use_lifo) Z logging_nameZechoZtimeoutZrecycleZeventsZuse_threadlocalZreset_on_returnZpre_pingZuse_lifo _initializeTzInvalid argument(s) %s sent to create_engine(), using configuration %s/%s/%s. Please check that the keyword arguments are appropriate for this combination of components.,css|]}d|VqdS)z'%s'Nr).0krrr sz/DefaultEngineStrategy.create..cs$t|d|}|dkrdS|dS)NZ _sqla_unwrap)getattr)dbapi_connectionr)Zconn) do_on_connectrr on_connects  z0DefaultEngineStrategy.create..on_connect first_connectr(cs4tj|dd}t|_||jdS)NF)r+r&)rZ Connectionr Z immutabledictZ_execution_optionsZ initializeZ do_rollbackr+)r7r)c)r.enginerrr:s    z3DefaultEngineStrategy.create..first_connect)once)N)N)!rmake_urlZ_instantiate_pluginsZqueryrZ_get_entrypointZget_dialect_clsr get_cls_kwargsZget_func_kwargsr%Zhandle_dialect_kwargsZcreate_connect_argsupdatelistZget_pool_classgetZhandle_pool_kwargs isinstancepoollibZ dbapi_proxyZ_DBProxyZget_pool_dialect engine_cls TypeErrorjoin __class__rr9rZlistenZengine_created)r name_or_urlrurZ entrypointr# dialect_argsr4r%Z dbapi_argsrr r(r/r0Z pool_args translateZtkZ engineclassZ engine_argsr1r9r:r)r,r-r.r"r8r<rrr4s                          zDefaultEngineStrategy.createN)rrrrrrrrrr1src@seZdZdZdZejZdS)PlainEngineStrategyz*Strategy for configuring a regular Engine.ZplainN)rrrrrrZEnginerFrrrrrNsrNc@seZdZdZdZejZdS)ThreadLocalEngineStrategyz=Strategy for configuring an Engine with threadlocal behavior.rN)rrrrrrZTLEnginerFrrrrrOsrOc@s.eZdZdZdZddZGdddejZdS)MockEngineStrategyzStrategy for configuring an Engine-like object with mocked execution. Produces a single mock Connectable object which dispatches statement execution to a passed-in function. Zmockc KsVt|}|}i}x(t|D]}||kr"||||<q"W|f|}t||S)N)rr>Z get_dialectr r?rrPMockConnection) rrJexecutorrrKr"rLr4r.rrrrs  zMockEngineStrategy.createc@seZdZddZeddZeedZeddZe dZ dd Z d d Z d d ZddZddZddZdddZddZdS)z!MockEngineStrategy.MockConnectioncCs||_||_dS)N)rEexecute)rr.rSrrrrsz*MockEngineStrategy.MockConnection.__init__cCs|S)Nr)srrr z*MockEngineStrategy.MockConnection.rEcCs|jjS)N)rEr)rTrrrrU rVNcKs|S)Nr)rrrrrcontextual_connectsz4MockEngineStrategy.MockConnection.contextual_connectcKs|S)Nr)rrrrrr(sz)MockEngineStrategy.MockConnection.connectcKs|S)Nr)rkwrrrexecution_optionssz3MockEngineStrategy.MockConnection.execution_optionscKs|jj||fd|i|S)Nr<)rEcompiler)rZ statementZ parametersrrrrrZsz*MockEngineStrategy.MockConnection.compilercKs0d|d<ddlm}|j|j|f||dS)NF checkfirstr)ddl)sqlalchemy.enginer\ZSchemaGeneratorr.traverse_single)rentityrr\rrrrs z(MockEngineStrategy.MockConnection.createcKs0d|d<ddlm}|j|j|f||dS)NFr[r)r\)r]r\Z SchemaDropperr.r^)rr_rr\rrrdrop&s z&MockEngineStrategy.MockConnection.dropcKs"d|d<||j|f||dS)NFr[)r.r^)rZvisitorcallableZelementr+rrrr _run_visitor.sz.MockEngineStrategy.MockConnection._run_visitorcOs tdS)N)r)rZobject_Z multiparamsZparamsrrrrS6sz)MockEngineStrategy.MockConnection.execute)N)rrrrpropertyr<rr.rr Z_schema_getterZschema_for_objectrWr(rYrZrr`rarSrrrrrQs     rQN) rrrrrrrZ ConnectablerQrrrrrPsrPN)roperatorrrrrrr rDr Zsqlr r objectr rrNrOrPrrrrs$        &P