Пример #1
0
class SignalHookTest(SpyAgency, TestCase):
    """Unit tests for djblets.extensions.hooks.SignalHook."""
    def setUp(self):
        manager = ExtensionManager('')
        self.test_extension = \
            TestExtensionWithRegistration(extension_manager=manager)
        self.patterns = patterns('',
            (r'^url_hook_test/', include('djblets.extensions.test.urls')))

        self.signal = Signal()
        self.spy_on(self._on_signal_fired)

    def test_initialize(self):
        """Testing SignalHook initialization connects to signal"""
        SignalHook(self.test_extension, self.signal, self._on_signal_fired)

        self.assertEqual(len(self._on_signal_fired.calls), 0)
        self.signal.send(self)
        self.assertEqual(len(self._on_signal_fired.calls), 1)

    def test_shutdown(self):
        """Testing SignalHook.shutdown disconnects from signal"""
        hook = SignalHook(self.test_extension, self.signal,
                          self._on_signal_fired)
        hook.shutdown()

        self.assertEqual(len(self._on_signal_fired.calls), 0)
        self.signal.send(self)
        self.assertEqual(len(self._on_signal_fired.calls), 0)

    def _on_signal_fired(self, *args, **kwargs):
        pass
Пример #2
0
    def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):
        receiver_name = '.'.join([receiver.__class__.__module__,
                                   receiver.__class__.__name__ ])

        if receiver_name != self.allowed_receiver:
            raise UnauthorizedSignalReceiver()

        Signal.connect(self, receiver, sender, weak, dispatch_uid)
Пример #3
0
def _project_create_update(request, project_slug=None, template_name="projects/project_form.html"):
    """
    Handler for creating and updating a project.

    This function helps to eliminate duplication of code between those two
    actions, and also allows to apply different permission checks in the
    respective views.
    """

    if project_slug:
        project = get_object_or_404(Project, slug=project_slug)
    else:
        project = None

    if request.method == "POST":
        project_form = ProjectForm(request.POST, instance=project, prefix="project")
        if project_form.is_valid():
            project = project_form.save(commit=False)
            project_id = project.id
            # Only here the owner is written to the project model
            if not project_id:
                project.owner = request.user

            # provide the form data to any signal handlers before project_save
            Signal.send(signals.pre_proj_save, sender=Project, instance=project, form=project_form)
            project.save()
            project_form.save_m2m()

            # TODO: Not sure if here is the best place to put it
            Signal.send(signals.post_proj_save_m2m, sender=Project, instance=project, form=project_form)

            # ActionLog & Notification
            context = {"project": project}
            if not project_id:
                nt = "project_added"
                action_logging(request.user, [project], nt, context=context)
            else:
                nt = "project_changed"
                action_logging(request.user, [project], nt, context=context)
                if settings.ENABLE_NOTICES:
                    txnotification.send_observation_notices_for(project, signal=nt, extra_context=context)

            return HttpResponseRedirect(reverse("project_detail", args=[project.slug]))
    else:
        # Make the current user the maintainer when adding a project
        if project:
            initial_data = {}
        else:
            initial_data = {"maintainers": [request.user.pk]}

        project_form = ProjectForm(instance=project, prefix="project", initial=initial_data)

    return render_to_response(
        template_name, {"project_form": project_form, "project": project}, context_instance=RequestContext(request)
    )
Пример #4
0
    def setUp(self):
        manager = ExtensionManager('')
        self.test_extension = \
            TestExtensionWithRegistration(extension_manager=manager)

        self.signal = Signal()
        self.spy_on(self._on_signal_fired)
Пример #5
0
    def test_mock_receiver(self):
        signal = Signal()
        with mock_signal_receiver(signal) as receiver:
            signal.send(sender=None)
            self.assertEqual(receiver.call_count, 1)

        sentinel = {}

        def side_effect(*args, **kwargs):
            return sentinel

        with mock_signal_receiver(signal, wraps=side_effect) as receiver:
            responses = signal.send(sender=None)
            self.assertEqual(receiver.call_count, 1)

            # Signals respond with a list of tuple pairs [(receiver, response), ...]
            self.assertIs(responses[0][1], sentinel)
Пример #6
0
def async_send(self, sender, **named):
    # Bail early if no one is listening.
    if not self.receivers:
        return []
    # Django depends on class_prepared being synchronous.
    if self is models.signals.class_prepared:
        return Signal.sync_send(self, sender, **named)
    _signal_queue.put_nowait((self, sender, named))
    return []
Пример #7
0
def listener():
    while 1:
        # Make sure this thread can't die.
        try:
            try:
                self, sender, kw = _signal_queue.get()
            except ValueError:
                log.error('Error unpacking queue item.', exc_info=True)
            if self is _sentinel:
                break
            try:
                Signal.sync_send(self, sender, **kw)
            except Exception:
                log.error('Error calling signal.', exc_info=True)
        except Exception:
            # Weird things happen during interpreter shutdown.
            if log:
                log.critical('Uncaught error.', exc_info=True)
Пример #8
0
    def setUp(self):
        manager = ExtensionManager('')
        self.test_extension = \
            TestExtensionWithRegistration(extension_manager=manager)
        self.patterns = patterns('',
            (r'^url_hook_test/', include('djblets.extensions.test.urls')))

        self.signal = Signal()
        self.spy_on(self._on_signal_fired)
Пример #9
0
class Channel(object):
    def __init__(self, name, providing_args):
        self.name = name
        self.signal = Signal(providing_args=providing_args)

    def __str__(self):
        return str(self.name)

    def __unicode__(self):
        return unicode(self.name)

    def __repr__(self):
        return '<Channel: {0}>'.format(self.name)

    def publish(self, **kwargs):
        "Publishes to the channel which notifies all connected handlers."
        log.debug('Publish to {0}'.format(self))
        self.signal.send(sender=self.name, **kwargs)

    def subscribe(self, receiver):
        "Subscribes an external handler to this channel."
        log.debug('{0}.{1} subscribe to {2}'.format(receiver.__module__, receiver.__name__, self))
        self.signal.connect(receiver)
    def test_custom_signal(self):

        class PollPublisher(BasePublisher):
            pass

        class PollModelObserver(ModelObserver):
            publisher = PollPublisher()

            class Meta:
                model = Poll

            def my_signal_receiver(self, sender, **kwargs):
                self.do_something(sender, my_arg=kwargs['my_arg'])

            def do_something(self, sender, **kwargs):
                pass

        my_signal = Signal(providing_args=['my_arg'])
        custom_signals = {
            'my_signal': my_signal
        }

        self.observer = PollModelObserver(custom_signals=custom_signals)
        self.publisher = self.observer.publisher
        self.observer.do_something = method_logger(self.observer.do_something)

        self.assertFalse(self.observer.do_something.was_called)
        my_signal.send_robust(sender=Poll, my_arg='Test argument')
        self.assertTrue(self.observer.do_something.was_called)

        self.assertEqual(self.observer.do_something.context['args'], (Poll, ))
        self.assertEqual(
            self.observer.do_something.context['kwargs'], {'my_arg': 'Test argument'}
        )
        del self.observer
        del self.publisher
Пример #11
0
 def test_signal(self):
     action = Signal(providing_args=[
         'verb', 'target', 'description'
     ])
     def action_handler(verb, target, **kwargs):
         kwargs.pop('signal')
         sender = kwargs.pop('sender')
         print(sender, verb, target, kwargs)
     action.connect(action_handler, dispatch_uid='qevent.test')
     def action_event(verb, target, **kwargs):
         kwargs.pop('signal')
         print(verb, kwargs)
     action.connect(action_event, dispatch_uid='qevent.test2')
     action.send('Alice', verb='say', target='Bob', description='Hello')
Пример #12
0
from django.db.models.signals import post_delete
from django.dispatch import Signal, receiver
from django_tenants.utils import get_tenant_model, schema_exists

post_schema_sync = Signal(providing_args=['tenant'])
post_schema_sync.__doc__ = """
Sent after a tenant has been saved, its schema created and synced
"""

schema_needs_to_be_sync = Signal(providing_args=['tenant'])
schema_needs_to_be_sync.__doc__ = """
Schema needs to be synced
"""


@receiver(post_delete)
def tenant_delete_callback(sender, instance, **kwargs):
    if not isinstance(instance, get_tenant_model()):
        return

    if instance.auto_drop_schema and schema_exists(instance.schema_name):
        instance._drop_schema(True)
Пример #13
0
from django.dispatch import Signal

new_payment_query = Signal(providing_args=['order', 'payment'])
new_payment_query.__doc__ = """
Sent to ask for filling Payment object with additional data:
    payment.amount:			total amount of an order
    payment.currency:		amount currency

This data cannot be filled by ``getpaid`` because it is Order structure
agnostic. After filling values just do return.
"""

user_data_query = Signal(providing_args=['order', 'user_data'])
new_payment_query.__doc__ = """
Sent to ask for filling user additional data:
    user_data['email']:		user email
    user_data['lang']:      lang code in ISO 2-char format

This data cannot be filled by ``getpaid`` because it is Order structure
agnostic. After filling values just do return.
"""

new_payment = Signal(providing_args=['order', 'payment'])
new_payment.__doc__ = """Sent after creating new payment."""


payment_status_changed = Signal(providing_args=['old_status', 'new_status'])
payment_status_changed.__doc__ = """Sent when Payment status changes."""


redirecting_to_payment_gateway_signal = Signal(providing_args=['request', 'order', 'payment', 'backend'])
Пример #14
0
    to the right language.
    HT: http://mirobetm.blogspot.com/2012/02/django-language-set-in-database-field.html
    """
    user = kwargs['user']
    couch_user = CouchUser.from_django_user(user)
    if couch_user and couch_user.language:
        kwargs['request'].session['django_language'] = couch_user.language

# Signal that syncs django_user => couch_user
def django_user_post_save_signal(sender, instance, created, **kwargs):
    return CouchUser.django_user_post_save_signal(sender, instance, created)

post_save.connect(django_user_post_save_signal, User)

commcare_user_post_save = Signal(providing_args=["couch_user"])
couch_user_post_save = Signal(providing_args=["couch_user"])


def update_user_in_es(sender, couch_user, **kwargs):
    """
    Automatically sync the user to elastic directly on save or delete
    """
    send_to_elasticsearch("users", couch_user.to_json(),
                          delete=couch_user.to_be_deleted())

couch_user_post_save.connect(update_user_in_es)


"""
This section automatically creates Couch users whenever a registration xform is received
Пример #15
0
 def __init__(self):
     Signal.__init__(self, providing_args=["dispatcher","data"])
Пример #16
0
 def __init__(self):
     Signal.__init__(self, providing_args=['event'])
Пример #17
0
"""
Internal signals
"""
from django.dispatch import Signal

# providing_args = ["instance"]
pre_anonymise = Signal()
post_anonymise = Signal()
Пример #18
0
from django.dispatch import Signal

class_prepared = Signal(providing_args=["class"])

pre_init = Signal(providing_args=["instance", "args", "kwargs"],
                  use_caching=True)
post_init = Signal(providing_args=["instance"], use_caching=True)

pre_save = Signal(providing_args=["instance", "raw", "using", "update_fields"],
                  use_caching=True)
post_save = Signal(
    providing_args=["instance", "raw", "created", "using", "update_fields"],
    use_caching=True)

pre_delete = Signal(providing_args=["instance", "using"], use_caching=True)
post_delete = Signal(providing_args=["instance", "using"], use_caching=True)

pre_syncdb = Signal(
    providing_args=["app", "create_models", "verbosity", "interactive", "db"])
post_syncdb = Signal(providing_args=[
    "class", "app", "created_models", "verbosity", "interactive", "db"
])

m2m_changed = Signal(providing_args=[
    "action", "instance", "reverse", "model", "pk_set", "using"
],
                     use_caching=True)
Пример #19
0
from django.conf import settings
from django.contrib.sites.shortcuts import get_current_site
from django.core import signing
from django.dispatch import Signal
from django.template.loader import render_to_string

from .views import RegistrationView as BaseRegistrationView

REGISTRATION_SALT = getattr(settings, 'REGISTRATION_SALT', 'registration')
user_registered = Signal(providing_args=["user", "request"])

class RegistrationView(BaseRegistrationView):
    email_body_template = 'registration/activation_email.txt'
    email_subject_template = 'registration/activation_email_subject.txt'

    def register(self, form):
        new_user = self.create_inactive_user(form)
        user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=self.request)
        return new_user

    def get_success_url(self, user):
        return ('registration_complete', (), {})

    def create_inactive_user(self, form):
        new_user = form.save(commit=False)
        new_user.is_active = False
        new_user.save()

        self.send_activation_email(new_user)
Пример #20
0
from django.db import models
from django.contrib.auth.models import AbstractUser

from django.dispatch import Signal
from .utilities import send_activation_notification

# Create your models here.


class AdvUser(AbstractUser):
    is_activated = models.BooleanField(default=True,
                                       db_index=True,
                                       verbose_name='Прошел активацию?')
    send_messages = models.BooleanField(
        default=True, verbose_name='Слать оповещения о новых комментариях?')

    class Meta(AbstractUser.Meta):
        pass


user_registrated = Signal(providing_args=['instance'])


def user_registrated_dispatcher(sender, **kwargs):
    send_activation_notification(kwargs['instance'])


user_registrated.connect(user_registrated_dispatcher)
Пример #21
0
from django.dispatch import receiver, Signal

from . import notifications

post_create = Signal(providing_args=['instance'])


@receiver(post_create)
def content_created(sender, instance, **kwargs):
    notifications.ContentCreated.send_all(instance)
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

from django.apps import apps
from django.db import models, connection
from django.db.models.signals import pre_save, post_delete
from django.dispatch import Signal

import logging

logger = logging.getLogger(__name__)

cleanup_pre_delete = Signal(providing_args=["file"])
cleanup_post_delete = Signal(providing_args=["file"])


def _find_models_with_filefield():
    result = []
    for model in apps.get_models():
        for field in model._meta.fields:
            if isinstance(field, models.FileField):
                result.append(model)
                break
    return result


def _delete_file(file_obj):
    def delete_from_storage():
Пример #23
0
    user = models.ForeignKey(User, null=True)
    # username field is useful to store guest name of unauthenticated users
    username = models.CharField(max_length=20)
    date = models.DateTimeField()
    room = models.ForeignKey(Room)
    content = models.CharField(max_length=5000)


########NEW FILE########
__FILENAME__ = signals
from utils.handlers import MessageHandlerFactory
from django.dispatch import Signal

chat_message_received = Signal(providing_args=[
    "room_id",
    "username",
    "message",
    "date",
])

handler = MessageHandlerFactory()

chat_message_received.connect(handler.handle_received_message)

########NEW FILE########
__FILENAME__ = tests
import json
import urlparse

from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import Client
Пример #24
0
import json
import re
import time
from datetime import datetime, timedelta

from django.conf import settings, ImproperlyConfigured
from django.dispatch import Signal
from django.utils import timezone

import pytz
import requests

from sms.models import SMS

sms_reply_received = Signal(providing_args=['instance', 'text', 'timestamp'])


class SMSApi(object):
    '''
    Base class for integrating with 3rd-party SMS service.
    '''
    def __init__(self, endpoint_url):
        self.endpoint_url = endpoint_url

    @classmethod
    def get_message_id(cls, batch_code):
        return '%s-%s' % (cls.MESSAGE_ID_PREFIX, batch_code)

    def send(self, numbers, message):
        '''
        Returns [(apimsgid, address), ...] for each number provided.
from django.dispatch import Signal

friendship_request_created = Signal()
friendship_request_rejected = Signal()
friendship_request_accepted = Signal(providing_args=['from_user', 'to_user'])
friendship_removed = Signal(providing_args=['from_user', 'to_user'])
Пример #26
0
import importlib
from django.dispatch import Signal
from hunger.utils import setting


invite_sent = Signal(providing_args=['invitation'])


def invitation_code_sent(sender, invitation, **kwargs):
    """Send invitation code to user.

    Invitation could be InvitationCode or Invitation.
    """
    if sender.__name__ == 'Invitation':
        email = invitation.email
        code = invitation.code.code
    elif sender.__name__ == 'InvitationCode':
        email = kwargs.pop('email', None)
        code = invitation.code

    bits = setting('HUNGER_EMAIL_INVITE_FUNCTION').rsplit('.', 1)
    module_name, func_name = bits
    module = importlib.import_module(module_name)
    func = getattr(module, func_name)
    func(email, code, **kwargs)


invite_sent.connect(invitation_code_sent)
Пример #27
0
from django.core.mail import EmailMessage
from django.dispatch import Signal, receiver
from django.template.loader import render_to_string
from django.urls import reverse

from oioioi.questions.models import MessageNotifierConfig

new_question_signal = Signal(providing_args=['request', 'instance'])


@receiver(new_question_signal)
def notify_about_new_question(sender, request, instance, **kwargs):
    conf = MessageNotifierConfig.objects.filter(contest=instance.contest)
    users_to_notify = [x.user for x in conf]
    for u in users_to_notify:
        send_email_about_new_question(u, request, instance)


def send_email_about_new_question(recipient, request, msg_obj):
    context = {
        'recipient':
        recipient,
        'msg':
        msg_obj,
        'msg_link':
        request.build_absolute_uri(
            reverse(
                'message',
                kwargs={
                    'contest_id': request.contest.id,
                    'message_id': msg_obj.id
Пример #28
0
###   signals.  Also see the DMP documentation on these
###   specific signals.

#  Triggered just before DMP calls a view's process_request() method.
#  If the method returns an HttpResponse object, processing stops and the object is returned to the browser.
#
#    request     :: The request object, which has several attributes that might be of interest:
#                       request.dmp.app      :: The app name, based on the current url.
#                       request.dmp.page     :: The page name (the views/.py file or templates/.html file), based on the current url.
#                       request.dmp.urlparams           :: Any extra url parameters, based on the current url.
#                       request.dmp.module   :: The module where the view function is located.
#                       request.dmp.function :: The specific view function within the module to call.
#    view_args   :: The list of positional arguments to be sent to the view function.
#    view_kwargs :: The dictionary of keyword arguments to be sent to the view function.
#
dmp_signal_pre_process_request = Signal(
    providing_args=['request', 'view_args', 'view_kwargs'])

#  Triggered just after a view's process_request() method returns.
#  If the method returns an HttpResponse object, the normal response is replaced with that object.
#
#    request      :: The request object
#    response     :: The return from the process_request method, normally an HttpResponse object.
#    view_args    :: The list of positional arguments that was to the view.
#    view_kwargs  :: The dictionary of keyword arguments that was sent to the view function.
#
dmp_signal_post_process_request = Signal(
    providing_args=['request', 'response', 'view_args', 'view_kwargs'])

#  Triggered just before DMP renders a Mako template
#  If the method returns a different Template object than the one passed into it, the returned on is used.
#  In other words, this signal lets you override any template just before DMP renders it.
Пример #29
0
import logging

from .models import CharacterOwnership, UserProfile, get_guest_state, State, OwnershipRecord
from django.contrib.auth.models import User
from django.db.models import Q
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed
from django.dispatch import receiver, Signal
from esi.models import Token

from allianceauth.eveonline.models import EveCharacter

logger = logging.getLogger(__name__)

state_changed = Signal(providing_args=['user', 'state'])


def trigger_state_check(state):
    # evaluate all current members to ensure they still have access
    for profile in state.userprofile_set.all():
        profile.assign_state()

    # we may now be available to others with lower states
    check_states = State.objects.filter(priority__lt=state.priority)
    for profile in UserProfile.objects.filter(state__in=check_states):
        if state.available_to_user(profile.user):
            profile.state = state
            profile.save(update_fields=['state'])
            state_changed.send(sender=state.__class__,
                               user=profile.user,
                               state=state)
Пример #30
0
from django.dispatch import Signal

vendor_open = Signal(providing_args=["instance", "created"])
vendor_closed = Signal(providing_args=[
    "instance",
])
Пример #31
0
 def __init__(self, providing_args=None):
     Signal.__init__(self, providing_args)
     self.bind_times = 0
Пример #32
0
 def __init__(self):
     Signal.__init__(self, providing_args=['uri','request', 'content'])
Пример #33
0
from django.dispatch import Signal

post_rating = Signal(providing_args=['instance', 'value', 'is_negative'])
Пример #34
0
 def __init__(self):
     Signal.__init__(self, providing_args=["wsname","pargs","data", "query"])
Пример #35
0
from django.dispatch import Signal

# providing_args=['instance', 'username']
email_sent = Signal()
Пример #36
0
from django.conf import settings
from django.dispatch import Signal

message_deleted = Signal(providing_args=["message", "user"])
message_sent = Signal(providing_args=["message", "user"])
message_repled = Signal(providing_args=["message", "user"])
mesage_recovered = Signal(providing_args=["message", "user"])
message_marked_as_unread = Signal(providing_args=["message", "user"])
message_purge = Signal(providing_args=["message", "user"])

try:
    #If it's during installation, we should configure the settings otherwise it fails
    settings.configure()
except RuntimeError:
    # Already configured (installation is complete)
    pass

if "notification" in settings.INSTALLED_APPS and getattr(settings, 'PRIVATE_MESSAGES_NOTIFY', True):
    from notification import models as notification
    from private_messages.forms import ComposeForm
    from private_messages.views import delete, undelete, unread, purge

    def sent_notification(sender, **kwargs):
        msg = kwargs['message']
        notification.send([msg.sender], "messages_sent", {'message': msg})
        notification.send([msg.recipient], "messages_received", {'message': msg})

    def replied_notification(sender, **kwargs):
        msg = kwargs['message']
        notification.send([msg.sender], "messages_replied", {'message': msg})
        notification.send([msg.recipient], "messages_reply_received", {'message': msg})
Пример #37
0
# oppia/reports/signals.py

from django.dispatch import Signal

from oppia.reports.models import DashboardAccessLog

dashboard_accessed = Signal(providing_args=["request", "data"])


def dashboard_accessed_callback(sender, **kwargs):
    request = kwargs.get('request')
    data = kwargs.get('data')
    
    dal = DashboardAccessLog()
    dal.user = request.user
    dal.url = request.build_absolute_uri()
    dal.data = data
    dal.ip = request.META.get('REMOTE_ADDR','0.0.0.0')
    dal.agent = request.META.get('HTTP_USER_AGENT','unknown')
    dal.save()
    
    return




dashboard_accessed.connect(dashboard_accessed_callback)
Пример #38
0
import logging
logger = logging.getLogger('djpg')

from django.dispatch import Signal
from .codes import codes

notification_received = Signal(providing_args=['notification'])
transaction_received = Signal(providing_args=['transaction'])

transaction_waiting = Signal()
transaction_analysis = Signal()
transaction_paid = Signal()
transaction_available = Signal()
transaction_dispute = Signal()
transaction_returned = Signal()
transaction_canceled = Signal()
transaction_unknown = Signal()


def dispatch_transaction(sender, **kwargs):
    transaction = kwargs.pop('transaction')
    status = int(transaction['status'])

    signals = {
        codes.waiting: transaction_waiting,
        codes.analysis: transaction_analysis,
        codes.paid: transaction_paid,
        codes.available: transaction_available,
        codes.dispute: transaction_dispute,
        codes.returned: transaction_returned,
        codes.canceled: transaction_canceled
Пример #39
0
from django.dispatch import Signal

limit_update_succeeded = Signal(providing_args=['order_item'])
limit_update_failed = Signal(providing_args=['order_item', 'error_message'])
resource_creation_succeeded = Signal(providing_args=['instance'])
resource_update_succeeded = Signal(providing_args=['instance'])
resource_deletion_succeeded = Signal(providing_args=['instance'])
Пример #40
0
    """
    #todo: maybe better to redo individual badges
    #so that get_stored_data() is called implicitly
    #from the __init__ function?
    for key in BADGES.keys():
        get_badge(key).get_stored_data()
    #remove any badges from the database
    #that are no longer in the BADGES dictionary
    from askbot.models.repute import BadgeData
    BadgeData.objects.exclude(
        slug__in = map(slugify, BADGES.keys())
    ).delete()

award_badges_signal = Signal(
                        providing_args=[
                            'actor', 'event', 'context_object', 'timestamp'
                        ]
                    )
#actor - user who triggers the event
#event - string name of the event, e.g 'downvote'
#context_object - database object related to the event, e.g. question

@auto_now_timestamp
def award_badges(event=None, actor=None,
                context_object=None, timestamp=None, **kwargs):
    """function that is called when signal `award_badges_signal` is sent
    """
    try:
        consider_badges = EVENTS_TO_BADGES[event]
    except KeyError:
        raise NotImplementedError('event "%s" is not implemented' % event)
Пример #41
0
from django.core.cache import cache
from django.core import serializers
from django.dispatch import Signal

from tcms.apps.testplans.models import TestPlan, TestCasePlan
from tcms.apps.testcases.models import TestCase, TestCaseTag, TestCaseBugSystem as BugSystem
from tcms.apps.testruns.models import TestRun, TestCaseRun, TestRunTag, TestCaseRunStatus
from tcms.apps.management.models import TestTag, TestTag
from tcms.core.utils import get_string_combinations
from tcms.core.helpers.comments import add_comment

from tcms.apps.testcases.models import TestCaseCategory
from tcms.apps.management.models import Component, TestBuild, Version
from tcms.apps.testruns import signals as run_watchers

post_update = Signal(providing_args=["instances", "kwargs"])
post_update.connect(run_watchers.post_update_handler)

def check_permission(request, ctype):
    perm = '%s.change_%s' % tuple(ctype.split('.'))
    if request.user.has_perm(perm):
        return True
    return False

def strip_parameters(request, skip_parameters):
    parameters = {}
    for dict_ in request.REQUEST.dicts:
        for k, v in dict_.items():
            if k not in skip_parameters and v:
                parameters[str(k)] = v
Пример #42
0
#!/usr/bin/env python
# *_* encoding=utf-8 *_*
from django.dispatch import Signal
from django.contrib.sites.models import Site
from threading import Thread

from blog.akismet import Akismet
from blog.akismet import AkismetError

from blog.models import Blog,OptionSet
from utils.utils import sendmail

comment_was_submit=Signal(providing_args=['comment'])

comment_was_posted = Signal(providing_args=["comment", "request"])

def validate_comment(sender, comment, request, *args, **kwargs):
    akismet_enable=OptionSet.get('akismet_enable', 0)
    domain="http://%s"%(Site.objects.get_current().domain)
    if int(akismet_enable) == 0:
        return
    
    akismet_key=OptionSet.get('akismet_key', '')
    ak = Akismet(
            #key = 'cda0f27f8e2f',
            key=akismet_key,
            blog_url=domain
        )
    try:
        if ak.verify_key():
            data = {
Пример #43
0
 def __init__(self,providing_args = None):
     return Signal.__init__(self,providing_args)
Пример #44
0
    else:
        stream.upqueue(content_object=instance,
                       start=instance.created,
                       end=instance.start_datetime())


models.signals.post_save.connect(update_event_create_stream, sender=Event)


def remove_event_create_stream(sender, instance, **kwargs):
    Stream.objects.get(slug="event-create").dequeue(content_object=instance)


models.signals.post_delete.connect(remove_event_create_stream, sender=Event)

rsvp_recieved = Signal(providing_args=["guest"])


def notification_on_rsvp(sender, guest, **kwargs):
    if guest.rsvp_status and guest.notify_on_rsvp:
        Stream.objects.get(slug="event-rsvp-notification").enqueue(
            content_object=guest, start=guest.updated)


rsvp_recieved.connect(notification_on_rsvp)


def notification_on_group_association_request(sender, instance, created,
                                              **kwargs):
    if created:
        Stream.objects.get(slug="event-group-association-request").enqueue(
Пример #45
0
"""
Signals for articles app
"""
from django.dispatch import Signal

tag_click = Signal(providing_args=["tag", "profile"])
Пример #46
0
from django.conf import settings
from django.contrib.auth import login, get_backends
from django.dispatch import Signal


# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])

# A user has activated his or her account.
user_activated = Signal(providing_args=["user", "request"])


def login_user(sender, user, request, **kwargs):
    """ Automatically authenticate the user when activated  """
    backend = get_backends()[0]  # Hack to bypass `authenticate()`.
    user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
    login(request, user)
    request.session['REGISTRATION_AUTO_LOGIN'] = True
    request.session.modified = True

if getattr(settings, 'REGISTRATION_AUTO_LOGIN', False):
    user_activated.connect(login_user)

# by me for student aand teacher profile
# user_registered.connect(create_profile)
Пример #47
0
        'page': page,
        'results_var': results_var,
        'counter': counter,
        'query': query,
        'title': _(u'Media Library'),
        'settings_var': get_settings_var(),
        'breadcrumbs': get_breadcrumbs(query, path),
        'breadcrumbs_title': ""
    },
                              context_instance=Context(request))


browse = staff_member_required(never_cache(browse))

# mkdir signals
filebrowser_pre_createdir = Signal(providing_args=["path", "dirname"])
filebrowser_post_createdir = Signal(providing_args=["path", "dirname"])


def mkdir(request):
    """
    Make Directory.
    """

    from filebrowser_safe.forms import MakeDirForm

    # QUERY / PATH CHECK
    query = request.GET
    path = get_path(query.get('dir', ''))
    if path is None:
        msg = _('The requested Folder does not exist.')
Пример #48
0
from django.dispatch import Signal
import traceback
import sys
from django.core.mail import mail_admins

# our signal
on_error = Signal(providing_args=["exception"])


def handle_error(func, default=None):
    """
    A function decorator that will eat errors
    """

    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception, exception:
            on_error.send_robust(sender=None, exception=exception)
            if callable(default):
                return default()
            return default

    return wrapper


def send_failure_email(exception, **kwargs):
    subject = "Error (%s)" % exception
    subject = subject.replace("\n", "")
    trace = "\n".join(traceback.format_exception(*sys.exc_info()))
Пример #49
0
from django.dispatch import Signal

user_log_in_denied = Signal(providing_args=['user', 'request'])

user_impersonated = Signal(providing_args=['user', 'request'])

staff_logged_in = Signal(providing_args=['user', 'request'])
staff_logged_out = Signal(providing_args=['user', 'request'])

staff_log_in_failed = Signal(providing_args=['user', 'username', 'request'])
staff_log_in_non_existent = Signal(providing_args=['username', 'request'])
staff_log_in_inactive = Signal(providing_args=['user', 'request'])

staff_altered_user_data = Signal(providing_args=['user', 'request'])
staff_altered_user_password = Signal(providing_args=['user', 'request'])

staff_forgot_password = Signal(providing_args=['user', 'request'])
staff_confirmed_password = Signal(providing_args=['user', 'request'])

staff_delete_client = Signal(providing_args=['user', 'username', 'request'])
staff_delete_user = Signal(providing_args=['user', 'username', 'request'])
Пример #50
0
from cms.utils.conf import get_cms_setting
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import signals
from django.dispatch import Signal

from cms.cache.permissions import (
    clear_user_permission_cache, clear_permission_cache)
from cms.models import (Page, Title, CMSPlugin, PagePermission,
    GlobalPagePermission, PageUser, PageUserGroup)

from menus.menu_pool import menu_pool
from cms.models.permissionmodels import PageUserGroup

# fired after page location is changed - is moved from one node to other
page_moved = Signal(providing_args=["instance"])

# fired when some of nodes (Title) with applications gets saved
application_post_changed = Signal(providing_args=["instance"])

# fired after page gets published - copied to public model - there may be more
# than one instances published before this signal gets called
post_publish = Signal(providing_args=["instance"])

def update_plugin_positions(**kwargs):
    plugin = kwargs['instance']
    plugins = CMSPlugin.objects.filter(language=plugin.language, placeholder=plugin.placeholder).order_by("position")
    last = 0
    for p in plugins:
        if p.position != last:
            p.position = last
Пример #51
0
# use different name to avoid module clash
from geonode.utils import json_serializer_producer
from geonode.decorators import on_ogc_backend
from geonode.geoserver.helpers import (gs_catalog, ogc_server_settings,
                                       is_monochromatic_image)
from geonode.geoserver.tasks import geoserver_create_thumbnail
from geonode.layers.models import Layer
from geonode.services.enumerations import CASCADED

from . import BACKEND_PACKAGE
from .tasks import geoserver_cascading_delete, geoserver_post_save_layers

logger = logging.getLogger("geonode.geoserver.signals")

geoserver_post_save_complete = Signal(providing_args=['instance'])


def geoserver_delete(typename):
    # cascading_delete should only be called if
    # ogc_server_settings.BACKEND_WRITE_ENABLED == True
    if getattr(ogc_server_settings, "BACKEND_WRITE_ENABLED", True):
        geoserver_cascading_delete.apply_async((typename, ))


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_pre_delete(instance, sender, **kwargs):
    """Removes the layer from GeoServer
    """
    # cascading_delete should only be called if
    # ogc_server_settings.BACKEND_WRITE_ENABLED == True
Пример #52
0
import datetime

from django.db import models
from django.conf import settings
from django.db.models import F

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from django.contrib.contenttypes import generic

from django.dispatch import Signal


# SIGNALS #

delete_hit_count = Signal(providing_args=['save_hitcount',])

def delete_hit_count_callback(sender, instance, 
        save_hitcount=False, **kwargs):
    '''
    Custom callback for the Hit.delete() method.

    Hit.delete(): removes the hit from the associated HitCount object.
    Hit.delete(save_hitcount=True): preserves the hit for the associated
        HitCount object.
    '''
    if not save_hitcount:
        instance.hitcount.hits = F('hits') - 1
        instance.hitcount.save()

delete_hit_count.connect(delete_hit_count_callback)
Пример #53
0
from django.dispatch import Signal


post_user_create = Signal(providing_args=('user',))
post_user_change_password = Signal(providing_args=('user',))