2011-07-22 8 views
5

Actualmente estoy trabajando en un proyecto que usa Django 1.3 con la aplicación Django-Apio. Es bastante sorprendente, por cierto, sugiero que cualquiera que no esté familiarizado con el apio lo vea.Django-Apio: ¿volver a enviar tareas desde la página de administración?

Tengo una pregunta específica en torno a la funcionalidad de la página de administración:

Estamos utilizando tareas de apio para hacer llamadas a la API REST a terceros asociados. En realidad, estas llamadas son iniciadas por una acción del usuario, por lo que podría ver cómo una tarea de apio sería extremadamente útil en este caso.

Tenemos una historia de usuario sobre cómo un administrador debería poder volver a enviar una devolución de llamada si falla por alguna razón. Ahora, si la devolución de llamada falla con una falla de respuesta HTTP estándar, estamos usando el mecanismo de reintento de apio para reenviarlos automáticamente en varios intervalos. Sin embargo, estas devoluciones de llamadas podrían ser a uno de miles de socios (sí, hay mucho), y no todos usarán un código de Respuesta HTTP estándar como respuesta de falla.

En resumen, no he podido encontrar nada en línea que indique que uno puede volver a enviar una tarea de apio a través de la interfaz de administración. Esperaba que alguien pudiera arrojar algo de luz sobre esto. Parece una funcionalidad bastante obvia, y si no existe tal funcionalidad, estoy seguro de que hay una buena razón para ello. Me encantaría si no hay una manera de hacerlo, si alguien podría explicar la razón. Solo curiosidad por saber más sobre el funcionamiento interno del apio.

¡Gracias a todos! Perdón por mi palabrería, a veces tiendo a divagar.

+0

BTW - en una nota lateral, si no hay una manera de volver a enviar tareas, implementaré una yo mismo en el administrador. Para hacerlo, necesito almacenar los argumentos archivados en el DB. ¿Alguien sabe si hay una forma en python de obtener una tupla de los argumentos pasados ​​además de crearla manualmente? Esto es algo de lo que tengo curiosidad. Lo siento, sé que estoy rompiendo la regla de dos preguntas en una publicación ... pero técnicamente es un comentario, así que pensé que estaría a salvo, jeje. – jnadro52

+0

Para la pregunta arg, crea una función como 'def myFunc (* args)' cualquier argumento pasado estará en la tupla 'args'. – aid

+0

Veo, así que si agrego * args al método, todos los argumentos pasados ​​estarán en la lista args. Estaba familiarizado con esta característica, pero no sabía que funcionaba de esa manera, con argumentos definidos que no son palabras clave. ¡Gracias por tu ayuda! – jnadro52

Respuesta

2

Usted puede tratar de dos enfoques,

1: Pequeño truco en el modelo:

Puede utilizar un campo booleano y el nombre de algo así como celery_retry y en modelos ahorrar método de hacer algo como esto.

def save(self, *args, **kwargs): 
    if self.celery_retry and self.user.is_superuser(): 
      celery_task.apply_async() 
    self.celery_retry = False 
    super(MyModel, self).save(*args, **kwargs) 

Esto es sólo una idea, puede determinar su propio cómo y cuándo enviar la tarea de apio de nuevo.

2: Extender plantilla de administración:

Puede ampliar la plantilla de administración y poner en un hipervínculo a un punto de vista que vuelve a enviar la tarea.

+0

Gracias por la respuesta ... terminé haciendo # 1. Estaba buscando más de un método incorporado. Parecía ser algo que se incluiría al mirar el conjunto de características actual. De cualquier manera, esta es la respuesta correcta, así que te estoy dando una buena marca de verificación verde. – jnadro52

Cuestiones relacionadas