From f1492891da293002723b0f2ce78d2398e2df2410 Mon Sep 17 00:00:00 2001 From: Edwar Date: Thu, 6 Jun 2024 16:39:17 -0500 Subject: [PATCH 1/2] feat: Add BuilderDateRangeFilter to TaskAdmin list_filter This commit adds the `BuilderDateRangeFilter` class to the `list_filter` attribute of the `TaskAdmin` class in the `omni_pro_oms/admin/task.py` file. The `BuilderDateRangeFilter` is a custom filter that allows filtering tasks based on a date range. The code changes include importing the necessary modules and updating the `list_filter` attribute to include the `BuilderDateRangeFilter` class. The commit message follows the established convention of starting with a type prefix (`feat`) to indicate a new feature. It provides a clear and concise description of the purpose of the code changes. --- omni_pro_oms/admin/task.py | 50 +++++++++++++++++++++++++++++++++++++- requirements.txt | 1 + 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/omni_pro_oms/admin/task.py b/omni_pro_oms/admin/task.py index 7253e08..d3b69f5 100644 --- a/omni_pro_oms/admin/task.py +++ b/omni_pro_oms/admin/task.py @@ -1,8 +1,23 @@ +import django from django.contrib import admin +from django.urls import resolve from django.utils.translation import gettext_lazy as _ from omni_pro_base.admin import BaseAdmin from omni_pro_oms.forms import TaskAdminForm from omni_pro_oms.models import Task +from rangefilter.filters import DateRangeFilter +from rest_framework.request import Request +from rest_framework.test import APIRequestFactory + + +class BuilderDateRangeFilter(DateRangeFilter): + def get_form(self, _request): + form_class = self._get_form_class() + if django.VERSION[:2] >= (5, 0): + for name, value in self.used_parameters.items(): + if isinstance(value, list): + self.used_parameters[name] = value[-1] + return form_class(self.used_parameters or None) class TaskAdmin(BaseAdmin): @@ -18,7 +33,13 @@ class TaskAdmin(BaseAdmin): "time", "updated_at", ) - list_filter = ("tenant_id", "operation_id", "status", "created_at", "updated_at") + list_filter = ( + "tenant_id", + "operation_id", + "status", + ("created_at", BuilderDateRangeFilter), + "updated_at", + ) search_fields = ("item", "url_src", "url_dst", "body_src", "body_dst", "time") form = TaskAdminForm @@ -55,5 +76,32 @@ def __init__(self, *args, **kwargs): ), ) + self.fieldsets + def retry_task(self, request, queryset): + try: + for task in queryset: + if task.status != "error": + continue + task_view = resolve(task.url_src) + view = task_view.func.view_class() + factory = APIRequestFactory() + + # Crea la solicitud con el diccionario JSON y el método HTTP especificado + method = task.operation_id.http_method.lower() + request_rest = getattr(factory, method)(task.url_src, task.body_src, content_type="application/json") + + # Convertimos HttpRequest a una instancia de Request + request_rest = Request(request_rest, parsers=[view.parser_classes[0]]) + request_rest._full_data = task.body_src + + # Llamamos al método dinámico de la vista + view_method = getattr(view, method) + view_method(request=request_rest, **task_view.kwargs) + return self.message_user(request, "Task retried successfully.") + except Exception as e: + print(str(e)) + self.message_user(request, f"Error: {str(e)}", 40) + + actions = [retry_task] + admin.site.register(Task, TaskAdmin) diff --git a/requirements.txt b/requirements.txt index b2700bf..d03410d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,7 @@ django-json-widget==1.1.1 django-auditlog==2.3.0 # Para hacer campos de auditoria en los modelos omni-pro-app-base requests==2.31.0 +django-jazzmin-admin-rangefilter==1.0.0 # App From 3cd7fc14dfd5400b6c06b759e9f2accfc42614f4 Mon Sep 17 00:00:00 2001 From: Edwar Date: Thu, 6 Jun 2024 16:45:29 -0500 Subject: [PATCH 2/2] feat: Remove django-jazzmin-admin-rangefilter from requirements.txt add library in 'saas-app-base' --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d03410d..b2700bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,6 @@ django-json-widget==1.1.1 django-auditlog==2.3.0 # Para hacer campos de auditoria en los modelos omni-pro-app-base requests==2.31.0 -django-jazzmin-admin-rangefilter==1.0.0 # App