PICARD-2213: Support for YAML export packages is mandatory again

This commit is contained in:
Philipp Wolfer
2021-05-18 17:44:15 +02:00
parent 969799bfe3
commit c9dabff15d
4 changed files with 22 additions and 22 deletions

View File

@@ -11,6 +11,7 @@ Required:
* [Python 3.6 or newer](http://python.org/download)
* [PyQt 5.10 or newer](http://www.riverbankcomputing.co.uk/software/pyqt/download)
* [Mutagen 1.37 or newer](https://mutagen.readthedocs.io/)
* [PyYAML 5.1 or newer](https://pyyaml.org/)
* [python-dateutil](https://dateutil.readthedocs.io/en/stable/)
* gettext:
* [Windows](https://mlocati.github.io/articles/gettext-iconv-windows.html)

View File

@@ -44,6 +44,8 @@ from enum import (
import json
import uuid
import yaml
from picard.config import get_config
from picard.const import (
DEFAULT_FILE_NAMING_FORMAT,
@@ -71,14 +73,6 @@ from picard.script.parser import ( # noqa: F401 # pylint: disable=unused-import
)
try:
import yaml
supports_script_package = True
except ImportError:
yaml = None
supports_script_package = False
class ScriptFunctionDocError(Exception):
pass
@@ -139,7 +133,7 @@ class ScriptImportError(Exception):
super().__init__(*args)
class ScriptLiteral(str):
class MultilineLiteral(str):
@staticmethod
def yaml_presenter(dumper, data):
if data:
@@ -147,8 +141,7 @@ class ScriptLiteral(str):
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
if yaml:
yaml.add_representer(ScriptLiteral, ScriptLiteral.yaml_presenter)
yaml.add_representer(MultilineLiteral, MultilineLiteral.yaml_presenter)
class PicardScript():
@@ -214,7 +207,7 @@ class PicardScript():
@script.setter
def script(self, value):
self._script = ScriptLiteral(value)
self._script = MultilineLiteral(value)
@staticmethod
def make_last_updated():
@@ -393,6 +386,14 @@ class FileNamingScript(PicardScript):
self.license = license
self.version = version
@property
def description(self):
return self._description
@description.setter
def description(self, value):
self._description = MultilineLiteral(value)
def get_file_naming_script_presets():
"""Generator of preset example file naming script objects.

View File

@@ -46,7 +46,6 @@ from picard.script import (
ScriptImportError,
ScriptParser,
get_file_naming_script_presets,
supports_script_package,
)
from picard.util import (
icontheme,
@@ -872,7 +871,7 @@ class ScriptEditorDialog(PicardDialog):
if not file_content.strip():
self.output_file_error(FILE_ERROR_IMPORT, filename, _('The file was empty'))
return
if supports_script_package and file_type == self.FILE_TYPE_PACKAGE:
if file_type == self.FILE_TYPE_PACKAGE:
try:
script_item = FileNamingScript().create_from_yaml(file_content)
except ScriptImportError as error:
@@ -907,7 +906,7 @@ class ScriptEditorDialog(PicardDialog):
if ext and str(name).endswith('.' + ext):
filename = name
log.debug('Exporting naming script file: %s' % filename)
if supports_script_package and file_type == self.FILE_TYPE_PACKAGE:
if file_type == self.FILE_TYPE_PACKAGE:
script_text = script_item.to_yaml()
try:
with open(filename, 'w', encoding='utf8') as o_file:
@@ -925,12 +924,11 @@ class ScriptEditorDialog(PicardDialog):
dialog.exec_()
def _get_dialog_filetypes(self):
file_types = []
if supports_script_package:
file_types.append(self.FILE_TYPE_PACKAGE)
file_types.append(self.FILE_TYPE_SCRIPT)
file_types.append(self.FILE_TYPE_ALL)
return ";;".join(file_types)
return ";;".join((
self.FILE_TYPE_PACKAGE,
self.FILE_TYPE_SCRIPT,
self.FILE_TYPE_ALL,
))
def reset_script(self):
"""Reset the script to the last saved value.

View File

@@ -7,4 +7,4 @@ pyobjc-core~=6.2; sys_platform == 'darwin'
pyobjc-framework-Cocoa~=6.2; sys_platform == 'darwin'
PyQt5~=5.10
pywin32; sys_platform == 'win32'
pyyaml>=5.1
pyyaml~=5.1