def test_with_multiple_signals(self): signal1 = Signal(providing_args=[u'message']) signal2 = Signal(providing_args=[u'message']) original_receiver = mock.Mock() signal1.connect(original_receiver) signal2.connect(original_receiver) signal1.send(sender=None, message=u'before') signal2.send(sender=None, message=u'before') with override_signals(signal1, signal2): new_receiver = mock.Mock() signal1.connect(new_receiver) signal2.connect(new_receiver) signal1.send(sender=None, message=u'overriden') signal2.send(sender=None, message=u'overriden') signal1.send(sender=None, message=u'after') signal2.send(sender=None, message=u'after') self.assertEqual(original_receiver.mock_calls, [ mock.call(message=u'before', sender=None, signal=signal1), mock.call(message=u'before', sender=None, signal=signal2), mock.call(message=u'after', sender=None, signal=signal1), mock.call(message=u'after', sender=None, signal=signal2), ]) self.assertEqual(new_receiver.mock_calls, [ mock.call(message=u'overriden', sender=None, signal=signal1), mock.call(message=u'overriden', sender=None, signal=signal2), ])
def test_with_multiple_signals(self): signal1 = Signal(providing_args=[u'message']) signal2 = Signal(providing_args=[u'message']) original_receiver = mock.Mock() signal1.connect(original_receiver) signal2.connect(original_receiver) signal1.send(sender=None, message=u'before') signal2.send(sender=None, message=u'before') with override_signals(signal1, signal2): new_receiver = mock.Mock() signal1.connect(new_receiver) signal2.connect(new_receiver) signal1.send(sender=None, message=u'overriden') signal2.send(sender=None, message=u'overriden') signal1.send(sender=None, message=u'after') signal2.send(sender=None, message=u'after') self.assertEqual(original_receiver.mock_calls, [ mock.call(message=u'before', sender=None, signal=signal1), mock.call(message=u'before', sender=None, signal=signal2), mock.call(message=u'after', sender=None, signal=signal1), mock.call(message=u'after', sender=None, signal=signal2), ]) self.assertEqual(new_receiver.mock_calls, [ mock.call(message=u'overriden', sender=None, signal=signal1), mock.call(message=u'overriden', sender=None, signal=signal2), ])
def test_new_receiver_gets_only_overriden_signal(self): u""" Checks that receivers registered inside ``override_signals`` context get only signals emitted inside the context block. """ signal = Signal(providing_args=[u'message']) signal.send(sender=None, message=u'before') with override_signals(signal): new_receiver = mock.Mock() signal.connect(new_receiver) signal.send(sender=None, message=u'overriden') signal.send(sender=None, message=u'after') self.assertEqual(new_receiver.mock_calls, [ mock.call(message=u'overriden', sender=None, signal=signal), ])
def test_new_receiver_gets_only_overriden_signal(self): u""" Checks that receivers registered inside ``override_signals`` context get only signals emitted inside the context block. """ signal = Signal(providing_args=[u'message']) signal.send(sender=None, message=u'before') with override_signals(signal): new_receiver = mock.Mock() signal.connect(new_receiver) signal.send(sender=None, message=u'overriden') signal.send(sender=None, message=u'after') self.assertEqual(new_receiver.mock_calls, [ mock.call(message=u'overriden', sender=None, signal=signal), ])
def test_original_receiver_does_not_get_overriden_signal(self): u""" Checks that receivers registered outside ``override_signals`` context do not get signals emitted inside the context block. """ signal = Signal(providing_args=[u'message']) original_receiver = mock.Mock() signal.connect(original_receiver) signal.send(sender=None, message=u'before') with override_signals(signal): signal.send(sender=None, message=u'overriden') signal.send(sender=None, message=u'after') self.assertEqual(original_receiver.mock_calls, [ mock.call(message=u'before', sender=None, signal=signal), mock.call(message=u'after', sender=None, signal=signal), ])
def test_original_receiver_does_not_get_overriden_signal(self): u""" Checks that receivers registered outside ``override_signals`` context do not get signals emitted inside the context block. """ signal = Signal(providing_args=[u'message']) original_receiver = mock.Mock() signal.connect(original_receiver) signal.send(sender=None, message=u'before') with override_signals(signal): signal.send(sender=None, message=u'overriden') signal.send(sender=None, message=u'after') self.assertEqual(original_receiver.mock_calls, [ mock.call(message=u'before', sender=None, signal=signal), mock.call(message=u'after', sender=None, signal=signal), ])
def mockSignal(self, signal: Signal) -> typing.Iterator[mock.Mock]: # pylint: disable=invalid-name """Context manager to attach a mock to the given signal.""" # This function is only here to create an autospec. From the documentation: # # Notice that the function takes a sender argument, along with wildcard keyword arguments # (**kwargs); all signal handlers must take these arguments. # # https://docs.djangoproject.com/en/dev/topics/signals/#connecting-to-specific-signals def callback(sender: models.Model, **kwargs: typing.Any) -> None: # pragma: no cover # pylint: disable=unused-argument pass signal_mock = mock.create_autospec(callback, spec_set=True) signal.connect(signal_mock) try: yield signal_mock finally: signal.disconnect(signal_mock)
def test_email_not_sent_when_watcher_removed(self, notifications): dispatch_uid = "publicweb.models.decision_signal_handler" Signal.disconnect(signals.post_save, sender=Decision, dispatch_uid=dispatch_uid) decision = self.create_and_return_decision() data = { 'description': decision.description, 'status': decision.status, 'deadline': decision.deadline, 'people': decision.people, 'watch': True } form = DecisionForm(data, instance=decision) form.watch = False form.is_valid() form.save() Signal.connect( signals.post_save, sender=Decision, receiver=decision_signal_handler, dispatch_uid=dispatch_uid ) self.assertFalse(notifications.called)
return try: domain_obj = Domain.get_by_name(application.domain) cc_config = domain_obj.call_center_config if not cc_config or not (cc_config.fixtures_are_active() and cc_config.config_is_valid()): return app_config = get_call_center_config_from_app(application) save = cc_config.update_from_app_config(app_config) if save: cc_config.save() except Exception: notify_exception(None, "Error updating CallCenter config for app build") def expire_latest_enabled_build_profiles(sender, application, **kwargs): if application.copy_of and toggles.RELEASE_BUILDS_PER_PROFILE.enabled(application.domain): for build_profile_id in application.build_profiles: get_latest_enabled_build_for_profile.clear(application.domain, build_profile_id) get_latest_enabled_versions_per_profile.clear(application.copy_of) app_post_save = Signal(providing_args=['application']) app_post_save.connect(create_app_structure_repeat_records) app_post_save.connect(update_callcenter_config) app_post_save.connect(expire_latest_enabled_build_profiles) app_post_release = Signal(providing_args=['application'])
import json from django.dispatch.dispatcher import Signal invite_recieved = Signal(providing_args=["from", "to"]) def match(sender, **kwargs): """Trap the signal and do whatever is needed""" """ 1)create topic 2)subscribe sender_id,receiver_id to this topic 3)Publish message 4)delete topic *check if message goes when phone is switched off and i delete the topic """ from_user = kwargs['from'] to_user = kwargs['to'] topic = get_topic_arn("hello") #endpoint_sender = notifications.objects.get(user_id=sender_id).values_list('endpoint', flat=True) #endpoint_receiver = notifications.objects.get(user_id=receiver_id).values_list('endpoint', flat=True) subscribe_to_topic(TopicArn=topic, EndpointArn=create_platform_endpoint(token='APA91bEANg9ULweUM2eFbs1LHuDar3bF16aGb1uwsSufm9Eek6azzW1NoViRasFJ8Afla4FVSrVwlDoXlUG6e8F6kLxrPyOXHypM83CiB6VpQDBNtfOLNuX8SDmGtB18x3HZbxAcHx7_T7sDaZ99Z4LGdX_58blwa5qGySi9ewPBO7fi7CibA9U')) print topic #subscribe_to_topic(TopicArn=topic, EndpointArn=endpoint_receiver[0]) message = {'type':'match','users':[sender_id, receiver_id]} print message publish(TopicArn=topic, message=json.dumps(message)) delete_topic(topic) # Write to log, update db, send mail etc. invite_recieved.connect(match)
from django.dispatch.dispatcher import Signal def create_app_structure_repeat_records(sender, application, **kwargs): from corehq.motech.repeaters.models import AppStructureRepeater domain = application.domain if domain: repeaters = AppStructureRepeater.by_domain(domain) for repeater in repeaters: repeater.register(application) app_post_save = Signal(providing_args=['application']) app_post_save.connect(create_app_structure_repeat_records) app_post_release = Signal(providing_args=['application'])
from django.dispatch.dispatcher import Signal from app import signal_handlers import sys # import logging # logger = logging.getLogger(__name__) notification_via_sms = Signal(providing_args=["frm", "to", "message", "frm_alias"]) notification_via_sms.connect(signal_handlers.notify_via_sms)
from django.dispatch.dispatcher import Signal from order.models import Checkout from inventory.models import Product def update_product_quantity_handler(checkout:Checkout): product = checkout.product product.qty = product.qty - checkout.amount product.save() Signal.connect(receiver=update_product_quantity_handler, sender=Checkout, dispatch_uid="update_product_quantity_handler")
if app and hasattr(app, "langs"): try: lang = xform.openrosa_headers[OPENROSA_ACCEPT_LANGUAGE] except (AttributeError, KeyError): lang = "default" if lang == "default": lang = app.build_langs[0] if app.build_langs else None message = app.success_message.get(lang) if message: success_message = SuccessMessage(message, userID, domain=domain, tz=timedelta(hours=0)).render() return ReceiverResult( xml.get_simple_response_xml(success_message, nature=ResponseNature.SUBMIT_SUCCESS), Certainty.STRONG ) def create_app_structure_repeat_records(sender, application, **kwargs): from corehq.apps.app_manager.models import AppStructureRepeater domain = application.domain if domain: repeaters = AppStructureRepeater.by_domain(domain) for repeater in repeaters: repeater.register(application) successful_form_received.connect(get_custom_response_message) app_post_save = Signal(providing_args=["application"]) app_post_save.connect(create_app_structure_repeat_records)
from django.conf import settings from django.dispatch.dispatcher import Signal from django.template import loader from django.template.loader import render_to_string, BaseLoader from django.test.testcases import TestCase build_response = Signal() def buildresponse(sender, **kwargs): for name in dir(http): obj = getattr(http, name) if getattr(obj, 'status_code', None) == sender.status_code: sender.response = obj(sender.content) return build_response.connect(buildresponse) view = Signal() class expertmiddleware: def __init__(self): loader.template_source_loaders = (templateloader(),) def process_request(self, request): view.send(sender=request) if hasattr(request, 'response'): return request.response render_template = Signal() def render(sender, **kwargs):
cc_config = domain_obj.call_center_config if not cc_config or not (cc_config.fixtures_are_active() and cc_config.config_is_valid()): return app_config = get_call_center_config_from_app(application) save = cc_config.update_from_app_config(app_config) if save: cc_config.save() except Exception: notify_exception(None, "Error updating CallCenter config for app build") def expire_latest_enabled_build_profiles(sender, application, **kwargs): if application.copy_of and toggles.RELEASE_BUILDS_PER_PROFILE.enabled( application.domain): for build_profile_id in application.build_profiles: get_latest_enabled_build_for_profile.clear(application.domain, build_profile_id) get_latest_enabled_versions_per_profile.clear(application.copy_of) app_post_save = Signal(providing_args=['application']) app_post_save.connect(create_app_structure_repeat_records) app_post_save.connect(update_callcenter_config) app_post_save.connect(expire_latest_enabled_build_profiles) app_post_release = Signal(providing_args=['application'])
''' Created on Sep 1, 2012 @author: staticfish ''' from django.dispatch.dispatcher import Signal from workflow.views import post_attach_queue_save from tracker import views as tracker_views from tracker.models import WeekSnapshot from timeoff import views as timeoff_views from timeoff.models import BookTimeOff from overtime import views as overtime_views post_attach_queue_save_event = Signal(providing_args=['instance', 'is_draft']) post_attach_queue_save_event.connect(post_attach_queue_save, dispatch_uid='#weeksnapshot#') post_final_status_event = Signal(providing_args=['instance', 'status']) post_final_status_event.connect(tracker_views.post_final_status_update, sender=WeekSnapshot, dispatch_uid='#timeshet.weeksnapshot.approverqueue#') post_final_status_event.connect(overtime_views.weeksnapshot_post_final_status_update, sender=WeekSnapshot, dispatch_uid='#overtime.weeksnapshot.approverqueue#') post_final_status_event.connect(timeoff_views.post_final_status_update, sender=BookTimeOff, dispatch_uid='#booktimeoff.approverqueue#')
def update_project_careplan_config(sender, application, **kwargs): domain_name = application.domain config = CareplanConfig.for_domain(domain_name) if application.doc_type == 'Application-Deleted': if application.has_careplan_module: careplan_removed(domain_name, config, application.get_id) def update_project_careplan_config_release(sender, application, **kwargs): domain_name = application.domain config = CareplanConfig.for_domain(domain_name) parent_app_id = application.copy_of latest_app = application.get_latest_app(released_only=True) if latest_app and latest_app.is_released and latest_app.has_careplan_module: config = config or CareplanConfig(domain=domain_name) update_careplan_config(config, parent_app_id, latest_app) else: careplan_removed(domain_name, config, parent_app_id) app_post_save = Signal(providing_args=['application']) app_post_save.connect(create_app_structure_repeat_records) app_post_save.connect(update_project_careplan_config) app_post_release = Signal(providing_args=['application']) app_post_release.connect(update_project_careplan_config_release)
product.stock += instance.amount product.save() signal_customizado_product_stock_changed.send(sender=None, instance=product) def send_mail_stock_max_overload(sender, instance, **kwargs): if instance.stock > instance.stock_max: StockGreaterMax(instance).send(MAIL_BOSS) def test_update_post_save(sender, instance, created, **kwargs): print('Created? ==> ', created) def test_pre_save(sender, instance, **kwargs): print('PRE_SAVE') print('instance ==> ', instance) # Maneira ~1 post_save.connect(increment_stock, sender=StockEntry) post_save.connect(test_update_post_save, sender=StockEntry) pre_save.connect(test_pre_save, sender=StockEntry) signal_customizado_product_stock_changed.connect(send_mail_stock_max_overload, sender=None) # Maneira ~2 # lógica em 'app.py' no método 'ready'
context={ 'recipient_name':dude_full_name, 'post':post.id, 'full_name':owner_profile.facebook_name(), }, )''' except: pass x = post.get_thumbnail_set_urls() return post_created_signal.connect(post_save_hndlr, sender=ItemForSale, dispatch_uid="post_post_creating_thingy_aweaerf") def add_name_to_email(name, email): """ Returns "INSERT NAME" <INSERT EMAIL> formatting """ return '"' + name + '"' + ' <' + email + '>' def comment_save_hndlr(sender, **kwargs): ''' notify the seller that someone commented ''' if sender == Comment:
def send_email_stock_max(sender, instance, **kwargs): if instance.stock > instance.stock_max: StockGreaterMax(instance).send(EMAIL_BOSS) def test_save(sender, instance, created, **kwargs): print(created) def test_pre_save(sender, instance, **kwargs): print("Pre save disparado") # signal post_save.connect(increment_stock, sender=StockEntry) product_stock_changed.connect(send_email_stock_max, sender=None) # post_save.connect(test_save, sender=StockEntry) # pre_save.connect(test_pre_save, sender=StockEntry) """ m2m_changed - alteração em relacionamento NxM pre_save - antes de salvar post_save - depois de salvar pre_delete - antes de excluir post_delete - depois de excluir request_started - quando uma requisição é recebida request_finished - quando uma requisição estiver pronta para ser enviada """
@receiver(user_logged_out) def user_logged_out(request, user, **kwargs): action.send(request.user, verb='Logged out') tickets_received = Signal(providing_args=['user', 'amount']) def tickets_received_handler(sender, user, amount, **kwargs): print "tickets received" action.send(sender, verb='gave ' + str(amount) + ' tickets to ', target=user) tickets_received.connect(tickets_received_handler) tickets_entered = Signal(providing_args=['amount', 'raffle']) def tickets_entered_handler(sender, amount, raffle, **kwargs): print "tickets entered" action.send(sender, verb='entered ' + str(amount) + ' tickets into ', target=raffle) tickets_entered.connect(tickets_entered_handler) tickets_redeemed = Signal(providing_args=['amount', 'ticket_opportunity'])
from django.db.models.signals import post_save from django.db.utils import DatabaseError import logging from .update import PassbookChannels from django.conf import settings from django.dispatch.dispatcher import Signal logger = logging.getLogger("passbook") NOTIFICATION_CLASS = getattr(settings, "NOTIFICATION_CLASS", "PassbookChannels") if NOTIFICATION_CLASS == "PassbookChannels": channel_instance = PassbookChannels() channel = channel_instance.notify logger.debug("Use Apple APN for pass") else: channel = NOTIFICATION_CLASS() logger.debug("Use Custom channel") pass_update = Signal(providing_args=["signer", "token"]) def notify_device(sender, signer, token, **kwarg): logger.debug("receive notification") channel(signer, token) pass_update.connect(notify_device)
domain_name = application.domain config = CareplanConfig.for_domain(domain_name) if application.doc_type == 'Application-Deleted': if application.has_careplan_module: careplan_removed(domain_name, config, application.get_id) def update_project_careplan_config_release(sender, application, **kwargs): domain_name = application.domain config = CareplanConfig.for_domain(domain_name) parent_app_id = application.copy_of latest_app = application.get_latest_app(released_only=True) if latest_app and latest_app.is_released and latest_app.has_careplan_module: config = config or CareplanConfig(domain=domain_name) update_careplan_config(config, parent_app_id, latest_app) else: careplan_removed(domain_name, config, parent_app_id) successful_form_received.connect(get_custom_response_message) app_post_save = Signal(providing_args=['application']) app_post_save.connect(create_app_structure_repeat_records) app_post_save.connect(update_project_careplan_config) app_post_release = Signal(providing_args=['application']) app_post_release.connect(update_project_careplan_config_release)
def url(self, path): """ Return urlquote path name """ path = self.check( path ) return self.fs.url( path ) def remove_cache( sender, **kwargs ): """ Signal receiver function. It is delete cache files of all parent dirs if some files changed in directory. """ HashBilder = FileUnicName( ) lib = sender.lib dir = kwargs["basedir"] # if not system directories if not dir.startswith( settings.LIMITED_CACHE_PATH ) and dir != settings.LIMITED_TRASH_PATH: try: node = lib.cache.getName( *FilePath.split( dir ) ) if node != None: node.setHash( HashBilder.time( ) ) from limited.core.models import FileLib FileLib.objects.filter( id=lib.id ).update( cache=lib.cache ) except Exception as e: logger.error( u"{0}. dir:{1}".format( e, dir ) ) file_pre_change.connect( remove_cache )