示例#1
0
    def _run_importer(self):
        """
        Create an instance of the plugin, run the importer, and
        remove/unregister the plugin instance so a new instance can
        be created when this method is run again.
        This is a convenience method that can be called to setup, exercise
        and teardown the system under test after setting any config options
        and before assertions are made regarding changes to the filesystem.
        """
        # Setup
        # Create an instance of the plugin
        plugins.find_plugins()

        # Exercise
        # Run the importer
        self.importer.run()
       
        # Teardown
        if plugins._instances:
            classes = list(plugins._classes)
            
            # Unregister listners
            del classes[0].listeners['import_task_files'][0]
        
            # Delete the plugin instance so a new one gets created for each test
            del plugins._instances[classes[0]]
    def _run_importer(self):
        """
        Create an instance of the plugin, run the importer, and
        remove/unregister the plugin instance so a new instance can
        be created when this method is run again.
        This is a convenience method that can be called to setup, exercise
        and teardown the system under test after setting any config options
        and before assertions are made regarding changes to the filesystem.
        """
        # Setup
        # Create an instance of the plugin
        plugins.find_plugins()

        # Exercise
        # Run the importer
        self.importer.run()

        # Teardown
        if plugins._instances:
            classes = list(plugins._classes)

            # Unregister listners
            del classes[0].listeners['import_task_files'][0]

            # Delete the plugin instance so a new one gets created for each test
            del plugins._instances[classes[0]]
    def setup_beets(self, cfg=None):
        if cfg is not None and type(cfg) is dict:
            self._CFG.update(cfg)

        plugins._classes = {self._CFG["plugin"]}
        if self._CFG["extra_plugins"]:
            plugins.load_plugins(self._CFG["extra_plugins"])

        # copy configuration file to beets dir
        config_file = os.path.join(self._test_config_dir_,
                                   self._CFG["config_file"]).decode()
        file_list = [{'file_name': 'config.yaml', 'file_path': config_file}]
        self._copy_files_to_beetsdir(file_list)

        self.config = beets.config
        self.config.clear()
        self.config.read()

        self.config['plugins'] = []
        self.config['verbose'] = True
        self.config['ui']['color'] = False
        self.config['threaded'] = False
        self.config['import']['copy'] = False

        self.config['directory'] = self.beetsdir.decode()
        self.lib = beets.library.Library(':memory:', self.beetsdir.decode())

        # This will initialize the plugins
        plugins.find_plugins()
示例#4
0
    def _setup_beets(self, config_file: bytes):
        self.addCleanup(self.teardown_beets)
        os.environ['BEETSDIR'] = self.mkdtemp()

        self.config = beets.config
        self.config.clear()

        # add user configuration
        config_file = format(
            os.path.join(self._test_config_dir_, config_file).decode())
        shutil.copyfile(config_file, self.config.user_config_path())
        self.config.read()

        self.config['plugins'] = []
        self.config['verbose'] = True
        self.config['ui']['color'] = False
        self.config['threaded'] = False
        self.config['import']['copy'] = False

        os.makedirs(self._test_target_dir, exist_ok=True)

        libdir = self.mkdtemp()
        self.config['directory'] = libdir
        self.libdir = bytestring_path(libdir)

        self.lib = beets.library.Library(':memory:', self.libdir)

        # This will initialize (create instance) of the plugins
        plugins.find_plugins()
示例#5
0
    def _run_importer(self):
        """
        Create an instance of the plugin, run the importer, and
        remove/unregister the plugin instance so a new instance can
        be created when this method is run again.
        This is a convenience method that can be called to setup, exercise
        and teardown the system under test after setting any config options
        and before assertions are made regarding changes to the filesystem.
        """
        # Setup
        # Create an instance of the plugin
        plugins.find_plugins()

        # Exercise
        # Run the importer
        self.importer.run()
        # Fake the occurence of the cli_exit event
        plugins.send('cli_exit', lib=self.lib)

        # Teardown
        if plugins._instances:
            classes = list(plugins._classes)

            # Unregister listners
            for event in classes[0].listeners:
                del classes[0].listeners[event][0]

            # Delete the plugin instance so a new one gets created for each test
            del plugins._instances[classes[0]]

        log.debug("--- library structure")
        self._list_files(self.lib_dir)
示例#6
0
    def _run_importer(self):
        """
        Create an instance of the plugin, run the importer, and
        remove/unregister the plugin instance so a new instance can
        be created when this method is run again.
        This is a convenience method that can be called to setup, exercise
        and teardown the system under test after setting any config options
        and before assertions are made regarding changes to the filesystem.
        """
        # Setup
        # Create an instance of the plugin
        plugins.find_plugins()

        # Exercise
        # Run the importer
        self.importer.run()
        # Fake the occurence of the cli_exit event
        plugins.send('cli_exit', lib=self.lib)

        # Teardown
        if plugins._instances:
            classes = list(plugins._classes)

            # Unregister listners
            for event in classes[0].listeners:
                del classes[0].listeners[event][0]

            # Delete the plugin instance so a new one gets created for each test
            del plugins._instances[classes[0]]

        log.debug("--- library structure")
        self._list_files(self.lib_dir)
示例#7
0
文件: library.py 项目: moodboom/beets
 def get_fields(cls):
     """Returns Album fields available for queries and format strings."""
     plugin_fields = []
     for plugin in plugins.find_plugins():
         plugin_fields += plugin.album_template_fields.keys()
     return (cls._fields.keys() + cls._getters().keys() +
             cls._types.keys()), plugin_fields
示例#8
0
 def pluginload(self):
     self.zero_plugin = None
     if self.config['auto'] and self.config['update_database']:
         for plugin in find_plugins():
             if plugin.name == 'zero':
                 self.zero_plugin = plugin
                 break
示例#9
0
    def commands(self):
        for plugin in plugins.find_plugins():
            if plugin.name == 'spotify':
                self.spotify = plugin
                break
        else:
            raise ui.UserError('spotify plugin is required')

        def explicits(lib, opts, args):
            args = ui.decargs(args)
            items = lib.items(args)
            results = self.spotify._match_library_tracks(lib, args)
            if results:
                for item, track in zip(items, results):
                    if track['explicit']:
                        title = track['name']
                        album = track['album']['name']
                        artist = track['artists'][0]['name']
                        tracknum = track['track_number']
                        url = track['external_urls']['spotify']
                        plugins.send("spotify_explicit_track",
                                     lib=lib,
                                     track=track,
                                     item=item)
                        print('{} - {} - {} - {} - {}'.format(
                            album, tracknum, artist, title, url))

        explicit_cmd = ui.Subcommand('spotify-explicit', help=u'')
        explicit_cmd.parser.add_all_common_options()
        explicit_cmd.func = explicits
        return [explicit_cmd]
示例#10
0
    def loaded(self):
        found_plugins = set()
        for plugin in find_plugins():
            if plugin.name in self.needed_plugins:
                found_plugins.add(plugin.name)

            if plugin.name == "savedqueries":
                self.queryfunc = plugin.item_queries["query"]

        for plugin_name in self.needed_plugins:
            if plugin_name not in found_plugins:
                raise UserError(
                    f"`{plugin_name}` plugin is required to use the `{self.name}` plugin"
                )

        self.savedqueries = FactoryDict(lambda name: self.queryfunc(name))
        self.template_fields = {
            "navigation_path": self.navigation_path,
        }

        self.funcs = beets.plugins.template_funcs()
        self.the = self.funcs["the"]
        self.replacefunc = self.funcs["replace"]
        self.bucket = self.funcs["bucket"]
        self.asciify = DefaultTemplateFunctions.tmpl_asciify
示例#11
0
 def get_fields(cls):
     """Returns Album fields available for queries and format strings."""
     plugin_fields = []
     for plugin in plugins.find_plugins():
         plugin_fields += plugin.album_template_fields.keys()
     return (cls._fields.keys() + cls._getters().keys() +
             cls._types.keys()), plugin_fields
示例#12
0
def show_version(lib, opts, args):
    print_("beets version %s" % beets.__version__)
    # Show plugins.
    names = [p.name for p in plugins.find_plugins()]
    if names:
        print_("plugins:", ", ".join(names))
    else:
        print_("no plugins loaded")
示例#13
0
    def test_cli_config_file_loads_plugin_commands(self):
        cli_config_path = os.path.join(self.temp_dir, b'config.yaml')
        with open(cli_config_path, 'w') as file:
            file.write('pluginpath: %s\n' % _common.PLUGINPATH)
            file.write('plugins: test')

        self.run_command('--config', cli_config_path, 'plugin', lib=None)
        self.assertTrue(plugins.find_plugins()[0].is_test_plugin)
示例#14
0
文件: commands.py 项目: jlefley/beets
def show_version(lib, opts, args):
    print_('beets version %s' % beets.__version__)
    # Show plugins.
    names = [p.name for p in plugins.find_plugins()]
    if names:
        print_('plugins:', ', '.join(names))
    else:
        print_('no plugins loaded')
示例#15
0
def show_version(lib, opts, args):
    print_('beets version %s' % beets.__version__)
    # Show plugins.
    names = [p.name for p in plugins.find_plugins()]
    if names:
        print_('plugins:', ', '.join(names))
    else:
        print_('no plugins loaded')
示例#16
0
    def test_cli_config_file_loads_plugin_commands(self):
        cli_config_path = os.path.join(self.temp_dir, b'config.yaml')
        with open(cli_config_path, 'w') as file:
            file.write('pluginpath: %s\n' % _common.PLUGINPATH)
            file.write('plugins: test')

        self.run_command('--config', cli_config_path, 'plugin', lib=None)
        self.assertTrue(plugins.find_plugins()[0].is_test_plugin)
示例#17
0
文件: test_ui.py 项目: nanux/beets
    def test_cli_config_file_loads_plugin_commands(self):
        plugin_path = os.path.join(_common.RSRC, "beetsplug")

        cli_config_path = os.path.join(self.temp_dir, "config.yaml")
        with open(cli_config_path, "w") as file:
            file.write("pluginpath: %s\n" % plugin_path)
            file.write("plugins: test")

        ui._raw_main(["--config", cli_config_path, "plugin"])
        self.assertTrue(plugins.find_plugins()[0].is_test_plugin)
示例#18
0
文件: test_ui.py 项目: tux-00/beets
    def test_cli_config_file_loads_plugin_commands(self):
        plugin_path = os.path.join(_common.RSRC, 'beetsplug')

        cli_config_path = os.path.join(self.temp_dir, 'config.yaml')
        with open(cli_config_path, 'w') as file:
            file.write('pluginpath: %s\n' % plugin_path)
            file.write('plugins: test')

        ui._raw_main(['--config', cli_config_path, 'plugin'])
        self.assertTrue(plugins.find_plugins()[0].is_test_plugin)
示例#19
0
 def loaded(self):
     for plugin in plugins.find_plugins():
         if plugin.name == "the":
             plugin.template_funcs['the'] = lambda text: the_template_func(
                 plugin, text)
             break
         elif plugin.name == "kergoth":
             plugin.the = lambda text: the_template_func(plugin, text)
     else:
         raise ui.UserError(f"'the' plugin is required for {self.name}")
示例#20
0
文件: test_ui.py 项目: axujen/beets
    def test_cli_config_file_loads_plugin_commands(self):
        plugin_path = os.path.join(_common.RSRC, 'beetsplug')

        cli_config_path = os.path.join(self.temp_dir, 'config.yaml')
        with open(cli_config_path, 'w') as file:
            file.write('pluginpath: %s\n' % plugin_path)
            file.write('plugins: test')

        ui._raw_main(['--config', cli_config_path, 'plugin'])
        self.assertTrue(plugins.find_plugins()[0].is_test_plugin)
示例#21
0
 def loaded(self):
     # Add our own artsource to the fetchart plugin.
     # FIXME: This is ugly, but i didn't find another way to extend fetchart
     # without declaring a new plugin.
     if self.config['art']:
         for plugin in plugins.find_plugins():
             if isinstance(plugin, fetchart.FetchArtPlugin):
                 plugin.sources = [BandcampAlbumArt(plugin._log, self.config)] + plugin.sources
                 fetchart.ART_SOURCES[u'bandcamp'] = BandcampAlbumArt
                 break
示例#22
0
文件: commands.py 项目: jlefley/beets
 def _show_plugin_fields(album):
     plugin_fields = []
     for plugin in plugins.find_plugins():
         if album:
             fdict = plugin.album_template_fields
         else:
             fdict = plugin.template_fields
         plugin_fields += fdict.keys()
     if plugin_fields:
         print("Template fields from plugins:")
         _print_rows(plugin_fields)
示例#23
0
 def _show_plugin_fields(album):
     plugin_fields = []
     for plugin in plugins.find_plugins():
         if album:
             fdict = plugin.album_template_fields
         else:
             fdict = plugin.template_fields
         plugin_fields += fdict.keys()
     if plugin_fields:
         print("Template fields from plugins:")
         _print_rows(plugin_fields)
示例#24
0
def show_version(lib, config, opts, args):
    print_("beets version %s" % beets.__version__)
    # Show plugins.
    names = []
    for plugin in plugins.find_plugins():
        modname = plugin.__module__
        names.append(modname.split(".")[-1])
    if names:
        print_("plugins:", ", ".join(names))
    else:
        print_("no plugins loaded")
示例#25
0
文件: commands.py 项目: encukou/beets
def show_version(lib, config, opts, args):
    print_('beets version %s' % beets.__version__)
    # Show plugins.
    names = []
    for plugin in plugins.find_plugins():
        modname = plugin.__module__
        names.append(modname.split('.')[-1])
    if names:
        print_('plugins:', ', '.join(names))
    else:
        print_('no plugins loaded')
示例#26
0
def show_version(lib, config, opts, args):
    print 'beets version %s' % beets.__version__
    # Show plugins.
    names = []
    for plugin in plugins.find_plugins():
        modname = plugin.__module__
        names.append(modname.split('.')[-1])
    if names:
        print 'plugins:', ', '.join(names)
    else:
        print 'no plugins loaded'
示例#27
0
def fields_func(lib, opts, args):
    print("Item fields:")
    print("  " + "\n  ".join([key for key in library.ITEM_KEYS]))

    print("\nAlbum fields:")
    print("  " + "\n  ".join([key for key in library.ALBUM_KEYS]))

    plugin_fields = []
    for plugin in plugins.find_plugins():
        plugin_fields += plugin.template_fields.keys()
    if plugin_fields:
        print("\nTemplate fields from plugins:")
        print("  " + "\n  ".join(plugin_fields))
示例#28
0
 def loaded(self) -> None:
     """Add our own artsource to the fetchart plugin."""
     # TODO: This is ugly, but i didn't find another way to extend fetchart
     # without declaring a new plugin.
     if self.config["art"]:
         for plugin in plugins.find_plugins():
             if isinstance(plugin, fetchart.FetchArtPlugin):
                 plugin.sources = [
                     BandcampAlbumArt(plugin._log, self.config)
                 ] + plugin.sources
                 fetchart.ART_SOURCES[DATA_SOURCE] = BandcampAlbumArt
                 fetchart.SOURCE_NAMES[BandcampAlbumArt] = DATA_SOURCE
                 break
示例#29
0
 def loaded(self):
     # Add our own artsource to the fetchart plugin.
     # FIXME: This is ugly, but i didn't find another way to extend fetchart
     # without declaring a new plugin.
     if self.config['art']:
         for plugin in plugins.find_plugins():
             if isinstance(plugin, fetchart.FetchArtPlugin):
                 plugin.sources = [
                     DiscogsAlbumArt(plugin._log, self.discogs_client)
                 ] + plugin.sources
                 fetchart.ART_SOURCES['discogs'] = DiscogsAlbumArt
                 fetchart.SOURCE_NAMES[DiscogsAlbumArt] = 'discogs'
                 break
示例#30
0
    def _get_info(self, items, write, force):
        self.absubmit, self.acousticbrainz = None, None

        for plugin in find_plugins():
            if plugin.name == 'absubmit':
                self.absubmit = plugin
            elif plugin.name == 'acousticbrainz':
                self.acousticbrainz = plugin

        if not self.absubmit or not self.acousticbrainz:
            raise ui.UserError(
                'absubmit and acousticbrainz are required for this plugin')

        def func(item):
            return self.analyze(item, write, force)

        util.par_map(func, self.included_items(items, force))