Esempio n. 1
0
def commonheader(title, section, user, request=None, padding="90px", skip_topbar=False, skip_idle_timeout=False, is_mobile=False):
  """
  Returns the rendered common header
  """
  current_app, other_apps, apps_list = _get_apps(user, section)

  template = 'common_header.mako'
  if is_mobile:
    template = 'common_header_m.mako'

  return django_mako.render_to_string(template, {
    'current_app': current_app,
    'apps': apps_list,
    'other_apps': other_apps,
    'title': title,
    'section': section,
    'padding': padding,
    'user': user,
    'request': request,
    'skip_topbar': skip_topbar,
    'skip_idle_timeout': skip_idle_timeout,
    'leaflet': {
      'layer': desktop.conf.LEAFLET_TILE_LAYER.get(),
      'attribution': desktop.conf.LEAFLET_TILE_LAYER_ATTRIBUTION.get(),
      'map_options': json.dumps(desktop.conf.LEAFLET_MAP_OPTIONS.get()),
      'layer_options': json.dumps(desktop.conf.LEAFLET_TILE_LAYER_OPTIONS.get()),
    },
    'is_demo': desktop.conf.DEMO_ENABLED.get(),
    'is_ldap_setup': 'desktop.auth.backend.LdapBackend' in desktop.conf.AUTH.BACKEND.get(),
    'is_s3_enabled': fsmanager.is_enabled('s3a') and fsmanager.has_access('s3a', request.user),
    'is_adls_enabled': fsmanager.is_enabled('adl') and fsmanager.has_access('adl', request.user),
    'banner_message': get_banner_message(request)
  })
Esempio n. 2
0
def hue(request):
  current_app, other_apps, apps_list = _get_apps(request.user, '')
  clusters = list(get_clusters(request.user).values())

  user_permitted = request.session.get('samlgroup_permitted_flag')

  if (not user_permitted) and (not samlgroup_check(request)):
    return render('403.mako', request, {
      'is_embeddable': True
    })

  return render('hue.mako', request, {
    'apps': apps_list,
    'other_apps': other_apps,
    'is_s3_enabled': fsmanager.is_enabled('s3a') and fsmanager.has_access('s3a', request.user),
    'is_adls_enabled': fsmanager.is_enabled('adl') and fsmanager.has_access('adl', request.user),
    'is_ldap_setup': 'desktop.auth.backend.LdapBackend' in desktop.conf.AUTH.BACKEND.get(),
    'leaflet': {
      'layer': desktop.conf.LEAFLET_TILE_LAYER.get(),
      'attribution': desktop.conf.LEAFLET_TILE_LAYER_ATTRIBUTION.get(),
      'map_options': json.dumps(desktop.conf.LEAFLET_MAP_OPTIONS.get()),
      'layer_options': json.dumps(desktop.conf.LEAFLET_TILE_LAYER_OPTIONS.get()),
    },
    'is_demo': desktop.conf.DEMO_ENABLED.get(),
    'banner_message': get_banner_message(request),
    'user_preferences': dict((x.key, x.value) for x in UserPreferences.objects.filter(user=request.user)),
    'cluster': clusters[0]['type'] if clusters else None
  })
Esempio n. 3
0
File: views.py Progetto: uk0/hue
def hue(request):
  apps = appmanager.get_apps_dict(request.user)
  current_app, other_apps, apps_list = _get_apps(request.user, '')
  default_cluster_index, default_cluster_interface = Cluster(request.user).get_list_interface_indexes()
  clusters = get_clusters().values()

  return render('hue.mako', request, {
    'apps': apps,
    'other_apps': other_apps,
    'is_s3_enabled': is_s3_enabled() and has_s3_access(request.user),
    'is_adls_enabled': is_adls_enabled() and has_adls_access(request.user),
    'is_ldap_setup': 'desktop.auth.backend.LdapBackend' in desktop.conf.AUTH.BACKEND.get(),
    'leaflet': {
      'layer': desktop.conf.LEAFLET_TILE_LAYER.get(),
      'attribution': desktop.conf.LEAFLET_TILE_LAYER_ATTRIBUTION.get(),
      'map_options': json.dumps(desktop.conf.LEAFLET_MAP_OPTIONS.get()),
      'layer_options': json.dumps(desktop.conf.LEAFLET_TILE_LAYER_OPTIONS.get()),
    },
    'is_demo': desktop.conf.DEMO_ENABLED.get(),
    'banner_message': get_banner_message(request),
    'user_preferences': dict((x.key, x.value) for x in UserPreferences.objects.filter(user=request.user)),
    'cluster': clusters[0]['type'] if clusters else None,
    'clusters_config_json': json.dumps(clusters),
    'default_cluster_index': default_cluster_index,
    'default_cluster_interface': default_cluster_interface
  })
Esempio n. 4
0
def show_tables(request, database=None):
    cluster = json.loads(request.POST.get('cluster', '{}'))

    db = _get_db(user=request.user, cluster=cluster)

    if database is None:
        database = 'default'  # Assume always 'default'

    if request.GET.get("format", "html") == "json":
        try:
            databases = db.get_databases()

            if database not in databases:
                database = 'default'

            if request.method == 'POST':
                db_form = DbForm(request.POST, databases=databases)
                if db_form.is_valid():
                    database = db_form.cleaned_data['database']
            else:
                db_form = DbForm(initial={'database': database},
                                 databases=databases)

            search_filter = request.GET.get('filter', '')

            tables = db.get_tables_meta(
                database=database,
                table_names=search_filter)  # SparkSql returns []
            table_names = [table['name'] for table in tables]
        except Exception as e:
            raise PopupException(_(
                'Failed to retrieve tables for database: %s' % database),
                                 detail=e)

        resp = JsonResponse({
            'status': 0,
            'database_meta': db.get_database(database),
            'tables': tables,
            'table_names': table_names,
            'search_filter': search_filter
        })
    else:
        apps_list = _get_apps(request.user, '')
        resp = render(
            "metastore.mako", request, {
                'apps': apps_list,
                'breadcrumbs': [],
                'database': None,
                'partitions': [],
                'has_write_access': has_write_access(request.user),
                'is_optimizer_enabled': has_optimizer(),
                'is_navigator_enabled': has_catalog(request.user),
                'optimizer_url': get_optimizer_url(),
                'navigator_url': get_catalog_url(),
                'is_embeddable': request.GET.get('is_embeddable', False),
                'source_type': _get_servername(db),
            })

    return resp
Esempio n. 5
0
def describe_table(request, database, table):
  app_name = get_app_name(request)
  cluster = json.loads(request.POST.get('cluster', '{}'))
  source_type = request.POST.get('source_type', request.GET.get('source_type', 'hive'))
  db = _get_db(user=request.user, source_type=source_type, cluster=cluster)

  try:
    table = db.get_table(database, table)
  except Exception as e:
    LOG.exception("Describe table error")
    raise PopupException(_("DB Error"), detail=e.message if hasattr(e, 'message') and e.message else e)

  if request.POST.get("format", "html") == "json":
    return JsonResponse({
        'status': 0,
        'name': table.name,
        'partition_keys': [{'name': part.name, 'type': part.type} for part in table.partition_keys],
        'cols': [{'name': col.name, 'type': col.type, 'comment': col.comment} for col in table.cols],
        'path_location': table.path_location,
        'hdfs_link': table.hdfs_link,
        'comment': table.comment,
        'is_view': table.is_view,
        'properties': table.properties,
        'details': table.details,
        'stats': table.stats
    })
  else:  # Render HTML
    renderable = "metastore.mako"
    apps_list = _get_apps(request.user, '')

    partitions = None
    if app_name != 'impala' and table.partition_keys:
      try:
        partitions = [_massage_partition(database, table, partition) for partition in db.get_partitions(database, table)]
      except:
        LOG.exception('Table partitions could not be retrieved')

    return render(renderable, request, {
      'apps': apps_list,
      'breadcrumbs': [{
          'name': database,
          'url': reverse('metastore:show_tables', kwargs={'database': database})
        }, {
          'name': str(table.name),
          'url': reverse('metastore:describe_table', kwargs={'database': database, 'table': table.name})
        },
      ],
      'table': table,
      'partitions': partitions,
      'database': database,
      'has_write_access': has_write_access(request.user),
      'is_optimizer_enabled': has_optimizer(),
      'is_navigator_enabled': has_catalog(request.user),
      'optimizer_url': get_optimizer_url(),
      'navigator_url': get_catalog_url(),
      'is_embeddable': request.GET.get('is_embeddable', False),
      'source_type': _get_servername(db),
    })
Esempio n. 6
0
def create_table(request, database='default'):
    """Create a table by specifying its attributes manually"""
    db = dbms.get(request.user)
    dbs = db.get_databases()
    databases = [{
        'name':
        db,
        'url':
        reverse('beeswax:create_table', kwargs={'database': db})
    } for db in dbs]

    form = MultiForm(table=CreateTableForm,
                     columns=ColumnTypeFormSet,
                     partitions=PartitionTypeFormSet)

    if request.method == "POST":
        form.bind(request.POST)
        form.table.db = db  # curry is invalid
        form.table.database = database

        if request.POST.get('create'):
            if form.is_valid():
                columns = [f.cleaned_data for f in form.columns.forms]
                partition_columns = [
                    f.cleaned_data for f in form.partitions.forms
                ]
                proposed_query = django_mako.render_to_string(
                    "create_table_statement.mako", {
                        'databases': databases,
                        'database': database,
                        'table': form.table.cleaned_data,
                        'columns': columns,
                        'partition_columns': partition_columns
                    })
                # Mako outputs bytestring in utf8
                proposed_query = proposed_query.decode('utf-8')
                table_name = form.table.cleaned_data['name']
                return _submit_create_and_load(request,
                                               proposed_query,
                                               table_name,
                                               None,
                                               False,
                                               database=database)
    else:
        form.bind()

    apps_list = _get_apps(request.user, '')
    return render(
        "create_table_manually.mako", request, {
            'apps': apps_list,
            'action': "#",
            'databases': databases,
            'table_form': form.table,
            'columns_form': form.columns,
            'partitions_form': form.partitions,
            'has_tables': len(dbms.get(request.user).get_tables()) > 0,
            'database': database,
        })
Esempio n. 7
0
def execute_query(request, design_id=None, query_history_id=None):
  """
  View function for executing an arbitrary query.
  """
  action = 'query'

  if query_history_id:
    query_history = authorized_get_query_history(request, query_history_id, must_exist=True)
    design = query_history.design

    try:
      if query_history.server_id and query_history.server_guid:
        handle, state = _get_query_handle_and_state(query_history)

      if 'on_success_url' in request.GET:
        if request.GET.get('on_success_url') and any(
            [regexp.match(request.GET.get('on_success_url')) for regexp in REDIRECT_WHITELIST.get()]
          ):
          action = 'watch-redirect'
        else:
          action = 'watch-results'
      else:
        action = 'editor-results'
    except QueryServerException as e:
      if 'Invalid query handle' in e.message or 'Invalid OperationHandle' in e.message:
        query_history.save_state(QueryHistory.STATE.expired)
        LOG.warn("Invalid query handle", exc_info=sys.exc_info())
        action = 'editor-expired-results'
      else:
        raise e
  else:
    # Check perms.
    authorized_get_design(request, design_id)

    app_name = get_app_name(request)
    query_type = SavedQuery.TYPES_MAPPING[app_name]
    design = safe_get_design(request, query_type, design_id)
    query_history = None

  current_app, other_apps, apps_list = _get_apps(request.user, '')
  doc = design and design.id and design.doc.get()
  context = {
    'design': design,
    'apps': apps_list,
    'query': query_history, # Backward
    'query_history': query_history,
    'autocomplete_base_url': reverse(get_app_name(request) + ':api_autocomplete_databases', kwargs={}),
    'autocomplete_base_url_hive': reverse('beeswax:api_autocomplete_databases', kwargs={}),
    'can_edit_name': design and design.id and not design.is_auto,
    'doc_id': doc and doc.id or -1,
    'can_edit': doc and doc.can_write(request.user),
    'action': action,
    'on_success_url': request.GET.get('on_success_url'),
    'has_metastore': 'metastore' in get_apps_dict(request.user)
  }

  return render('execute.mako', request, context)
Esempio n. 8
0
def databases(request):
  search_filter = request.GET.get('filter', '')
  cluster = json.loads(request.POST.get('cluster', '{}'))

  db = _get_db(user=request.user, cluster=cluster)
  databases = db.get_databases(search_filter)
  apps_list = _get_apps(request.user, '')

  return render("metastore.mako", request, {
    'apps': apps_list,
    'breadcrumbs': [],
    'database': None,
    'databases': databases,
    'partitions': [],
    'has_write_access': has_write_access(request.user),
    'is_optimizer_enabled': has_optimizer(),
    'is_navigator_enabled': has_catalog(request.user),
    'optimizer_url': get_optimizer_url(),
    'navigator_url': get_catalog_url(),
    'is_embeddable': request.GET.get('is_embeddable', False),
    'source_type': _get_servername(db),
  })
Esempio n. 9
0
File: views.py Progetto: mapr/hue
def databases(request):
  search_filter = request.GET.get('filter', '')
  cluster = json.loads(request.POST.get('cluster', '{}'))

  db = _get_db(user=request.user, cluster=cluster)
  databases = db.get_databases(search_filter)
  apps_list = _get_apps(request.user, '')

  return render("metastore.mako", request, {
    'apps': apps_list,
    'breadcrumbs': [],
    'database': None,
    'databases': databases,
    'partitions': [],
    'has_write_access': has_write_access(request.user),
    'is_optimizer_enabled': has_optimizer(),
    'is_navigator_enabled': has_catalog(request.user),
    'optimizer_url': get_optimizer_url(),
    'navigator_url': get_catalog_url(),
    'is_embeddable': request.GET.get('is_embeddable', False),
    'source_type': _get_servername(db),
  })
Esempio n. 10
0
def describe_partitions(request, database, table):
  cluster = json.loads(request.POST.get('cluster', '{}'))

  db = _get_db(user=request.user, cluster=cluster)
  table_obj = db.get_table(database, table)

  if not table_obj.partition_keys:
    raise PopupException(_("Table '%(table)s' is not partitioned.") % {'table': table})

  reverse_sort = request.GET.get("sort", "desc").lower() == "desc"

  if request.method == "POST":
    partition_filters = {}
    for part in table_obj.partition_keys:
      if request.GET.get(part.name):
        partition_filters[part.name] = request.GET.get(part.name)
    partition_spec = ','.join(["%s='%s'" % (k, v) for k, v in list(partition_filters.items())])
  else:
    partition_spec = ''

  try:
    partitions = db.get_partitions(database, table_obj, partition_spec, reverse_sort=reverse_sort)
  except:
    LOG.exception('Table partitions could not be retrieved')
    partitions = []
  massaged_partitions = [_massage_partition(database, table_obj, partition) for partition in partitions]

  if request.method == "POST" or request.GET.get('format', 'html') == 'json':
    return JsonResponse({
      'partition_keys_json': [partition.name for partition in table_obj.partition_keys],
      'partition_values_json': massaged_partitions,
    })
  else:
    apps_list = _get_apps(request.user, '')
    return render("metastore.mako", request, {
      'apps': apps_list,
      'breadcrumbs': [{
            'name': database,
            'url': reverse('metastore:show_tables', kwargs={'database': database})
          }, {
            'name': table,
            'url': reverse('metastore:describe_table', kwargs={'database': database, 'table': table})
          }, {
            'name': 'partitions',
            'url': reverse('metastore:describe_partitions', kwargs={'database': database, 'table': table})
          },
        ],
        'database': database,
        'table': table_obj,
        'partitions': partitions,
        'partition_keys_json': json.dumps([partition.name for partition in table_obj.partition_keys]),
        'partition_values_json': json.dumps(massaged_partitions),
        'request': request,
        'has_write_access': has_write_access(request.user),
        'is_optimizer_enabled': has_optimizer(),
        'is_navigator_enabled': has_catalog(request.user),
        'optimizer_url': get_optimizer_url(),
        'navigator_url': get_catalog_url(),
        'is_embeddable': request.GET.get('is_embeddable', False),
        'source_type': _get_servername(db),
    })
Esempio n. 11
0
File: views.py Progetto: mapr/hue
def describe_partitions(request, database, table):
  cluster = json.loads(request.POST.get('cluster', '{}'))

  db = _get_db(user=request.user, cluster=cluster)
  table_obj = db.get_table(database, table)

  if not table_obj.partition_keys:
    raise PopupException(_("Table '%(table)s' is not partitioned.") % {'table': table})

  reverse_sort = request.GET.get("sort", "desc").lower() == "desc"

  if request.method == "POST":
    partition_filters = {}
    for part in table_obj.partition_keys:
      if request.GET.get(part.name):
        partition_filters[part.name] = request.GET.get(part.name)
    partition_spec = ','.join(["%s='%s'" % (k, v) for k, v in partition_filters.items()])
  else:
    partition_spec = ''

  try:
    partitions = db.get_partitions(database, table_obj, partition_spec, reverse_sort=reverse_sort)
  except:
    LOG.exception('Table partitions could not be retrieved')
    partitions = []
  massaged_partitions = [_massage_partition(database, table_obj, partition) for partition in partitions]

  if request.method == "POST" or request.GET.get('format', 'html') == 'json':
    return JsonResponse({
      'partition_keys_json': [partition.name for partition in table_obj.partition_keys],
      'partition_values_json': massaged_partitions,
    })
  else:
    apps_list = _get_apps(request.user, '')
    return render("metastore.mako", request, {
      'apps': apps_list,
      'breadcrumbs': [{
            'name': database,
            'url': reverse('metastore:show_tables', kwargs={'database': database})
          }, {
            'name': table,
            'url': reverse('metastore:describe_table', kwargs={'database': database, 'table': table})
          },{
            'name': 'partitions',
            'url': reverse('metastore:describe_partitions', kwargs={'database': database, 'table': table})
          },
        ],
        'database': database,
        'table': table_obj,
        'partitions': partitions,
        'partition_keys_json': json.dumps([partition.name for partition in table_obj.partition_keys]),
        'partition_values_json': json.dumps(massaged_partitions),
        'request': request,
        'has_write_access': has_write_access(request.user),
        'is_optimizer_enabled': has_optimizer(),
        'is_navigator_enabled': has_catalog(request.user),
        'optimizer_url': get_optimizer_url(),
        'navigator_url': get_catalog_url(),
        'is_embeddable': request.GET.get('is_embeddable', False),
        'source_type': _get_servername(db),
    })
Esempio n. 12
0
File: views.py Progetto: mapr/hue
      search_filter = request.GET.get('filter', '')

      tables = db.get_tables_meta(database=database, table_names=search_filter) # SparkSql returns []
      table_names = [table['name'] for table in tables]
    except Exception, e:
      raise PopupException(_('Failed to retrieve tables for database: %s' % database), detail=e)

    resp = JsonResponse({
        'status': 0,
        'database_meta': db.get_database(database),
        'tables': tables,
        'table_names': table_names,
        'search_filter': search_filter
    })
  else:
    apps_list = _get_apps(request.user, '')
    resp = render("metastore.mako", request, {
    'apps': apps_list,
    'breadcrumbs': [],
    'database': None,
    'partitions': [],
    'has_write_access': has_write_access(request.user),
    'is_optimizer_enabled': has_optimizer(),
    'is_navigator_enabled': has_catalog(request.user),
    'optimizer_url': get_optimizer_url(),
    'navigator_url': get_catalog_url(),
    'is_embeddable': request.GET.get('is_embeddable', False),
    'source_type': _get_servername(db),
    })

  return resp
Esempio n. 13
0
def import_wizard(request, database='default'):
    """
  Help users define table and based on a file they want to import to Hive.
  Limitations:
    - Rows are delimited (no serde).
    - No detection for map and array types.
    - No detection for the presence of column header in the first row.
    - No partition table.
    - Does not work with binary data.
  """
    encoding = i18n.get_site_encoding()
    app_name = get_app_name(request)

    db = dbms.get(request.user)
    dbs = db.get_databases()
    databases = [{
        'name':
        db,
        'url':
        reverse('beeswax:import_wizard', kwargs={'database': db})
    } for db in dbs]

    if request.method == 'POST':
        #
        # General processing logic:
        # - We have 3 steps. Each requires the previous.
        #   * Step 1      : Table name and file location
        #   * Step 2a     : Display sample with auto chosen delim
        #   * Step 2b     : Display sample with user chosen delim (if user chooses one)
        #   * Step 3      : Display sample, and define columns
        # - Each step is represented by a different form. The form of an earlier step
        #   should be present when submitting to a later step.
        # - To preserve the data from the earlier steps, we send the forms back as
        #   hidden fields. This way, when users revisit a previous step, the data would
        #   be there as well.
        #
        delim_is_auto = False
        fields_list, n_cols = [[]], 0
        s3_col_formset = None
        s1_file_form = CreateByImportFileForm(request.POST, db=db)

        if s1_file_form.is_valid():
            do_s2_auto_delim = request.POST.get('submit_file')  # Step 1 -> 2
            do_s2_user_delim = request.POST.get(
                'submit_preview')  # Step 2 -> 2
            do_s3_column_def = request.POST.get('submit_delim')  # Step 2 -> 3
            do_hive_create = request.POST.get(
                'submit_create')  # Step 3 -> execute

            cancel_s2_user_delim = request.POST.get(
                'cancel_delim')  # Step 2 -> 1
            cancel_s3_column_def = request.POST.get(
                'cancel_create')  # Step 3 -> 2

            # Exactly one of these should be True
            if len([
                    _f for _f in (do_s2_auto_delim, do_s2_user_delim,
                                  do_s3_column_def, do_hive_create,
                                  cancel_s2_user_delim, cancel_s3_column_def)
                    if _f
            ]) != 1:
                raise PopupException(_('Invalid form submission'))

            if not do_s2_auto_delim:
                # We should have a valid delim form
                s2_delim_form = CreateByImportDelimForm(request.POST)
                if not s2_delim_form.is_valid():
                    # Go back to picking delimiter
                    do_s2_user_delim, do_s3_column_def, do_hive_create = True, False, False
            if do_hive_create:
                # We should have a valid columns formset
                s3_col_formset = ColumnTypeFormSet(prefix='cols',
                                                   data=request.POST)
                if not s3_col_formset.is_valid():
                    # Go back to define columns
                    do_s3_column_def, do_hive_create = True, False

            load_data = s1_file_form.cleaned_data.get('load_data',
                                                      'IMPORT').upper()
            path = s1_file_form.cleaned_data['path']

            #
            # Go to step 2: We've just picked the file. Preview it.
            #
            if do_s2_auto_delim:
                try:
                    if load_data == 'IMPORT':
                        if not request.fs.isfile(path):
                            raise PopupException(
                                _('Path location must refer to a file if "Import Data" is selected.'
                                  ))
                    elif load_data == 'EXTERNAL':
                        if not request.fs.isdir(path):
                            raise PopupException(
                                _('Path location must refer to a directory if "Create External Table" is selected.'
                                  ))
                except (IOError, S3FileSystemException) as e:
                    raise PopupException(
                        _('Path location "%s" is invalid: %s') % (path, e))

                delim_is_auto = True
                fields_list, n_cols, s2_delim_form = _delim_preview(
                    request.fs, s1_file_form, encoding,
                    [reader.TYPE for reader in FILE_READERS], DELIMITERS)

            if (do_s2_user_delim or do_s3_column_def
                    or cancel_s3_column_def) and s2_delim_form.is_valid():
                # Delimit based on input
                fields_list, n_cols, s2_delim_form = _delim_preview(
                    request.fs, s1_file_form, encoding,
                    (s2_delim_form.cleaned_data['file_type'], ),
                    (s2_delim_form.cleaned_data['delimiter'], ))

            if do_s2_auto_delim or do_s2_user_delim or cancel_s3_column_def:
                apps_list = _get_apps(request.user, '')
                return render(
                    'import_wizard_choose_delimiter.mako', request, {
                        'apps':
                        apps_list,
                        'action':
                        reverse(app_name + ':import_wizard',
                                kwargs={'database': database}),
                        'delim_readable':
                        DELIMITER_READABLE.get(
                            s2_delim_form['delimiter'].data[0],
                            s2_delim_form['delimiter'].data[1]),
                        'initial':
                        delim_is_auto,
                        'file_form':
                        s1_file_form,
                        'delim_form':
                        s2_delim_form,
                        'fields_list':
                        fields_list,
                        'delimiter_choices':
                        TERMINATOR_CHOICES,
                        'n_cols':
                        n_cols,
                        'database':
                        database,
                        'databases':
                        databases
                    })

            #
            # Go to step 3: Define column.
            #
            if do_s3_column_def:
                if s3_col_formset is None:
                    columns = []
                    for i in range(n_cols):
                        columns.append({
                            'column_name': 'col_%s' % (i, ),
                            'column_type': 'string',
                        })
                    s3_col_formset = ColumnTypeFormSet(prefix='cols',
                                                       initial=columns)
                try:
                    fields_list_for_json = list(fields_list)
                    if fields_list_for_json:
                        fields_list_for_json[0] = [
                            re.sub('[^\w]', '', a)
                            for a in fields_list_for_json[0]
                        ]  # Cleaning headers
                    apps_list = _get_apps(request.user, '')
                    return render(
                        'import_wizard_define_columns.mako', request, {
                            'apps':
                            apps_list,
                            'action':
                            reverse(app_name + ':import_wizard',
                                    kwargs={'database': database}),
                            'file_form':
                            s1_file_form,
                            'delim_form':
                            s2_delim_form,
                            'column_formset':
                            s3_col_formset,
                            'fields_list':
                            fields_list,
                            'fields_list_json':
                            json.dumps(fields_list_for_json),
                            'n_cols':
                            n_cols,
                            'database':
                            database,
                            'databases':
                            databases
                        })
                except Exception as e:
                    raise PopupException(_(
                        "The selected delimiter is creating an un-even number of columns. Please make sure you don't have empty columns."
                    ),
                                         detail=e)

            #
            # Final: Execute
            #
            if do_hive_create:
                delim = s2_delim_form.cleaned_data['delimiter']
                table_name = s1_file_form.cleaned_data['name']

                proposed_query = django_mako.render_to_string(
                    "create_table_statement.mako", {
                        'table': {
                            'name':
                            table_name,
                            'comment':
                            s1_file_form.cleaned_data['comment'],
                            'row_format':
                            'Delimited',
                            'field_terminator':
                            delim,
                            'file_format':
                            'TextFile',
                            'load_data':
                            load_data,
                            'path':
                            path,
                            'skip_header':
                            request.GET.get('removeHeader', 'off').lower()
                            == 'on'
                        },
                        'columns':
                        [f.cleaned_data for f in s3_col_formset.forms],
                        'partition_columns': [],
                        'database': database,
                        'databases': databases
                    })
                try:
                    return _submit_create_and_load(request,
                                                   proposed_query,
                                                   table_name,
                                                   path,
                                                   load_data,
                                                   database=database)
                except QueryServerException as e:
                    raise PopupException(_('The table could not be created.'),
                                         detail=e.message)
    else:
        s1_file_form = CreateByImportFileForm()

    return render(
        'import_wizard_choose_file.mako', request, {
            'action':
            reverse(app_name + ':import_wizard', kwargs={'database': database
                                                         }),
            'file_form':
            s1_file_form,
            'database':
            database,
            'databases':
            databases
        })
Esempio n. 14
0
                table_names=search_filter)  # SparkSql returns []
            table_names = [table['name'] for table in tables]
        except Exception, e:
            raise PopupException(_(
                'Failed to retrieve tables for database: %s' % database),
                                 detail=e)

        resp = JsonResponse({
            'status': 0,
            'database_meta': db.get_database(database),
            'tables': tables,
            'table_names': table_names,
            'search_filter': search_filter
        })
    else:
        apps_list = _get_apps(request.user, '')
        resp = render(
            "metastore.mako", request, {
                'apps': apps_list,
                'breadcrumbs': [],
                'database': None,
                'partitions': [],
                'has_write_access': has_write_access(request.user),
                'is_optimizer_enabled': has_optimizer(),
                'is_navigator_enabled': has_navigator(request.user),
                'optimizer_url': get_optimizer_url(),
                'navigator_url': get_navigator_url(),
                'is_embeddable': request.GET.get('is_embeddable', False),
                'source_type': _get_servername(db),
            })
Esempio n. 15
0
      if 'Invalid query handle' in e.message or 'Invalid OperationHandle' in e.message:
        query_history.save_state(QueryHistory.STATE.expired)
        LOG.warn("Invalid query handle", exc_info=sys.exc_info())
        action = 'editor-expired-results'
      else:
        raise e
  else:
    # Check perms.
    authorized_get_design(request, design_id)

    app_name = get_app_name(request)
    query_type = SavedQuery.TYPES_MAPPING[app_name]
    design = safe_get_design(request, query_type, design_id)
    query_history = None

  current_app, other_apps, apps_list = _get_apps(request.user, '')
  doc = design and design.id and design.doc.get()
  context = {
    'design': design,
    'apps': apps_list,
    'query': query_history, # Backward
    'query_history': query_history,
    'autocomplete_base_url': reverse(get_app_name(request) + ':api_autocomplete_databases', kwargs={}),
    'autocomplete_base_url_hive': reverse('beeswax:api_autocomplete_databases', kwargs={}),
    'can_edit_name': design and design.id and not design.is_auto,
    'doc_id': doc and doc.id or -1,
    'can_edit': doc and doc.can_write(request.user),
    'action': action,
    'on_success_url': request.GET.get('on_success_url'),
    'has_metastore': 'metastore' in get_apps_dict(request.user)
  }
Esempio n. 16
0
            if 'Invalid query handle' in e.message or 'Invalid OperationHandle' in e.message:
                query_history.save_state(QueryHistory.STATE.expired)
                LOG.warn("Invalid query handle", exc_info=sys.exc_info())
                action = 'editor-expired-results'
            else:
                raise e
    else:
        # Check perms.
        authorized_get_design(request, design_id)

        app_name = get_app_name(request)
        query_type = SavedQuery.TYPES_MAPPING[app_name]
        design = safe_get_design(request, query_type, design_id)
        query_history = None

    current_app, other_apps, apps_list = _get_apps(request.user, '')
    doc = design and design.id and design.doc.get()
    context = {
        'design':
        design,
        'apps':
        apps_list,
        'query':
        query_history,  # Backward
        'query_history':
        query_history,
        'autocomplete_base_url':
        reverse(get_app_name(request) + ':api_autocomplete_databases',
                kwargs={}),
        'autocomplete_base_url_hive':
        reverse('beeswax:api_autocomplete_databases', kwargs={}),