Bläddra i källkod

HUE-9066 [gist] Add a feature flag off for now

Added to ini even if the feature is not 100% ready yet.
Romain 6 år sedan
förälder
incheckning
31140f24fd

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

@@ -293,6 +293,9 @@
   # Turn on Prometheus metrics end point /metrics.
   ## enable_prometheus=false
 
+  # Turn on the Gist snippet sharing.
+  ## enable_gist=false
+
   # Administrators
   # ----------------
   [[django_admins]]

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

@@ -297,6 +297,9 @@
   # Turn on Prometheus metrics end point /metrics.
   ## enable_prometheus=false
 
+  # Turn on the Gist snippet sharing.
+  ## enable_gist=false
+
   # Administrators
   # ----------------
   [[django_admins]]

+ 7 - 0
desktop/core/src/desktop/conf.py

@@ -1863,6 +1863,13 @@ CLUSTERS = UnspecifiedConfigSection(
   )
 )
 
+ENABLE_GIST = Config(
+  key='enable_gist',
+  default=False,
+  type=coerce_bool,
+  help=_('Turn on the Gist snippet sharing.')
+)
+
 ENABLE_CONNECTORS = Config(
   key='enable_connectors',
   default=False,

+ 5 - 4
desktop/core/src/desktop/document2_tests.py

@@ -36,6 +36,7 @@ except RuntimeError:
   has_oozie = False
 from useradmin.models import get_default_user_group, User
 
+from desktop.conf import ENABLE_GIST
 from desktop.converters import DocumentConverter
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.fs import ProxyFS
@@ -285,13 +286,13 @@ class TestDocument2(object):
     response = self.client.get('/desktop/api2/doc', {'path': '/'})
     data = json.loads(response.content)
     assert_true('children' in data)
-    assert_equal(6, data['count'])  # This includes the 4 docs and .Trash and Gist
+    assert_equal(6 if ENABLE_GIST.get() else 5, data['count'])  # This includes the 4 docs and .Trash and Gist
 
     # Test filter type
     response = self.client.get('/desktop/api2/doc', {'path': '/', 'type': ['directory']})
     data = json.loads(response.content)
     assert_equal(['directory'], data['types'])
-    assert_equal(4, data['count'])
+    assert_equal(4 if ENABLE_GIST.get() else 3, data['count'])
     assert_true(all(doc['type'] == 'directory' for doc in data['children']))
 
     # Test search text
@@ -307,7 +308,7 @@ class TestDocument2(object):
     # Test pagination with limit
     response = self.client.get('/desktop/api2/doc', {'path': '/', 'page': 2, 'limit': 2})
     data = json.loads(response.content)
-    assert_equal(6, data['count'])
+    assert_equal(6 if ENABLE_GIST.get() else 5, data['count'])
     assert_equal(2, len(data['children']))
 
 
@@ -395,7 +396,7 @@ class TestDocument2(object):
     response = self.client.get('/desktop/api2/doc', {'path': '/'})
     data = json.loads(response.content)
     assert_true('children' in data)
-    assert_equal(2, data['count'])
+    assert_equal(2 if ENABLE_GIST.get() else 1, data['count'])
     assert_true(Document2.TRASH_DIR in [f['name'] for f in data['children']])
 
 

+ 2 - 0
desktop/core/src/desktop/js/apps/notebook2/components/ko.snippetEditorActions.js

@@ -40,6 +40,7 @@ const TEMPLATE = `
           <i class="fa fa-fw fa-map-o"></i> ${I18n('Explain')}
         </a>
       </li>
+      <!-- ko if: window.HAS_GIST -->
       <li>
         <a href="javascript:void(0)" data-bind="click: createGist, css: { 'disabled': !createGistEnabled() }" title="${I18n(
           'Share the query selection via a link'
@@ -47,6 +48,7 @@ const TEMPLATE = `
           <i class="fa fa-wf fa-link"></i> ${I18n('Share link')}
         </a>
       </li>
+      <!-- /ko -->
       <li>
         <a href="javascript:void(0)" data-bind="click: format, css: { 'disabled': !formatEnabled() }" title="${I18n(
           'Format the current SQL query'

+ 5 - 4
desktop/core/src/desktop/models.py

@@ -48,7 +48,7 @@ from useradmin.models import User, Group, get_organization
 from desktop import appmanager
 from desktop.auth.backend import is_admin
 from desktop.conf import get_clusters, CLUSTER_ID, IS_MULTICLUSTER_ONLY, IS_K8S_ONLY, ENABLE_ORGANIZATIONS, ENABLE_PROMETHEUS,\
-    has_connectors, TASK_SERVER
+    has_connectors, TASK_SERVER, ENABLE_GIST
 from desktop.lib import fsmanager
 from desktop.lib.connectors.api import _get_installed_connectors
 from desktop.lib.i18n import force_unicode
@@ -1071,10 +1071,11 @@ class Document2Manager(models.Manager, Document2QueryMixin):
     if created:
       LOG.info('Successfully created trash directory for user: %s' % user.username)
 
-    gist_dir, created = Directory.objects.get_or_create(name=Document2.GIST_DIR, owner=user, parent_directory=home_dir)
+    if ENABLE_GIST.get():
+      gist_dir, created = Directory.objects.get_or_create(name=Document2.GIST_DIR, owner=user, parent_directory=home_dir)
 
-    if created:
-      LOG.info('Successfully created gist directory for user: %s' % user.username)
+      if created:
+        LOG.info('Successfully created gist directory for user: %s' % user.username)
 
     # For any directories or documents that do not have a parent directory, assign it to home directory
     count = 0

+ 0 - 2
desktop/core/src/desktop/templates/common_header_m.mako

@@ -72,7 +72,6 @@ if USE_NEW_EDITOR.get():
   </style>
 
   <script type="text/javascript">
-
     var LOGGED_USERNAME = '${ user.username }';
     var IS_S3_ENABLED = '${ is_s3_enabled }' === 'True';
     var HAS_OPTIMIZER = '${ has_optimizer() }' === 'True';
@@ -287,4 +286,3 @@ if USE_NEW_EDITOR.get():
     </div>
   </div>
 </div>
-

+ 8 - 3
desktop/core/src/desktop/templates/global_js_constants.mako

@@ -19,17 +19,20 @@
 
   from desktop import conf
   from desktop.auth.backend import is_admin
-  from desktop.conf import APP_SWITCHER_ALTUS_BASE_URL, APP_SWITCHER_MOW_BASE_URL, DISPLAY_APP_SWITCHER, IS_K8S_ONLY, IS_MULTICLUSTER_ONLY, USE_DEFAULT_CONFIGURATION, USE_NEW_SIDE_PANELS, VCS
+  from desktop.conf import APP_SWITCHER_ALTUS_BASE_URL, APP_SWITCHER_MOW_BASE_URL, DISPLAY_APP_SWITCHER, IS_K8S_ONLY, IS_MULTICLUSTER_ONLY, \
+      USE_DEFAULT_CONFIGURATION, USE_NEW_SIDE_PANELS, VCS, ENABLE_GIST
   from desktop.models import hue_version, _get_apps, get_cluster_config
 
   from beeswax.conf import DOWNLOAD_BYTES_LIMIT, DOWNLOAD_ROW_LIMIT, LIST_PARTITIONS_LIMIT
   from dashboard.conf import HAS_SQL_ENABLED
   from filebrowser.conf import SHOW_UPLOAD_BUTTON
   from indexer.conf import ENABLE_NEW_INDEXER
-  from metadata.conf import has_catalog, has_readonly_catalog, has_optimizer, has_workload_analytics, OPTIMIZER, get_optimizer_url, get_catalog_url
+  from metadata.conf import has_catalog, has_readonly_catalog, has_optimizer, has_workload_analytics, OPTIMIZER, get_optimizer_url, \
+      get_catalog_url
   from metastore.conf import ENABLE_NEW_CREATE_TABLE
   from metastore.views import has_write_access
-  from notebook.conf import ENABLE_NOTEBOOK_2, ENABLE_QUERY_ANALYSIS, ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_SQL_INDEXER, get_ordered_interpreters, SHOW_NOTEBOOKS
+  from notebook.conf import ENABLE_NOTEBOOK_2, ENABLE_QUERY_ANALYSIS, ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_SQL_INDEXER, \
+      get_ordered_interpreters, SHOW_NOTEBOOKS
 %>
 
 <%namespace name="sqlDocIndex" file="/sql_doc_index.mako" />
@@ -100,6 +103,8 @@
   window.OPTIMIZER_URL = '${ get_optimizer_url() }'
   window.AUTO_UPLOAD_OPTIMIZER_STATS = '${ OPTIMIZER.AUTO_UPLOAD_STATS.get() }' === 'True';
 
+  window.HAS_GIST = '${ ENABLE_GIST.get() }' === 'True';
+
   ## In the past was has_workload_analytics()
   window.HAS_WORKLOAD_ANALYTICS = '${ ENABLE_QUERY_ANALYSIS.get() }' === 'True';
 

+ 5 - 4
desktop/core/src/desktop/tests.py

@@ -49,7 +49,6 @@ from nose.tools import assert_true, assert_false, assert_equal, assert_not_equal
 from dashboard.conf import HAS_SQL_ENABLED
 from desktop.settings import DATABASES
 from beeswax.conf import HIVE_SERVER_HOST
-from pig.models import PigScript
 from useradmin.models import GroupPermission, User
 
 import desktop
@@ -60,6 +59,7 @@ import desktop.views as views
 
 from desktop.auth.backend import rewrite_user
 from desktop.appmanager import DESKTOP_APPS
+from desktop.conf import ENABLE_GIST
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.conf import validate_path
 from desktop.lib.django_util import TruncatingModel
@@ -93,6 +93,7 @@ def test_home():
   assert_equal(["notmine", "trash", "mine", "history"], list(json.loads(response.context[0]['json_tags']).keys()))
   assert_equal(200, response.status_code)
 
+  from pig.models import PigScript
   script, created = PigScript.objects.get_or_create(owner=user)
   doc = Document.objects.link(script, owner=script.owner, name='test_home')
 
@@ -1210,7 +1211,7 @@ class TestDocument(object):
         parent_directory=home_dir
     )
 
-    assert_equal(home_dir.children.count(), 4)
+    assert_equal(home_dir.children.count(), 4 if ENABLE_GIST.get() else 3)
 
     # Cannot create second trash directory directly as it will fail in Document2.validate()
     Document2.objects.create(owner=self.user, parent_directory=home_dir, name='second_trash_dir', type='directory')
@@ -1225,11 +1226,11 @@ class TestDocument(object):
         description='',
         parent_directory=home_dir
     )
-    assert_equal(home_dir.children.count(), 6) # Including the second trash
+    assert_equal(home_dir.children.count(), 6 if ENABLE_GIST.get() else 5) # Including the second trash
     assert_raises(Document2.MultipleObjectsReturned, Directory.objects.get, name=Document2.TRASH_DIR)
 
     test_doc1.trash()
-    assert_equal(home_dir.children.count(), 4) # As trash documents are merged count is back to 3
+    assert_equal(home_dir.children.count(), 4 if ENABLE_GIST.get() else 3) # As trash documents are merged count is back to 3
     merged_trash_dir = Directory.objects.get(name=Document2.TRASH_DIR, owner=self.user)
 
     test_doc2.trash()

+ 2 - 0
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -1793,11 +1793,13 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
             <i class="fa fa-fw fa-map-o"></i> ${_('Explain')}
           </a>
         </li>
+        % if conf.ENABLE_GIST.get():
         <li>
           <a href="javascript:void(0)" data-bind="click: createGist, css: {'disabled': ! isReady() }" title="${ _('Share the query selection via a link') }">
             <i class="fa fa-fw fa-link"></i> ${_('Share link')}
           </a>
         </li>
+        % endif
         <!-- ko if: formatEnabled -->
         <li>
           <a href="javascript:void(0)" data-bind="click: format, css: {'disabled': ! isReady() }" title="${ _('Format the current SQL query') }">