插件不适用于MusicBrainz v1.2

2024-09-29 20:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

作为学习的练习,我试图为MusicBrainz编写一个插件,它将albumartistsort与{}和{}匹配到{},而不是(显然)默认的姓,名格式。在

我只是在学习Python,因此我尝试使用另一个插件作为指导,但是需要做一些重要的更改,这可能是我失败的地方。在

当我尝试安装插件时,它不会出现在插件列表中,尽管它被复制到插件文件夹中;并且.pyo文件也不会生成。我猜这是由于一个编译错误,但是我没有能够包含我所需要的任何东西,所以我可以使用picard模块(不知道在哪里可以找到它,也不能导入它),这样我就可以在python解释器中进行测试。在

这是我的代码:

PLUGIN_NAME = "Sort Artist and Album Artist"
PLUGIN_AUTHOR = "Kevin Hernandez"
PLUGIN_DESCRIPTION = "Sorts artist/album artist by name as in Artist/Album Artist field instead of Last, First"
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["0.9.0", "0.10", "0.15", "0.16"]

from picard.metadata import register_album_metadata_processor
import re

def copy_albumartist_to_albumartistsort(tagger, metadata, release):
  match = re.search($not($eq(metadata["albumartistsort"],metadata["albumartist"])))
    if match:
        metadata["albumartistsort"] = metadata["albumartist"]

def copy_artist_to_artistsort(tagger, metadata, release):
  match = re.search($not($eq(metadata["artistsort"],metadata["artist"])))
    if match:
        metadata["artistsort"] = metadata["artist"]

register_album_metadata_processor(copy_albumartist_to_albumartistsort)
register_album_metadata_processor(copy_artist_to_artistsort)

我还试着将函数定义为:

^{pr2}$

我必须指出的是,我不完全明白这些是什么时候被调用的。我相信插件文档herehere和{a3}不足以遵循它们在那里拥有的插件(例如,search和{}方法在不同的插件中使用{}没有在我所指的文档链接中解释。在

如果有更详尽的文档,您可以指出我在代码中做错了什么,或者知道如何在解释器中包含picard模块(在哪里找到它以及如何包含它),那么您的评论将是非常感谢的,并且是这个问题的有效答案。在


Tags: to插件registeralbumartistmatchprocessorplugin
1条回答
网友
1楼 · 发布于 2024-09-29 20:16:50

我认为你最大的问题是你把plugin API和{a2}混淆了。在

Tagger脚本是用简单的自定义语言编写的;插件是用Python编写的。你不能混合和匹配两种语言之间的语法。特别是:

match = re.search($not($eq(metadata["albumartistsort"],metadata["albumartist"])))

在Python中,$not$eq等没有任何含义。如果要检查事物是否相等,可以使用==运算符。如果要使用re.search,可以使用正则表达式语法。等等。在

此外,您的代码必须是有效的Python,并带有有效的缩进。你的密码,至少是贴在这里的。在


但让我们一个接一个地回答你的问题:

I am trying to write a plugin for MusicBrainz that matches the albumartistsort to albumartist and artistsort to artist, as opposed to the (apparently) default of Last Name, First Name format it is currently using.

在MusicBrainz中几乎没有自动默认设置。每个艺术家在数据库中都有一个名称和一个排序名称,由一个人类用户输入并由其他用户验证。您可以从web界面看到这一点。例如,转到David Bowie,在右侧的“艺术家信息”面板中,您将看到“排序名称:Bowie,David”。如果您不习惯使用MusicBrainz的web界面,那么在尝试扩展Picard之前,应该先研究一下。在

When I try installing the plug in, it doesn't appear in the plugin list although it is copied to the plugin folder; and the .pyo file is not generated. I am guessing this is due to a compilation error

是的。如果您在命令行中使用-d标志运行Picard,它将向您显示错误,而不是静默地禁用插件,因此您不必猜测。这在Troubleshooting下记录。(如果你在Mac上,路径将类似于/Applications/MusicBrainz Picard.app/Contents/MacOS/MusicBrainz Picard;我想文档不会解释这一点,因为它是标准的osx应用程序捆绑包)

but I haven't been able to include whatever I need so I can use the picard module (don't know where to find it nor import it) so I can test in my python interpreter.

你真的不能在你的翻译里测试。Picard捆绑了自己定制的Python解释器,而不是使用系统Python。在该自定义解释器中,picard包位于sys.path上,但在您的系统Python解释器中,它不是。不管怎样,在不实际运行picardgui的情况下,尝试导入这个包并使用其中的东西并不是一个好主意。在

如果您真的想探索picard包中的内容,请下载源代码并运行代码的本地构建。但你真的不应该那么做。除了API中记录的函数之外,您不需要任何函数,如果您想调试东西,您需要在正确的上下文中调试它们,这通常意味着在代码中添加print函数和/或使用^{}模块。在


I must point out that I don't fully understand when these are called.

在从MusicBrainz服务器下载每个专辑之后的某个时刻,所有注册的唱片集处理器函数都将与唱片集一起调用,所有已注册的曲目处理器函数都将与唱片集上的每个曲目一起调用。在

请注意,专辑处理器不能像track artist sort那样更改track level字段;您需要一个track processor来完成这项工作。在


e.g. the search and match methods they use in different plugins with re are not explained in the documentation links I am referring to.

这是因为它们是Python标准库的一部分,在本例中,它被作为标准Python文档的一部分记录,请参见^{}。在

在编写Picard插件之前,您应该了解Python的基本知识。在

同时,我不知道你想在这里写什么,但这看起来像是一个非常复杂的尝试,说“如果这两个字段不相等,就让它们相等”。这和“无条件地使他们平等”是一样的。那么,为什么还要麻烦regexp和if条件呢?在


因此,您的功能可以简化为:

^{pr2}$

但是,你真的不需要插件。您应该能够将整个过程写成一个简单的tagger脚本:

$set(artistsort,%artist%)
$set(albumartistsort,%albumartist%)

相关问题 更多 >

    热门问题