From d9ad63ceea4e26fac19c39ff4ea9edde8b6e41ee Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Mon, 9 Nov 2009 15:55:32 +0100 Subject: [PATCH] [entropy.client] implement EntropyRepository plugin --- libraries/entropy/client/interfaces/db.py | 46 +++++++++++++++++++ .../entropy/client/interfaces/methods.py | 24 ++++++---- 2 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 libraries/entropy/client/interfaces/db.py diff --git a/libraries/entropy/client/interfaces/db.py b/libraries/entropy/client/interfaces/db.py new file mode 100644 index 000000000..baae457c7 --- /dev/null +++ b/libraries/entropy/client/interfaces/db.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +""" + + @author: Fabio Erculiani + @contact: lxnay@sabayonlinux.org + @copyright: Fabio Erculiani + @license: GPL-2 + + B{Entropy Package Manager Client EntropyRepository plugin code}. + +""" +from entropy.const import const_debug_write +from entropy.db import EntropyRepositoryPlugin + +class ClientEntropyRepositoryPlugin(EntropyRepositoryPlugin): + + def __init__(self, client_interface, metadata = None): + """ + Entropy client-side repository EntropyRepository Plugin class. + This class will be instantiated and automatically added to + EntropyRepository instances generated by Entropy Client. + + @param client_interface: Entropy Client interface instance + @type client_interface: entropy.client.interfaces.Client class + @param metadata: any dict form metadata map (key => value) + @type metadata: dict + """ + EntropyRepositoryPlugin.__init__(self) + self._client = client_interface + if metadata is None: + self._metadata = {} + else: + self._metadata = metadata + + def add_plugin_hook(self, entropy_repository_instance): + const_debug_write(__name__, + "ClientEntropyRepositoryPlugin: calling add_plugin_hook => %s" % ( + self,) + ) + + out_intf = self._metadata.get('output_interface') + if out_intf is not None: + entropy_repository_instance.updateProgress = out_intf.updateProgress + entropy_repository_instance.askQuestion = out_intf.askQuestion + + return 0 diff --git a/libraries/entropy/client/interfaces/methods.py b/libraries/entropy/client/interfaces/methods.py index 94d060447..9191b2aea 100644 --- a/libraries/entropy/client/interfaces/methods.py +++ b/libraries/entropy/client/interfaces/methods.py @@ -21,10 +21,10 @@ import tempfile from entropy.i18n import _ from entropy.const import * from entropy.exceptions import * -from entropy.db import dbapi2, EntropyRepository, EntropyRepository +from entropy.db import dbapi2, EntropyRepository +from entropy.client.interfaces.db import ClientEntropyRepositoryPlugin from entropy.output import purple, bold, red, blue, darkgreen, darkred, brown - class RepositoryMixin: __repo_error_messages_cache = set() @@ -188,9 +188,9 @@ class RepositoryMixin: clientDatabase = True, dbname = etpConst['dbnamerepoprefix']+repoid, xcache = xcache, - indexing = indexing, - OutputInterface = self + indexing = indexing ) + self._add_plugin_to_client_repository(conn) if (repoid not in etpConst['client_treeupdatescalled']) and \ (self.entropyTools.is_root()) and \ @@ -439,6 +439,14 @@ class RepositoryMixin: # make sure settings are in sync self.SystemSettings.clear() + def _add_plugin_to_client_repository(self, entropy_client_repository): + etp_db_meta = { + 'output_interface': self, + } + repo_plugin = ClientEntropyRepositoryPlugin(self, + metadata = etp_db_meta) + entropy_client_repository.add_plugin(repo_plugin) + def open_client_repository(self): def load_db_from_ram(): @@ -471,9 +479,9 @@ class RepositoryMixin: try: conn = EntropyRepository(readOnly = False, dbFile = db_path, clientDatabase = True, dbname = etpConst['clientdbid'], - xcache = self.xcache, indexing = self.indexing, - OutputInterface = self + xcache = self.xcache, indexing = self.indexing ) + self._add_plugin_to_client_repository(conn) except (self.dbapi2.DatabaseError,): self.entropyTools.print_traceback(f = self.clientLog) conn = load_db_from_ram() @@ -559,9 +567,9 @@ class RepositoryMixin: dbname = dbname, xcache = xcache, indexing = indexing, - OutputInterface = self, skipChecks = skipChecks ) + self._add_plugin_to_client_repository(conn) def open_memory_database(self, dbname = None): if dbname == None: @@ -573,9 +581,9 @@ class RepositoryMixin: dbname = dbname, xcache = False, indexing = False, - OutputInterface = self, skipChecks = True ) + self._add_plugin_to_client_repository(dbc) dbc.initializeDatabase() return dbc