Jelajahi Sumber

[editor] Hook in auto load dialect example

Romain Rigaux 4 tahun lalu
induk
melakukan
9f2034b57d

+ 3 - 9
apps/beeswax/src/beeswax/management/commands/beeswax_install_examples.py

@@ -27,9 +27,9 @@ from django.utils.translation import ugettext as _
 
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.conf import USE_NEW_EDITOR
-from desktop.models import Directory, Document, Document2, Document2Permission
+from desktop.models import Directory, Document2, Document2Permission
 from hadoop import cluster
-from notebook.models import import_saved_beeswax_query, make_notebook, MockRequest
+from notebook.models import import_saved_beeswax_query, make_notebook, MockRequest, _get_example_directory
 from useradmin.models import get_default_user_group, install_sample_user, User
 
 from beeswax.design import hql_query
@@ -420,13 +420,7 @@ class SampleQuery(object):
       LOG.info('Successfully installed sample design: %s' % (self.name,))
 
     if USE_NEW_EDITOR.get():
-      # Get or create sample user directories
-      home_dir = Directory.objects.get_home_directory(django_user)
-      examples_dir, created = Directory.objects.get_or_create(
-        parent_directory=home_dir,
-        owner=django_user,
-        name=Document2.EXAMPLES_DIR
-      )
+      examples_dir = _get_example_directory(django_user)
 
       document_type = self._document_type(self.type, interpreter)
       notebook = import_saved_beeswax_query(query, interpreter=interpreter)

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

@@ -1069,6 +1069,8 @@
     # [[examples]]
     ## If installing the examples automatically at startup.
     # auto_load=false
+    ## If automatically loading the dialect example at Editor opening.
+    # auto_open=false
     ## Names of the saved queries to install. All if empty.
     # queries=
     ## Names of the tables to install. All if empty.

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

@@ -1053,6 +1053,8 @@
     # [[examples]]
     ## If installing the examples automatically at startup.
     # auto_load=false
+    ## If automatically loading the dialect example at Editor opening.
+    # auto_open=false
     ## Names of the saved queries to install. All if empty.
     # queries=
     ## Names of the tables to install. All if empty.

+ 5 - 1
desktop/libs/notebook/src/notebook/api.py

@@ -39,10 +39,11 @@ from indexer.file_format import HiveFormat
 from indexer.fields import Field
 from metadata.conf import OPTIMIZER
 
+from notebook.conf import EXAMPLES
 from notebook.connectors.base import Notebook, QueryExpired, SessionExpired, QueryError, _get_snippet_name, patch_snippet_for_connector
 from notebook.connectors.hiveserver2 import HS2Api
 from notebook.decorators import api_error_handler, check_document_access_permission, check_document_modify_permission
-from notebook.models import escape_rows, make_notebook, upgrade_session_properties, get_api, MockRequest
+from notebook.models import escape_rows, make_notebook, upgrade_session_properties, get_api, _get_dialect_example
 
 if sys.version_info[0] > 2:
   from urllib.parse import unquote as urllib_unquote
@@ -64,6 +65,9 @@ def create_notebook(request):
   gist_id = request.POST.get('gist')
   directory_uuid = request.POST.get('directory_uuid')
 
+  if EXAMPLES.AUTO_LOAD.get():
+    print(_get_dialect_example(dialect=editor_type))
+
   if gist_id:
     gist_doc = _get_gist_document(uuid=gist_id)
     statement = json.loads(gist_doc.data)['statement']

+ 6 - 0
desktop/libs/notebook/src/notebook/conf.py

@@ -265,6 +265,12 @@ EXAMPLES = ConfigSection(
       type=coerce_bool,
       default=False
     ),
+    AUTO_OPEN=Config(
+      'auto_open',
+      help=_t('If automatically loading the dialect example at Editor opening.'),
+      type=coerce_bool,
+      default=False
+    ),
     QUERIES=Config(
       'queries',
       help='Names of the saved queries to install. All if empty.',

+ 24 - 3
desktop/libs/notebook/src/notebook/models.py

@@ -31,7 +31,6 @@ from datetime import timedelta
 from django.contrib.sessions.models import Session
 from django.db.models import Count
 from django.db.models.functions import Trunc
-from django.urls import reverse
 from django.utils.html import escape
 from django.utils.translation import ugettext as _
 
@@ -39,8 +38,8 @@ from desktop.conf import has_connectors, TASK_SERVER
 from desktop.lib.connectors.models import _get_installed_connectors
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.paths import SAFE_CHARACTERS_URI
-from desktop.models import Document2
-from useradmin.models import User
+from desktop.models import Directory, Document2
+from useradmin.models import User, install_sample_user
 
 from notebook.conf import EXAMPLES, get_ordered_interpreters
 from notebook.connectors.base import Notebook, get_api as _get_api, get_interpreter
@@ -543,6 +542,28 @@ def _get_editor_type(editor_id):
   return document.type.rsplit('-', 1)[-1]
 
 
+def _get_example_directory(user):
+  home_dir = Directory.objects.get_home_directory(user)
+  examples_dir, created = Directory.objects.get_or_create(
+    parent_directory=home_dir,
+    owner=user,
+    name=Document2.EXAMPLES_DIR
+  )
+  return examples_dir
+
+def _get_dialect_example(dialect):
+  print(dialect)
+  sample_user = install_sample_user()
+  examples_dir = _get_example_directory(sample_user)
+
+  return Document2.objects.filter(
+      owner=sample_user,
+      type='query-%s' % dialect,
+      is_history=False,
+      parent_directory=examples_dir
+  ).first()
+
+
 class ApiWrapper():
   def __init__(self, request, snippet):
     self.request = request

+ 7 - 2
desktop/libs/notebook/src/notebook/views.py

@@ -39,12 +39,12 @@ from desktop.models import Document2, Document, FilesystemException, _get_gist_d
 from desktop.views import serve_403_error
 from metadata.conf import has_optimizer, has_catalog, has_workload_analytics
 
-from notebook.conf import get_ordered_interpreters, SHOW_NOTEBOOKS
+from notebook.conf import get_ordered_interpreters, SHOW_NOTEBOOKS, EXAMPLES
 from notebook.connectors.base import Notebook, _get_snippet_name, get_interpreter
 from notebook.connectors.spark_shell import SparkApi
 from notebook.decorators import check_editor_access_permission, check_document_access_permission, check_document_modify_permission
 from notebook.management.commands.notebook_setup import Command
-from notebook.models import make_notebook, _get_editor_type, get_api
+from notebook.models import make_notebook, _get_editor_type, get_api, _get_dialect_example
 
 
 LOG = logging.getLogger(__name__)
@@ -128,6 +128,11 @@ def editor(request, is_mobile=False, is_embeddable=False):
     gist_doc = _get_gist_document(uuid=gist_id)
     editor_type = gist_doc.extra
 
+  if EXAMPLES.AUTO_LOAD.get() and not editor_id:
+    sample_query = _get_dialect_example(dialect=editor_type)
+    if sample_query:
+      editor_id = sample_query.id
+
   if editor_id and not gist_id:  # Open existing saved editor document
     editor_type = _get_editor_type(editor_id)