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 })
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 })
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)}) ]
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)})]
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)})]