事件来源和处理
django-spark的Python项目详细描述
一个事件的来源和处理。图片:https://travis-ci.org/matthiask/django-spark.png?branch=master
:target:https://travis ci.org/matthiask/django spark
version release
这不应该是真正的文档;它更多的是提醒我自己。
event
源可以创建一个“spark.api.event”实例流,其中每个
事件都必须有一个“group”和一个“key”。其他数据也可以添加到“event”中。键是全局唯一的——具有
相同键的事件仍然只处理一次。组用于确定处理某个事件的处理程序。
如果事件的组与事件的
处理程序的regex匹配,则事件处理程序是每个
``spark.api.event``实例调用一次的函数。
一些使用示例代码
=为挑战创建事件(细节不重要):
代码块::python
from datetime import date
from spark import api
def events\u from\u challenge(challenge):
如果不是challenge.is\u active:
return
yield{
“group”:“challenge\u created”,
“key”:“challenge\u created%s%challenge.pk,
“context”:{“challenge”:challenge},
“context”:{“challenge”:challenge},
}
if(challenge.end_date-date.today()).days<;=2:
产生{
“group”:“challenge_end s_2d”,
“key”:“challenge_ends_2d_%s'%challenge.pk,
“context”:{“challenge”:challenge},
}
如果challenge.end_date<;date.today():
产生{
“group”:“challenge_ended”,
“key”:“challenge_ended_%s'%challenge.pk,
“context”:{“challenge”:challenge},
}
代码块::python
“challenge”:挑战,
},
to=[challenge.user.email],
)发送(fail_silent=true)
注册处理程序:
……代码块::python
def ready(self):
challenge=self.get model('challenge')
source=events_from_challenge,
)
现在,事件是在进程中直接生成和处理的。
或者,您可能希望处理事件结束
请求-响应周期。这可以通过仅注册
模型事件源(例如在管理命令中),然后通过所有事件源发送所有
模型实例,并直接处理那些
事件来实现,例如:
。代码块::python
api.model_sources.items():
中的源,例如model.objects.all():
源中的源:
api.process_events(api.only_new_events(source(instance))
-`documentation<;https://django spark.readthedocs.io>;`<
-`github<;https://github.com/matthiask/django spark/>;`
:target:https://travis ci.org/matthiask/django spark
version release
这不应该是真正的文档;它更多的是提醒我自己。
event
源可以创建一个“spark.api.event”实例流,其中每个
事件都必须有一个“group”和一个“key”。其他数据也可以添加到“event”中。键是全局唯一的——具有
相同键的事件仍然只处理一次。组用于确定处理某个事件的处理程序。
如果事件的组与事件的
处理程序的regex匹配,则事件处理程序是每个
``spark.api.event``实例调用一次的函数。
一些使用示例代码
=为挑战创建事件(细节不重要):
代码块::python
from datetime import date
from spark import api
def events\u from\u challenge(challenge):
如果不是challenge.is\u active:
return
yield{
“group”:“challenge\u created”,
“key”:“challenge\u created%s%challenge.pk,
“context”:{“challenge”:challenge},
“context”:{“challenge”:challenge},
}
if(challenge.end_date-date.today()).days<;=2:
产生{
“group”:“challenge_end s_2d”,
“key”:“challenge_ends_2d_%s'%challenge.pk,
“context”:{“challenge”:challenge},
}
如果challenge.end_date<;date.today():
产生{
“group”:“challenge_ended”,
“key”:“challenge_ended_%s'%challenge.pk,
“context”:{“challenge”:challenge},
}
代码块::python
“challenge”:挑战,
},
to=[challenge.user.email],
)发送(fail_silent=true)
注册处理程序:
……代码块::python
challenge=self.get model('challenge')
source=events_from_challenge,
)
现在,事件是在进程中直接生成和处理的。
或者,您可能希望处理事件结束
请求-响应周期。这可以通过仅注册
模型事件源(例如在管理命令中),然后通过所有事件源发送所有
模型实例,并直接处理那些
事件来实现,例如:
。代码块::python
api.model_sources.items():
中的源,例如model.objects.all():
源中的源:
api.process_events(api.only_new_events(source(instance))
-`documentation<;https://django spark.readthedocs.io>;`<
-`github<;https://github.com/matthiask/django spark/>;`