diff --git a/tethysapp/dask_tutorial/app.py b/tethysapp/dask_tutorial/app.py index ff6eb0a..963dd6c 100644 --- a/tethysapp/dask_tutorial/app.py +++ b/tethysapp/dask_tutorial/app.py @@ -11,7 +11,7 @@ class DaskTutorial(TethysAppBase): description = '' package = 'dask_tutorial' # WARNING: Do not change this value index = 'home' - icon = f'{package}/images/dask-logo.png' + icon = f'{package}/images/icon.gif' root_url = 'dask-tutorial' color = '#CA4D34' tags = '' diff --git a/tethysapp/dask_tutorial/controllers.py b/tethysapp/dask_tutorial/controllers.py index 24411cf..5d38de1 100644 --- a/tethysapp/dask_tutorial/controllers.py +++ b/tethysapp/dask_tutorial/controllers.py @@ -1,225 +1,74 @@ -import random -from django.shortcuts import render, reverse, redirect +from django.shortcuts import render from tethys_sdk.routing import controller -from django.http.response import HttpResponseRedirect -from django.contrib import messages from tethys_sdk.gizmos import Button -from tethys_sdk.gizmos import JobsTable -from tethys_compute.models.dask.dask_job_exception import DaskJobException -from tethysapp.dask_tutorial.app import DaskTutorial as app - -# get job manager for the app -job_manager = app.get_job_manager() - @controller def home(request): """ Controller for the app home page. """ - dask_delayed_button = Button( - display_text='Dask Delayed Job', - name='dask_delayed_button', - attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Dask Delayed Job' - }, - href=reverse('dask_tutorial:run_job', kwargs={'job_type': 'delayed'}) - ) - - dask_distributed_button = Button( - display_text='Dask Distributed Job', - name='dask_distributed_button', + save_button = Button( + display_text='', + name='save-button', + icon='save', + style='success', attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Dask Future Job' - }, - href=reverse('dask_tutorial:run_job', kwargs={'job_type': 'distributed'}) + 'data-bs-toggle':'tooltip', + 'data-bs-placement':'top', + 'title':'Save' + } ) - dask_multiple_leaf_button = Button( - display_text='Dask Multiple Leaf Jobs', - name='dask_multiple_leaf_button', + edit_button = Button( + display_text='', + name='edit-button', + icon='pen', + style='warning', attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Dask Multiple Leaf Jobs' - }, - href=reverse('dask_tutorial:run_job', kwargs={'job_type': 'multiple-leaf'}) - ) - - jobs_button = Button( - display_text='Show All Jobs', - name='dask_button', - attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Show All Jobs' - }, - href=reverse('dask_tutorial:jobs_table') - ) - - context = { - 'dask_delayed_button': dask_delayed_button, - 'dask_distributed_button': dask_distributed_button, - 'dask_multiple_leaf_button': dask_multiple_leaf_button, - 'jobs_button': jobs_button, - } - - return render(request, 'dask_tutorial/home.html', context) - - -@controller -def jobs_table(request): - # Use job manager to get all the jobs. - jobs = job_manager.list_jobs(order_by='-id', filters=None) - - # Table View - jobs_table_options = JobsTable( - jobs=jobs, - column_fields=('id', 'name', 'description', 'creation_time'), - hover=True, - striped=False, - bordered=False, - condensed=False, - actions=['logs', 'delete'], - results_url='dask_tutorial:result', - refresh_interval=1000, - show_detailed_status=True, + 'data-bs-toggle':'tooltip', + 'data-bs-placement':'top', + 'title':'Edit' + } ) - home_button = Button( - display_text='Home', - name='home_button', + remove_button = Button( + display_text='', + name='remove-button', + icon='trash', + style='danger', attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Home' - }, - href=reverse('dask_tutorial:home') + 'data-bs-toggle':'tooltip', + 'data-bs-placement':'top', + 'title':'Remove' + } ) - context = {'jobs_table': jobs_table_options, 'home_button': home_button} - - return render(request, 'dask_tutorial/jobs_table.html', context) - - -@controller -def result(request, job_id): - # Use job manager to get the given job. - job = job_manager.get_job(job_id=job_id) - - # Get result and name - job_result = job.result - name = job.name - - home_button = Button( - display_text='Home', - name='home_button', + previous_button = Button( + display_text='Previous', + name='previous-button', attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Home' - }, - href=reverse('dask_tutorial:home') + 'data-bs-toggle':'tooltip', + 'data-bs-placement':'top', + 'title':'Previous' + } ) - jobs_button = Button( - display_text='Show All Jobs', - name='dask_button', + next_button = Button( + display_text='Next', + name='next-button', attributes={ - 'data-bs-toggle': 'tooltip', - 'data-bs-placement': 'top', - 'title': 'Show All Jobs' - }, - href=reverse('dask_tutorial:jobs_table') + 'data-bs-toggle':'tooltip', + 'data-bs-placement':'top', + 'title':'Next' + } ) context = { - 'result': job_result, - 'name': name, - 'home_button': home_button, - 'jobs_button': jobs_button + 'save_button': save_button, + 'edit_button': edit_button, + 'remove_button': remove_button, + 'previous_button': previous_button, + 'next_button': next_button } - return render(request, 'dask_tutorial/results.html', context) - - -@controller -def error_message(request): - messages.add_message(request, messages.ERROR, 'Invalid Scheduler!') - return redirect(reverse('dask_tutorial:home')) - - -@controller -def run_job(request, job_type): - """ - Controller for the app home page. - """ - # Get scheduler from dask_primary setting. - scheduler = app.get_scheduler(name='dask_primary') - - if job_type.lower() == 'delayed': - from tethysapp.dask_tutorial.job_functions import delayed_job - - # Create dask delayed object - delayed = delayed_job() - dask = job_manager.create_job( - job_type='DASK', - name='dask_delayed', - user=request.user, - scheduler=scheduler, - ) - - # Execute future - dask.execute(delayed) - - elif job_type.lower() == 'distributed': - from tethysapp.dask_tutorial.job_functions import distributed_job, convert_to_dollar_sign - - # Get the client to create future - try: - client = scheduler.client - except DaskJobException: - return redirect(reverse('dask_tutorial:error_message')) - - # Create future job instance - future = distributed_job(client) - dask = job_manager.create_job( - job_type='DASK', - name='dask_distributed', - user=request.user, - scheduler=scheduler, - ) - dask.process_results_function = convert_to_dollar_sign - dask.execute(future) - - elif job_type.lower() == 'multiple-leaf': - from tethysapp.dask_tutorial.job_functions import multiple_leaf_job - - # Get the client to create future - try: - client = scheduler.client - except DaskJobException: - return redirect(reverse('dask_tutorial:error_message')) - - # Create future job instance - futures = multiple_leaf_job(client) - - # Execute multiple future - i = random.randint(1, 10000) - - for future in futures: - i += 1 - name = 'dask_leaf' + str(i) - dask = job_manager.create_job( - job_type='DASK', - name=name, - user=request.user, - scheduler=scheduler, - ) - dask.execute(future) - - return HttpResponseRedirect(reverse('dask_tutorial:jobs_table')) + return render(request, 'dask_tutorial/home.html', context) \ No newline at end of file diff --git a/tethysapp/dask_tutorial/handoff.py b/tethysapp/dask_tutorial/handoff.py deleted file mode 100644 index 1e15fb8..0000000 --- a/tethysapp/dask_tutorial/handoff.py +++ /dev/null @@ -1,3 +0,0 @@ -# Define your handoff handlers here -# for more information, see: -# http://docs.tethysplatform.org/en/dev/tethys_sdk/handoff.html \ No newline at end of file diff --git a/tethysapp/dask_tutorial/job_functions.py b/tethysapp/dask_tutorial/job_functions.py deleted file mode 100644 index 6e2c932..0000000 --- a/tethysapp/dask_tutorial/job_functions.py +++ /dev/null @@ -1,59 +0,0 @@ -import time -import dask - - -def inc(x): - time.sleep(3) - return x + 1 - - -def double(x): - time.sleep(3) - return x + 2 - - -def add(x, y): - time.sleep(10) - return x + y - - -def sum_up(x): - time.sleep(5) - return sum(x) - - -def convert_to_dollar_sign(result): - return '$' + str(result) - - -# Delayed Job -def delayed_job(): - output = [] - for x in range(3): - a = dask.delayed(inc, pure=False)(x) - b = dask.delayed(double, pure=False)(x) - c = dask.delayed(add, pure=False)(a, b) - output.append(c) - return dask.delayed(sum_up, pure=False)(output) - - -# Distributed Job -def distributed_job(client): - output = [] - for x in range(3): - a = client.submit(inc, x, pure=False) - b = client.submit(double, x, pure=False) - c = client.submit(add, a, b, pure=False) - output.append(c) - return client.submit(sum_up, output) - - -# Multiple Leaf Distributed Job -def multiple_leaf_job(client): - output = [] - for x in range(3): - a = client.submit(inc, x, pure=False) - b = client.submit(double, x, pure=False) - c = client.submit(add, a, b, pure=False) - output.append(c) - return output diff --git a/tethysapp/dask_tutorial/public/images/dask-logo.png b/tethysapp/dask_tutorial/public/images/dask-logo.png deleted file mode 100644 index 2e98b5c..0000000 Binary files a/tethysapp/dask_tutorial/public/images/dask-logo.png and /dev/null differ diff --git a/tethysapp/dask_tutorial/templates/dask_tutorial/base.html b/tethysapp/dask_tutorial/templates/dask_tutorial/base.html index 7ba1b8e..90486ee 100644 --- a/tethysapp/dask_tutorial/templates/dask_tutorial/base.html +++ b/tethysapp/dask_tutorial/templates/dask_tutorial/base.html @@ -1,17 +1,30 @@ -{% extends "tethys_apps/app_no_nav.html" %} +{% extends "tethys_apps/app_base.html" %} {% load static %} {% block title %}{{ tethys_app.name }}{% endblock %} {% block app_icon %} -{# The path you provided in your app.py is accessible through the tethys_app.icon context variable #} - + {# The path you provided in your app.py is accessible through the tethys_app.icon context variable #} + {% endblock %} {# The name you provided in your app.py is accessible through the tethys_app.name context variable #} {% block app_title %}{{ tethys_app.name }}{% endblock %} +{% block app_navigation_items %} + + + + + + + + + + +{% endblock %} + {% block app_content %} {% endblock %} @@ -19,11 +32,11 @@ {% endblock %} {% block content_dependent_styles %} -{{ block.super }} - + {{ block.super }} + {% endblock %} {% block scripts %} -{{ block.super }} - -{% endblock %} + {{ block.super }} + +{% endblock %} \ No newline at end of file diff --git a/tethysapp/dask_tutorial/templates/dask_tutorial/error.html b/tethysapp/dask_tutorial/templates/dask_tutorial/error.html deleted file mode 100644 index f416e6a..0000000 --- a/tethysapp/dask_tutorial/templates/dask_tutorial/error.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "dask_tutorial/base.html" %} -{% load tethys_gizmos %} - -{% block app_content %} -
- {{ error_message }} -
-{% endblock %} - -{% block app_actions %} -{% gizmo jobs_button %} -{% endblock %} diff --git a/tethysapp/dask_tutorial/templates/dask_tutorial/home.html b/tethysapp/dask_tutorial/templates/dask_tutorial/home.html index 405a419..4499aa5 100644 --- a/tethysapp/dask_tutorial/templates/dask_tutorial/home.html +++ b/tethysapp/dask_tutorial/templates/dask_tutorial/home.html @@ -1,18 +1,51 @@ {% extends "dask_tutorial/base.html" %} {% load tethys_gizmos %} -{% block app_actions %} -{% gizmo jobs_button %} +{% block header_buttons %} +
+ +
{% endblock %} {% block app_content %} -

Dask Delayed Job

-{% gizmo dask_delayed_button %} - -

Dask Distributed Job

-{% gizmo dask_distributed_button %} +

Welcome to your Tethys App!

+

Take advantage of beautiful typography to organize the content of your app:

+

Heading 1

+

Heading 2

+

Heading 3

+

Heading 4

+
Heading 5
+
Heading 6
+{% endblock %} -

Multi Leaf Distributed Job

-{% gizmo dask_multiple_leaf_button %} +{# Use the after_app_content block for modals #} +{% block after_app_content %} + + {% endblock %} +{% block app_actions %} + {% gizmo save_button %} + {% gizmo edit_button %} + {% gizmo remove_button %} + {% gizmo previous_button %} + {% gizmo next_button %} +{% endblock %} \ No newline at end of file diff --git a/tethysapp/dask_tutorial/templates/dask_tutorial/jobs_table.html b/tethysapp/dask_tutorial/templates/dask_tutorial/jobs_table.html deleted file mode 100644 index 66b8c1a..0000000 --- a/tethysapp/dask_tutorial/templates/dask_tutorial/jobs_table.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "dask_tutorial/base.html" %} -{% load static tethys_gizmos %} - -{% load tethys_gizmos %} - -{% block global_scripts %} - {{ block.super }} - {% gizmo_dependencies global_js %} -{% endblock %} - -{% block styles %} - {{ block.super }} - {% gizmo_dependencies global_css %} - - -{% endblock %} - -{% block app_content %} -
-

Jobs Table

- {% gizmo jobs_table %} -
-{% endblock %} - -{% block app_actions %} -{% gizmo home_button %} -{% endblock %} - -{% block scripts %} -{% gizmo_dependencies css %} - {{ block.super }} -{% gizmo_dependencies js %} -{% endblock %} diff --git a/tethysapp/dask_tutorial/templates/dask_tutorial/results.html b/tethysapp/dask_tutorial/templates/dask_tutorial/results.html deleted file mode 100644 index 910cb9b..0000000 --- a/tethysapp/dask_tutorial/templates/dask_tutorial/results.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "dask_tutorial/base.html" %} -{% load static tethys_gizmos %} - -{% load tethys_gizmos %} - -{% block title %}- Gizmos - Map View{% endblock %} - -{% block global_scripts %} - {{ block.super }} - {% gizmo_dependencies global_js %} -{% endblock %} - -{% block styles %} - {{ block.super }} - {% gizmo_dependencies global_css %} - - -{% endblock %} - -{% block app_content %} -
  • The result of running {{ name }} job is : {{ result }}
  • - -{% endblock %} - -{% block app_actions %} -{% gizmo home_button %} -{% gizmo jobs_button %} -{% endblock %} - -{% block scripts %} -{% gizmo_dependencies css %} - {{ block.super }} -{% gizmo_dependencies js %} -{% endblock %}