django_transaction_signals.

Adiciona post_commit e post_rollback manipuladores de sinal para Django
Baixe Agora

django_transaction_signals. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Other/Proprietary Li...
  • Preço:
  • FREE
  • Nome do editor:
  • David Hughes
  • Site do editor:
  • https://github.com/davehughes/

django_transaction_signals. Tag


django_transaction_signals. Descrição

Ao trabalhar no repositório digital ASU, eu achei que precisava da capacidade de desencadear retornos de chamada quando uma transação foi confirmada. Os sinais de Django pareciam ser o mecanismo perfeito, mas os sinais de confirmação e reversão de transação não são (a partir dessa redação) suportados na estrutura principal. (Veja estes ingressos no rastreador de problemas de Django para o contexto: bilhete # 14050, bilhete # 14051) No entanto, uma essência escrita por Gégoire Cachet parece fazer o truque. Adiciona uma implementação de sinais personalizados e funções de manuseio de transações de django para despachar post_commit e post_rollback sinais.django_transaction_signals é um aplicativo django que estende essa essência das seguintes maneiras: - Adiciona uma função adiadora () que pode ser usada dentro de uma transação para Defer a execução de uma função até que a transação tenha cometido (achei isso bastante útil para desencadear tarefas de aipo que dependem dos objetos cometidos) .- Guardas contra manipuladores de sinal mal comportados (ou seja, que deixam a transação atual em um estado sujo) e Levanta um badlybehedtransactActionsEndlerError quando detecta um manipulador mal comportado. - Limpa manipuladores na saída da transação, independentemente de um commit, reversão ou nem ocorrido. Isso corrige um problema em que os manipuladores poderiam acumular e ser desencadeado em uma transação subseqüente.Usage (da Gist original): você precisa carregar isso antes de usar os sinais. Por exemplo, adicione a seguinte linha ao __init__ do projeto. PY Arquivo: Importar Django_Transaction_SignalsThen, para usar os sinais, criar uma função e vinculá-lo ao sinal Post_Commit: de Django.db Importar TransactionDef My_Function (** Kwargs): # Faça suas coisas aqui passa-do-caso .Post_commit.connect (my_function) Se você estiver usando variáveis não-locais em sua função de retorno de chamada, certifique-se de usar referência não fraca ou suas variáveis poderem ser coletadas antes que a função seja chamada. Por exemplo, no método save () de um modelo: Def Guardar (auto, * args, ** kwargs): def my_function (** kwargs): # Faça suas coisas aqui # acessar auto variável auto transação.signals.post_commit.connect ( My_Function, fraco = FALSE) Uso da função aderente () Adferencie () Registros de uma função a ser executada após a conclusão bem-sucedida da transação atual (se existir). Chamando Defer (FUNC, * ARGS, ** kwargs) Traduz no seguinte: - Se uma transação estiver ativa, registre um ouvinte pós-commit para executar func (* args, ** kwargs) - se nenhuma transação estiver ativa, execute func (* ARGS, ** kwargs) IMEDIATE Este exemplo demonstra uma atualização transacional de um modelo de modelo que registra uma tarefa de aipo a ser executada quando a transação comete com sucesso.From Celery.Task Importar TaskFrom Django.db Importar Transação de Django_Transaction_Signals Importar Deferimport Pysolr @ Transaction. commit_on_successdef update_object (obj): # ... modificar e salvar objeto ... aderir (index_object.delay, obj) # ... faça algum trabalho adicional na transação ... @ taskdef index_object (obj): index_obj = {' ID ': obj.id} # ... Build Index Object ... solr = pysolr.solr (' http: // localhost: 8080 / solr ') solr.add () página inicial do produto


django_transaction_signals. Software Relacionado