[entropy.db] complete API docstring and refactoring work

This commit is contained in:
Fabio Erculiani
2009-08-15 22:27:41 +02:00
parent ec3e35ed54
commit 89062bf8f3
18 changed files with 1207 additions and 1262 deletions
+1 -1
View File
@@ -157,7 +157,7 @@ class CacheMixin:
except (RepositoryError):
continue # repo not available
try:
sum_hashes += dbconn.database_checksum()
sum_hashes += dbconn.checksum()
except self.dbapi2.OperationalError:
pass
return sum_hashes
+21 -22
View File
@@ -195,7 +195,7 @@ class CalculatorsMixin:
return dbconn
def atom_match(self, atom, caseSensitive = True, matchSlot = None,
matchBranches = (), matchTag = None, packagesFilter = True,
matchTag = None, packagesFilter = True,
multiMatch = False, multiRepo = False, matchRevision = None,
matchRepo = None, server_repos = [], serverInstance = None,
extendedResults = False, useCache = True):
@@ -207,23 +207,25 @@ class CalculatorsMixin:
matchRepo = repos
u_hash = ""
m_hash = ""
k_ms = "//"
k_mt = "@#@"
k_mr = "-1"
if isinstance(matchRepo,(list,tuple,set,)): u_hash = hash(frozenset(matchRepo))
if isinstance(matchBranches,(list,tuple,set,)): m_hash = hash(frozenset(matchBranches))
if isinstance(matchSlot,basestring): k_ms = matchSlot
if isinstance(matchTag,basestring): k_mt = matchTag
if isinstance(matchRevision,basestring): k_mr = matchRevision
if isinstance(matchRepo,(list,tuple,set,)):
u_hash = hash(frozenset(matchRepo))
if isinstance(matchSlot,basestring):
k_ms = matchSlot
if isinstance(matchTag,basestring):
k_mt = matchTag
if isinstance(matchRevision,basestring):
k_mr = matchRevision
c_hash = "|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % (
c_hash = "|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % (
atom,k_ms,k_mt,hash(packagesFilter),
hash(frozenset(self.validRepositories)),
hash(frozenset(self.SystemSettings['repositories']['available'])),
hash(multiMatch),hash(multiRepo),hash(caseSensitive),
k_mr,hash(extendedResults),
u_hash, m_hash
u_hash,
)
c_hash = "%s%s" % (self.atomMatchCacheKey,hash(c_hash),)
@@ -259,7 +261,6 @@ class CalculatorsMixin:
atom,
caseSensitive = caseSensitive,
matchSlot = matchSlot,
matchBranches = matchBranches,
matchTag = matchTag,
packagesFilter = packagesFilter,
matchRevision = matchRevision,
@@ -315,7 +316,6 @@ class CalculatorsMixin:
atom,
caseSensitive = caseSensitive,
matchSlot = matchSlot,
matchBranches = matchBranches,
matchTag = matchTag,
packagesFilter = packagesFilter,
multiMatch = True,
@@ -330,15 +330,14 @@ class CalculatorsMixin:
else:
dbconn = self.__atom_match_open_db(dbpkginfo[1], serverInstance)
query_data, query_rc = dbconn.atomMatch(
atom,
caseSensitive = caseSensitive,
matchSlot = matchSlot,
matchBranches = matchBranches,
matchTag = matchTag,
packagesFilter = packagesFilter,
multiMatch = True,
extendedResults = extendedResults
)
atom,
caseSensitive = caseSensitive,
matchSlot = matchSlot,
matchTag = matchTag,
packagesFilter = packagesFilter,
multiMatch = True,
extendedResults = extendedResults
)
if extendedResults:
dbpkginfo = (set([((x[0],x[2],x[3],x[4]),dbpkginfo[1]) for x in query_data]),0)
else:
@@ -490,7 +489,7 @@ class CalculatorsMixin:
if self.xcache:
c_data = sorted(dependencies)
client_checksum = self.clientDbconn.database_checksum()
client_checksum = self.clientDbconn.checksum()
c_hash = hash("%s|%s|%s" % (c_data,deep_deps,client_checksum,))
c_hash = "%s%s" % (etpCache['filter_satisfied_deps'],c_hash,)
cached = self.Cacher.pop(c_hash)
@@ -1236,7 +1235,7 @@ class CalculatorsMixin:
hash(frozenset(sorted(matched_atoms))),
empty_deps,
deep_deps,
self.clientDbconn.database_checksum(),
self.clientDbconn.checksum(),
# needed when users do bogus things like editing config files
# manually (branch setting)
self.SystemSettings['repositories']['branch'],
+13 -13
View File
@@ -404,7 +404,6 @@ class RepositoryMixin:
def add_tbz2_to_repos(self, tbz2file):
atoms_contained = []
basefile = os.path.basename(tbz2file)
cut_idx = -1*(len(etpConst['packagesext']))
db_dir = tempfile.mkdtemp()
dbfile = self.entropyTools.extract_edb(tbz2file,
dbpath = db_dir+"/packages.db")
@@ -727,8 +726,6 @@ class RepositoryMixin:
"run_repositories_post_branch_switch_hooks: clientdb not avail")
return hooks_ran, True
from datetime import datetime
place_status_file = set()
errors = False
repo_data = self.SystemSettings['repositories']['available']
repo_data_excl = self.SystemSettings['repositories']['available']
@@ -991,7 +988,7 @@ class MiscMixin:
# check if another instance is running
etpConst['applicationlock'] = False
const_setup_entropy_pid(just_read = True)
locked = self.entropyTools.application_lock_check(option = None, gentle = True)
locked = self.entropyTools.application_lock_check(gentle = True)
if locked:
if not silent:
self.updateProgress(
@@ -1066,10 +1063,10 @@ class MiscMixin:
return const_set_nice_level(low)
def reload_repositories_config(self, repositories = None):
if repositories == None:
if repositories is None:
repositories = self.validRepositories
for repoid in repositories:
dbconn = self.open_repository(repoid)
self.open_repository(repoid)
def switch_chroot(self, chroot = ""):
# clean caches
@@ -1269,19 +1266,23 @@ class MiscMixin:
self.Cacher.start()
def get_meant_packages(self, search_term, from_installed = False,
valid_repos = []):
valid_repos = None):
if valid_repos is None:
valid_repos = []
pkg_data = []
atom_srch = False
if "/" in search_term:
atom_srch = True
if not valid_repos:
valid_repos = self.validRepositories
if from_installed:
valid_repos = []
if hasattr(self,'clientDbconn'):
valid_repos.append(self.clientDbconn)
if hasattr(self, 'clientDbconn'):
if self.clientDbconn is not None:
valid_repos.append(self.clientDbconn)
elif not valid_repos:
valid_repos.extend(self.validRepositories[:])
for repo in valid_repos:
if isinstance(repo, basestring):
@@ -1425,7 +1426,6 @@ class MiscMixin:
def quickpkg_handler(self, pkgdata, dirpath, edb = True,
portdbPath = None, fake = False, compression = "bz2", shiftpath = ""):
import stat
import tarfile
if compression not in ("bz2","","gz"):
@@ -1022,8 +1022,8 @@ class Package:
self.Entropy.clientDbconn.setCreationDate(idpackage, str(ctime))
# add idpk to the installedtable
self.Entropy.clientDbconn.removePackageFromInstalledTable(idpackage)
self.Entropy.clientDbconn.addPackageToInstalledTable(idpackage,
self.Entropy.clientDbconn.dropInstalledPackageFromStore(idpackage)
self.Entropy.clientDbconn.storeInstalledPackage(idpackage,
self.infoDict['repository'], self.infoDict['install_source'])
automerge_data = self.infoDict.get('configprotect_data')
@@ -1033,7 +1033,7 @@ class Package:
# clear depends table, this will make clientdb dependstable to be
# regenerated during the next request (retrieveReverseDependencies)
self.Entropy.clientDbconn.clearDependsTable()
self.Entropy.clientDbconn.taintReverseDependenciesMetadata()
return idpackage
def __fill_image_dir(self, mergeFrom, imageDir):
@@ -1094,7 +1094,6 @@ class Package:
def __move_image_to_system(self, already_protected_config_files):
# load CONFIG_PROTECT and its mask
repoid = self.infoDict['repository']
protect = self.Entropy.get_package_match_config_protect(
self.matched_atom)
mask = self.Entropy.get_package_match_config_protect(
@@ -72,11 +72,6 @@ class UGCErrorReportInterface(ErrorReportInterface):
@return submission status -- bool
"""
def convert_to_str(el):
if not isinstance(el, basestring):
el = str(el)
return el
if self.generated:
done, err_msg = self.entropy.UGC.report_error(self.__repository_id,
self.params)
@@ -893,7 +893,7 @@ class Repository:
mydbconn.clearCache()
# now verify if both checksums match
result = False
mychecksum = mydbconn.database_checksum(do_order = True,
mychecksum = mydbconn.checksum(do_order = True,
strict = False, strings = True)
if checksum == mychecksum:
result = True
@@ -1051,7 +1051,7 @@ class Repository:
if (do_db_update_transfer is not None) and not \
do_db_update_transfer:
if os.access(dbfile, os.R_OK | os.R_OK | os.F_OK):
if os.access(dbfile, os.R_OK | os.W_OK | os.F_OK):
try:
os.rename(dbfile, dbfile_old)
do_db_update_transfer = True
+1105 -1172
View File
File diff suppressed because it is too large Load Diff
+15 -15
View File
@@ -289,7 +289,6 @@ class Server(Singleton, TextInterface):
raise PermissionDenied("PermissionDenied: %s" % (mytxt,))
# settings
from entropy.misc import LogFile
self.SystemSettings = SystemSettings()
self.community_repo = community_repo
from entropy.db import dbapi2
@@ -475,7 +474,6 @@ class Server(Singleton, TextInterface):
def setup_entropy_settings(self, repo = None):
srv_set = self.SystemSettings[self.sys_settings_plugin_id]['server']
curr_repoid = srv_set['default_repository_id']
backup_list = [
'etpdatabaseclientfilepath',
'clientdbid',
@@ -800,7 +798,6 @@ class Server(Singleton, TextInterface):
if mirrors is None:
mirrors = []
product = self.SystemSettings['repositories']['product']
dbc = self.open_memory_database(dbname = etpConst['serverdbid']+repoid)
self._memory_db_instances[repoid] = dbc
@@ -1427,7 +1424,7 @@ class Server(Singleton, TextInterface):
def depends_table_initialize(self, repo = None):
dbconn = self.open_server_repository(read_only = False,
no_upload = True, repo = repo)
dbconn.regenerateDependsTable()
dbconn.regenerateReverseDependenciesMetadata()
dbconn.taintDatabase()
dbconn.commitChanges()
@@ -1756,7 +1753,6 @@ class Server(Singleton, TextInterface):
)
return False
tmp_db_path = self.entropyTools.get_random_temp_file()
for from_branch in sorted(mapped_branches):
self.updateProgress(
@@ -1969,7 +1965,7 @@ class Server(Singleton, TextInterface):
darkred(to_repo),
brown(branch),
bold(_("cannot switch, package not found, skipping")),
darkgreen(),
darkgreen(match_atom),
red(from_file),
),
importance = 1,
@@ -2143,8 +2139,8 @@ class Server(Singleton, TextInterface):
dbconn.setTrashedUid(mycounter)
# add package info to our current server repository
dbconn.removePackageFromInstalledTable(idpackage)
dbconn.addPackageToInstalledTable(idpackage, repo)
dbconn.dropInstalledPackageFromStore(idpackage)
dbconn.storeInstalledPackage(idpackage, repo)
atom = dbconn.retrieveAtom(idpackage)
self.updateProgress(
@@ -2784,7 +2780,6 @@ class Server(Singleton, TextInterface):
exp_based_scope = my_settings['exp_based_scope']
server_repos = my_settings['repositories'].keys()
exp_pkgs_cache = {}
# packages to be added
for spm_atom, spm_counter in installed_packages:
@@ -2963,20 +2958,25 @@ class Server(Singleton, TextInterface):
dbconn = self.open_server_repository(read_only = True,
no_upload = True, repo = repo, warnings = warnings)
if dbconn.doesTableExist("baseinfo") and \
dbconn.doesTableExist("extrainfo"):
try:
dbconn.validateDatabase()
idpackages = dbconn.listAllIdpackages()
except SystemDatabaseError:
pass
if dbconn.doesTableExist("treeupdatesactions"):
try:
treeupdates_actions = dbconn.listAllTreeUpdatesActions()
except dbconn.dbapi2.Error:
pass
# save list of injected packages
if dbconn.doesTableExist("injected") and \
dbconn.doesTableExist("extrainfo"):
try:
injected_packages = dbconn.listAllInjectedPackages(
just_files = True)
injected_packages = set([os.path.basename(x) for x \
in injected_packages])
except dbconn.dbapi2.Error:
pass
for idpackage in idpackages:
url = dbconn.retrieveDownloadURL(idpackage)
@@ -3847,7 +3847,7 @@ class Server(Singleton, TextInterface):
dbconn.commitChanges()
# now migrate counters
dbconn.moveCountersToBranch(to_branch, from_branch = from_branch)
dbconn.moveSpmUidsToBranch(to_branch, from_branch = from_branch)
self.close_server_database(dbconn)
mytxt = blue("%s.") % (_("migration loop completed"),)
@@ -204,7 +204,7 @@ class Server(SocketHost):
mydb = self.open_db(mydbpath, docache = False)
mydb.createAllIndexes()
self.updateProgress(
darkgreen(str(mydb.database_checksum(do_order = True, strict = False, strings = True))),
darkgreen(str(mydb.checksum(do_order = True, strict = False, strings = True))),
importance = 1,
type = "info"
)
+2 -3
View File
@@ -428,7 +428,7 @@ def ebeep(count = 5):
os.system("sleep 0.35; echo -ne \"\a\"; sleep 0.35")
mycount -= 1
def application_lock_check(option = None, gentle = False):
def application_lock_check(gentle = False):
if etpConst['applicationlock']:
if not gentle:
raise SystemExit(10)
@@ -446,7 +446,6 @@ def split_indexable_into_chunks(mystr, chunk_len):
chunks = []
my = mystr[:]
mylen = len(my)
mycount = 0
while mylen:
chunk = my[:chunk_len]
chunks.append(chunk)
@@ -2111,7 +2110,7 @@ def uncompress_tar_bz2(filepath, extractPath = None, catchEmpty = False):
tar.chown(tarinfo, epath)
fix_uid_gid(tarinfo, epath)
tar.utime(tarinfo, epath)
mode = tarinfo.mode
# mode = tarinfo.mode
# xorg-server /usr/bin/X symlink of /usr/bin/Xorg
# which is setuid. Symlinks don't need chmod. PERIOD!
if not os.path.islink(epath):
+2 -2
View File
@@ -39,8 +39,8 @@ class EntropyRepositoryTest(unittest.TestCase):
def test_db_creation(self):
self.assert_(isinstance(self.test_db, EntropyRepository))
self.assertEqual(self.test_db_name,self.test_db.dbname)
self.assert_(self.test_db.doesTableExist('baseinfo'))
self.assert_(self.test_db.doesTableExist('extrainfo'))
self.assert_(self.test_db._doesTableExist('baseinfo'))
self.assert_(self.test_db._doesTableExist('extrainfo'))
def test_db_contentdiff(self):