From ae5e14c34facf6dd345bba5e112588c464062105 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Wed, 10 Sep 2025 15:10:05 -0700 Subject: [PATCH 1/2] Update to support latest ovos-workshop --- neon_utils/skills/mycroft_skill.py | 5 ++++- neon_utils/skills/neon_fallback_skill.py | 14 +++++++------- neon_utils/skills/skill_gui.py | 2 +- neon_utils/validator_utils.py | 6 +++++- requirements/requirements.txt | 2 +- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/neon_utils/skills/mycroft_skill.py b/neon_utils/skills/mycroft_skill.py index 1f6e8f3e..ad47d933 100644 --- a/neon_utils/skills/mycroft_skill.py +++ b/neon_utils/skills/mycroft_skill.py @@ -36,7 +36,10 @@ from json_database import JsonStorage from ovos_bus_client.message import Message from ovos_utils.log import log_deprecation, deprecated -from ovos_workshop.skills.mycroft_skill import MycroftSkill +try: + from ovos_workshop.skills.mycroft_skill import MycroftSkill +except ImportError: + from ovos_workshop.skills.ovos import OVOSSkill as MycroftSkill # from ovos_utils.skills.settings import get_local_settings from neon_utils.signal_utils import wait_for_signal_clear, check_for_signal diff --git a/neon_utils/skills/neon_fallback_skill.py b/neon_utils/skills/neon_fallback_skill.py index 0428c775..134ebc9f 100644 --- a/neon_utils/skills/neon_fallback_skill.py +++ b/neon_utils/skills/neon_fallback_skill.py @@ -44,14 +44,14 @@ from ovos_utils.log import LOG, log_deprecation, deprecated from ovos_utils.skills import get_non_properties from ovos_utils.xdg_utils import xdg_cache_home -from ovos_workshop.skills import OVOSSkill -from ovos_workshop.skills.fallback import FallbackSkillV1 +from ovos_workshop.skills.ovos import OVOSSkill +from ovos_workshop.skills.fallback import FallbackSkill from neon_utils.cache_utils import LRUCache from neon_utils.file_utils import resolve_neon_resource_file from neon_utils.location_utils import to_system_time from neon_utils.message_utils import dig_for_message, resolve_message, get_message_user -from neon_utils.skills.neon_skill import CACHE_TIME_OFFSET, DEFAULT_SPEED_MODE, SPEED_MODE_EXTENSION_TIME, NeonSkill, \ +from neon_utils.skills.neon_skill import CACHE_TIME_OFFSET, DEFAULT_SPEED_MODE, SPEED_MODE_EXTENSION_TIME, \ save_settings from neon_utils.user_utils import get_user_prefs @@ -62,7 +62,7 @@ OVOSLangTranslationFactory = None -class NeonFallbackSkill(FallbackSkillV1): +class NeonFallbackSkill(FallbackSkill): """ Class that extends the NeonSkill and FallbackSkill classes to provide NeonSkill functionality to any Fallback skill subclassing this class. @@ -72,9 +72,9 @@ def __init__(self, *args, **kwargs): "`ovos_workshop.skills.fallback.FallbackSkill`", "2.0.0") - FallbackSkillV1.__init__(self, *args, **kwargs) - LOG.debug(f"instance_handlers={self.instance_fallback_handlers}") - LOG.debug(f"class_handlers={FallbackSkillV1.fallback_handlers}") + FallbackSkill.__init__(self, *args, **kwargs) + # LOG.debug(f"instance_handlers={self.instance_fallback_handlers}") + # LOG.debug(f"class_handlers={FallbackSkill.fallback_handlers}") # Manual init of NeonSkill self.cache_loc = os.path.join(xdg_cache_home(), "neon") diff --git a/neon_utils/skills/skill_gui.py b/neon_utils/skills/skill_gui.py index 7d65e9ff..e2078484 100644 --- a/neon_utils/skills/skill_gui.py +++ b/neon_utils/skills/skill_gui.py @@ -29,7 +29,7 @@ from os.path import join from ovos_utils.log import LOG, log_deprecation from neon_utils.file_utils import resolve_neon_resource_file -from ovos_workshop.skills.base import SkillGUI as _SkillGUI +from ovos_workshop.skills.ovos import SkillGUI as _SkillGUI class SkillGUI(_SkillGUI): diff --git a/neon_utils/validator_utils.py b/neon_utils/validator_utils.py index bb6945b6..86351a1f 100644 --- a/neon_utils/validator_utils.py +++ b/neon_utils/validator_utils.py @@ -28,7 +28,11 @@ from lingua_franca import parse, set_default_lang -from ovos_workshop.skills.mycroft_skill import MycroftSkill +try: + # TODO: Remove this import and use OVOSSkill with neon-utils 2.0.0 + from ovos_workshop.skills.mycroft_skill import MycroftSkill +except ImportError: + from ovos_workshop.skills.ovos import OVOSSkill as MycroftSkill def numeric_confirmation_validator(confirmation_num: str, lang: str = "en"): diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 71314602..13f753d4 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -8,4 +8,4 @@ ovos-lingua-franca~=0.4 ovos-utils~=0.0,>=0.0.35 geopy~=2.1 ovos-config~=0.0,>=0.0.9 -ovos-workshop~=0.0,>=0.0.15 \ No newline at end of file +ovos-workshop>=0.0.15,<8.0 From 9b7d3d9c3d00fb41132e14577bd0b6538c4eaed2 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Wed, 10 Sep 2025 15:18:22 -0700 Subject: [PATCH 2/2] Re-implement deprecated decorator for backwards-compat --- neon_utils/skills/common_query_skill.py | 47 ++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/neon_utils/skills/common_query_skill.py b/neon_utils/skills/common_query_skill.py index 62ab075e..b956caca 100644 --- a/neon_utils/skills/common_query_skill.py +++ b/neon_utils/skills/common_query_skill.py @@ -46,11 +46,56 @@ from ovos_workshop.decorators.layers import IntentLayers from ovos_workshop.skills.common_query_skill import CQSMatchLevel, CQSVisualMatchLevel from ovos_workshop.skills.common_query_skill import CommonQuerySkill as _CQS -from ovos_workshop.decorators.compat import backwards_compat from ovos_utils.file_utils import resolve_resource_file from ovos_utils.log import log_deprecation, LOG from neon_utils.skills.neon_skill import NeonSkill +try: + from ovos_workshop.decorators.compat import backwards_compat +except ImportError: + from functools import wraps + def backwards_compat(classic_core=None, pre_008=None, no_core=None): + """ + Decorator to run a different method if specific ovos-core versions are detected + """ + + def backwards_compat_decorator(func): + is_classic = False + is_old = False + is_standalone = True + try: + from mycroft.version import CORE_VERSION_STR # all classic mycroft and ovos versions + is_classic = True + is_standalone = False + + try: + from ovos_core.version import OVOS_VERSION_MINOR # ovos-core >= 0.0.8 + is_classic = False + except ImportError: + is_old = True + try: + from mycroft.version import OVOS_VERSION_MINOR # ovos-core <= 0.0.7 + is_classic = False + except: + is_standalone = True + + except: + is_standalone = True + + @wraps(func) + def func_wrapper(*args, **kwargs): + if is_classic and callable(classic_core): + return classic_core(*args, **kwargs) + if is_old and callable(pre_008): + return pre_008(*args, **kwargs) + if is_standalone and callable(no_core): + return no_core(*args, **kwargs) + return func(*args, **kwargs) + + return func_wrapper + + return backwards_compat_decorator + def is_CQSVisualMatchLevel(match_level): log_deprecation("This method is deprecated", "2.0.0")