Selaa lähdekoodia

[libzookeeper] Move the ZooKeeper specific properties to its own lib

The goal is to move ZooKeeper infos into a lib that is always available even if
the ZooKeeper app is disabled.

Indexer, Sentry needs to know some ZooKeeper properties.

The ZooKeeper app will use libzookeeper properties in Hue 4. Only its
app specific properties should be there.

This is similar to liboozie which is used by the Oozie, JobSub and Pig apps.
Romain Rigaux 10 vuotta sitten
vanhempi
commit
4d1769c
24 muutettua tiedostoa jossa 870 lisäystä ja 21 poistoa
  1. 1 0
      apps/zookeeper/src/zookeeper/conf.py
  2. 2 1
      desktop/Makefile
  3. 14 3
      desktop/conf.dist/hue.ini
  4. 14 3
      desktop/conf/pseudo-distributed.ini.tmpl
  5. 4 2
      desktop/libs/indexer/src/indexer/conf.py
  6. 13 11
      desktop/libs/indexer/src/indexer/controller.py
  7. 1 1
      desktop/libs/libsentry/babel.cfg
  8. 36 0
      desktop/libs/libzookeeper/Makefile
  9. 1 0
      desktop/libs/libzookeeper/babel.cfg
  10. 1 0
      desktop/libs/libzookeeper/hueversion.py
  11. 31 0
      desktop/libs/libzookeeper/setup.py
  12. 15 0
      desktop/libs/libzookeeper/src/libzookeeper/__init__.py
  13. 63 0
      desktop/libs/libzookeeper/src/libzookeeper/conf.py
  14. 74 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/de/LC_MESSAGES/django.po
  15. 41 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/en/LC_MESSAGES/django.po
  16. 41 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/en_US.pot
  17. 78 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/es/LC_MESSAGES/django.po
  18. 85 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/fr/LC_MESSAGES/django.po
  19. 61 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/ja/LC_MESSAGES/django.po
  20. 61 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/ko/LC_MESSAGES/django.po
  21. 76 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/pt/LC_MESSAGES/django.po
  22. 80 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/pt_BR/LC_MESSAGES/django.po
  23. 61 0
      desktop/libs/libzookeeper/src/libzookeeper/locale/zh_CN/LC_MESSAGES/django.po
  24. 16 0
      desktop/libs/libzookeeper/src/libzookeeper/models.py

+ 1 - 0
apps/zookeeper/src/zookeeper/conf.py

@@ -25,6 +25,7 @@ def coerce_string(value):
     return value
 
 
+# Used only for ZooKeeper app proeprties, ZooKeeper specific properties should come from libzookeeper
 CLUSTERS = UnspecifiedConfigSection(
   "clusters",
   help="One entry for each Zookeeper cluster",

+ 2 - 1
desktop/Makefile

@@ -48,7 +48,8 @@ APPS := core \
 	libs/librdbms \
 	libs/libsaml \
 	libs/libsentry \
-	libs/libsolr
+	libs/libsolr \
+	libs/libzookeeper
 
 .PHONY: default
 default:: hue syncdb

+ 14 - 3
desktop/conf.dist/hue.ini

@@ -988,9 +988,6 @@
   # Location of the solrctl binary.
   ## solrctl_path=/usr/bin/solrctl
 
-  # Zookeeper ensemble.
-  ## solr_zk_ensemble=localhost:2181/solr
-
 
 ###########################################################################
 # Settings to configure Job Designer
@@ -1017,6 +1014,7 @@
   # Whether to disalbe the job kill button for all users in the jobbrowser
   ## disable_killing_jobs=false
 
+
 ###########################################################################
 # Settings to configure the Zookeeper application.
 ###########################################################################
@@ -1086,3 +1084,16 @@
 
   # Sentry configuration directory, where sentry-site.xml is located.
   ## sentry_conf_dir=/etc/sentry/conf
+
+
+###########################################################################
+# Settings to configure the ZooKeeper Lib
+###########################################################################
+
+[libzookeeper]
+  # ZooKeeper ensemble. Comma separated list of Host/Port.
+  # e.g. localhost:2181,localhost:2182,localhost:2183
+  ## ensemble=localhost:2181
+
+  # Name of Kerberos principal when using security.
+  ## principal_name=zookeeper

+ 14 - 3
desktop/conf/pseudo-distributed.ini.tmpl

@@ -995,9 +995,6 @@
   # Location of the solrctl binary.
   ## solrctl_path=/usr/bin/solrctl
 
-  # Zookeeper ensemble.
-  ## solr_zk_ensemble=localhost:2181/solr
-
 
 ###########################################################################
 # Settings to configure Job Designer
@@ -1024,6 +1021,7 @@
   # Whether to disalbe the job kill button for all users in the jobbrowser
   ## disable_killing_jobs=false
 
+
 ###########################################################################
 # Settings to configure the Zookeeper application.
 ###########################################################################
@@ -1093,3 +1091,16 @@
 
   # Sentry configuration directory, where sentry-site.xml is located.
   ## sentry_conf_dir=/etc/sentry/conf
+
+
+###########################################################################
+# Settings to configure the ZooKeeper Lib
+###########################################################################
+
+[libzookeeper]
+  # ZooKeeper ensemble. Comma separated list of Host/Port.
+  # e.g. localhost:2181,localhost:2182,localhost:2183
+  ## ensemble=localhost:2181
+
+  # Name of Kerberos principal when using security.
+  ## principal_name=zookeeper

+ 4 - 2
desktop/libs/indexer/src/indexer/conf.py

@@ -25,6 +25,7 @@ from desktop.lib.conf import Config
 
 LOG = logging.getLogger(__name__)
 
+
 def solrctl():
   """
   solrctl path
@@ -48,7 +49,7 @@ def zkensemble():
     if clusters['default'].HOST_PORTS.get() != 'localhost:2181':
       return '%s/solr' % clusters['default'].HOST_PORTS.get()
   except:
-    LOG.exception('failed to get zookeeper ensmble')
+    LOG.exception('failed to get zookeeper ensemble')
 
   try:
     from search.conf import SOLR_URL
@@ -84,7 +85,8 @@ SOLRCTL_PATH = Config(
   type=str,
   dynamic_default=solrctl)
 
-SOLR_ZK_ENSEMBLE  = Config(
+# Deprecated
+SOLR_ZK_ENSEMBLE = Config(
   key="solr_zk_ensemble",
   help=_t("Zookeeper ensemble."),
   type=str,

+ 13 - 11
desktop/libs/indexer/src/indexer/controller.py

@@ -26,9 +26,11 @@ from django.utils.translation import ugettext as _
 
 from desktop.lib.exceptions_renderable import PopupException
 from libsolr.api import SolrApi
+from libzookeeper.conf import ENSEMBLE
 from search.conf import SOLR_URL, SECURITY_ENABLED
 
-from indexer import conf, utils
+from indexer.conf import SOLRCTL_PATH, CORE_INSTANCE_DIR
+from indexer.utils import copy_configs, field_values_from_log, field_values_from_separated_file
 
 
 LOG = logging.getLogger(__name__)
@@ -38,7 +40,7 @@ FLAGS = [('I', 'indexed'), ('T', 'tokenized'), ('S', 'stored')]
 
 
 def get_solrctl_path():
-  solrctl_path = conf.SOLRCTL_PATH.get()
+  solrctl_path = SOLRCTL_PATH.get()
   if solrctl_path is None:
     LOG.error("Could not find solrctl executable")
     raise PopupException(_('Could not find solrctl executable'))
@@ -131,12 +133,12 @@ class CollectionManagerController(object):
       # solrcloud mode
 
       # Need to remove path afterwards
-      tmp_path, solr_config_path = utils.copy_configs(fields, unique_key_field, df, True)
+      tmp_path, solr_config_path = copy_configs(fields, unique_key_field, df, True)
 
       # Create instance directory.
       solrctl_path = get_solrctl_path()
 
-      process = subprocess.Popen([solrctl_path, "--zk", conf.SOLR_ZK_ENSEMBLE.get(), "instancedir", "--create", name, solr_config_path],
+      process = subprocess.Popen([solrctl_path, "--zk", ENSEMBLE.get(), "instancedir", "--create", name, solr_config_path],
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE)
       status = process.wait()
@@ -147,12 +149,12 @@ class CollectionManagerController(object):
       if status != 0:
         LOG.error("Could not create instance directory.\nOutput: %s\nError: %s" % process.communicate())
         raise PopupException(_('Could not create instance directory. '
-                               'Check if solr_zk_ensemble and solrctl_path are correct in Hue config [indexer].'))
+                               'Check if [libzookeeper]ensemble and [indexer]solrctl_path are correct in Hue config.'))
 
       api = SolrApi(SOLR_URL.get(), self.user, SECURITY_ENABLED.get())
       if not api.create_collection(name):
         # Delete instance directory if we couldn't create a collection.
-        process = subprocess.Popen([solrctl_path, "--zk", conf.SOLR_ZK_ENSEMBLE.get(), "instancedir", "--delete", name],
+        process = subprocess.Popen([solrctl_path, "--zk", ENSEMBLE.get(), "instancedir", "--delete", name],
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE)
         if process.wait() != 0:
@@ -161,10 +163,10 @@ class CollectionManagerController(object):
     else:
       # Non-solrcloud mode
       # Create instance directory locally.
-      instancedir = os.path.join(conf.CORE_INSTANCE_DIR.get(), name)
+      instancedir = os.path.join(CORE_INSTANCE_DIR.get(), name)
       if os.path.exists(instancedir):
         raise PopupException(_("Instance directory %s already exists! Please remove it from the file system.") % instancedir)
-      tmp_path, solr_config_path = utils.copy_configs(fields, unique_key_field, df, False)
+      tmp_path, solr_config_path = copy_configs(fields, unique_key_field, df, False)
       shutil.move(solr_config_path, instancedir)
       shutil.rmtree(tmp_path)
 
@@ -186,7 +188,7 @@ class CollectionManagerController(object):
       # Delete instance directory.
       solrctl_path = get_solrctl_path()
 
-      process = subprocess.Popen([solrctl_path, "--zk", conf.SOLR_ZK_ENSEMBLE.get(), "instancedir", "--delete", name],
+      process = subprocess.Popen([solrctl_path, "--zk", ENSEMBLE.get(), "instancedir", "--delete", name],
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE
                                  )
@@ -232,10 +234,10 @@ class CollectionManagerController(object):
         fh = fs.open(path)
         if data_type == 'log':
           # Transform to JSON then update
-          data = json.dumps([value for value in utils.field_values_from_log(fh, fields)])
+          data = json.dumps([value for value in field_values_from_log(fh, fields)])
           content_type = 'json'
         elif data_type == 'separated':
-          data = json.dumps([value for value in utils.field_values_from_separated_file(fh, kwargs.get('separator', ','), kwargs.get('quote_character', '"'), fields)], indent=2)
+          data = json.dumps([value for value in field_values_from_separated_file(fh, kwargs.get('separator', ','), kwargs.get('quote_character', '"'), fields)], indent=2)
           content_type = 'json'
         else:
           raise PopupException(_('Could not update index. Unknown type %s') % data_type)

+ 1 - 1
desktop/libs/libsentry/babel.cfg

@@ -1 +1 @@
-[python: src/librdbms/**.py]
+[python: src/libsentry/**.py]

+ 36 - 0
desktop/libs/libzookeeper/Makefile

@@ -0,0 +1,36 @@
+#
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+ifeq ($(ROOT),)
+  $(error "Error: Expect the environment variable $$ROOT to point to the Desktop installation")
+endif
+
+include $(ROOT)/Makefile.sdk
+
+default::
+	@echo '  env-install    : Install into virtual-env'
+
+#
+# env-install
+#   Install app into the virtual environment.
+#
+.PHONY: env-install
+env-install: compile ext-env-install
+	@echo '--- Installing $(APP_NAME) into virtual-env'
+	@$(ENV_PYTHON) setup.py develop -N -q

+ 1 - 0
desktop/libs/libzookeeper/babel.cfg

@@ -0,0 +1 @@
+[python: src/libzookeeper/**.py]

+ 1 - 0
desktop/libs/libzookeeper/hueversion.py

@@ -0,0 +1 @@
+../../../VERSION

+ 31 - 0
desktop/libs/libzookeeper/setup.py

@@ -0,0 +1,31 @@
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from setuptools import setup, find_packages
+from hueversion import VERSION
+
+setup(
+      name = "libzookeeper",
+      version = VERSION,
+      url = 'http://github.com/cloudera/hue',
+      description = "ZooKeeper Libraries",
+      packages = find_packages('src'),
+      package_dir = {'': 'src' },
+      install_requires = ['setuptools', 'desktop'],
+      # Even libraries need to be registered as desktop_apps,
+      # if they have configuration, like this one.
+      entry_points = { 'desktop.sdk.lib': 'libzookeeper=libzookeeper' },
+)

+ 15 - 0
desktop/libs/libzookeeper/src/libzookeeper/__init__.py

@@ -0,0 +1,15 @@
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.

+ 63 - 0
desktop/libs/libzookeeper/src/libzookeeper/conf.py

@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+
+from urlparse import urlparse
+
+from desktop.lib.conf import Config, UnspecifiedConfigSection, ConfigSection
+
+
+LOG = logging.getLogger(__name__)
+
+
+def zkensemble():
+  """
+  Try to guess the value if no values are specified.
+  """
+  try:
+    # Backward compatibility until Hue 4
+    from zookeeper.conf import CLUSTERS
+    clusters = CLUSTERS.get()
+    if clusters['default'].HOST_PORTS.get() != 'localhost:2181':
+      return '%s/solr' % clusters['default'].HOST_PORTS.get()
+  except:
+    LOG.exception('failed to get zookeeper ensemble')
+
+  try:
+    from search.conf import SOLR_URL
+    parsed = urlparse(SOLR_URL.get())
+    return "%s:2181/solr" % (parsed.hostname or 'localhost')
+  except:
+    LOG.exception('failed to get solr url')
+
+  return "localhost:2181"
+
+
+ENSEMBLE=Config(
+    "ensemble",
+    help="ZooKeeper ensemble. Comma separated list of Host/Port, e.g. localhost:2181,localhost:2182,localhost:2183",
+    dynamic_default=zkensemble,
+    type=str,
+)
+
+PRINCIPAL_NAME=Config(
+    "principal_name",
+    help="Name of Kerberos principal when using security",
+    default="zookeeper",
+    type=str,
+)

+ 74 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/de/LC_MESSAGES/django.po

@@ -0,0 +1,74 @@
+# German translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJEKTVERSION\n"
+"Report-Msgid-Bugs-To: E-MAIL@ADRESSE\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: VOLLSTÄNDIGER NAME <E-MAIL@ADRESSE>\n"
+"Language-Team: de <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "RDBMS-Serverkonfigurationen."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "RDBMS-Serverkonfiguration."
+#~ msgid "Nice name of server."
+#~ msgstr "Servername."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr ""
+#~ "Datenbankname oder Pfad zur Datenbankdatei."
+#~ " Wenn dies angegeben wird, ist das"
+#~ " Auswählen anderer Datenbanken nicht "
+#~ "zulässig."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "Datenbank-Engine wie postgresq_psycopg2, mysql oder sqlite3."
+#~ msgid "Database username."
+#~ msgstr "Datenbank-Benutzername."
+#~ msgid "Database password."
+#~ msgstr "Datenbank-Kennwort."
+#~ msgid "Database host."
+#~ msgstr "Datenbank-Host."
+#~ msgid "Database port."
+#~ msgstr "Datenbank-Port."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr ""
+#~ "Datenbankoptionen zum Senden an den "
+#~ "Server, wenn die Verbindung hergestellt "
+#~ "wird."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr "Datenbankname darf für das SQLite-Backend nicht leer sein."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr ""
+#~ "Datenbankname darf für das Oracle-"
+#~ "Backend nicht leer sein. Es muss "
+#~ "die SID Ihrer Datenbank sein."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr "Der Datenbankname darf für das PostgreSQL-Backend nicht leer sein."
+#~ msgid "No server!"
+#~ msgstr "Kein Server!"
+#~ msgid "No database!"
+#~ msgstr "Keine Datenbank!"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "Datenbank \"%s\" ist nicht zugelassen. Verwenden Sie Datenbank \"%s\"."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr ""
+#~ "Datenbank %s nicht gefunden. Sind Sie"
+#~ " sicher, dass Ihre Konfiguration korrekt"
+#~ " ist?"

+ 41 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/en/LC_MESSAGES/django.po

@@ -0,0 +1,41 @@
+# English translations for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2013-05-10 11:59-0700\n"
+"PO-Revision-Date: 2013-10-28 10:31-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: en <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/impala/conf.py:26
+msgid "Host of the Impala Server."
+msgstr ""
+
+#: src/impala/conf.py:31
+msgid "Port of the Impala Server."
+msgstr ""
+
+#: src/impala/conf.py:37
+msgid ""
+"Beeswax or Hive Server 2 Thrift API used. Choices are: 'beeswax' or "
+"'hiveserver2'."
+msgstr ""
+
+#: src/impala/conf.py:42
+msgid "Kerberos principal name for Impala. Typically 'impala/hostname.foo.com'."
+msgstr ""
+
+#: src/impala/views.py:35
+msgid "A POST request is required."
+msgstr ""
+

+ 41 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/en_US.pot

@@ -0,0 +1,41 @@
+# Translations template for Hue.
+# Copyright (C) 2013 Cloudera, Inc
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Hue VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2013-05-10 11:59-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/impala/conf.py:26
+msgid "Host of the Impala Server."
+msgstr ""
+
+#: src/impala/conf.py:31
+msgid "Port of the Impala Server."
+msgstr ""
+
+#: src/impala/conf.py:37
+msgid ""
+"Beeswax or Hive Server 2 Thrift API used. Choices are: 'beeswax' or "
+"'hiveserver2'."
+msgstr ""
+
+#: src/impala/conf.py:42
+msgid "Kerberos principal name for Impala. Typically 'impala/hostname.foo.com'."
+msgstr ""
+
+#: src/impala/views.py:35
+msgid "A POST request is required."
+msgstr ""
+

+ 78 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/es/LC_MESSAGES/django.po

@@ -0,0 +1,78 @@
+# Spanish translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSIÓN DEL PROYECTO\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: NOMBRE COMPLETO <EMAIL@ADDRESS>\n"
+"Language-Team: es <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8 bits\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "Configuraciones del servidor RDBMS."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "Configuración del servidor RDBMS."
+#~ msgid "Nice name of server."
+#~ msgstr "Nombre del servidor en inglés o con etiqueta."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr ""
+#~ "Nombre de la base de datos o "
+#~ "ruta del archivo de la base de "
+#~ "datos. Si se indica, no se "
+#~ "permitirá elegir otras bases de datos."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "Motor de base de datos, como postgresql_psycopg2, mysql o sqlite3."
+#~ msgid "Database username."
+#~ msgstr "Nombre de usuario de la base de datos."
+#~ msgid "Database password."
+#~ msgstr "Contraseña de la base de datos."
+#~ msgid "Database host."
+#~ msgstr "Host de la base de datos."
+#~ msgid "Database port."
+#~ msgstr "Puerto de la base de datos."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "Opciones de base de datos que enviar al servidor al conectar."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr ""
+#~ "El nombre de la base de datos "
+#~ "no debe estar vacío en el back-"
+#~ "end de SQLite."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr ""
+#~ "El nombre de la base de datos "
+#~ "no debe estar vacío en el back-"
+#~ "end de Oracle. Debe ser el SID "
+#~ "de su base de datos."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr ""
+#~ "El nombre de la base de datos "
+#~ "no debe estar vacío en el back-"
+#~ "end de PostgreSQL."
+#~ msgid "No server!"
+#~ msgstr "No hay servidor."
+#~ msgid "No database!"
+#~ msgstr "No hay base de datos."
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "No se permite la base de datos '%s'. Use la base de datos '%s'."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr ""
+#~ "No se puede localizar la base de"
+#~ " datos %s. ¿Está seguro de que "
+#~ "la configuración es correcta?"

+ 85 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/fr/LC_MESSAGES/django.po

@@ -0,0 +1,85 @@
+# French translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSION DU PROJET\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: fr <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "Configurations du serveur RDBMS."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "Configuration du serveur RDBMS."
+#~ msgid "Nice name of server."
+#~ msgstr "Nom de serveur correct."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr ""
+#~ "Nom de la base de données ou "
+#~ "chemin d'accès au fichier de la "
+#~ "base de données. S'il est fourni, "
+#~ "il ne sera pas possible de choisir"
+#~ " une autre base de données."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr ""
+#~ "Moteur de base de données, tel que"
+#~ "  postgresql_psycopg2, mysql ou sqlite3."
+#~ msgid "Database username."
+#~ msgstr "Nom d'utilisateur de la base de données."
+#~ msgid "Database password."
+#~ msgstr "Mot de passe de la base de données."
+#~ msgid "Database host."
+#~ msgstr "Hôte de la base de données."
+#~ msgid "Database port."
+#~ msgstr "Port de la base de données."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "Options de base de données à envoyer au serveur lors de la connexion."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr ""
+#~ "Le nom de la base de données "
+#~ "ne doit pas être vide pour le "
+#~ "serveur principal SQLite."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr ""
+#~ "Le nom de la base de données "
+#~ "ne doit pas être vide pour le "
+#~ "serveur principal Oracle. Il doit "
+#~ "correspondre au SID de votre base "
+#~ "de données."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr ""
+#~ "Le nom de la base de données "
+#~ "ne doit pas être vide pour le "
+#~ "serveur principal PostgreSQL."
+#~ msgid "No server!"
+#~ msgstr "Pas de serveur !"
+#~ msgid "No database!"
+#~ msgstr "Aucune base de données."
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr ""
+#~ "La base de données '%s' n'est pas"
+#~ " autorisée. Veuillez utiliser la base "
+#~ "de données '%s'."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr ""
+#~ "Impossible de localiser la base de "
+#~ "données %s. Etes-vous sûr que "
+#~ "votre configuration est correcte ?"

+ 61 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/ja/LC_MESSAGES/django.po

@@ -0,0 +1,61 @@
+# Japanese translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: プロジェクトのバージョン\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: フルネーム<EMAIL@ADDRESS>\n"
+"Language-Team: ja <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "RDBMS サーバーの設定です。"
+#~ msgid "RDBMS server configuration."
+#~ msgstr "RDBMS サーバーの設定です。"
+#~ msgid "Nice name of server."
+#~ msgstr "サーバーの適切な名前です。"
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr "データベース名、またはデータベースファイルへのパスです。指定されている場合、その他のデータベースを選択することは許可されません。"
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "postgresql_psycopg2、mysql、sqlite3 などのデータベースエンジンです。"
+#~ msgid "Database username."
+#~ msgstr "データベースのユーザー名です。"
+#~ msgid "Database password."
+#~ msgstr "データベースのパスワードです。"
+#~ msgid "Database host."
+#~ msgstr "データベースのホストです。"
+#~ msgid "Database port."
+#~ msgstr "データベースのポートです。"
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "接続時にサーバーに送信するデータベースオプションです。"
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr "SQLite バックエンドのデータベース名は空にできません。"
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr "Oracle バックエンドのデータベース名は空にできません。データベースの SID にする必要があります。"
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr "PostgreSQL バックエンドのデータベース名は空にできません。"
+#~ msgid "No server!"
+#~ msgstr "サーバーがありません。"
+#~ msgid "No database!"
+#~ msgstr "データベースがありません。"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "データベース '%s' は使用できません。データベース '%s' を使用してください。"
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr "%s データベースが見つかりません。設定は正しいですか?"

+ 61 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/ko/LC_MESSAGES/django.po

@@ -0,0 +1,61 @@
+# Korean translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 프로젝트 버전\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: 전체 이름 <EMAIL@ADDRESS>\n"
+"Language-Team: ko <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: 텍스트/일반; charset=utf-8\n"
+"Content-Transfer-Encoding: 8비트\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "RDBMS 서버 구성입니다."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "RDBMS 서버 구성입니다."
+#~ msgid "Nice name of server."
+#~ msgstr "적절한 서버 이름입니다."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr "데이터베이스 파일에 대한 경로 또는 이름입니다. 지정한 경우에는 다른 데이터베이스를 선택할 수 없습니다."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "postgresql_psycopg2, mysql, or sqlite3 같은 데이터베이스 엔진입니다."
+#~ msgid "Database username."
+#~ msgstr "데이터베이스 사용자 이름입니다."
+#~ msgid "Database password."
+#~ msgstr "데이터베이스 암호입니다."
+#~ msgid "Database host."
+#~ msgstr "데이터베이스 호스트입니다."
+#~ msgid "Database port."
+#~ msgstr "데이터베이스 포트입니다."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "연결할 때 서버로 보낸 데이터베이스 옵션입니다."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr "SQLite 백엔드에 대한 데이터베이스 이름은 비워 둘 수 없습니다."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr "Oracle 백엔드에 대한 데이터베이스 이름은 비워 둘 수 없습니다. 데이터베이스의 SID여야 합니다."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr "PostgreSQL 백엔드에 대한 데이터베이스 이름은 비워 둘 수 없습니다."
+#~ msgid "No server!"
+#~ msgstr "서버 없음!"
+#~ msgid "No database!"
+#~ msgstr "데이터베이스 없음!"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "'%s' 데이터베이스를 사용할 수 없습니다. '%s' 데이터베이스를 사용하십시오."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr "%s 데이터베이스를 찾을 수 없습니다. 구성이 맞습니까?"

+ 76 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/pt/LC_MESSAGES/django.po

@@ -0,0 +1,76 @@
+# Portuguese translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSÃO DO PROJECTO\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: pt <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8 bits\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "Configurações do servidor RDBMS."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "Configuração do servidor RDBMS."
+#~ msgid "Nice name of server."
+#~ msgstr "Nome do servidor."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr ""
+#~ "Nome de base de dados ou caminho"
+#~ " para o ficheiro de base de "
+#~ "dados. Se fornecido, então a escolha "
+#~ "de outras bases de dados não será"
+#~ " permitida."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "Motor de base de dados, como postgresql_psycopg2, mysql ou sqlite3."
+#~ msgid "Database username."
+#~ msgstr "Nome de utilizador da base de dados."
+#~ msgid "Database password."
+#~ msgstr "Palavra-passe da base de dados."
+#~ msgid "Database host."
+#~ msgstr "Anfitrião da base de dados."
+#~ msgid "Database port."
+#~ msgstr "Porta da base de dados."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "Opções da base de dados a enviar para o servidor ao ligar."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr "O nome da base de dados não deve estar vazio para o back-end de SQLite."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr ""
+#~ "O nome de base de dados não "
+#~ "deve estar vazio para o back-end"
+#~ " de Oracle. Deve ser o SID da"
+#~ " sua base de dados."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr ""
+#~ "O nome de base de dados não "
+#~ "deve estar vazio para o back-end"
+#~ " do PostgreSQL."
+#~ msgid "No server!"
+#~ msgstr "Sem servidor!"
+#~ msgid "No database!"
+#~ msgstr "Sem base de dados!"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "A base de dados \"%s\" não é permitida. Utilize a base de dados \"%s\"."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr ""
+#~ "Não é possível localizar a base de"
+#~ " dados %s. Tem a certeza de que"
+#~ " a sua configuração está correcta?"

+ 80 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/pt_BR/LC_MESSAGES/django.po

@@ -0,0 +1,80 @@
+# Portuguese (Brazil) translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VERSÃO DO PROJETO\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: NOME COMPLETO <EMAIL@ADDRESS>\n"
+"Language-Team: pt_BR <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8 bits\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "Configurações do servidor RDBMS."
+#~ msgid "RDBMS server configuration."
+#~ msgstr "Configuração do servidor RDBMS."
+#~ msgid "Nice name of server."
+#~ msgstr "Nome legal de servidor."
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr ""
+#~ "Nome do banco de dados ou caminho"
+#~ " para o arquivo do banco de "
+#~ "dados. Se for fornecido, escolher outros"
+#~ " bancos de dados não será permitido."
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr ""
+#~ "Mecanismo de banco de dados, como "
+#~ "postgresql_psycopg2, mysql ou sqlite3."
+#~ msgid "Database username."
+#~ msgstr "Nome de usuário do banco de dados."
+#~ msgid "Database password."
+#~ msgstr "Senha do banco de dados."
+#~ msgid "Database host."
+#~ msgstr "Host do banco de dados."
+#~ msgid "Database port."
+#~ msgstr "Porta do banco de dados."
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "Opções do banco de dados a serem enviadas ao servidor ao conectar."
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr ""
+#~ "O nome do banco de dados não "
+#~ "deve estar vazio para o back-end"
+#~ " do SQLite."
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr ""
+#~ "O nome do banco de dados não "
+#~ "deve estar vazio para o back-end"
+#~ " da Oracle. Ele deve ser o SID"
+#~ " do seu banco de dados."
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr ""
+#~ "O nome do banco de dados não "
+#~ "deve estar vazio para o back-end"
+#~ " do PostgreSQL."
+#~ msgid "No server!"
+#~ msgstr "Nenhum servidor!"
+#~ msgid "No database!"
+#~ msgstr "Nenhum banco de dados!"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "Banco de dados '%s' não permitido. Use o banco de dados '%s'."
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr ""
+#~ "Não é possível localizar o banco "
+#~ "de dados %s. Tem certeza de que"
+#~ " sua configuração está correta?"

+ 61 - 0
desktop/libs/libzookeeper/src/libzookeeper/locale/zh_CN/LC_MESSAGES/django.po

@@ -0,0 +1,61 @@
+# Chinese (China) translations for Hue.
+# Copyright (C) 2012 Cloudera
+# This file is distributed under the same license as the Hue project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 项目版本\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2015-02-04 18:46-0800\n"
+"PO-Revision-Date: 2012-07-30 18:50-0700\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: zh_CN <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8 位\n"
+"Generated-By: Babel 0.9.6\n"
+
+#~ msgid "RDBMS server configurations."
+#~ msgstr "RDBMS 服务器配置。"
+#~ msgid "RDBMS server configuration."
+#~ msgstr "RDBMS 服务器配置。"
+#~ msgid "Nice name of server."
+#~ msgstr "服务器名称。"
+#~ msgid ""
+#~ "Database name or path to database "
+#~ "file. If provided, then choosing other"
+#~ " databases will not be permitted."
+#~ msgstr "数据库名称或数据库文件路径。如果已提供,则不允许选择其他数据库。"
+#~ msgid "Database engine, such as postgresql_psycopg2, mysql, or sqlite3."
+#~ msgstr "数据库引擎,如 postgresql_psycopg2、mysql 或 sqlite3。"
+#~ msgid "Database username."
+#~ msgstr "数据库用户名。"
+#~ msgid "Database password."
+#~ msgstr "数据库密码。"
+#~ msgid "Database host."
+#~ msgstr "数据库主机。"
+#~ msgid "Database port."
+#~ msgstr "数据库端口。"
+#~ msgid "Database options to send to the server when connecting."
+#~ msgstr "连接时发送到服务器的数据库选项。"
+#~ msgid "Database name should not be empty for the SQLite backend."
+#~ msgstr "对于 SQLite 后端,数据库名称不应为空。"
+#~ msgid ""
+#~ "Database name should not be empty "
+#~ "for the Oracle backend. It should "
+#~ "be the SID of your database."
+#~ msgstr "对于 Oracle 后端,数据库名称不应为空。该名称应为数据库的 SID。"
+#~ msgid "Database name should not be empty for the PostgreSQL backend."
+#~ msgstr "对于 PostgreSQL 后端,数据库名称不应为空。"
+#~ msgid "No server!"
+#~ msgstr "无服务器!"
+#~ msgid "No database!"
+#~ msgstr "无数据库!"
+#~ msgid "Database '%s' is not allowed. Please use database '%s'."
+#~ msgstr "不允许数据库 '%s'。请使用数据库 '%s'。"
+#~ msgid ""
+#~ "Cannot locate the %s database. Are "
+#~ "you sure your configuration is correct?"
+#~ msgstr "无法找到 %s 数据库。您是否确定配置正确?"

+ 16 - 0
desktop/libs/libzookeeper/src/libzookeeper/models.py

@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.