ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@sdZddlZddlmZddlmZddlmZddlmZdd lm Z d e fd YZ d Z d Z dZdZdZdS(sProvides the :class:`~sqlalchemy.engine.url.URL` class which encapsulates information about a database connection specification. The URL object is created automatically when :func:`~sqlalchemy.engine.create_engine` is called with a string argument; alternatively, the URL is a public-facing construct which can be used directly and is also accepted directly by ``create_engine()``. iNi(tDialecti(texc(tutil(tplugins(tregistrytURLcBseZdZdddddddZedZdZdZdZ dZ dZ e dZ e jd Z d Zd Zd Zd ZdZgdZRS(sX Represent the components of a URL used to connect to a database. This object is suitable to be passed directly to a :func:`~sqlalchemy.create_engine` call. The fields of the URL are parsed from a string by the :func:`.make_url` function. the string format of the URL is an RFC-1738-style string. All initialization parameters are available as public attributes. :param drivername: the name of the database backend. This name will correspond to a module in sqlalchemy/databases or a third party plug-in. :param username: The user name. :param password: database password. :param host: The name of the host. :param port: The port number. :param database: The database name. :param query: A dictionary of options to be passed to the dialect and/or the DBAPI upon connect. cCsg||_||_||_||_|dk rBt||_n d|_||_|p]i|_dS(N( t drivernametusernametpassword_originalthosttNonetinttporttdatabasetquery(tselfRRtpasswordR R R R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__init__8s       csOjd}jdk rq|tj7}jdk rd|d|rPdn tj7}n|d7}njdk rdjkr|dj7}q|j7}njdk r|dtj7}njdk r|dj7}nj rKt j }|j |ddj fd |D7}n|S( Ns://t:s***t@s[%s]t/t?t&c3s<|]2}tjj|D]}d||fVqqdS(s%s=%sN(Rtto_listR(t.0tktelement(R(sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pys cs( RRR t_rfc_1738_quoteRR R tstrR Rtlisttsorttjoin(Rt hide_passwordtstkeys((RsH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt __to_string__Ms,       cCs|jdtS(NR (R#tFalse(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__str__iscCs |jS(N(R#(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__repr__lscCstt|S(N(thashR(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__hash__oscCst|to|j|jko|j|jko|j|jko|j|jko|j|jko|j|jko|j|jkS(N( t isinstanceRRRRR R RR (Rtother((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__eq__rscCs ||k S(N((RR*((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt__ne__~scCs'|jdkrdStj|jSdS(N(RR Rt text_type(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyRscCs ||_dS(N(R(RR((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyRscCs.d|jkr|jS|jjddSdS(Nt+i(Rtsplit(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pytget_backend_namescCs4d|jkr|jjS|jjddSdS(NR.i(Rt get_dialecttdriverR/(R((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pytget_driver_names cCs]tj|jjdd}||jdg7}g|D]}tj|||^q;S(NtpluginR((RRRtgetRtload(Rtkwargst plugin_namest plugin_name((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt_instantiate_pluginsscCsd|jkr|j}n|jjdd}tj|}t|dryt|jtryt|jt ry|jS|SdS(sReturn the "entry point" dialect class. This is normally the dialect itself except in the case when the returned class implements the get_dialect_cls() method. R.t.tdialectN( RtreplaceRR6thasattrR)R<ttypet issubclassR(Rtnametcls((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt_get_entrypoints cCs|j}|j|}|S(sfReturn the SQLAlchemy database dialect class corresponding to this URL's driver name. (RCtget_dialect_cls(Rt entrypointt dialect_cls((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyR1s cKsi}dddddg}xy|D]q}|r@|jd}n||krY||}n|}|dk r"t||tr"t||||[\w\+]+):// (?: (?P[^:/]*) (?::(?P.*))? @)? (?: (?: \[(?P[^/]+)\] | (?P[^/:]+) )? (?::(?P[^/]*))? )? (?:/(?P.*))? R RiiitasciiRRRtipv4hosttipv6hostR RAs,Could not parse rfc1738 URL from string '%s'(tretcompiletXtmatchR t groupdictR/tlenRt parse_qsltpy2ktencodeRtappendt_rfc_1738_unquoteRGRRt ArgumentError( RAtpatterntmt componentsttokensRtkeytvalueRZR[((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyRVs@         cCstjdd|S(Ns[:@/]cSsdt|jdS(Ns%%%Xi(tordtgroup(Ri((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt(t(R\tsub(ttext((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyR'scCs tj|S(N(Rtunquote(Rs((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyRf+scCs`tjd|}|dk rX|jdd\}}ttj|}t||SdSdS(Ns (\w+)://(.*)ii(R\R_R RotdictRRbR(RARitargstopts((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyt_parse_keyvalue_args/s   (RQR\t interfacesRRqRRtdialectsRRtobjectRRXRVRRfRx(((sH/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/engine/url.pyts  =