ACC SHELL

Path : /usr/lib/python/site-packages/scout/
File Upload :
Current File : //usr/lib/python/site-packages/scout/__init__.pyc

uIc@sddkZddkZddkZddkZddklZlZlZlZddk	l
Z
ddkZddkZde
fdYZdefdYZde
fd	YZeiZd
e
fdYZdefd
YZeZeZeieieidefdYZdefdYZdefdYZdefdYZde
fdYZde
fdYZ de
fdYZ!de
fdYZ"de
fdYZ#d e
fd!YZ$d"e
fd#YZ%d$e
fd%YZ&d&e&fd'YZ'd(e
fd)YZ(d*e
fd+YZ)d,e
fd-YZ*d.e
fd/YZ+d0e+fd1YZ,d2e
fd3YZ-dS(4iN(tOptionParsertOptiontIndentedHelpFormattertOptionValueError(tSafeConfigParsert	SysConfigcBs>eZdZdZdZdZdZedZ	dZ
RS(s/usr/share/scouts.dbs
repos.confs/usr/share/locale/cCs
||_dS(N(tmodule_path(tclstpath((s./scout/__init__.pytsetupscCsId|i}x+d	D]#}|d|t||f7}qW|d}|S(
Ns%s {t	data_pathtdata_suffixtconfig_fileRt	i18n_paths%s : %st}(s	data_pathsdata_suffixsconfig_filesmodule_paths	i18n_path(t	__class__tgetattr(tselftrettattr((s./scout/__init__.pyt__str__s
!
N(t__name__t
__module__R
RRtNoneRR
tclassmethodR	R(((s./scout/__init__.pyRst	DevConfigcBseZedZRS(cCs%||_tii|d|_dS(Ns../i18n(RtosRtjoinR
(RR((s./scout/__init__.pyR	#s	(RRRR	(((s./scout/__init__.pyR!st
ConfigFactorycBsGeZdZeZeZedZedZ	edZ
RS(t cCstiitS(N(RRtdirnamet__file__(((s./scout/__init__.pytget_scout_path.scCs:ddk}ti}|ii}|i|djS(Nii(tdistutils.sysconfigRR t	sysconfigtget_python_libtfind(t	distutilsRtpl((s./scout/__init__.pytis_installed2scCs:ti}tip
ti}n|iti|S(N(Rt_ConfigFactory__SYSCONFIGR't_ConfigFactory__DEVCONFIGR	R (R((s./scout/__init__.pytcreate_config_class:s
	

(RRt__doc__RR(RR)tstaticmethodR R'R*(((s./scout/__init__.pyR(stDefaultLangcBs;eZdedZdZdZdZdZRS(tscoutcCsf||_||_ti\}}|p
d}nti|itid|dgdt|_	dS(NtCt	languagestfallback(
t_textdomaint_unicodetlocaletgetdefaultlocaletgettextttranslationtConfigR
tTruet_trans(Rt
textdomaintunicodetlctencoding((s./scout/__init__.pyt__init__Es		
	cCs |iid|idd|S(NR<tnamestngettext(R:tinstallR3(R((s./scout/__init__.pyRBRscCs|ii|S(N(R:tugettext(Rtmsg((s./scout/__init__.pyR6VscCs|ii|||S(N(R:t	ungettext(Rtsingluartpluraltn((s./scout/__init__.pyRAYscCsd|i|i|ifS(Ns!%s {textdomain: %s, unicode: %s} (RR2R3(R((s./scout/__init__.pyR\s(RRR9R?RBR6RAR(((s./scout/__init__.pyR-Cs

			tNullLangcBseZdedZRS(R.cCsti|_||_dS(N(R6tNullTranslationsR:R3(RR;R<((s./scout/__init__.pyR?as(RRR9R?(((s./scout/__init__.pyRI_stHelpOptionFoundcBseZRS((RR(((s./scout/__init__.pyRKkstExceptionHelpOptioncBseZeidZdZRS(thelp2cCs:|djo
tnti||||||dS(NRM(RKRttake_action(Rtactiontdesttopttvaluetvaluestparser((s./scout/__init__.pyRNrs

(shelp2(RRRtACTIONSRN(((s./scout/__init__.pyRLns
tModuleListFormattercBseZdZdZRS(s_ Same as IndentedHelpFormatter, but the epilog is not a string, but the reference to a functioncCs|od|dSdSdS(Ns
t((Rtepilog((s./scout/__init__.pyt
format_epilog{s(RRR+RY(((s./scout/__init__.pyRVxstScoutOptionParsercBs eZdZdZdZRS(ss
    The modified option parser for scout. The three main differences are:

        - redefined _add_help_option - this adds an ExceptionHelpOption, so the
          help option will raise an HelpOptionFound exception

        - redefined print_help method - do not encode the output, because it
          causes some errors

        - redefined _add_version_option

    c	Cs,|itdddddtddS(Ns-hs--helpRORMthelpsshow this help message and exit(t
add_optionRLt_(R((s./scout/__init__.pyt_add_help_options
	cCs#|iddddtddS(Ns	--versionROtversionR[s&show program's version number and exit(R\R](R((s./scout/__init__.pyt_add_version_options(RRR+R^R`(((s./scout/__init__.pyRZs	tCoreOptionParsercBseZdZd
dZdZdZdZd
dZe	i
dZdZdZ
d	ZeeZd
ZeeZdZeeZdZeeZRS(s
    This is a command-line parser for core. Just prints help for available
    modules and should return one a name of one of them.

    This is an accestor of older CommandLineParser with better design - usage
    of the optparse module, instead of the own parsing - and better support for
    unittesting.

    Instance (read-only) attributes:
        - prog:         a program name
        - module:       a name of selected module
        - module_args:  an arguments for modules
        - format:       an global option - output format
        - help:         a formatted help string

    Example:
        parser = CoreOptionParser(list_of_available_formats, list_of_available_modules)
        try:
            parser.parse_args()
        except HelpOptionFound help:
            parser.print_help()

        print "Selected module: %s" % (parser.module)
        print "Arguments for module: %s" % (parser.module_args)
    cCstiitid|_t|_|i|d|_	t
d|idtdd|idt
|_|iidd	d
tddi||i	fd
|i	ddd||iiddd
tdddddd
tdS(Nittabletprogtusages:Usage: %prog [global_opts] module [local_opts] search_termRXt	formatters-fs--formatR[s,select the output format (%s, default is %s)s, tdefaultttypetchoicetchoicess-ls--listslist of available modulesROt
store_trueRPtlisting(RRtbasenametsystargvt_progtlistt_modulest
add_modulet_formatRZR]t
_help_modulesRVt_parserR\RtFalse(Rtformatstmodules((s./scout/__init__.pyR?s*
					"			cCs`|djoOt|dp
|f}nx|D]}|ii|q1W|iin|S(Nt__iter__(RthasattrRqtappendtsort(RRxtm((s./scout/__init__.pyRrs

cCsntd}ttd|iDdt}x6|iD]+}|d|di||df7}q;W|S(NsAvailable modules:
cssx|]}|dVqWdS(iN((t.0R}((s./scout/__init__.pys	<genexpr>s	tkeys    %s : %s
ii(R]tlentmaxRqtljust(RRtmaxlenR}((s./scout/__init__.pyRts%
)cCshd}x5t|D]'\}}||ijo|}PqqW|djo|gfS|| ||fS(Ni(t	enumeratetmodule_names(Rtargstmodule_ititarg((s./scout/__init__.pyt_split_argument_lines
	
cCs4|ptid}nt|djo(|diddjo|d}nt|djo
tn|i|\}|_d}t|idjo|id}n|ii	|\}}|i
o9t|idjo#td|i}t
|nt|i|dh|d6S(	s
        parse the arguments from sys.argv, or user defined ones!

        return - the Options class instance with options from command line and a name of module
        but it may raise:
            - HelpOptionFound: when the help string was found
            - OptionValueError: when the name of module was not found in command line
        for bad format argument it still use an optparse's sys.exit() method
        iiR.is.The name of module is mandatory. Use %s --helpRtmoduleN(RmRnRR$RKRt_module_argsRRut
parse_argsRkR]RoRtOptionst_CoreOptionParser__opts2dict(RRt	core_argsRtoptsRD((s./scout/__init__.pyRs-
!cCs|ii||S(N(Rut
print_help(Rtfile((s./scout/__init__.pyRscCs&|ii|itiid|S(Ntreplace(RuterrortencodeRmtstderrR>(RRD((s./scout/__init__.pyR s"cCsih}x\g}|iiD]!}|idjo||qq~D]}t||i||i<qBW|S(N(Rutoption_listRPRR(RRRt_[1]RQ((s./scout/__init__.pyt__opts2dict$s
<cCs
|iiS(N(RuRc(R((s./scout/__init__.pyt
__get_prog+scCs|idS(Ni(R(R((s./scout/__init__.pyt__get_module_args/scCs&g}|iD]}||dq~S(Ni(Rq(RRR}((s./scout/__init__.pyt__get_module_names3scCs
|iiS(N(Rutformat_help(R((s./scout/__init__.pyt
__get_help7sN(RRR+RR?RrRtRRRmRRRRt_CoreOptionParser__get_progtpropertyRct"_CoreOptionParser__get_module_argstmodule_argst#_CoreOptionParser__get_module_namesRt_CoreOptionParser__get_helpR[(((s./scout/__init__.pyRas"!				
%						RcBs5eZdZhdZdZdZdZRS(s
    This class contains the options for modules. The options are accessible as attributes, or as dictionary keys:

    o = Options(...)
    o.foo
    o["foo"]
    cCs$|ii||ii|dS(s
        A constructor:
          opts - options from parser - {opt : value, opt2 : value}
          args - the dictionary {name : value, name : value}
        N(t__dict__tupdate(RRR((s./scout/__init__.pyR?DscCs|i|S(N(R(Rtname((s./scout/__init__.pyt__getattr__NscCs
|i|S(N(R(RR((s./scout/__init__.pyt__getitem__QscCsCd}x,|iD]!}|d||i|f7}qW|d}|S(Ns	Options {s	%s : %s, R(R(RRR((s./scout/__init__.pyRTs

(RRR+R?RRR(((s./scout/__init__.pyR;s

		tModuleLoadercBseZdZd
dZdZdZdZdZdZ	e
e	ZdZe
eZ
dZe
eZd	ZRS(s\
    The basic module loader - it allows to load a module from specified directory(ies)
    cCs:t|_t|_|djo|i|ndS(N(tdictRqRpt_not_imported_modulesRtimport_from(Rtdirs((s./scout/__init__.pyR?`s
cCs?t|dp
|f}nx|D]}|i|q$WdS(NRy(Rzt_import(RRt	directory((s./scout/__init__.pyRes

cCs7tii|pttd|ntiid|xti|D]}tii|\}}|djo|djp
|djoy:t	|}t
|dp~n||i|ii
<Wq/tj
oL}d}t|idjo|id}n|ii||fq/XqPqPWdS(Ns%s is not a directoryis.pyR?tfootScoutModuleRW(RRtisdirtAttributeErrorR]Rmtinserttlistdirtsplitextt
__import__RzRqRRtImportErrorRRRR{(RRtmodule_filetmodule_nametextRtierrterr_msg((s./scout/__init__.pyRls"(cCs|i|S(s x.__getitem__(y) <==> x[y] (Rq(RR((s./scout/__init__.pyRscCs
||ijS(s8 D.__contains__(k) -> True if D has a key k, else False (Rq(RR((s./scout/__init__.pyt__contains__scCs
|iiS(N(RqRS(R((s./scout/__init__.pyt
__get_modulesscCs(g}|iD]}||iiq~S(N(RxRR(RRR}((s./scout/__init__.pyRscCs|iS(N(R(R((s./scout/__init__.pyt__get_not_imported_modulesscCsd|ifS(NsModuleLoader %s(R(R((s./scout/__init__.pyRsN(RRR+RR?RRRRt_ModuleLoader__get_modulesRRxt_ModuleLoader__get_module_namesRt'_ModuleLoader__get_not_imported_modulestnot_imported_modulesR(((s./scout/__init__.pyR[s							tDatabasecBsDeZdZdZdZdZdZdZdZ	RS(cCs|djo
|}n3|ido
|}ntid|ti}yti||_Wntd|GHd|_nXdS(Ns:memory:t/s"Cannot not open database file '%s'(	t
startswithR8R
Rtsqlite3tconnecttconnR]R(Rtdbnametdbfile((s./scout/__init__.pyR?s


cCs/|i|idjo|iindS(N(tendRRtclose(R((s./scout/__init__.pyt__del__s
cCs+|idjotS|ii|_tS(N(RRRvtcursorR9(R((s./scout/__init__.pytbeginscOst|djp*t|djp|idjptt|djo't|djo|ii|n>t|djo|ii||n|ii||dS(Ni(RRRtAssertionErrortexecute(RtqueryRtkwargs((s./scout/__init__.pyRs=&cCs.|idjo|iid|_ndS(N(RRR(R((s./scout/__init__.pyRs
cOs|ipdS|i|||t}xF|iD];}t|djo|i|dq8|i|q8Wt|djo|d}n|i|S(s
        an abstract database query - but more clever

        query - a query to proceed

        there're two kinds of placeholders (like as original DB/API execute, but in more Pythonic way)
        - question marks (qmark style):
          query("SELECT ham, spam FROM foo WHERE bar = ? and baz = ?", bar, baz)
        - named placeholders (named style)
          query("SELECT ham, spam FROM foo WHERE bar = :bar and baz = :baz", bar = '42', baz = '42')

        Note: its not possible to combine this two types of placeholders in one call!

        return
        (1) if the length of the result is one, returns one value
        (2) if the column in the result is the only one, returns a list of values
        (3) else returns a list of tuples
        iiN(RRRRpRRR{R(RRRRRtrow((s./scout/__init__.pyRs
	

N(
RRRRR?RRRRR(((s./scout/__init__.pyRs					tTableFormattercBs eZeddddZRS(s | s-+-t-cCsd}|io|Sg}|iD]}|tt|q)~}xytdt|iD]\}	xS|iD]E}
tt|
|	||	jott|
|	||	<qzqzWqgW|d|itti|i|d7}|||ig}|D]}|||q~|d7}xG|iD]9}
|d|ittitt|
|d7}qBW|S(s
        This method produces an output as a table. It's a base style of output and is recomended for a commandline use.

        The TableFormatter.format method has three optional arguments to improve the output:
        vertical_delimiter   - the delimiter between rows of the table, default  ' | '
        node_delimiter       - the delimiter between nodes of the table, default '-+-'
        horizontal_delimiter - the delimiter between head of the table and a body, default '-'

        The defult output is
         repository | package                   | jar           | class
        ------------+---------------------------+---------------+--------------------------------
         suse110    | geronimo                  | log4j-1.2.8   | org.apache.log4j.xml.XMLLayout
        RWiRs
(	tis_emptytget_long_namesRR<trangetget_rowsRtmapR(Rtresulttvertical_delimitertnode_delimiterthorizontal_delimiterRRtxt	col_widthRRt_[2]((s./scout/__init__.pytformats 
3
!&0>
7(RRRR(((s./scout/__init__.pyRstCSVFormattercBseZedddZRS(t;t"c	
Cs|||}d}|io|S|||ig}|iD]}||i|d|qC~|d7}x[|iD]P}|||ig}|D]}||i|d|q~|d7}qW|S(sR
        This method produces an output in a CSV format. This style is recomended for the scripting use.

        The CSVFormatter.format method has two optional arguments to improve the output:
        record_delimiter       - the delimiter between records, default ';'
        quote_mark             - the quote used for the records, if the quote mark is in the records, is duplicated, default '"'

        The defult output is
        "repo";"pkg";"jar";"class"
        "repository";"package";"jar";"class"
        "suse110";"geronimo";"log4j-1.2.8";"org.apache.log4j.xml.XMLLayout"
        RWis
(RRRRtrows(	RRtrecord_delimitert
quote_markRRtsRR((s./scout/__init__.pyRs
P
N(RRRR(((s./scout/__init__.pyRstXMLFormattercBs eZeddddZRS(RtheadRc	
Cs*d}|d|d7}|d|d7}|i}xJtdt|D]3}|d|||i|||fd7}qLW|d|d7}x||iD]q}|d|d7}xDtdt|D]-}|d||||||fd7}qW|d|d7}qW|d|d7}|S(	s
        This method produces an output in a XML format. This style is recomended for the communication between scout and a external systems.

        The XMLFormatter.format method has three optional arguments to improve the output:
        result_tag      - the name of the tag result, default 'result'
        head_tag        - the name of the tag head, default 'head'
        row_tag         - the name of the tag row, default 'row'

        The defult output is
        <result>
            <head>
                <repo>repository</repo>
                <pkg>package</pkg>
                <jar>jar</jar>
                <class>class</class>
            </head>
            <row>
                <repo>suse110</repo>
                <pkg>geronimo</pkg>
                <jar>log4j-1.2.8</jar>
                <class>org.apache.log4j.xml.XMLLayout</class>
            </row>
        </result>
        s'<?xml version="1.0" encoding="UTF-8"?>
s<%s>s
s  <%s>is    <%s>%s</%s>s  </%s>s</%s>(tget_short_namesRRRR(	RRt
result_tagthead_tagtrow_tagRtshort_namesRR((s./scout/__init__.pyR+s"1
+(RRRR(((s./scout/__init__.pyR)stResultcBs_eZd	dZdZdZdZdZdZdZ	dZ
edZRS(
cCs<||_|djo
||_n
||_t|_dS(N(tcols1Rtcols2RpR(RRR((s./scout/__init__.pyR?Xs
	

	cCs+|djo|iit|ndS(N(RRR{Rp(RR((s./scout/__init__.pytadd_row`s
cCsL|djo;t|to+x(|D]}|iit|q$WndS(N(Rt
isinstanceRpRR{(RRR((s./scout/__init__.pytadd_rowsdscCs|iS(N(R(R((s./scout/__init__.pyRiscCs+g}|iD]}|ti|q~S(N(Rtdefault_langR6(RRR((s./scout/__init__.pyRlscCs&|i|ig}|i|i|S(N(RRtextendR(RR((s./scout/__init__.pyt	get_tableoscCs|iS(N(R(R((s./scout/__init__.pyRtscCst|idjS(Ni(RR(R((s./scout/__init__.pyRwscKs|i||S(N(R(RReR((s./scout/__init__.pyRzsN(
RRRR?RRRRRRRRR(((s./scout/__init__.pyRVs							tStringResultcBs#eZdZdZdZRS(cCs*t|ttfpt||_dS(N(RtstrR<Rt_string(Rtstring((s./scout/__init__.pyR?scCs#|idjpt|idjS(Ni(RRR(R((s./scout/__init__.pyRscOs|iS(N(R(RRR((s./scout/__init__.pyRs(RRR?RR(((s./scout/__init__.pyR}s		tRepoConfigReadercBsGeZdZdZddZdZdZdZdZ	RS(sClass to read of an configuration of the repositories. This class
    internally uses SafeConfigParser for ConfigParser, but doesn't provide the
    same APIcCst|_dS(N(RRT(R((s./scout/__init__.pyR?scCsP|djo|ii|gn)|iitiititig|S(sRead the config files and parse them. The files is loaded from
        directory ${Config.data_path}.  This should be suppressed by file_names
        argument.

        - file_name: is optional argument with a file name. The main purpose is
          for debugging.  N(	RRTtreadRRRR8R
R(Rt	file_name((s./scout/__init__.pyRs
(cCs
|iiS(N(RTtsections(R((s./scout/__init__.pytreposscCs||iijS(N(RTR(Rtrepo((s./scout/__init__.pythas_reposcCs|ii|dS(NR(RTtget(RR((s./scout/__init__.pyRscCs|ii|dS(Ntbaseurl(RTR
(RR((s./scout/__init__.pyRsN(
RRR+R?RRRR	RR(((s./scout/__init__.pyRs	
			tRepoListcBsMeZgdZdZdZdZdZeeZdZ	RS(cCs8||_t||_|iti|_dS(N(t_modulenameRpt_repost_load_available_reposRRt_repos_conf(Rt
modulenamet	repo_list((s./scout/__init__.pyR?s	
cCstxmtitiD]Y}ti||idtio2|ii|t	|idt	ti!qqWdS(Ns-*i(
RRR8R
tfnmatchR
RRR{R(Rtfiledb((s./scout/__init__.pyRs!cCstd}t|idjo|d7}|Stt|idd}x|iD]}|djoqYn|ii|or||i|d|ii|d7}|ii	|djo*|d	|d
|ii	|d7}qqY||d7}qYW|S(NsAvailable repositories:
is	- none -
RcSs|djo
t|pdS(iN(RR(R((s./scout/__init__.pyt<lambda>ss - s
RWRs   * (
R]RRRRRR	RRR(RRRRQ((s./scout/__init__.pytformat_available_reposs


+.cCs|ii||S(N(RR{(RR((s./scout/__init__.pytadd_reposcCs|iS(N(R(R((s./scout/__init__.pyt__get_reposscCsd|iS(NsRepoList %s(R(R((s./scout/__init__.pyRs(
RRR?RRRt_RepoList__get_reposRRR(((s./scout/__init__.pyRs				tParsercBsbeZdZdZdZd	dZdZdZdZ	e
idZdZ
RS(
cCs||_td|}td|idd|_|iiddddd	td
dd|iid
dddd	tddd|iiddddd	tdddd|||_dS(Ns&Usage: %%prog %s [options] search_termRds%%t%s-ls--listreposRORjR[slist available repositoriesRPtlistrepos-ps	--packagesinverse search by package namet
inversesearchs-rs--repoRgRhsselect repository to searchRfRi(RR]RZRRTR\RR(RRRRd((s./scout/__init__.pyR?s	++1cCs&|iid}|ii|dS(Ns-r(RTt
get_optionRiR{(RRRQ((s./scout/__init__.pyRscCs7|iid}x|D]}|ii|qWdS(Ns-r(RTRRiR{(RRRQR((s./scout/__init__.pyt	add_reposscCsj|ii|\|_|_|io|iiGHtSt|idjo|ii	tSt
S(Ni(RTRtoptionsRtdo_listRRRvRRR9(RR((s./scout/__init__.pytparses

cCs|ii|\}}|io t|djo
tnd}t|djo|d}nt|i|dh|d6S(NiRR(RTRRRRKRRt_Parser__opts2dict(RRRR((s./scout/__init__.pyRs
cCs|iio|iig}n_|iidoEg}|iidiD]}|djo||qMqM~}ng}t|djotdGHdS|S(Ns-risNo repositories found ...(R RRTRRiRRR](RRRR((s./scout/__init__.pyt	get_reposs
EcCs
|iiS(N(R R(R((s./scout/__init__.pyR!scCs|ii|dS(N(RTR(Rtoutput((s./scout/__init__.pyRscCsih}x\g}|iiD]!}|idjo||qq~D]}t||i||i<qBW|S(N(RTRRPRR(RRRRRQ((s./scout/__init__.pyRs
<N(RRR?RRRR"RR$R!RmRRR#(((s./scout/__init__.pyRs	
		
	
		tBaseScoutModulecBseZdZdZdZdZdZeie	de	de	dgZ
e	de	d	e	dgZeid
Z
dZdZRS(
s
    The base for all other scout modules. All of modules must be a subclass of
    this one. The base defined only an __init__ method, which binds the class
    attributes to instance ones.

    The class attributes:
     - name:    a name of the module (this is an identifier)
     - desc:    a short description (will be printed on --help)
     - sql:     the sql command (not yet parametrized)
     - result_list(2): the result lists for the Result object

    An convient use
    class MyOwnScoutModule(BaseScoutModule):

        def __init__(self, *args, **kwargs):
            super(self.__class__, self).__init__()
            # my own initialization

        def main(self, module_args = None):
            # my own implementation
    RtdesctSQLtSQLiRtpkgRt
repositorytpackagecCsV|i}||_x+dD]#}t|d|t||qWd|_d|_dS(	NRR'tsqltsqlitresult_listtresult_list2s_%s(snamesdescssqlssqlisresult_listsresult_list2(Rt_clstsetattrRRt
_repo_listRu(RRR((s./scout/__init__.pyR?;s		!	cCstddS(NsbBaseScoutModule is not intended for usage, please reimplement the main method in your own subclass(tNotImplementedError(R((s./scout/__init__.pytmainDscCst|iiS(s]
        Return an Result object with list of available repositories for this module
        (RR3R(R((s./scout/__init__.pytdo_repo_listHs(RRR+RR'R-R.t	null_langRBR]R/R0RR?R5R6(((s./scout/__init__.pyR&s
!!
			tSimpleScoutModulecBsPeZdZdZddZedZedZdZ	dZ
RS(cCsJtt|it|ii|_t|ii|ii|_	dS(N(
tsuperR8R?RR1RR3RRRu(R((s./scout/__init__.pyR?QscCst|id|S(NR(Rt_name(RR((s./scout/__init__.pytgetDatabaseWscCsd}y|ii|}Wn-tj
o!|iitidnX|io|iS|i	i
}|io
|i}n|i|i
|i||iS(Ni(RRuRRKRRmtexitRR6R3RRtdo_querytprepare_termRR(RRRR((s./scout/__init__.pyR5Zs



cCsut|i|i}|djodSt|dp
|f}nx*|D]"}|i|i|||qKW|S(s
        Do a query. Arguments:
        query - the searched term
        repos - a list of repositories, which will be searched
                (default all avaliable repositories)
        RyN(Rt_result_listt
_result_list2RRzRt_query(RRRRRR((s./scout/__init__.pyR=ms

 cCs|i|}|p|i|id|}n|i|id|}t|to-g}|D]}||gt|qg~S|gt|gS|S(Ns%%%s%%(R;Rt_sqlt_sqliRRp(RRttermRtdbtrRR((s./scout/__init__.pyRA}s-cCsId|i}x+d	D]#}|d|t||f7}qW|d}|S(
Ns%s {RR'R-R/R0s%s : %sR(snamesdescssqlsresult_listsresult_list2(RR(RRR((s./scout/__init__.pyRs
!
cCs|S(N((RRD((s./scout/__init__.pyR>sN(RRR?R;RR5RvR=RARR>(((s./scout/__init__.pyR8Os			t	ScoutCorecBsAeZhed6ed6ed6ZedZedZRS(tcsvtxmlRbcCs/tti|_d|iiD|_dS(Ncss+x$|]}|ii|iifVqWdS(N(RRR'(R~R}((s./scout/__init__.pys	<genexpr>s	(RR8RtmlRx(R((s./scout/__init__.pytload_all_modulesscCsWt|ii|i}d}y|i}Wnctj
o|iti	dn;t
j
o.}|i|i|iGHti	dnX|i
odi|iiS|i|i}|ii|i}|djo_y*|i|id|i|ifSWqStj
o"}ttd|iqSXntdfSdS(Niis
Res Cannot find a formatter for a %s(Ratout_formatterstkeysRxRRRKRRmR<RRRDRkRRJRRRR5RRRtKeyErrort
SystemExitR]R9(RtclpRtoveRRtkerr((s./scout/__init__.pytruns*


*"(	RRRRRRLRRKRS(((s./scout/__init__.pyRGs
(.RRRmRtoptparseRRRRtConfigParserRR6R4tobjectRRRR*R8R-RIRR7RBt	setlocaletLC_ALLt	ExceptionRKRLRVRZRaRRRRRRRRRRRR&R8RG(((s./scout/__init__.pyt<module>sF"		

	 <Y -'!+F4E

ACC SHELL 2018