-
Notifications
You must be signed in to change notification settings - Fork 118
Expand file tree
/
Copy pathfire.py
More file actions
executable file
·99 lines (81 loc) · 3.27 KB
/
fire.py
File metadata and controls
executable file
·99 lines (81 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import datetime
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_th.settings")
from django_th.services import default_provider
from django_th.models import TriggerService
from django.utils.log import getLogger
# create logger
logger = getLogger('django_th.trigger_happy')
# todo
# 1) abstract the ".published" properties or add it to each service
def go():
"""
run the main process
"""
trigger = TriggerService.objects.all()
if trigger:
for service in trigger:
logger.info(
"from %s to %s ", service.provider.name, service.consummer.name)
# provider - the service that offer datas
service_name = service.provider.name
service_provider = default_provider.get_service(
'Service' + str(service_name).capitalize())
# consummer - the service which uses the datas
service_name = service.consummer.name
service_consummer = default_provider.get_service(
'Service' + str(service_name).capitalize())
# 1) get the datas from the provider service
datas = getattr(service_provider, 'process_data')(service.id)
consummer = getattr(service_consummer, 'save_data')
# 2) for each one
for data in datas:
title = data.title
content = data.content[0].value
logger.info("from the service %s", service.provider)
# 3) check if the previous trigger is older than the
# date of the data we retreived
# if yes , process the consummer
if service.date_triggered is None or to_datetime(data.published) >= service.date_triggered:
logger.debug(
"date %s title %s", data.published, data.title)
logger.info("to the service %s", service.consummer)
consummer(
service.consummer.token, title, content, service.id)
# otherwise do nothing
else:
logger.debug(
"DATA TOO OLD SKIPED : [%s] %s", data.published, data.title)
# update the date of the trigger
update_trigger(service)
else:
print "No trigger set by any user"
def update_trigger(service):
"""
update the date when occurs the trigger
"""
trigger = TriggerService.objects.get(id=service.id)
if trigger:
trigger.date_triggered = datetime.datetime.now()
trigger.save()
def to_datetime(my_date_string):
"""
convert string to date eg
"Sat, 04 May 2013 09:55:17 +0000" to "2013-05-04 09:55:17"
"""
# drop the string tz from the string to avoid
# an issue with %z in format eg :
# strptime(my_date_string[:-6], "%a, %d %b %Y %H:%M:%S %z")
# also the Setting HAS TO BE =>>> USE_TZ = False
# or error occurs :
# can't compare offset-naive and offset-aware datetimes
return datetime.datetime.strptime(my_date_string[:-6], "%a, %d %b %Y %H:%M:%S")
def main():
default_provider.load_services()
# let's go
go()
if __name__ == "__main__":
main()