uMSc@sRdZddlmZddlmZddlmZddlmZddlm Z m Z ddl m Z ddl Z dd lmZddlZddlZddlZdd lmZddlZddlZdd lmZdd lmZmZdd lmZddlmZddlm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&m'Z'ddl(m)Z)ddl*m+Z+m,Z,ddddddgZ-dZ.defdYZ/defdYZ0dZ1defdYZ2defdYZ3de4fd YZ5d!Z6e7d"Z8gd#Z9e:d$krNe6ndS(%s3Frontends for the message extraction functionality.i(tRawConfigParser(tdatetime(tlog(tCommand(tDistutilsOptionErrortDistutilsSetupError(tgetpreferredencodingN(t OptionParser(tStringIO(t __version__(tLocalet localedata(tUnknownLocaleError(tCatalog(textract_from_dirtDEFAULT_KEYWORDStDEFAULT_MAPPING(twrite_mo(tread_potwrite_po(tPLURALS(todicttLOCALTZtCommandLineInterfacetcompile_catalogtextract_messagest init_catalogtcheck_message_extractorstupdate_catalogsrestructuredtext enc BsVeZdZdZddddddd gZddgZdZdZdZ RS(!sCatalog compilation command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import compile_catalog setup( ... cmdclass = {'compile_catalog': compile_catalog} ) :since: version 0.9 :see: `Integrating new distutils commands `_ :see: `setuptools `_ s+compile message catalogs to binary MO filessdomain=tDs&domain of PO file (default 'messages')s directory=tds.path to base directory containing the catalogss input-file=tisname of the input files output-file=tosQname of the output file (default '//LC_MESSAGES/.po')slocale=tls locale of the catalog to compiles use-fuzzytfsalso include fuzzy translationst statisticss#print statistics about translationscCsCd|_d|_d|_d|_d|_t|_t|_dS(Ntmessages( tdomaintNonet directoryt input_filet output_filetlocaletFalset use_fuzzyR#(tself((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytinitialize_optionsVs      cCsJ|j r#|j r#tdn|j rF|j rFtdndS(Ns<you must specify either the input file or the base directory(R(R'RR)(R-((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytfinalize_options_sc Cs@g}g}|js!|jr|j|jtjj|j|jd|jdf|jtjj|j|jd|jdqxtj|jD]}tjj|j|d|jd}tjj |r|j||f|jtjj|j|d|jdqqWnd|j|j|jf|j rV|j|j n/|jtjj|j|jd|jd|st dnxt |D]\}\}}||}t |d}zt||}Wd|jX|jr~d} x.t|dD]} | jr| d7} qqWd} t|r\| dt|} ntjd | t|| |n|jr|j rtjd |qnxD|jD]6\} } x'| D]} tjd || j| qWqWtjd ||t |d }zt||d|jWd|jXqWdS(Nt LC_MESSAGESs.pos.mosno message catalogs foundtriiids)%d of %d messages (%d%%) translated in %rs'catalog %r is marked as fuzzy, skippingserror: %s:%d: %sscompiling catalog %r to %rtwbR,(R(R*tappendtostpathtjoinR'R%tlistdirtexistsR)Rt enumeratetopenRtcloseR#tlisttstringtlenRtinfotfuzzyR,twarntcheckterrortlinenoR(R-tpo_filestmo_filesR*tpo_filetidxtmo_filetinfiletcatalogt translatedtmessaget percentageterrorsRCtoutfile((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytrungsn           (sdomain=Rs&domain of PO file (default 'messages')(s directory=Rs.path to base directory containing the catalogs(s input-file=Rsname of the input file(s output-file=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s locale of the catalog to compile(s use-fuzzyR"salso include fuzzy translationsN(s statisticsNs#print statistics about translations( t__name__t __module__t__doc__t descriptionR&t user_optionstboolean_optionsR.R/RQ(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR/s(   cBseZdZdZd,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;gZdd ddddd#gZd'Zd(Zd)Z d*Z RS(<sjMessage extraction command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import extract_messages setup( ... cmdclass = {'extract_messages': extract_messages} ) :see: `Integrating new distutils commands `_ :see: `setuptools `_ s1extract localizable strings from the project codescharset=s!charset to use in the output files keywords=tksHspace-separated list of keywords to look for in addition to the defaultssno-default-keywordss#do not include the default keywordss mapping-file=tFs&path to the mapping configuration files no-locations>do not include location comments with filename and line numbers omit-headers'do not include msgid "" entry in headers output-file=R sname of the output fileswidth=tws"set output line width (default 76)sno-wrapsVdo not break long message lines, longer than the output line width, into several liness sort-outputs&generate sorted output (default False)s sort-by-files,sort output by file location (default False)smsgid-bugs-address=sset report address for msgidscopyright-holder=sset copyright holder in outputs add-comments=tcsuplace comment block with TAG (or those preceding keyword lines) in output file. Seperate multiple TAGs with commas(,)sstrip-commentss)strip the comment TAGs from the comments.s input-dirs=s/directories that should be scanned for messagescCsd|_d|_tj|_t|_d|_t|_ t|_ d|_ d|_ d|_ t|_t|_t|_d|_d|_d|_g|_t|_dS(Nsutf-8t(tcharsettkeywordsRtcopyt _keywordsR+tno_default_keywordsR&t mapping_filet no_locationt omit_headerR)t input_dirstwidthtno_wrapt sort_outputt sort_by_filetmsgid_bugs_addresstcopyright_holdert add_commentst _add_commentststrip_comments(R-((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR.s$                c Csr|jr"|j r"tdn|jr7i|_n|jrb|jjt|jjn|jsztdn|jr|j rtdn|j r|j rd|_ n$|j dk rt |j |_ n|j r|j rtdn|jsMtjg|jjD]}|jddd^qj|_n|jrn|jjd |_ndS( Ns=you must specify new keywords if you disable the default onessno output file specifieds0'--no-wrap' and '--width' are mutually exclusiveiLs;'--sort-output' and '--sort-by-file' are mutually exclusivet.iit,(RaR^RR`tupdatetparse_keywordstsplitR)RgRfR&tintRhRiRetdicttfromkeyst distributiontpackagestkeysRlRm(R-RX((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR/s*   "    ; c s|j}t|jd}zYtd|jjd|jjd|jd|jd|j }x|j D]\\}}fd}t ||d|j d |j d |d |j}x]|D]U\}} } } tjjtjj|} |j| d| | fgd | qWqpWtjd |jt||d|jd|jd|jd|jd|jWd|jXdS(NRZtprojecttversionRjRkR]cs|dkrdStjjtjj|}d}|r|ddjg|jD]\}}d||f^qS}ntjd||dS(NtignoreR\s (%s)s, s%s="%s"sextracting messages from %s%s(R4R5tnormpathR6titemsRR?(tfilenametmethodtoptionstfilepathtoptstrRXtv(tdirname(s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytcallback)s ! 3R^t comment_tagsRtstrip_comment_tagst auto_commentsswriting PO template file to %sRfRcRdRhRi(t _get_mappingsR:R)R Rwtget_namet get_versionRjRkR]R~RR`RmRnR4R5R}R6taddR&RR?RRfRcRdRhRiR;( R-tmappingsRPRKt method_mapt options_mapRt extractedRRDRMtcommentsR((Rs;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRQs4        !   c CsYi}|jrlt|jd}z:t|\}}x!|jD]}||f||do not include location comments with filename and line number(s omit-headerNs'do not include msgid "" entry in header(s output-file=R sname of the output file(swidth=RZs"set output line width (default 76)(sno-wrapNsVdo not break long message lines, longer than the output line width, into several lines(s sort-outputNs&generate sorted output (default False)(s sort-by-fileNs,sort output by file location (default False)(smsgid-bugs-address=Nsset report address for msgid(scopyright-holder=Nsset copyright holder in output(s add-comments=R[suplace comment block with TAG (or those preceding keyword lines) in output file. Seperate multiple TAGs with commas(,)(sstrip-commentsNs)strip the comment TAGs from the comments.(s input-dirs=Ns/directories that should be scanned for messages( RRRSRTRUR&RVRWR.R/RQR(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRsP     )cCs"t|tstdndS(sValidate the ``message_extractors`` keyword argument to ``setup()``. :param dist: the distutils/setuptools ``Distribution`` object :param name: the name of the keyword argument (should always be "message_extractors") :param value: the value of the keyword argument :raise `DistutilsSetupError`: if the value is not valid :see: `Adding setup() arguments `_ sDthe value of the "message_extractors" parameter must be a dictionaryN(RRuR(tdisttnametvalue((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRfs cBsDeZdZdZdddddgZdZdZdZRS(sfNew catalog initialization command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import init_catalog setup( ... cmdclass = {'init_catalog': init_catalog} ) :see: `Integrating new distutils commands `_ :see: `setuptools `_ s(create a new catalog based on a POT filesdomain=Rs&domain of PO file (default 'messages')s input-file=Rsname of the input files output-dir=Rspath to output directorys output-file=R sQname of the output file (default '//LC_MESSAGES/.po')slocale=R!s$locale for the new localized catalogcCs1d|_d|_d|_d|_d|_dS(NR$(R&t output_dirR)R(R*R%(R-((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR.s     cCs |jstdn|js0tdnytj|j|_Wntk rj}t|nX|j r|j rtdn|jst j j |j|jd|j d|_nt j j t j j|jst jt j j|jndS(Nsyou must specify the input files-you must provide a locale for the new catalogs%you must specify the output directoryR0s.po(R(RR*R tparset_localeR R)RR4R5R6R%R8Rtmakedirs(R-te((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR/s   !cCstjd|j|jt|jd}zt|d|j}Wd|jX|j|_t |_ t|jd}zt ||Wd|jXdS(Nscreating catalog %r based on %rR1R*RZ( RR?R)R(R:RR*R;RR+R@R(R-RJRKRP((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRQs    (sdomain=Rs&domain of PO file (default 'messages')(s input-file=Rsname of the input file(s output-dir=Rspath to output directory(s output-file=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s$locale for the new localized catalog(RRRSRTRURVR.R/RQ(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRws   c Bs\eZdZdZdddd d!d#d$d%gZdddgZdZdZdZ RS(&syCatalog merging command for use in ``setup.py`` scripts. If correctly installed, this command is available to Setuptools-using setup scripts automatically. For projects using plain old ``distutils``, the command needs to be registered explicitly in ``setup.py``:: from babel.messages.frontend import update_catalog setup( ... cmdclass = {'update_catalog': update_catalog} ) :since: version 0.9 :see: `Integrating new distutils commands `_ :see: `setuptools `_ s'update message catalogs from a POT filesdomain=Rs&domain of PO file (default 'messages')s input-file=Rsname of the input files output-dir=Rs.path to base directory containing the catalogss output-file=R sQname of the output file (default '//LC_MESSAGES/.po')slocale=R!s locale of the catalog to compilesignore-obsolete=s1whether to omit obsolete messages from the outputsno-fuzzy-matchingtNsdo not use fuzzy matchingtpreviouss+keep previous msgids of translated messagestignore_obsoletetno_fuzzy_matchingcCsLd|_d|_d|_d|_d|_t|_t|_t|_ dS(NR$( R%R&R(RR)R*R+RRR(R-((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR.s       cCs|jstdn|j r;|j r;tdn|jr]|j r]tdn|jr{|jr{t|_ndS(Nsyou must specify the input files-you must specify the output file or directorysyou must specify the locale(R(RR)RR*RRR+(R-((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyR/s c Csg}|js|jrS|j|jtjj|j|jd|jdfqxtj|jD]S}tjj|j|d|jd}tjj |rf|j||fqfqfWn|j|j|jf|j}|stjj tjj |j d}nt |j d}zt|}Wd|jX|sUtdnx]|D]U\}}tjd||j t |d}zt|d|d|}Wd|jX|j||jtjjtjj|tjtjj |} t | d } y5z#t| |d |jd |jWd| jXWntj| nXytj| |Wq\tk rtj|tj| |tj| q\Xq\WdS( NR0s.poiRsno message catalogs foundsupdating catalog %r based on %rR*R%RZRtinclude_previous( R)R*R3R4R5R6RR%R7R8tsplitexttbasenameR(R:RR;RRR?RqRRttempfilet gettempprefixRRRtremovetrenametOSErrortshutilR_( R-RER*RGR%RJttemplateRRKttmpnamettmpfile((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRQsd    (          (sdomain=Rs&domain of PO file (default 'messages')(s input-file=Rsname of the input file(s output-dir=Rs.path to base directory containing the catalogs(s output-file=R sQname of the output file (default '//LC_MESSAGES/.po')(slocale=R!s locale of the catalog to compileN(signore-obsolete=Ns1whether to omit obsolete messages from the output(sno-fuzzy-matchingRsdo not use fuzzy matching(spreviousNs+keep previous msgids of translated messages( RRRSRTRUR&RVRWR.R/RQ(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs,  cBseZdZdZdeZidd6dd6dd6d d 6Zejd Z d Z d Z dZ dZ dZdZRS(sCommand-line interface. This class provides a simple command-line interface to the message extraction and PO file generation functionality. s%%prog %s [options] %ss %%prog %ss$compile message catalogs to MO filestcompiles:extract messages from source files and generate a POT filetextracts+create new message catalogs from a POT filetinits0update existing message catalogs from a POT fileRqc Cstd|jdd|j|_|jj|j|j_|jjddddd d d |jjd d dddddtj d d|jjdddddddtj d d|jj dt dtj |jj|d\}}|j|j|jrtj}tg|D]}t|^q#}|jd|d}xV|D]N}tj|}|||jf} | jtjjptpddGHq]WdS|s|jjdn|d} | |j kr|jjd| nt!|| |dS(s{Main entry point of the command-line interface. :param argv: list of arguments passed on the command-line tusagetcommands[args]R{s--list-localestdestt list_localestactiont store_truethelps print all known locales and exits-vs --verboset store_consttlogleveltconstsprint as much as possibles-qs--quietsprint as little as possibleiu %%-%ds %%stasciitreplaceisQno valid command or option passed. Try the -h/--help option for more information.sunknown command "%s"(scommands[args]("RRR{tparsertdisable_interspersed_argst_helpt print_helpt add_optiontloggingtDEBUGtERRORt set_defaultsR+tINFOt parse_argst_configure_loggingRRR R<tmaxR>tsortR Rt english_nametencodetsyststdouttencodingRRCtcommandsR( R-targvRtargst identifierst identifiertlongesttformatR*toutputtcmdname((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRQ^sD   %    cCstjd|_|jj||jjrA|jjd}ntj}|jj||j|tjd}|j|dS(Ntbabelis %(message)s( Rt getLoggerRtsetLevelthandlerst StreamHandlert addHandlert Formattert setFormatter(R-Rthandlert formatter((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs   cCs|jjGHdGHtg|jD]}t|^q }dtd|d}|jj}|jx#|D]\}}|||fGHqrWdS(Ns commands:s %%-%ds %%sii(Rt format_helpRRR>R~R(R-RRRRRRU((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs( c Cstd|jd9d|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jdd dd!d"d#d d$|jd%dd&d"d#d d'|jdd(d!td)td&t|j|\}}g}g}|jsy|jsm|j d*n|j r|j |j t j j|j|j d+|jd,f|j t j j|j|j d+|jd-qxt j|jD]}t j j|j|d+|jd,}t j j|r|j ||f|j t j j|j|d+|jd-qqWn}|j |j |jf|jr|j |jnH|js|j d*n|j t j j|j|j d+|jd-|s |j d.nxt|D]\} \}}|| } t|d/} zt| |} Wd0| jX|jrd1} x.t| d2D]}|jr| d27} qqWd1}t| r| d3t| }n|jjd4| t| ||n| jr|j r|jjd5|qnxG| j D]9\}}x*|D]"}|jj d6||j!|q?Wq,W|jjd7|| t| d8}zt"|| d!|jWd0|jXqWd0S(:sSubcommand for compiling a message catalog to a MO file. :param argv: the command arguments :since: version 0.9 RRR\RUs--domains-DRR%Rs.domain of MO and PO files (default '%default')s --directorys-dR'tmetavartDIRsbase directory of catalog filess--locales-lR*tLOCALEslocale of the catalogs --input-files-iR(tFILEsname of the input files --output-files-oR)sQname of the output file (default '//LC_MESSAGES/.mo')s --use-fuzzys-fR,RRs2also include fuzzy translations (default %default)s --statisticsR#s#print statistics about translationsR$t compile_alls<you must specify either the input file or the base directoryR0s.pos.mosno message catalogs foundR1Niiids)%d of %d messages (%d%%) translated in %rs'catalog %r is marked as fuzzy, skippingserror: %s:%d: %sscompiling catalog %r to %rR2(scompileR\(#RRRRRR+RR(R'RCR*R3R4R5R6R%R7R8R)R9R:RR;R#R<R=R>RR?R@R,RARBRDR(R-RRRRRERFR*RGRHRIRJRKRLRMRNRORCRP((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs                  csctdjdWdjd}|jddddd |jd d dd d ddd|jdddd ddd|jdddddd|jdddd ddd|jdddd ddd|jdddd dd!|jd"d#dd$d%d&dd'|jd(dd)d ddd*|jd+dd,d ddd-|jd.dd/d ddd0|jd1dd2d3d4dd5|jd6dd7dd8|jd9dd:dd;|jd<dd=dd>|jd?d@ddAd3dBd dddC|jdDdEddFd dddG|jddHd gdtdtdtd$dNd)td,td/tdAgdFt |j|\}}|s|jdIn|j dXkrt |j dK}n t j }t j}|jr|js|jdLni}n|jr#|jt|jn|jret |jdM}zt|\}} WdN|jXn t}i} |jr|jr|jdOn |j r|j rdP|_n|jr|jr|jdQnzptd:|jd=|jd2|jd7|jd|j } x|D]t!j"j#sA|jdRnfdS} t$|| ||j%dT| dF|j&} x]| D]U\} }}}t!j"j't!j"j(| }| j)|dN||fgdU|qWqW|j dYkr j*j+dV|j nt,|| d$|jd|j-d|j.d,|jd/|jWdN|j r^|jnXdNS(ZsSubcommand for extracting messages from source files and generating a POT file. :param argv: the command arguments RRsdir1 ...RUs --charsetRR]Rs1charset to use in the output (default "%default")s-ks --keywordR^RR3shkeywords to look for in addition to the defaults. You can specify multiple -k flags on the command line.s--no-default-keywordsRaRs#do not include the default keywordss --mappings-FRbs#path to the extraction mapping files --no-locationRcs>do not include location comments with filename and line numbers --omit-headerRds'do not include msgid "" entry in headers-os--outputRspath to the output POT files-ws--widthRfttypeRts"set output line width (default 76)s --no-wrapRgsVdo not break long message lines, longer than the output line width, into several liness --sort-outputRhs&generate sorted output (default False)s--sort-by-fileRis,sort output by file location (default False)s--msgid-bugs-addressRjRs EMAIL@ADDRESSsset report address for msgids--copyright-holderRksset copyright holder in outputs --projectRzsset project name in outputs --versionR{sset project version in outputs--add-commentss-cRtTAGsiplace comment block with TAG (or those preceding keyword lines) in output file. One TAG per argument calls--strip-comment-tagss-sRs)Strip the comment tags from the comments.sutf-8sincorrect number of argumentst-RZs=you must specify new keywords if you disable the default onesRNs1'--no-wrap' and '--width' are mutually exclusive.iLs;'--sort-output' and '--sort-by-file' are mutually exclusives%r is not a directorycs|dkrdStjjtjj|}d}|r|ddjg|jD]\}}d||f^qS}njjd||dS(NR|R\s (%s)s, s%s="%s"sextracting messages from %s%s(R4R5R}R6R~RR?(RRRRRRXR(RR-(s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs ! 3RRswriting PO template file to %s(sextractsdir1 ...(NR(NR(/RRRRRR+R&RRCRR:RRRR_RaR^RqRrRbRR;RRfRgRhRiR RzR{RjRkR]R4R5tisdirRRRR}R6RRR?RRcRd(R-RRRRRPR^RRRRKRRRRDRMRR((RR-s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRs                     !    c Cstd|jd)d|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jdd|j|\}}|js|jd nytj |j}Wn t k r=}|j|nX|j sW|jd!n|j r{|j r{|jd"n|j stjj|j |jd#|jd$|_ ntjjtjj|j stjtjj|j nt|j d%}zt|d|j}Wd&|jX||_tjt|_|jjd'|j |j t|j d(} zt| |Wd&| jXd&S(*srSubcommand for creating new message catalogs from a template. :param argv: the command arguments RRR\RUs--domains-DRR%Rs&domain of PO file (default '%default')s --input-files-iR(RRsname of the input files --output-dirs-dRRspath to output directorys --output-files-oR)sQname of the output file (default '//LC_MESSAGES/.po')s--locales-lR*Rs$locale for the new localized catalogR$s-you must provide a locale for the new catalogsyou must specify the input files-you must specify the output file or directoryR0s.poR1Nscreating catalog %r based on %rRZ(sinitR\(RRRRRRR*RCR RR R(R)RR4R5R6R%R8RRR:RR;RtnowRt revision_dateRR?R( R-RRRRR*RRJRKRP((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRsV      !   c Cstd|jd8d|jd}|jddddd d |jd d dd ddd d|jddddddd d|jddddddd d|jddddddd d|jddd d!d"d d#|jd$d%dd&d!d"d d'|jd(dd)d!d"d d*|jdd+d td&td)t|j|\}}|jsw|jd,n|j r|j r|jd-n|j r|j r|jd.n|j r|j rt|_ ng}|j s|j r/|j|j tjj|j |j d/|jd0fqxtj|j D]S}tjj|j |d/|jd0}tjj|rB|j||fqBqBWn|j|j |j f|j}|stjjtjj|jd1}nt|jd2} zt| } Wd3| jX|s2|jd4nx`|D]X\}} |jjd5| |jt| d2} zt| d|d|} Wd3| jX| j| |j tjjtjj| tjtjj| } t| d6}y5z#t || d |j!d7|j Wd3|jXWntj"| nXytj#| | Wq9t$k rtj"| t%j&| | tj"| q9Xq9Wd3S(9sSubcommand for updating existing message catalogs from a template. :param argv: the command arguments :since: version 0.9 RRqR\RUs--domains-DRR%Rs&domain of PO file (default '%default')s --input-files-iR(RRsname of the input files --output-dirs-dRRspath to output directorys --output-files-oR)sQname of the output file (default '//LC_MESSAGES/.po')s--locales-lR*Rs"locale of the translations catalogs--ignore-obsoleteRRRsAdo not include obsolete messages in the output (default %default)s--no-fuzzy-matchings-NRs,do not use fuzzy matching (default %default)s --previousRs>keep previous msgids of translated messages (default %default)R$syou must specify the input files-you must specify the output file or directorysyou must specify the localeR0s.poiRNsno message catalogs foundsupdating catalog %r based on %rRZR(supdateR\('RRRRRR+RR(RCR)RR*RRR3R4R5R6R%R7R8RRR:RR;RR?RqRRRRRRRRRR_(R-RRRRRER*RGR%RJRRRKRR((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRqs          (         (RRRSRTRtVERSIONR{RRRRQRRRRRRq(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRNs  .  k @cCstjtjS(N(RRQRR(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytmainQsc Cs4i}g}i}t}t|j|_|j||x|jD]}|dkrtt|j|}qJg|jddD]}|j^q\}} |j | |ft|j||| >> buf = StringIO(''' ... [extractors] ... custom = mypackage.module:myfunc ... ... # Python source files ... [python: **.py] ... ... # Genshi templates ... [genshi: **/templates/**.html] ... include_attrs = ... [genshi: **/templates/**.txt] ... template_class = genshi.template:TextTemplate ... encoding = latin-1 ... ... # Some custom extractor ... [custom: **/custom/*.*] ... ''') >>> method_map, options_map = parse_mapping(buf) >>> len(method_map) 4 >>> method_map[0] ('**.py', 'python') >>> options_map['**.py'] {} >>> method_map[1] ('**/templates/**.html', 'genshi') >>> options_map['**/templates/**.html']['include_attrs'] '' >>> method_map[2] ('**/templates/**.txt', 'genshi') >>> options_map['**/templates/**.txt']['template_class'] 'genshi.template:TextTemplate' >>> options_map['**/templates/**.txt']['encoding'] 'latin-1' >>> method_map[3] ('**/custom/*.*', 'mypackage.module:myfunc') >>> options_map['**/custom/*.*'] {} :param fileobj: a readable file-like object containing the configuration text to parse :return: a `(method_map, options_map)` tuple :rtype: `tuple` :see: `extract_from_directory` t extractorst:i( RRt _sectionstreadfptsectionsRuR~RststripR3R9( RRRRRRtsectiontpartRRRH((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRTs$3  1  cCsi}x|D]}d|kr7|jd\}}n |d}}||kr |rtg|jdD]}t|^qi}n|||>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']).items() >>> kw.sort() >>> for keyword, indices in kw: ... print (keyword, indices) ('_', None) ('dgettext', (2,)) ('dngettext', (2, 3)) RRpN(RsR&ttupleRt(tstringsR^R=tfuncnametindicestx((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pyRrs     1t__main__(;RTt ConfigParserRRt distutilsRt distutils.cmdRtdistutils.errorsRRR*RRtoptparseRR4treRRRRRR RR R t babel.coreR tbabel.messages.catalogR tbabel.messages.extractRRRtbabel.messages.mofileRtbabel.messages.pofileRRtbabel.messages.pluralsRt babel.utilRRt__all__t __docformat__RRRRRtobjectRRR&RRrRR(((s;/usr/lib/python2.7/site-packages/babel/messages/frontend.pytsN        S  J