Beispiel #1
0
def _generate_display_html(template_renderer, xsrf, app_context,
                           visualizations):
    # Package-protected: pylint: disable=protected-access

    # First, load jobs for all generators required for an visualization.
    # Jobs may directly contain small results, just hold references to
    # larger results, or both.
    any_generator_not_running = False
    data_source_jobs = {}
    for generator_class in analytics_utils._generators_for_visualizations(
            visualizations):
        job = generator_class(app_context).load()
        data_source_jobs[generator_class] = job
        if not job or job.has_finished:
            any_generator_not_running = True

    # Generate HTML section for each visualization.
    html_sections = []
    for v in visualizations:
        html_sections.extend(
            _generate_visualization_section(template_renderer, xsrf,
                                            app_context, v, data_source_jobs))

    # Generate JS to pull contents of data-sources up to page and feed it
    # to visualization functions.
    html_sections.extend(
        _generate_data_source_script(template_renderer, visualizations, xsrf))

    # Generate page content
    names_of_visualizations_with_generators = []
    for visualization in visualizations:
        if analytics_utils._generators_for_visualizations([visualization]):
            names_of_visualizations_with_generators.append(visualization.name)
    rest_sources = []
    has_pagination = False  # True if any data_source has chunk size > 0
    for rdsc in analytics_utils._rest_data_source_classes(visualizations):
        rest_sources.append({
            'name': rdsc.get_name(),
            'title': rdsc.get_title(),
            'chunk_size': rdsc.get_default_chunk_size(),
        })
        has_pagination = has_pagination or rdsc.get_default_chunk_size()
    return template_renderer.render(
        None, 'models/analytics/display.html', {
            'sections': html_sections,
            'any_generator_not_running': any_generator_not_running,
            'xsrf_token_run': xsrf.create_xsrf_token('run_visualizations'),
            'visualizations': names_of_visualizations_with_generators,
            'rest_sources': rest_sources,
            'r': template_renderer.get_current_url(),
            'has_pagination': has_pagination
        })
Beispiel #2
0
def _generate_display_html(template_renderer, xsrf, app_context,
                           visualizations):
    # Package-protected: pylint: disable=protected-access

    # First, load jobs for all generators required for an visualization.
    # Jobs may directly contain small results, just hold references to
    # larger results, or both.
    any_generator_not_running = False
    data_source_jobs = {}
    for generator_class in analytics_utils._generators_for_visualizations(
        visualizations):
        job = generator_class(app_context).load()
        data_source_jobs[generator_class] = job
        if not job or job.has_finished:
            any_generator_not_running = True

    # Generate HTML section for each visualization.
    html_sections = []
    for v in visualizations:
        html_sections.extend(_generate_visualization_section(
            template_renderer, xsrf, app_context, v, data_source_jobs))

    # Generate JS to pull contents of data-sources up to page and feed it
    # to visualization functions.
    html_sections.extend(_generate_data_source_script(template_renderer,
                                                      visualizations, xsrf))

    # Generate page content
    names_of_visualizations_with_generators = []
    for visualization in visualizations:
        if analytics_utils._generators_for_visualizations([visualization]):
            names_of_visualizations_with_generators.append(visualization.name)
    rest_sources = []
    has_pagination = False  # True if any data_source has chunk size > 0
    for rdsc in analytics_utils._rest_data_source_classes(visualizations):
        rest_sources.append({
            'name': rdsc.get_name(),
            'title': rdsc.get_title(),
            'chunk_size': rdsc.get_default_chunk_size(),
        })
        has_pagination = has_pagination or rdsc.get_default_chunk_size()
    return template_renderer.render(
        None, 'models/analytics/display.html',
        {
            'sections': html_sections,
            'any_generator_not_running': any_generator_not_running,
            'xsrf_token_run': xsrf.create_xsrf_token('run_visualizations'),
            'visualizations': names_of_visualizations_with_generators,
            'rest_sources': rest_sources,
            'r': template_renderer.get_current_url(),
            'has_pagination': has_pagination
        })
Beispiel #3
0
def _generate_data_source_script(template_renderer, visualizations, xsrf):

    # Build list of {visualization name, [depended-upon data source names]}
    display_visualizations = {}
    for v in visualizations:
        rest_sources = [rsc.get_name() for rsc in v.rest_data_source_classes]
        if rest_sources:
            display_visualizations[v.name] = {
                'callback_name': v.name,
                'restSources': rest_sources,
                'restSourcesNotYetSeen':
                {rest_source: True
                 for rest_source in rest_sources}
            }
    if not display_visualizations:
        return []

    # Build list of {data source name, [dependent visualization names]}
    display_rest_sources = {}
    # pylint: disable=protected-access
    for rdsc in analytics_utils._rest_data_source_classes(visualizations):
        v_names = []
        for v in visualizations:
            if rdsc in v.rest_data_source_classes:
                v_names.append(v.name)
        display_rest_sources[rdsc.get_name()] = {
            'currentPage': -1,
            'pages': [],
            'crossfilterDimensions': [],
            'sourceContext': None,
            'visualizations': v_names
        }

    env = {
        'href': template_renderer.get_base_href(),
        'visualizations': display_visualizations,
        'restSources': display_rest_sources,
        'dataSourceToken': data_sources.utils.generate_data_source_token(xsrf),
    }
    return [
        template_renderer.render(None,
                                 'models/analytics/rest_visualizations.html',
                                 {'env': transforms.dumps(env)})
    ]
Beispiel #4
0
def _generate_data_source_script(template_renderer, visualizations, xsrf):

    # Build list of {visualization name, [depended-upon data source names]}
    display_visualizations = {}
    for v in visualizations:
        rest_sources = [rsc.get_name() for rsc in v.rest_data_source_classes]
        if rest_sources:
            display_visualizations[v.name] = {
                'callback_name': v.name,
                'restSources': rest_sources,
                'restSourcesNotYetSeen': {
                    rest_source: True for rest_source in rest_sources}}
    if not display_visualizations:
        return []

    # Build list of {data source name, [dependent visualization names]}
    display_rest_sources = {}
    # pylint: disable=protected-access
    for rdsc in analytics_utils._rest_data_source_classes(visualizations):
        v_names = []
        for v in visualizations:
            if rdsc in v.rest_data_source_classes:
                v_names.append(v.name)
        display_rest_sources[rdsc.get_name()] = {
            'currentPage': -1,
            'pages': [],
            'crossfilterDimensions': [],
            'sourceContext': None,
            'visualizations': v_names}

    env = {
        'href': template_renderer.get_base_href(),
        'visualizations': display_visualizations,
        'restSources': display_rest_sources,
        'dataSourceToken': data_sources.utils.generate_data_source_token(xsrf),
        }
    return [template_renderer.render(
        None, 'models/analytics/rest_visualizations.html',
        {'env': transforms.dumps(env)})]
Beispiel #5
0
def _generate_data_source_script(template_renderer, visualizations, xsrf):

    # Build list of {visualization name, [depended-upon data source names]}
    display_visualizations = {}
    for v in visualizations:
        rest_sources = [rsc.get_name() for rsc in v.rest_data_source_classes]
        if rest_sources:
            display_visualizations[v.name] = {
                "callback_name": v.name,
                "restSources": rest_sources,
                "restSourcesNotYetSeen": {rest_source: True for rest_source in rest_sources},
            }
    if not display_visualizations:
        return []

    # Build list of {data source name, [dependent visualization names]}
    display_rest_sources = {}
    # pylint: disable=protected-access
    for rdsc in analytics_utils._rest_data_source_classes(visualizations):
        v_names = []
        for v in visualizations:
            if rdsc in v.rest_data_source_classes:
                v_names.append(v.name)
        display_rest_sources[rdsc.get_name()] = {
            "currentPage": -1,
            "pages": [],
            "crossfilterDimensions": [],
            "sourceContext": None,
            "visualizations": v_names,
        }

    env = {
        "href": template_renderer.get_base_href(),
        "visualizations": display_visualizations,
        "restSources": display_rest_sources,
        "dataSourceToken": data_sources.utils.generate_data_source_token(xsrf),
    }
    return [template_renderer.render(None, "models/analytics/rest_visualizations.html", {"env": transforms.dumps(env)})]