checkbox-dev team mailing list archive
-
checkbox-dev team
-
Mailing list archive
-
Message #00040
[PATCH 1/2] plainbox: add gettext_domain to providers
This patch adds an optional gettext_domain attribute to
Provider1Defintion, Provider1 and IProvider1
Signed-off-by: Zygmunt Krynicki <zygmunt.krynicki@xxxxxxxxxxxxx>
---
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
Follow ups