Welcome to django_event’s documentation!¶
Django Event is notification system framework that allows you to push notifications to the browser.
Installing¶
First you need pip. Use your OS’s package system to install it. On ubuntu you can install it like this:
apt-get install python-pip
And it is highly recommended you to use python virtual environment. See Virtualenv docs.
After that you need to install django-event:
pip install git+https://github.com/ailove-dev/django-event
If you use Django Rest Framework and want to django-event provided REST api’s for events use following command:
pip install git+https://github.com/ailove-dev/django-event[rest_framework_api]
Contents:
django_event¶
django_event.management¶
django_event.publisher¶
django_event.publisher.rest_framework¶
django_event.publisher.rest_framework.serializers¶
Serializers module for django rest_framework.
-
class
django_event.publisher.rest_framework.serializers.
EventSerializer
(instance=None, data=None, files=None, context=None, partial=False, many=None, allow_add_remove=False, **kwargs)[source]¶ Bases:
rest_framework.serializers.ModelSerializer
Specifies which fields should be serialized and overrides date fields to return local time instead of server time.
django_event.publisher.rest_framework.urls¶
Urls for django.
urlpatterns = patterns(
'',
url(
r'^$',
event_list,
name='event_list'
),
url(
r'^(?P<pk>[0-9]+)/$',
event_detail,
name='event_detail'
),
url(
r'^(?P<pk>[0-9]+)/cancel/$',
cancel_event,
name='cancel_event'
),
url(
r'^(?P<pk>[0-9]+)/retry/$',
retry_event,
name='retry_event'
),
)
django_event.publisher.rest_framework.views¶
Synchronous views for django to get/cancel or retry events.
-
class
django_event.publisher.rest_framework.views.
CancelEventView
(**kwargs)[source]¶ Bases:
rest_framework.views.APIView
Cancel executing event.
-
permission_classes
= (<class 'rest_framework.permissions.IsAuthenticated'>,)¶
-
-
class
django_event.publisher.rest_framework.views.
EventDetailView
(**kwargs)[source]¶ Bases:
rest_framework.views.APIView
Retrieve specific user event.
-
permission_classes
= (<class 'rest_framework.permissions.IsAuthenticated'>,)¶
-
queryset
¶
-
serializer_class
¶ alias of
EventSerializer
-
-
class
django_event.publisher.rest_framework.views.
EventTypesView
(**kwargs)[source]¶ Bases:
rest_framework.views.APIView
Event types view.
-
permission_classes
= (<class 'rest_framework.permissions.IsAuthenticated'>,)¶
-
-
class
django_event.publisher.rest_framework.views.
RetryEventView
(**kwargs)[source]¶ Bases:
rest_framework.views.APIView
Retry not completed event.
-
permission_classes
= (<class 'rest_framework.permissions.IsAuthenticated'>,)¶
-
-
django_event.publisher.rest_framework.views.
cancel_event
(*args, **kwargs)¶ Cancel executing event.
-
django_event.publisher.rest_framework.views.
event_detail
(*args, **kwargs)¶ Retrieve specific user event.
-
django_event.publisher.rest_framework.views.
event_list
(*args, **kwargs)¶ List all user events.
-
django_event.publisher.rest_framework.views.
event_types
(*args, **kwargs)¶ Event types view.
-
django_event.publisher.rest_framework.views.
retry_event
(*args, **kwargs)¶ Retry not completed event.
django_event.publisher.decorator¶
Core publisher client module. Basically you should use this decorator instead of manually write events into database. Decorator specifies some overridable methods if you need basic customization.
Usage examples:
Defining event task:
@event(event_type='some_type', routing_strategy='')
def some_task(event_request, event):
argument = event_request.custom_argument
return some_processed_data(event_request.data, event)
And call:
some_task.delay(EventRequest(django_request, custom_argument=123))
You can know more about .delay() or other methods in Celery docs.
-
class
django_event.publisher.decorator.
event
(event_type='', send_mail=False, progress_throttling=0.1, routing_strategy='', task_kwargs=None, on_start=lambda _event: None, on_success=lambda _event: None, on_error=lambda _event: None)[source]¶ Bases:
object
Main client publisher interface. Decorates function and return celery task.
Automatically start and end event after celery started/completed the task. You must pass EventRequest into decorated function.
EventRequest
can accept keyword arguments needed by wrapped function which are not required but django request are required by internal needs. This decorator automatically setEventRequest
andEvent
instances as wrapped function arguments.Wrapped func may raise specific exception
EventError
used to notify subscribers about failure. Basically this decorator will handle only that type of exceptions. Be sure you handle all raised exception in wrapped func otherwise it will pass outside decorator and into database as well.-
__call__
(func)[source]¶ Wraps passed function into Celery
Task
.Parameters: func (callable object) – Function to be wrapped. Returns: Celery task instance. Return type: Celery Task
-
__init__
(event_type='', send_mail=False, progress_throttling=0.1, routing_strategy='', task_kwargs=None, on_start=lambda _event: None, on_success=lambda _event: None, on_error=lambda _event: None)[source]¶ Parameters: - event_type (
str
) – Event type, using in message routing. - send_mail (
bool
) – Send email after event is done. - progress_throttling (
float
) – Describes how often event will send progress messages. SeeEvent
docs for more information about this parameter. - routing_strategy (
str
) – Routing strategy e.g. what listeners will do with messages. Empty strategy means you want to deliver notification to all subscribed clients. SeeEvent
docs for more information about this parameter. - task_kwargs (
dict
) – Celery task arguments. - on_start (
str
) – Event start callback. - on_success (callable object) – Event success callback.
- on_error (callable object) – Event error callback.
- event_type (
-
django_event.publisher.exceptions¶
Exceptions module.
django_event.publisher.publisher¶
django_event.publisher.request¶
Event request module.
Usage examples: You can pass custom arguments into decorated function which are not required.
EventRequest(django_request, custom_argument=123)
But django request is must for event.
EventRequest(django_request)
-
class
django_event.publisher.request.
_DummyRequest
(data, user)[source]¶ Private class that emulates Django Request class.
-
class
django_event.publisher.request.
_DummyUser
(user_id)[source]¶ Private class that emulates Django User class.
-
class
django_event.publisher.request.
EventRequest
(django_request, **kwargs)[source]¶ Bases:
object
Event request class user to pass arguments to decorated events.
-
static
deserialize
(json_request, return_dummy=False)[source]¶ Deserialize JSON request and returns EventRequest instance or dict which contains Dummy classes.
Parameters: - json_request (
str
) – JSON serialized event request. - return_dummy (
bool
) – Return EventRequest or dict with dummies.
Returns: Deserialized instance.
Return type: EventRequest
ordict
- json_request (
-
static
django_event.publisher.views¶
Synchronous views for django to get/cancel or retry events.
-
class
django_event.publisher.views.
CancelEventView
(**kwargs)[source]¶ Bases:
django_event.publisher.views.LoginRequiredMixin
,django_event.publisher.views.EventDetailMixin
,django.views.generic.base.View
Base cancel event view class.
-
class
django_event.publisher.views.
EventDetailMixin
[source]¶ Bases:
django_event.publisher.views.EventListMixin
Event view mixin class with overrided
get_object()
method.
-
class
django_event.publisher.views.
EventDetailView
(**kwargs)[source]¶ Bases:
django_event.publisher.views.LoginRequiredMixin
,django_event.publisher.views.EventDetailMixin
,django.views.generic.detail.DetailView
Base event detail view class.
-
class
django_event.publisher.views.
EventListMixin
[source]¶ Bases:
object
Event view mixin class with overrided
get_queryset()
method.-
get_queryset
()[source]¶ Returns user-owned events.
Returns: QuerySet of user-owned events. Return type: EventQuerySet
-
model
¶ alias of
Event
-
-
class
django_event.publisher.views.
EventListView
(**kwargs)[source]¶ Bases:
django_event.publisher.views.LoginRequiredMixin
,django_event.publisher.views.EventListMixin
,django.views.generic.list.ListView
Base event list view class.
-
class
django_event.publisher.views.
EventTypesView
(**kwargs)[source]¶ Bases:
django_event.publisher.views.LoginRequiredMixin
,django.views.generic.base.View
Event types view.
-
class
django_event.publisher.views.
LoginRequiredMixin
[source]¶ Bases:
object
Event view mixin class with overrided
dispatch()
method to restrict anonymous users.
-
class
django_event.publisher.views.
RetryEventView
(**kwargs)[source]¶ Bases:
django_event.publisher.views.LoginRequiredMixin
,django_event.publisher.views.EventDetailMixin
,django.views.generic.base.View
Base retry event view class.
-
django_event.publisher.views.
cancel_event
(request, *args, **kwargs)¶ Base cancel event view class.
-
django_event.publisher.views.
event_detail
(request, *args, **kwargs)¶ Base event detail view class.
-
django_event.publisher.views.
event_list
(request, *args, **kwargs)¶ Base event list view class.
-
django_event.publisher.views.
event_types
(request, *args, **kwargs)¶ Event types view.
-
django_event.publisher.views.
retry_event
(request, *args, **kwargs)¶ Base retry event view class.
django_event.publisher.urls¶
Urls for django.
urlpatterns = patterns(
'',
url(
r'^$',
event_list,
name='event_list'
),
url(
r'^(?P<pk>[0-9]+)/$',
event_detail,
name='event_detail'
),
url(
r'^(?P<pk>[0-9]+)/cancel/$',
cancel_event,
name='cancel_event'
),
url(
r'^(?P<pk>[0-9]+)/retry/$',
retry_event,
name='retry_event'
),
)
django_event.subscriber¶
django_event.subscriber.connection¶
Core event server module. Provides basic websocket connection and subscribe/unsubscribe message system.
-
class
django_event.subscriber.connection.
_Request
[source]¶ Bases:
object
Private class that emulates Django Request class.
-
class
django_event.subscriber.connection.
EventConnection
(session)[source]¶ Bases:
sockjs.tornado.conn.SockJSConnection
SockJS connection handler.
-
executor
¶
Annotation: = ThreadPoolExecutor(max_workers=cpu_count())
Thread pool for synchronous methods
-
authenticate
(*args, **kwargs)[source]¶ Authenticates user by session key.
Parameters: request (Tornado Request) – Request given on connection open. Returns: Authenticated user. Return type: Django User
-
on_close
(*args, **kwargs)[source]¶ Asynchronous callback. Called internally by base class on connection closed. Unsubscribes all event listeners.
-
on_message
(*args, **kwargs)[source]¶ Asynchronous callback. Called internally by base class on message received. Provides message routing. Subscribes and unsubscribes on messages types.
Parameters: message ( str
) – JSON message received from RabbitMQ.
-
on_open
(*args, **kwargs)[source]¶ Asynchronous callback. Basic authentication by session implemented. Called internally by base class on connection opened.
Parameters: request (Tornado Request) – Request given on connection open.
-
send
(*args, **kwargs)[source]¶ Sends message to websocket.
Parameters: - message (
dict
) – JSON decoded message routed by on_message method. - binary (
bool
) – Flag. True if message need to be send in binary.
- message (
-
subscribe
(*args, **kwargs)[source]¶ Subscribes event listeners on messages.
Parameters: message ( dict
) – JSON decoded message routed by on_message method.
-
django_event.subscriber.listeners¶
Base listener module.
-
class
django_event.subscriber.listeners.
Listener
(user)[source]¶ Bases:
object
Abstract base listener class. Listeners used by subscribers.
-
executor
= <concurrent.futures.thread.ThreadPoolExecutor object>¶
-
classmethod
get_listener
(*args, **kwargs)[source]¶ Fabric method for listener subclasses. Imports listener by type and returns it.
Parameters: event_type ( str
) – Event type.Returns: Listener module that will process certain type of messages. Return type: Listener
subclass
-
io_loop
= <tornado.platform.epoll.EPollIOLoop object>¶
-
-
class
django_event.subscriber.listeners.
SendMessageListener
(user, sender)[source]¶ Bases:
django_event.subscriber.listeners.Listener
Base listener for send message through SockJS connection.
django_event.subscriber.subscriber¶
django_event.utils¶
Utilities event module.
-
django_event.utils.
get_routing
(user, routing_strategy)[source]¶ Get routing key needed by event or listener.
Parameters: - user (User) – User to be routed.
- routing_strategy (
str
) – How it can compute routing key.
Returns: Routing key for RabbitMQ.
Return type: str
django_event.settings¶
Available django-event settings:
from django.conf import settings
event_settings = settings.DJANGO_EVENT
BACKEND = event_settings.get('BACKEND', 'rabbitmq')
BACKEND_OPTIONS = event_settings.get('BACKEND_OPTIONS', {})
TORNADO_OPTIONS = event_settings.get('TORNADO_OPTIONS', {})
LISTENERS = event_settings.get('LISTENERS', {})
STORE_DAYS = event_settings.get('STORE_DAYS', 7)
EVENT_MODEL = event_settings.get('EVENT_MODEL', 'django_event.Event')
AVAILABLE_TYPES = [key for key in LISTENERS.iterkeys()]
django_event.publisher.models¶
Core event model module.
You must handle old events by yourself using cron or celery worker.
-
class
django_event.models.
AbstractBaseEvent
(*args, **kwargs)[source]¶ Bases:
django.db.models.base.Model
An abstract base class implementing a fully featured Event model. Majority of model methods have custom_message parameter in case if you don’t like/need default message protocol. Most of the methods are for private need i.e. all on_* methods. Be sure to not use these methods directly.
-
class
Meta
[source]¶ -
abstract
= False¶
-
verbose_name
= <django.utils.functional.__proxy__ object>¶
-
verbose_name_plural
= <django.utils.functional.__proxy__ object>¶
-
-
AbstractBaseEvent.
cancel
(custom_message=None)[source]¶ Cancel executing event. If custom message passed it will send it instead of default message.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
complete
(result, status=True, custom_message=None, callback=<function <lambda>>, errback=<function <lambda>>)[source]¶ Complete event and save state into database. It will always call passed callback.
Parameters: - result (JSON serializable object.) – Task result.
- status (
bool
) – Describes task result status e.g. task raised exception will set False status. - custom_message (JSON serializable object.) – Custom message.
- callback (callable object) – Callback after event ended with success.
- errback (callable object) – Callback after event ended with error.
-
classmethod
AbstractBaseEvent.
create
(progress_throttling=0.1, routing_strategy=u'', *args, **kwargs)[source]¶ Fabric method for event creature. Use this as main event creature source.
Parameters: - progress_throttling (
float
) – Describes how often event will send progress messages when user increments progress viaincrement_progress()
method.Event
will not send any progress messages with out user actions onincrement_progress()
. If you don’t need progress you may not specify this parameter and not useincrement_progress()
method. - routing_strategy (
str
) – Routing strategy e.g. what listeners will do with messages. Empty strategy means you want to deliver notification to all subscribed clients. - args – Model init args
- kwargs – Model init kwargs
Returns: Created and configured event.
Return type: - progress_throttling (
-
AbstractBaseEvent.
failure
¶ Shortcut for event status.
Returns: True if event failed else False. Return type: bool
-
AbstractBaseEvent.
get_next_by_created_at
(*moreargs, **morekwargs)¶
-
AbstractBaseEvent.
get_previous_by_created_at
(*moreargs, **morekwargs)¶
-
AbstractBaseEvent.
increment_progress
(progress_delta, custom_message=None)[source]¶ Increments event progress with out saving to database. If custom message passed it will send it instead of default message.
Parameters: - progress_delta (
float
) – Progress delta. - custom_message (JSON serializable object.) – Custom message.
- progress_delta (
-
AbstractBaseEvent.
may_be_canceled
¶ Shortcut for event state.
Returns: Check if event may be canceled. Return type: bool
-
AbstractBaseEvent.
may_be_retried
¶ Shortcut for event state.
Returns: Check if event may be retried. Return type: bool
-
AbstractBaseEvent.
on_cancel
(custom_message)[source]¶ Cancel callback. Sends message to subscribed clients.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
on_complete
(custom_message, callback, errback)[source]¶ Complete callback. Dispatch between success and error status.
Parameters: - custom_message (JSON serializable object.) – Custom message.
- callback (callable object) – Callback after event ended with success.
- errback (callable object) – Callback after event ended with error.
-
AbstractBaseEvent.
on_error
(custom_message, errback)[source]¶ Error callback. Sends message to subscribed clients.
Parameters: - custom_message (JSON serializable object.) – Custom message
- errback (callable object) – Errback after event ended with error.
-
AbstractBaseEvent.
on_progress_change
(custom_message)[source]¶ Progress change callback. Sends message to subscribed clients.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
on_retry
(custom_message)[source]¶ Cancel callback. Sends message to subscribed clients.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
on_start
(custom_message)[source]¶ Start callback. Sends message to subscribed clients. If custom message passed it will send it instead of default message.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
on_success
(custom_message, callback)[source]¶ Success callback. Sends message to subscribed clients.
Parameters: - custom_message (JSON serializable object.) – Custom message
- callback (callable object) – Callback after event ended with success.
-
AbstractBaseEvent.
retry
(custom_message=None, request=None, **kwargs)[source]¶ Retry not completed event. If custom message passed it will send it instead of default message.
Parameters: custom_message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
send_email
()[source]¶ Sends email to user after event is done.
TODO: implement email sending.
-
AbstractBaseEvent.
send_message
(message, content_type, broadcast=False, callback=<function <lambda>>)[source]¶ Send custom message to subscribed clients and execute passed callback.
Parameters: - message (
str
) – Message. - content_type (
str
) – Message content type. - broadcast (
bool
) – True if you need broadcast. - callback (callable object) – Callback after message send.
- message (
-
AbstractBaseEvent.
start
(custom_message=None, callback=<function <lambda>>)[source]¶ Start event and save state into database. It will always call passed callback.
Parameters: - custom_message (JSON serializable object.) – Overrides default message.
- callback (callable object) – Callback after event started
-
AbstractBaseEvent.
success
¶ Shortcut for event status.
Returns: True if event succeed else False. Return type: bool
-
AbstractBaseEvent.
try_custom
(message)[source]¶ Custom message helper method. Publish message if present and return True, False otherwise.
Parameters: message (JSON serializable object.) – Custom message.
-
AbstractBaseEvent.
user
¶
-
class
-
class
django_event.models.
EventQuerySet
(model=None, query=None, using=None, hints=None)[source]¶ Bases:
django.db.models.query.QuerySet
Event query set and manager. Defines some useful shortcuts.
-
completed
()[source]¶ Completed events.
Returns: Completed events. Return type: EventQuerySet
-
failed
()[source]¶ Failed events.
Returns: Failed events. Return type: EventQuerySet
-
not_completed
()[source]¶ Not completed events.
Returns: Not completed events. Return type: EventQuerySet
-
not_viewed
()[source]¶ Not viewed events.
Returns: Not viewed events. Return type: EventQuerySet
-
old
()[source]¶ Old events.
Returns: Old events. Return type: EventQuerySet
-
successful
()[source]¶ Successful events.
Returns: Successful events. Return type: EventQuerySet
-
viewed
()[source]¶ Viewed events.
Returns: Viewed events. Return type: EventQuerySet
-
-
django_event.models.
get_event_model
()[source]¶ Helper for getting event swappable model.
Returns: Event
model
-
class
django_event.models.
Event
(*args, **kwargs)[source]¶ Default event model.
-
complete
(result, status=True, custom_message=None, callback=lambda event: None, errback=lambda event: None)¶ Complete event and save state into database. It will always call passed callback.
Parameters: - result (JSON serializable object.) – Task result.
- status (
bool
) – Describes task result status e.g. task raised exception will set False status. - custom_message (JSON serializable object.) – Custom message.
- callback (callable object) – Callback after event ended with success.
- errback (callable object) – Callback after event ended with error.
-
send_message
(message, content_type, broadcast=False, callback=lambda event: None)¶ Send custom message to subscribed clients and execute passed callback.
Parameters: - message (
str
) – Message. - content_type (
str
) – Message content type. - broadcast (
bool
) – True if you need broadcast. - callback (callable object) – Callback after message send.
- message (
-
start
(custom_message=None, callback=lambda event: None)¶ Start event and save state into database. It will always call passed callback.
Parameters: - custom_message (JSON serializable object.) – Overrides default message.
- callback (callable object) – Callback after event started
-