def __init__(self, platform='default', old_skills_dir=None, skills_dir=None, repo=None, versioned=True): self.platform = platform # Keep this variable alive for a while, is used to move skills from the # old config based location to XDG self.old_skills_dir = path.expanduser(old_skills_dir or '') or None self.skills_dir = (skills_dir or BaseDirectory.save_data_path('mycroft/skills')) self.repo = repo or SkillRepo() self.versioned = versioned self.lock = MsmProcessLock() # Property placeholders self._all_skills = None self._default_skills = None self._local_skills = None self._device_skill_state = None self.saving_handled = False self.device_skill_state_hash = '' with self.lock: self._init_skills_data()
def __init__(self, platform='default', skills_dir=None, repo=None, versioned=True): self.platform = platform self.skills_dir = expanduser(skills_dir or '') \ or self.DEFAULT_SKILLS_DIR self.repo = repo or SkillRepo() self.versioned = versioned
def setup(self): self.root = root = dirname(abspath(__file__)) self.msm = MycroftSkillsManager( platform='default', skills_dir=join(root, 'test-skills'), repo=SkillRepo( join(root, 'repo-instance'), branch='test-repo', url='https://github.com/mycroftai/mycroft-skills-manager'), versioned=True)
def __init__(self, platform='default', skills_dir=None, repo=None, versioned=True): self.platform = platform self.skills_dir = (expanduser(skills_dir or '') or self.DEFAULT_SKILLS_DIR) self.repo = repo or SkillRepo() self.versioned = versioned self.lock = MsmProcessLock() self.skills_data = None self.saving_handled = False self.skills_data_hash = '' with self.lock: self.sync_skills_data()
def __init__(self, platform='default', skills_dir=None, repo=None, versioned=True): self.platform = platform self.skills_dir = ( path.expanduser(skills_dir or '') or self.DEFAULT_SKILLS_DIR ) self.repo = repo or SkillRepo() self.versioned = versioned self.lock = MsmProcessLock() # Property placeholders self._all_skills = None self._default_skills = None self._local_skills = None self._device_skill_state = None self.saving_handled = False self.device_skill_state_hash = '' with self.lock: self._init_skills_data()
def main(args=None, printer=print): logging.basicConfig(level=INFO, format='%(levelname)s - %(message)s') import argparse platforms = list(MycroftSkillsManager.SKILL_GROUPS) parser = argparse.ArgumentParser() parser.add_argument('-p', '--platform', choices=platforms, default='default') parser.add_argument('-u', '--repo-url') parser.add_argument('-b', '--repo-branch') parser.add_argument('-d', '--skills-dir') parser.add_argument('-c', '--repo-cache') parser.add_argument('-l', '--latest', action='store_false', dest='versioned', help="Disable skill versioning") parser.add_argument('-r', '--raw', action='store_true') parser.set_defaults(raw=False, versioned=True) subparsers = parser.add_subparsers(dest='action') subparsers.required = True def add_constraint_args(subparser): subparser.add_argument('--constraints', help='limit the installed requirements using ' 'a pip constraint.txt file.') def add_search_args(subparser, skill_is_optional=False): if skill_is_optional: subparser.add_argument('skill', nargs='?') else: subparser.add_argument('skill') subparser.add_argument('author', nargs='?') install_parser = subparsers.add_parser('install') add_search_args(install_parser) add_constraint_args(install_parser) add_search_args(subparsers.add_parser('remove')) add_search_args(subparsers.add_parser('search')) add_search_args(subparsers.add_parser('info')) subparsers.add_parser('list').add_argument('-i', '--installed', action='store_true') add_search_args(subparsers.add_parser('update'), skill_is_optional=True) subparsers.add_parser('default') args = parser.parse_args(args or sys.argv[1:]) if args.raw: LOG.level = ERROR repo = SkillRepo(url=args.repo_url, branch=args.repo_branch, path=args.repo_cache) msm = MycroftSkillsManager(args.platform, args.skills_dir, repo, args.versioned) main_functions = { 'install': lambda: msm.install(args.skill, args.author, args.constraints, 'cli'), 'remove': lambda: msm.remove(args.skill, args.author), 'list': lambda: '\n'.join(skill.name + ('\t[installed]' if skill.is_local and not args.raw else '') for skill in msm.list() if not args.installed or skill.is_local), 'update': lambda: msm.update(args.skill, args.author), 'default': msm.install_defaults, 'search': lambda: '\n'.join(skill.name for skill in msm.list() if skill.match(args.skill, args.author) >= 0.3), 'info': lambda: skill_info(msm.find_skill(args.skill, args.author)) } with msm.lock: try: result = main_functions[args.action]() if result is False: return 1 if isinstance(result, str): printer(result) return 0 except MsmException as e: exc_type = e.__class__.__name__ printer('{}: {}'.format(exc_type, str(e))) return get_error_code(e.__class__)