Skip to content

Commit

Permalink
add system exit event
Browse files Browse the repository at this point in the history
  • Loading branch information
qytz committed Sep 29, 2018
1 parent 89dfe1e commit 7aa39b5
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 18 deletions.
4 changes: 0 additions & 4 deletions finchan/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import uvloop

from .env import env
from .event import Event, SysEvents
from .exts import ExtManager
from .options import parse_yaml_conf
from .dispatcher import BackTrackDispatcher, LiveDispatcher
Expand Down Expand Up @@ -115,9 +114,6 @@ def main(verbose=0, config=None):
if not ext_dict:
ext_dict = {}
env.load_exts(ext_dict)

# system initialized, we can send event now.
dispatcher.eq_put(Event(str(SysEvents.SYSTEM_STARTED)))
env.run()


Expand Down
11 changes: 8 additions & 3 deletions finchan/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from datetime import datetime
from collections import defaultdict

from finchan.event import Event
from .event import Event, SysEvents
from finchan.interface.event_source import AbsEventSource


Expand Down Expand Up @@ -228,6 +228,9 @@ def dispatch(self):
logger.warning('#Dispatcher No EventSource registered, system will exit directly.')
return None

# system initialized
self.eq_put(Event(SysEvents.SYSTEM_STARTED))

self.setup()
last_event = None
while True:
Expand All @@ -248,13 +251,15 @@ def dispatch(self):
logger.debug('#Dispatcher Start process event: %s', event)
for call_func in self._event_subscribes[event.name]:
call_func(event)
if self._will_stop:
break
last_event = event
if self.now >= self._end_dt:
logger.info('#Dispatcher Run out of time, dispatch finish.')
break
if self._will_stop:
break

# system is exiting
self.eq_put(Event(SysEvents.SYSTEM_EXITING))
logger.info('#Dispatcher loop exit.')
self._will_stop = True
self.cleanup()
Expand Down
12 changes: 4 additions & 8 deletions finchan/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,13 @@ def __repr__(self):
self.kwargs)


class SysEvents(Enum):
class SysEvents(object):
"""system defined events
enum of events that finchan system generate/reserved:
* SYSTEM_STARTED = 'system_started'
* SYSTEM_STARTED = 'system_event.system_started'
* SYSTEM_EXITING = 'system_event.system_will_exit'
"""
SYSTEM_STARTED = 'system_event.system_started'

def __repr__(self):
return self.value

def __str__(self):
return self.value
SYSTEM_EXITING = 'system_event.system_will_exit'
8 changes: 7 additions & 1 deletion finchan/exts/timer_callback.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@
from finchan.env import env
from finchan.event import SysEvents

# name of the extension
ext_name = 'finchan.exts.timer_callback'
# required extension
required_exts = ['finchan.exts.timer_source']

logger = logging.getLogger(__name__)

logger = logging.getLogger()

Expand All @@ -39,7 +45,7 @@ def add_timer(event):


def load_finchan_ext(env, process_time=3, *args, **kwargs):
env.dispatcher.subscribe(str(SysEvents.SYSTEM_STARTED), add_timer)
env.dispatcher.subscribe(SysEvents.SYSTEM_STARTED, add_timer)

def unload_finchan_ext(env):
scheduler = env.get_ext_obj('finchan.exts.timer_source')
Expand Down
26 changes: 24 additions & 2 deletions finchan/exts/timer_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,25 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Timer event source, interface inspired by `schedule <https://github.com/dbader/schedule>`_"""
"""Timer event source, interface inspired by `schedule <https://github.com/dbader/schedule>`_
usage::
def setup()
scheduler = env.get_ext_obj('finchan.exts.timer_source')
scheduler.run_every(3).to(5).minutes().do(timer_call)
scheduler.run_every(1).days.offset('09:31').tag('daily_task').do(timer_call)
# runs on every two weeks' friday 09:31
scheduler.run_every(2).weeks.offset('friday 09:31').tag('daily_task').do(timer_call)
# runs on every month's 09 day 09:31
scheduler.run_every(1).months.offset('09 09:31').tag('daily_task').do(timer_call)
def clean()
scheduler = env.get_ext_obj('finchan.exts.timer_source')
scheduler.cancel_all_jobs()
"""
import random
import asyncio
import logging
Expand All @@ -28,8 +46,12 @@
from finchan.interface.event_source import AbsEventSource


logger = logging.getLogger(__name__)
# name of the extension
ext_name = 'finchan.exts.timer_source'
# required extension
required_exts = []

logger = logging.getLogger(__name__)


def event_callback(event):
Expand Down

0 comments on commit 7aa39b5

Please sign in to comment.