This patch adds an optional gettext_domain attribute to Provider1Defintion, Provider1 and IProvider1
Signed-off-by: Zygmunt Krynicki <[email protected]> --- plainbox/docs/changelog.rst | 4 ++++ plainbox/plainbox/abc.py | 9 +++++++++ plainbox/plainbox/impl/providers/v1.py | 4 ++++ plainbox/plainbox/impl/secure/providers/test_v1.py | 13 +++++++++++-- plainbox/plainbox/impl/secure/providers/v1.py | 22 ++++++++++++++++++++-- plainbox/plainbox/provider_manager.py | 3 ++- plainbox/plainbox/test_provider_manager.py | 5 +++++ 7 files changed, 55 insertions(+), 5 deletions(-) diff --git a/plainbox/docs/changelog.rst b/plainbox/docs/changelog.rst index b295590..7d4a8ab 100644 --- a/plainbox/docs/changelog.rst +++ b/plainbox/docs/changelog.rst @@ -77,6 +77,10 @@ API changes (Providers) internally by the class itself. Identical functionality is now offered by :class:`plainbox.impl.secure.plugins.FsPlugInCollection` and :class:`plainbox.impl.secure.providers.v1.JobDefinitionPlugIn`. +* PlainBox now associates a gettext domain with each provider. This + information is available both in + :attr:`plainbox.impl.secure.providers.v1.Provider1Definition.gettext_domain` + and :attr:`plainbox.impl.secure.providers.v1.Provider1.gettext_domain` API changes (Qualifiers) ........................ diff --git a/plainbox/plainbox/abc.py b/plainbox/plainbox/abc.py index 7224e28..dbb29ed 100644 --- a/plainbox/plainbox/abc.py +++ b/plainbox/plainbox/abc.py @@ -444,6 +444,15 @@ class IProvider1(metaclass=ABCMeta): This name should be dbus-friendly. It should not be localizable. """ + @abstractproperty + def gettext_domain(self): + """ + the name of the gettext domain associated with this provider + + This value may be empty, in such case provider data cannot be localized + for the user environment. + """ + @abstractmethod def get_builtin_jobs(self): """ diff --git a/plainbox/plainbox/impl/providers/v1.py b/plainbox/plainbox/impl/providers/v1.py index e7998f3..930e538 100644 --- a/plainbox/plainbox/impl/providers/v1.py +++ b/plainbox/plainbox/impl/providers/v1.py @@ -74,6 +74,10 @@ class DummyProvider1(IProvider1, IProviderBackend1): 'description', "A dummy provider useful for testing") @property + def gettext_domain(self): + return self._extras.get('gettext_domain', "") + + @property def CHECKBOX_SHARE(self): return self._extras.get('CHECKBOX_SHARE', "") diff --git a/plainbox/plainbox/impl/secure/providers/test_v1.py b/plainbox/plainbox/impl/secure/providers/test_v1.py index f9f9a49..66e1323 100644 --- a/plainbox/plainbox/impl/secure/providers/test_v1.py +++ b/plainbox/plainbox/impl/secure/providers/test_v1.py @@ -129,7 +129,8 @@ class Provider1DefinitionTests(TestCase): "location = /some/directory/\n" "name = 2013.org.example:smoke-test\n" "version = 1.0\n" - "description = A provider for smoke testing\n") + "description = A provider for smoke testing\n" + "gettext_domain = plainbox\n") def setUp(self): self.definition = Provider1Definition() @@ -144,6 +145,7 @@ class Provider1DefinitionTests(TestCase): self.assertEqual(self.definition.version, "1.0") self.assertEqual( self.definition.description, "A provider for smoke testing") + self.assertEqual(self.definition.gettext_domain, "plainbox") class Provider1PlugInTests(TestCase): @@ -455,11 +457,12 @@ class Provider1Tests(TestCase): VERSION = "1.0" DESCRIPTION = "description" SECURE = True + GETTEXT_DOMAIN = "domain" def setUp(self): self.provider = Provider1( self.BASE_DIR, self.NAME, self.VERSION, self.DESCRIPTION, - self.SECURE) + self.SECURE, self.GETTEXT_DOMAIN) def test_repr(self): self.assertEqual( @@ -526,6 +529,12 @@ class Provider1Tests(TestCase): """ self.assertEqual(self.provider.secure, self.SECURE) + def test_gettext_domain(self): + """ + Verify that Provider1.gettext_domain attribute is set correctly + """ + self.assertEqual(self.provider.gettext_domain, self.GETTEXT_DOMAIN) + def test_get_builtin_whitelists__normal(self): """ verify that Provider1.get_builtin_whitelist() loads and returns all of diff --git a/plainbox/plainbox/impl/secure/providers/v1.py b/plainbox/plainbox/impl/secure/providers/v1.py index 8ac53a5..f980643 100644 --- a/plainbox/plainbox/impl/secure/providers/v1.py +++ b/plainbox/plainbox/impl/secure/providers/v1.py @@ -126,7 +126,8 @@ class Provider1(IProvider1, IProviderBackend1): location for all other data. """ - def __init__(self, base_dir, name, version, description, secure): + def __init__(self, base_dir, name, version, description, secure, + gettext_domain=None): """ Initialize the provider with the associated base directory. @@ -140,6 +141,7 @@ class Provider1(IProvider1, IProviderBackend1): self._version = version self._description = description self._secure = secure + self._gettext_domain = gettext_domain self._whitelist_collection = FsPlugInCollection( [self.whitelists_dir], ext=".whitelist", wrapper=WhiteListPlugIn) self._job_collection = FsPlugInCollection( @@ -239,6 +241,16 @@ class Provider1(IProvider1, IProviderBackend1): """ return self._secure + @property + def gettext_domain(self): + """ + the name of the gettext domain associated with this provider + + This value may be empty, in such case provider data cannot be localized + for the user environment. + """ + return self._gettext_domain + def get_builtin_whitelists(self): """ Load all the whitelists from :attr:`whitelists_dir` and return them @@ -438,6 +450,11 @@ class Provider1Definition(Config): section='PlainBox Provider', help_text="Description of the provider") + gettext_domain = Variable( + section='PlainBox Provider', + default="", + help_text="Name of the gettext domain for translations") + class Provider1PlugIn(IPlugIn): """ @@ -465,7 +482,8 @@ class Provider1PlugIn(IPlugIn): definition.name, definition.version, definition.description, - secure=os.path.dirname(filename) in get_secure_PROVIDERPATH_list()) + secure=os.path.dirname(filename) in get_secure_PROVIDERPATH_list(), + gettext_domain=definition.gettext_domain) def __repr__(self): return "<{!s} plugin_name:{!r}>".format( diff --git a/plainbox/plainbox/provider_manager.py b/plainbox/plainbox/provider_manager.py index d6fda12..4db31d7 100644 --- a/plainbox/plainbox/provider_manager.py +++ b/plainbox/plainbox/provider_manager.py @@ -82,7 +82,7 @@ class ManageCommand(CommandBase): return Provider1( self.definition.location, self.definition.name, self.definition.version, self.definition.description, - secure=False) + secure=False, gettext_domain=self.definition.gettext_domain) class InstallCommand(ManageCommand): @@ -337,6 +337,7 @@ class InfoCommand(ManageCommand): print("[Provider MetaData]") print("\tname: {}".format(provider.name)) print("\tversion: {}".format(provider.version)) + print("\tgettext_domain: {}".format(provider.gettext_domain)) print("[Job Definitions]") job_list, problem_list = provider.load_all_jobs() for job in job_list: diff --git a/plainbox/plainbox/test_provider_manager.py b/plainbox/plainbox/test_provider_manager.py index a7a8fff..2a0bbfa 100644 --- a/plainbox/plainbox/test_provider_manager.py +++ b/plainbox/plainbox/test_provider_manager.py @@ -86,6 +86,7 @@ class ProviderManagerToolTests(TestCase): content = ( "[PlainBox Provider]\n" "description = description\n" + "gettext_domain = domain\n" "location = /foo/lib/plainbox-providers-1/2014.com.example.test\n" "name = 2014.com.example:test\n" "version = 1.0\n" @@ -180,6 +181,7 @@ class ProviderManagerToolTests(TestCase): content = ( "[PlainBox Provider]\n" "description = description\n" + "gettext_domain = domain\n" "location = {}\n" "name = 2014.com.example:test\n" "version = 1.0\n" @@ -200,6 +202,7 @@ class ProviderManagerToolTests(TestCase): content = ( "[PlainBox Provider]\n" "description = description\n" + "gettext_domain = domain\n" "location = {}\n" "name = 2014.com.example:test\n" "version = 1.0\n" @@ -294,6 +297,7 @@ class ProviderManagerToolTests(TestCase): "[Provider MetaData]\n" "\tname: 2014.com.example:test\n" "\tversion: 1.0\n" + "\tgettext_domain: domain\n" "[Job Definitions]\n" "\t'dummy', from jobs/jobs.txt:1-3\n" "[White Lists]\n" @@ -330,6 +334,7 @@ class ProviderManagerToolTests(TestCase): definition.name = "2014.com.example:test" definition.version = "1.0" definition.description = "description" + definition.gettext_domain = "domain" return definition def tearDown(self): -- 1.9.rc1 -- Mailing list: https://launchpad.net/~checkbox-dev Post to : [email protected] Unsubscribe : https://launchpad.net/~checkbox-dev More help : https://help.launchpad.net/ListHelp

