Files
ihrm/horilla_views/generic/cbv/pipeline.py

79 lines
2.5 KiB
Python

"""
horilla_views/generic/cbv/pipeline
"""
from django.db import models
from django.views.generic import ListView
from django_filters import FilterSet
from horilla.horilla_middlewares import _thread_locals
from horilla_views.cbv_methods import get_short_uuid
class Pipeline(ListView):
"""
Pipeline
"""
model: models.Model = None
filter_class: FilterSet = None
field: str = ""
field_filter_class: FilterSet = None
field_model: models.Model = None
selected_instances_key_name: str = ""
allowed_fields: list = []
columns: list = []
view_id: str = get_short_uuid(10, "pipeline")
actions: list = []
template_name = "generic/pipeline/pipeline.html"
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.request = getattr(_thread_locals, "request", None)
self.grouper = self.request.GET.get("grouper", self.grouper)
if kwargs.get("view") == "kanban":
self.template_name = "generic/pipeline/kanban.html"
for allowed_field in self.allowed_fields:
if self.grouper == allowed_field["field"]:
self.field_model = allowed_field["model"]
self.field_filter_class = allowed_field["filter"]
self.url = allowed_field["url"]
self.parameters = allowed_field["parameters"]
self.actions = allowed_field["actions"]
@classmethod
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
# Inject URL params into initkwargs
initkwargs_with_url = {**initkwargs, **kwargs}
self = cls(**initkwargs_with_url)
self.request = request
self.args = args
self.kwargs = kwargs
return self.dispatch(request, *args, **kwargs)
return view
def get_queryset(self):
if self.kwargs.get("view"):
del self.kwargs["view"]
if not self.queryset:
self.queryset = self.field_filter_class(self.request.GET).qs.filter(
**self.kwargs
)
return self.queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["groups"] = self.queryset
context["view_id"] = self.view_id
context["allowed_fields"] = self.allowed_fields
context["url"] = self.url
context["parameters"] = self.parameters
context["actions"] = self.actions
context["selected_instances_key_name"] = self.selected_instances_key_name
return context