implement EAPI3 method to make possible to retrieve all repository metadata one-shot

This commit is contained in:
Fabio Erculiani
2009-05-30 23:00:25 +02:00
parent ec1c64e75f
commit 47de6575e0
2 changed files with 59 additions and 0 deletions
@@ -343,6 +343,18 @@ class Client(Base):
)
return self.do_generic_handler(cmd, session_id, tries = 5)
def get_repository_metadata(self, session_id, repository, arch, product):
cmd = "%s %s %s %s %s %s" % (
session_id,
'repository_server:get_repository_metadata',
repository,
arch,
product,
self.SystemSettings['repositories']['branch'],
)
return self.do_generic_handler(cmd, session_id, tries = 5)
def get_package_information(self, session_id, idpackages, repository, arch, product):
cmd = "%s %s %s %s %s %s %s %s" % (
@@ -74,6 +74,16 @@ class Repository(SocketCommands):
'desc': "returns repository package sets metadata",
'syntax': "<SESSION_ID> repository_server:get_package_sets <repository> <arch> <product> <branch>",
'from': unicode(self), # from what class
},
'repository_server:get_repository_metadata': {
'auth': False,
'built_in': False,
'cb': self.docmd_repository_metadata,
'args': ["myargs"],
'as_user': False,
'desc': "returns repository metadata (package sets, treeupdates, libraries <=> idpackages map)",
'syntax': "<SESSION_ID> repository_server:get_repository_metadata <repository> <arch> <product> <branch>",
'from': unicode(self), # from what class
}
}
@@ -114,6 +124,43 @@ class Repository(SocketCommands):
return {'removed': removed_ids, 'added': added_ids, 'checksum': mychecksum}
def docmd_repository_metadata(self, myargs):
self.trash_old_databases()
if len(myargs) < 4:
return None
repository = myargs[0]
arch = myargs[1]
product = myargs[2]
try:
branch = str(myargs[3])
except (UnicodeEncodeError,UnicodeDecodeError,):
return None
x = (repository,arch,product,branch,)
valid = self.HostInterface.is_repository_available(x)
if not valid:
return valid
cached = self.HostInterface.get_dcache((repository, arch, product, branch, 'docmd_repository_metadata'), repository)
if cached != None:
return cached
metadata = {}
dbpath = self.get_database_path(repository, arch, product, branch)
dbconn = self.HostInterface.open_db(dbpath, docache = False)
metadata['sets'] = dbconn.retrievePackageSets()
metadata['treeupdates_actions'] = dbconn.listAllTreeUpdatesActions()
metadata['treeupdates_digest'] = dbconn.retrieveRepositoryUpdatesDigest(repository)
metadata['library_idpackages'] = dbconn.retrieveNeededLibraryIdpackages()
self.HostInterface.set_dcache((repository, arch, product, branch, 'docmd_repository_metadata'), data, repository)
dbconn.closeDB()
return metadata
def docmd_package_sets(self, myargs):
self.trash_old_databases()