django_transaction_signals

Voegt Post_Commit en Post_Rollback Signal-handlers toe aan Django
Download nu

django_transaction_signals Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • Other/Proprietary Li...
  • Prijs:
  • FREE
  • Naam uitgever:
  • David Hughes
  • Uitgever website:
  • https://github.com/davehughes/

django_transaction_signals Tags


django_transaction_signals Beschrijving

Tijdens het werken op de ASU digitale repository, vond ik dat ik het vermogen nodig had om callbacks te activeren wanneer een transactie is gepleegd. De signalen van Django leken het perfecte mechanisme te zijn, maar transactie-commit- en rollback signalen zijn niet (vanaf dit schrijven) ondersteund in het kernkader. (Zie deze tickets in de Django-nummer Tracker voor achtergrond: Ticket # 14050, Ticket # 14051) Echter, een gist geschreven door Grégoire Cachet lijkt de truc te doen. Het voegt een aangepaste signaalimplementatie toe en Monkey-patches Django's Transaction Handling Functies om Post_Commit en Post_Rollback Signals.django_Transaction_Signals is een Django-app die op de volgende manieren uitstrekken: - voegt een defer () -functie toe die in een transactie kan worden gebruikt De uitvoering van een functie uitstellen totdat de transactie is gepleegd (ik vond dit vrij handig voor het veroorzaken van selderijtaken die afhankelijk zijn van de toegewijde objecten). Verhoogt een BadlyBaVedTransactionSignalHerenlerError wanneer het een misdragende handler detecteert. - Wist handlers op transactie-exit, ongeacht of een commit, rollback of noch voorkwam. Dit fixeert een probleem waarbij handlers zich kunnen verzamelen en worden geactiveerd en worden geactiveerd op een volgende transactie.usage (van de oorspronkelijke GIST): u moet ervoor zorgen dat u dit laadt voordat u signalen gebruikt. Voeg voorbeeld de volgende regel toe aan de __init__ van uw project. PY-bestand: Django_transaction_signalshen importeren, om de signalen te gebruiken, een functie te maken en te binden aan het Post_Commit-signaal: van Django.db Import Transactiondef My_function (** Kwargs): # doe je spullen hier Passtransaction.Signals.Post_Commit.Connect (My_Function) Als u niet-lokale variabelen gebruikt in uw callback-functie, moet u ervoor zorgen dat u niet-zwakke referentie gebruikt of uw variabelen kunnen afval worden verzameld voordat de functie wordt gebeld. Bijvoorbeeld, in de methode van een model () methode: def opslaan (zelf, * args, ** kwargs): def my_function (** kwargs): # doe je spullen hier # toegang zelf variabele zelftransactie.signals.post_commit.connect ( My_function, zwak = FALSE) Gebruik van defer () Functie: Defer () registreert een functie die moet worden uitgevoerd bij succesvolle afronding van de huidige transactie (als men bestaat). CALLING DEFER (FUNC, * AGS, ** KWARGS) Vertaalt naar het volgende: - Als een transactie actief is, registreert u een post-commit luisteraar om FUNC (* AGS, ** KWARGS) uit te voeren - als er geen transactie actief is, voert u FUNC uit (* AGS, ** KWARGS) Toont een transactionele update van een modelobject dat een celery-taak registreert die moet worden uitgevoerd wanneer de transactie succesvol committeert.From Celery.Task Import TaskingFrom Django.db Import TransactionFrom Django_Transaction_Signals Import DeferImport Pysolr @ transactie. commit_on_successdef update_object (obj): # ... Modify and Save Object ... Deffer (index_Object.delay, obj) # ... doe wat extra werk in de transactie ... @ TaskDef Index_Object (OBJ): index_obj = {' ID ': obj.id} # ... Build Index Object ... Solr = Pysolr.solr (' http: // localhost: 8080 / SOLR ') Solr.add () Homepage


django_transaction_signals Gerelateerde software