Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
atdb-ldv
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ASTRON SDC
atdb-ldv
Commits
781cfff3
Commit
781cfff3
authored
3 years ago
by
Mattia Mancini
Browse files
Options
Downloads
Patches
Plain Diff
Add view
parent
1c140910
No related branches found
No related tags found
3 merge requests
!176
Master
,
!175
Master
,
!174
Add unique aggregation key endpoint
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
atdb/taskdatabase/services/algorithms.py
+5
-0
5 additions, 0 deletions
atdb/taskdatabase/services/algorithms.py
atdb/taskdatabase/views.py
+80
-65
80 additions, 65 deletions
atdb/taskdatabase/views.py
with
85 additions
and
65 deletions
atdb/taskdatabase/services/algorithms.py
+
5
−
0
View file @
781cfff3
...
@@ -554,3 +554,8 @@ def construct_dashboard_html(request, selection):
...
@@ -554,3 +554,8 @@ def construct_dashboard_html(request, selection):
results_logs
=
construct_logs_per_workflow_html
(
request
,
log_records
)
results_logs
=
construct_logs_per_workflow_html
(
request
,
log_records
)
return
results_tasks
,
results_logs
return
results_tasks
,
results_logs
def
unique_values_for_aggregation_key
(
queryset
,
aggregation_key
):
return
list
(
map
(
lambda
x
:
x
[
aggregation_key
],
queryset
.
values
(
aggregation_key
).
distinct
()))
\ No newline at end of file
This diff is collapsed.
Click to expand it.
atdb/taskdatabase/views.py
+
80
−
65
View file @
781cfff3
import
logging
import
logging
import
json
import
json
...
@@ -20,6 +19,7 @@ from django_tables2 import SingleTableView
...
@@ -20,6 +19,7 @@ from django_tables2 import SingleTableView
from
django.shortcuts
import
render
,
redirect
from
django.shortcuts
import
render
,
redirect
from
django.core.paginator
import
Paginator
,
EmptyPage
,
PageNotAnInteger
from
django.core.paginator
import
Paginator
,
EmptyPage
,
PageNotAnInteger
from
rest_framework.request
import
Request
from
django.conf
import
settings
from
django.conf
import
settings
from
.models
import
Task
,
Status
,
Workflow
,
LogEntry
,
Configuration
,
Job
,
PostProcessingRule
,
Monitor
from
.models
import
Task
,
Status
,
Workflow
,
LogEntry
,
Configuration
,
Job
,
PostProcessingRule
,
Monitor
...
@@ -41,9 +41,9 @@ from .services import algorithms
...
@@ -41,9 +41,9 @@ from .services import algorithms
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
# ---------- filters (in the REST API) ---------
# ---------- filters (in the REST API) ---------
class
TaskFilter
(
filters
.
FilterSet
):
class
TaskFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
Task
model
=
Task
...
@@ -63,6 +63,7 @@ class TaskFilter(filters.FilterSet):
...
@@ -63,6 +63,7 @@ class TaskFilter(filters.FilterSet):
'
predecessor__status
'
:
[
'
exact
'
,
'
icontains
'
,
'
in
'
,
'
startswith
'
],
'
predecessor__status
'
:
[
'
exact
'
,
'
icontains
'
,
'
in
'
,
'
startswith
'
],
}
}
class
TaskFilterQueryPage
(
filters
.
FilterSet
):
class
TaskFilterQueryPage
(
filters
.
FilterSet
):
resume
=
django_filters
.
BooleanFilter
(
lookup_expr
=
'
exact
'
,
label
=
'
resuming
'
)
resume
=
django_filters
.
BooleanFilter
(
lookup_expr
=
'
exact
'
,
label
=
'
resuming
'
)
...
@@ -83,7 +84,6 @@ class TaskFilterQueryPage(filters.FilterSet):
...
@@ -83,7 +84,6 @@ class TaskFilterQueryPage(filters.FilterSet):
class
WorkflowFilter
(
filters
.
FilterSet
):
class
WorkflowFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
Workflow
model
=
Workflow
...
@@ -95,7 +95,6 @@ class WorkflowFilter(filters.FilterSet):
...
@@ -95,7 +95,6 @@ class WorkflowFilter(filters.FilterSet):
class
LogEntryFilter
(
filters
.
FilterSet
):
class
LogEntryFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
LogEntry
model
=
LogEntry
...
@@ -105,8 +104,8 @@ class LogEntryFilter(filters.FilterSet):
...
@@ -105,8 +104,8 @@ class LogEntryFilter(filters.FilterSet):
'
status
'
:
[
'
exact
'
,
'
in
'
],
'
status
'
:
[
'
exact
'
,
'
in
'
],
}
}
class
ConfigurationFilter
(
filters
.
FilterSet
):
class
ConfigurationFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
Configuration
model
=
Configuration
...
@@ -116,8 +115,8 @@ class ConfigurationFilter(filters.FilterSet):
...
@@ -116,8 +115,8 @@ class ConfigurationFilter(filters.FilterSet):
'
value
'
:
[
'
exact
'
,
'
icontains
'
],
'
value
'
:
[
'
exact
'
,
'
icontains
'
],
}
}
class
JobFilter
(
filters
.
FilterSet
):
class
JobFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
Job
model
=
Job
...
@@ -127,8 +126,8 @@ class JobFilter(filters.FilterSet):
...
@@ -127,8 +126,8 @@ class JobFilter(filters.FilterSet):
'
job_id
'
:
[
'
exact
'
],
'
job_id
'
:
[
'
exact
'
],
}
}
class
PostProcessingFilter
(
filters
.
FilterSet
):
class
PostProcessingFilter
(
filters
.
FilterSet
):
class
Meta
:
class
Meta
:
model
=
PostProcessingRule
model
=
PostProcessingRule
...
@@ -139,6 +138,7 @@ class PostProcessingFilter(filters.FilterSet):
...
@@ -139,6 +138,7 @@ class PostProcessingFilter(filters.FilterSet):
'
workflow_to_apply__id
'
:
[
'
exact
'
],
'
workflow_to_apply__id
'
:
[
'
exact
'
],
}
}
# ---------- Tables2 Views (experimental) -----------
# ---------- Tables2 Views (experimental) -----------
# implementation with tables2: http://localhost:8000/atdb/tables2
# implementation with tables2: http://localhost:8000/atdb/tables2
class
QueryView
(
SingleTableMixin
,
FilterView
):
class
QueryView
(
SingleTableMixin
,
FilterView
):
...
@@ -146,7 +146,7 @@ class QueryView(SingleTableMixin, FilterView):
...
@@ -146,7 +146,7 @@ class QueryView(SingleTableMixin, FilterView):
model
=
Task
model
=
Task
queryset
=
Task
.
objects
.
filter
(
task_type
=
'
regular
'
)
queryset
=
Task
.
objects
.
filter
(
task_type
=
'
regular
'
)
template_name
=
"
query/index.html
"
template_name
=
"
query/index.html
"
filterset_class
=
TaskFilter
QueryPage
filterset_class
=
TaskFilter
def
get_table_data
(
self
):
def
get_table_data
(
self
):
...
@@ -254,7 +254,6 @@ class TaskTables2View(SingleTableView):
...
@@ -254,7 +254,6 @@ class TaskTables2View(SingleTableView):
def
TaskDetails
(
request
,
id
=
0
,
page
=
0
):
def
TaskDetails
(
request
,
id
=
0
,
page
=
0
):
try
:
try
:
task
=
Task
.
objects
.
get
(
id
=
id
)
task
=
Task
.
objects
.
get
(
id
=
id
)
...
@@ -280,8 +279,6 @@ def TaskDetails(request, id=0, page=0):
...
@@ -280,8 +279,6 @@ def TaskDetails(request, id=0, page=0):
return
render
(
request
,
"
taskdatabase/tasks/task_details.html
"
,
{
'
task
'
:
task
,
'
logentries
'
:
logentries_html
})
return
render
(
request
,
"
taskdatabase/tasks/task_details.html
"
,
{
'
task
'
:
task
,
'
logentries
'
:
logentries_html
})
def
ShowInputs
(
request
,
id
):
def
ShowInputs
(
request
,
id
):
task
=
Task
.
objects
.
get
(
id
=
id
)
task
=
Task
.
objects
.
get
(
id
=
id
)
...
@@ -336,6 +333,7 @@ class DiagramView(ListView):
...
@@ -336,6 +333,7 @@ class DiagramView(ListView):
model
=
Task
model
=
Task
template_name
=
"
taskdatabase/diagram.html
"
template_name
=
"
taskdatabase/diagram.html
"
# ---------- REST API views -----------
# ---------- REST API views -----------
# example: /atdb/tasks/
# example: /atdb/tasks/
...
@@ -359,6 +357,7 @@ class TaskListViewAPI(generics.ListCreateAPIView):
...
@@ -359,6 +357,7 @@ class TaskListViewAPI(generics.ListCreateAPIView):
else
:
else
:
return
TaskWriteSerializer
return
TaskWriteSerializer
class
PostProcessingTaskListViewAPI
(
generics
.
ListCreateAPIView
):
class
PostProcessingTaskListViewAPI
(
generics
.
ListCreateAPIView
):
"""
"""
A pagination list of tasks, unsorted.
A pagination list of tasks, unsorted.
...
@@ -377,6 +376,7 @@ class PostProcessingTaskListViewAPI(generics.ListCreateAPIView):
...
@@ -377,6 +376,7 @@ class PostProcessingTaskListViewAPI(generics.ListCreateAPIView):
else
:
else
:
return
TaskWriteSerializer
return
TaskWriteSerializer
# all tasks
# all tasks
class
AllTaskListViewAPI
(
generics
.
ListCreateAPIView
):
class
AllTaskListViewAPI
(
generics
.
ListCreateAPIView
):
"""
"""
...
@@ -418,6 +418,7 @@ class TaskDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView):
...
@@ -418,6 +418,7 @@ class TaskDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView):
"""
"""
model
=
Task
model
=
Task
queryset
=
Task
.
objects
.
all
()
queryset
=
Task
.
objects
.
all
()
# serializer_class = TaskSerializer
# serializer_class = TaskSerializer
def
get_serializer_class
(
self
):
def
get_serializer_class
(
self
):
...
@@ -445,6 +446,7 @@ class WorkflowListViewAPI(generics.ListCreateAPIView):
...
@@ -445,6 +446,7 @@ class WorkflowListViewAPI(generics.ListCreateAPIView):
filter_backends
=
(
filters
.
DjangoFilterBackend
,)
filter_backends
=
(
filters
.
DjangoFilterBackend
,)
filter_class
=
WorkflowFilter
filter_class
=
WorkflowFilter
# example: /atdb/workflows/5/
# example: /atdb/workflows/5/
class
WorkflowDetailsViewAPI
(
generics
.
RetrieveUpdateDestroyAPIView
):
class
WorkflowDetailsViewAPI
(
generics
.
RetrieveUpdateDestroyAPIView
):
model
=
Workflow
model
=
Workflow
...
@@ -598,6 +600,7 @@ def TaskSetStatus(request,pk,new_status,page=0):
...
@@ -598,6 +600,7 @@ def TaskSetStatus(request,pk,new_status,page=0):
# redirect to tasks list
# redirect to tasks list
return
redirect
(
'
/atdb/?page=
'
+
page
)
return
redirect
(
'
/atdb/?page=
'
+
page
)
# set a filter value in the session, used later by the 'get_searched_tasks' mechanism
# set a filter value in the session, used later by the 'get_searched_tasks' mechanism
def
TaskSetFilter
(
request
,
filter
):
def
TaskSetFilter
(
request
,
filter
):
request
.
session
[
'
task_filter
'
]
=
filter
request
.
session
[
'
task_filter
'
]
=
filter
...
@@ -608,12 +611,14 @@ def TaskSetFilter(request,filter):
...
@@ -608,12 +611,14 @@ def TaskSetFilter(request,filter):
return
redirect
(
'
/atdb/?page=1
'
)
return
redirect
(
'
/atdb/?page=1
'
)
# set the defined list of ACTIVE_STATUSSES on the session, used later by the 'get_searched_tasks' mechanism
# set the defined list of ACTIVE_STATUSSES on the session, used later by the 'get_searched_tasks' mechanism
def
TaskSetActiveFilter
(
request
):
def
TaskSetActiveFilter
(
request
):
request
.
session
[
'
task_filter
'
]
=
settings
.
ACTIVE_STATUSSES
request
.
session
[
'
task_filter
'
]
=
settings
.
ACTIVE_STATUSSES
request
.
session
[
'
task_onhold_filter
'
]
=
None
request
.
session
[
'
task_onhold_filter
'
]
=
None
return
redirect
(
'
/atdb/?page=1
'
)
return
redirect
(
'
/atdb/?page=1
'
)
def
TaskSetOnHoldFilter
(
request
,
onhold
):
def
TaskSetOnHoldFilter
(
request
,
onhold
):
request
.
session
[
'
task_onhold_filter
'
]
=
onhold
request
.
session
[
'
task_onhold_filter
'
]
=
onhold
return
redirect
(
'
/atdb/?page=1
'
)
return
redirect
(
'
/atdb/?page=1
'
)
...
@@ -681,7 +686,6 @@ def TaskSetStatusTables2(request,pk,new_status,query_params):
...
@@ -681,7 +686,6 @@ def TaskSetStatusTables2(request,pk,new_status,query_params):
return
redirect
(
'
/atdb/query/?
'
+
current_query_params
)
return
redirect
(
'
/atdb/query/?
'
+
current_query_params
)
@login_required
@login_required
def
TaskMultiStatus
(
request
,
new_status
,
query_params
):
def
TaskMultiStatus
(
request
,
new_status
,
query_params
):
# get the list of id's from the session
# get the list of id's from the session
...
@@ -782,15 +786,26 @@ class GetMinMaxTimeView(generics.ListAPIView):
...
@@ -782,15 +786,26 @@ class GetMinMaxTimeView(generics.ListAPIView):
'
error
'
:
str
(
error
)
'
error
'
:
str
(
error
)
})
})
from
rest_framework.serializers
import
ListSerializer
# /atdb/get_unique_values_for_key/{key}
# /atdb/get_unique_values_for_key/{key}
class
GetUniqueValuesForKey
(
generics
.
ListAPIView
):
class
GetUniqueValuesForKey
(
generics
.
ListAPIView
):
queryset
=
Task
.
objects
.
all
()
queryset
=
Task
.
objects
.
all
()
model
=
Task
filter_backends
=
(
filters
.
DjangoFilterBackend
,)
filter_class
=
TaskFilter
# override list and generate a custom response
# override list and generate a custom response
def
list
(
self
,
request
,
aggregation_key
,
**
kwargs
):
def
list
(
self
,
request
:
Request
,
*
args
,
**
kwargs
):
try
:
try
:
print
(
aggregation_key
)
return
Response
({
'
aggregation_key
'
:
aggregation_key
aggregation_key
=
kwargs
[
'
aggregation_key
'
]
queryset
=
self
.
get_queryset
()
queryset
=
self
.
filter_queryset
(
queryset
)
return
Response
({
'
aggregation_key
'
:
aggregation_key
,
'
result
'
:
algorithms
.
unique_values_for_aggregation_key
(
queryset
,
aggregation_key
)
})
})
except
Exception
as
error
:
except
Exception
as
error
:
return
Response
({
return
Response
({
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment