2022-12-04 15:27:45 +01:00
|
|
|
# Original : https://github.com/MycroftAI/mycroft-core/blob/dev/mycroft/skills/mycroft_skill/decorators.py
|
|
|
|
|
|
|
|
"""Decorators for use with JarvisSkill methods"""
|
2022-12-01 16:06:23 +01:00
|
|
|
|
|
|
|
|
2022-12-04 15:27:45 +01:00
|
|
|
def intent_handler(intent_parser):
|
|
|
|
"""Decorator for adding a method as an intent handler."""
|
2022-12-01 16:06:23 +01:00
|
|
|
|
2022-12-04 15:27:45 +01:00
|
|
|
def real_decorator(func):
|
|
|
|
# Store the intent_parser inside the function
|
|
|
|
# This will be used later to call register_intent
|
|
|
|
if not hasattr(func, 'intents'):
|
|
|
|
func.intents = []
|
|
|
|
func.intents.append(intent_parser)
|
|
|
|
return func
|
2022-12-01 16:06:23 +01:00
|
|
|
|
2022-12-04 15:27:45 +01:00
|
|
|
return real_decorator
|
|
|
|
|
|
|
|
|
|
|
|
def intent_file_handler(intent_file):
|
|
|
|
"""Decorator for adding a method as an intent file handler.
|
|
|
|
This decorator is deprecated, use intent_handler for the same effect.
|
2022-12-01 16:06:23 +01:00
|
|
|
"""
|
2022-12-04 15:27:45 +01:00
|
|
|
|
|
|
|
def real_decorator(func):
|
|
|
|
# Store the intent_file inside the function
|
|
|
|
# This will be used later to call register_intent_file
|
|
|
|
if not hasattr(func, 'intent_files'):
|
|
|
|
func.intent_files = []
|
|
|
|
func.intent_files.append(intent_file)
|
|
|
|
return func
|
|
|
|
|
|
|
|
return real_decorator
|
|
|
|
|
|
|
|
|
|
|
|
def resting_screen_handler(name):
|
|
|
|
"""Decorator for adding a method as an resting screen handler.
|
|
|
|
If selected will be shown on screen when device enters idle mode.
|
2022-12-01 16:06:23 +01:00
|
|
|
"""
|
|
|
|
|
2022-12-04 15:27:45 +01:00
|
|
|
def real_decorator(func):
|
|
|
|
# Store the resting information inside the function
|
|
|
|
# This will be used later in register_resting_screen
|
|
|
|
if not hasattr(func, 'resting_handler'):
|
|
|
|
func.resting_handler = name
|
|
|
|
return func
|
2022-12-01 16:06:23 +01:00
|
|
|
|
2022-12-04 15:27:45 +01:00
|
|
|
return real_decorator
|
|
|
|
|
|
|
|
|
|
|
|
def skill_api_method(func):
|
|
|
|
"""Decorator for adding a method to the skill's public api.
|
|
|
|
Methods with this decorator will be registered on the message bus
|
|
|
|
and an api object can be created for interaction with the skill.
|
|
|
|
"""
|
|
|
|
# tag the method by adding an api_method member to it
|
|
|
|
if not hasattr(func, 'api_method') and hasattr(func, '__name__'):
|
|
|
|
func.api_method = True
|
|
|
|
return func
|