[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@3.147.81.172: ~ $
#!/usr/bin/python -tt
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Copyright 2009 Red Hat, Inc
# written by seth vidal

# parse sqlite tag database
# return pkgnames and tag that was matched
from sqlutils import sqlite, executeSQL, sql_esc
from Errors import PkgTagsError
import sqlutils
import sys
import misc

def catchSqliteException(func):
    """This decorator converts sqlite exceptions into PkgTagsError"""
    def newFunc(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except sqlutils.sqlite.Error, e:
            # 2.4.x requires this, but 2.6.x complains about even hasattr()
            # of e.message ... *sigh*
            if sys.hexversion < 0x02050000:
                if hasattr(e,'message'):
                    raise PkgTagsError, str(e.message)
                else:
                    raise PkgTagsError, str(e)
            raise PkgTagsError, str(e)

    newFunc.__name__ = func.__name__
    newFunc.__doc__ = func.__doc__
    newFunc.__dict__.update(func.__dict__)
    return newFunc



class PackageTagDB(object):
    @catchSqliteException
    def __init__(self, repoid, sqlite_file):
        self.sqlite_file = sqlite_file
        self.repoid = repoid
        # take a path to the sqlite tag db
        # open it and leave a cursor in place for the db
        self._conn = sqlite.connect(sqlite_file)
        self.cur = self._conn.cursor()

    def _getTagsCount(self):
        ''' Unused, so no need to cache. '''
        for n in self._sql_exec("select count(*) from packagetags",):
            return n[0]

    count = property(fget=lambda self: self._getTagsCount(),
                     doc="Number of entries in the pkgtag DB")
        
    @catchSqliteException
    def _sql_exec(self, sql, *args):
        """ Exec SQL against an MD of the repo, return a cursor. """
        
        executeSQL(self.cur, sql, *args)
        return self.cur
    
    def search_tags(self, tag):
        """Search by tag name/glob
           Return dict of dict[packagename] = [stringmatched, stringmatched, ...]"""
        res = {}
        (tag, esc) = sql_esc(tag)
        query = "SELECT name, tag, score FROM packagetags where tag like ? %s" % esc
        tag = '%' + tag + '%' 
        rows = self._sql_exec(query, (tag,))
        for (name, tag, score) in rows:
            if name not in res:
                res[name] = []
            res[name].append(tag)
            
        return res
        
    def search_names(self, name):
        """Search by package name/glob.
           Return dict of dict[packagename] = [tag1, tag2, tag3, tag4, ...]"""
        res = {}
        (name, esc) = sql_esc(name)
        query = "SELECT name, tag, score FROM packagetags where name like ?%s " % esc
        name = '%' + name + '%' 
        rows = self._sql_exec(query, (name,))
        for (name, tag, score) in rows:
            if name not in res:
                res[name] = []
            res[name].append(tag)

        return res

class PackageTags(object):
    def __init__(self):
        self.db_objs = {}
        
    def add(self, repoid, sqlite_file):
        if repoid in self.db_objs:
            raise PkgTagsError, "Already added tags from %s" % repoid
            
        dbobj = PackageTagDB(repoid, sqlite_file)
        self.db_objs[repoid] = dbobj

    def remove(self, repoid):
        if repoid in self.db_objs:
            del self.db_objs[repoid]
        else:
            raise PkgTagsError, "No tag db for %s" % repoid
    
    def search_names(self, name):
        res = {}
        for ptd in self.db_objs.values():
            for (name, taglist) in ptd.search_names(name).items():
                if not name in res:
                    res[name] = []
                res[name].extend(taglist)
        
        out = {}
        for (name, taglist) in res.items():
            out[name] = misc.unique(taglist)
        return out

    def search_tags(self, tagname):
        res = {}
        for ptd in self.db_objs.values():
            for (name, taglist) in ptd.search_tags(tagname).items():
                if not name in res:
                    res[name] = []
                res[name].extend(taglist)
        out = {}
        for (name, taglist) in res.items():
            out[name] = misc.unique(taglist)
        return out
        

Filemanager

Name Type Size Permission Actions
Errors.py File 4.26 KB 0755
Errors.pyc File 9.08 KB 0644
__init__.py File 304.1 KB 0755
__init__.pyc File 199.78 KB 0644
callbacks.py File 5.64 KB 0755
callbacks.pyc File 6.23 KB 0644
comps.py File 31.59 KB 0755
comps.pyc File 26.87 KB 0644
config.py File 49.89 KB 0755
config.pyc File 48.02 KB 0644
constants.py File 4.52 KB 0755
constants.pyc File 3.42 KB 0644
depsolve.py File 74.05 KB 0755
depsolve.pyc File 46.91 KB 0644
drpm.py File 12.85 KB 0755
drpm.pyc File 10.83 KB 0644
failover.py File 5 KB 0755
failover.pyc File 5.24 KB 0644
fssnapshots.py File 10.16 KB 0755
fssnapshots.pyc File 9.75 KB 0644
history.py File 61.13 KB 0755
history.pyc File 53.31 KB 0644
i18n.py File 20.44 KB 0755
i18n.pyc File 16.05 KB 0644
igroups.py File 9.31 KB 0755
igroups.pyc File 10.22 KB 0644
logginglevels.py File 7.9 KB 0755
logginglevels.pyc File 6.51 KB 0644
mdparser.py File 6.26 KB 0755
mdparser.pyc File 7.58 KB 0644
metalink.py File 9.19 KB 0755
metalink.pyc File 8.84 KB 0644
misc.py File 39.57 KB 0755
misc.pyc File 39.58 KB 0644
packageSack.py File 40.79 KB 0755
packageSack.pyc File 41.88 KB 0644
packages.py File 84.1 KB 0755
packages.pyc File 84.51 KB 0644
parser.py File 7.97 KB 0755
parser.pyc File 6.5 KB 0644
pgpmsg.py File 53.5 KB 0755
pgpmsg.pyc File 38.27 KB 0644
pkgtag_db.py File 4.86 KB 0755
pkgtag_db.pyc File 5.06 KB 0644
plugins.py File 28.1 KB 0755
plugins.pyc File 29.1 KB 0644
repoMDObject.py File 11.23 KB 0755
repoMDObject.pyc File 9.17 KB 0644
repos.py File 16.53 KB 0755
repos.pyc File 17.38 KB 0644
rpmsack.py File 70.25 KB 0755
rpmsack.pyc File 58.36 KB 0644
rpmtrans.py File 24.84 KB 0755
rpmtrans.pyc File 22.54 KB 0644
sqlitesack.py File 69.76 KB 0755
sqlitesack.pyc File 53.75 KB 0644
sqlutils.py File 6.27 KB 0755
sqlutils.pyc File 5.6 KB 0644
transactioninfo.py File 33.78 KB 0755
transactioninfo.pyc File 30.29 KB 0644
update_md.py File 25.9 KB 0755
update_md.pyc File 21.72 KB 0644
updateinfo.py File 18.29 KB 0755
updateinfo.pyc File 16.36 KB 0644
yumRepo.py File 83.85 KB 0755
yumRepo.pyc File 64.83 KB 0644