Add utils.yaml_{load,dump}
This commit is contained in:
parent
1a6511c7a8
commit
aa6f229e6b
@ -33,8 +33,6 @@ import sys
|
|||||||
import re
|
import re
|
||||||
import collections
|
import collections
|
||||||
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
from qutebrowser.config import configtypes, sections
|
from qutebrowser.config import configtypes, sections
|
||||||
from qutebrowser.utils import usertypes, qtutils, utils
|
from qutebrowser.utils import usertypes, qtutils, utils
|
||||||
|
|
||||||
@ -648,7 +646,7 @@ def _read_yaml(yaml_data):
|
|||||||
A dict mapping option names to Option elements.
|
A dict mapping option names to Option elements.
|
||||||
"""
|
"""
|
||||||
parsed = {}
|
parsed = {}
|
||||||
data = yaml.load(yaml_data)
|
data = utils.yaml_load(yaml_data)
|
||||||
|
|
||||||
keys = {'type', 'default', 'desc', 'backend'}
|
keys = {'type', 'default', 'desc', 'backend'}
|
||||||
|
|
||||||
|
@ -26,10 +26,6 @@ import sip
|
|||||||
from PyQt5.QtCore import pyqtSignal, QUrl, QObject, QPoint, QTimer
|
from PyQt5.QtCore import pyqtSignal, QUrl, QObject, QPoint, QTimer
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
import yaml
|
import yaml
|
||||||
try:
|
|
||||||
from yaml import CSafeLoader as YamlLoader, CSafeDumper as YamlDumper
|
|
||||||
except ImportError: # pragma: no cover
|
|
||||||
from yaml import SafeLoader as YamlLoader, SafeDumper as YamlDumper
|
|
||||||
|
|
||||||
from qutebrowser.utils import (standarddir, objreg, qtutils, log, usertypes,
|
from qutebrowser.utils import (standarddir, objreg, qtutils, log, usertypes,
|
||||||
message, utils)
|
message, utils)
|
||||||
@ -298,8 +294,7 @@ class SessionManager(QObject):
|
|||||||
log.sessions.vdebug("Saving data: {}".format(data))
|
log.sessions.vdebug("Saving data: {}".format(data))
|
||||||
try:
|
try:
|
||||||
with qtutils.savefile_open(path) as f:
|
with qtutils.savefile_open(path) as f:
|
||||||
yaml.dump(data, f, Dumper=YamlDumper, default_flow_style=False,
|
utils.yaml_dump(data, f)
|
||||||
encoding='utf-8', allow_unicode=True)
|
|
||||||
except (OSError, UnicodeEncodeError, yaml.YAMLError) as e:
|
except (OSError, UnicodeEncodeError, yaml.YAMLError) as e:
|
||||||
raise SessionError(e)
|
raise SessionError(e)
|
||||||
else:
|
else:
|
||||||
@ -387,7 +382,7 @@ class SessionManager(QObject):
|
|||||||
path = self._get_session_path(name, check_exists=True)
|
path = self._get_session_path(name, check_exists=True)
|
||||||
try:
|
try:
|
||||||
with open(path, encoding='utf-8') as f:
|
with open(path, encoding='utf-8') as f:
|
||||||
data = yaml.load(f, Loader=YamlLoader)
|
data = utils.yaml_load(f, Loader=YamlLoader)
|
||||||
except (OSError, UnicodeDecodeError, yaml.YAMLError) as e:
|
except (OSError, UnicodeDecodeError, yaml.YAMLError) as e:
|
||||||
raise SessionError(e)
|
raise SessionError(e)
|
||||||
|
|
||||||
|
@ -36,6 +36,11 @@ from PyQt5.QtCore import Qt, QUrl
|
|||||||
from PyQt5.QtGui import QKeySequence, QColor, QClipboard, QDesktopServices
|
from PyQt5.QtGui import QKeySequence, QColor, QClipboard, QDesktopServices
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
import yaml
|
||||||
|
try:
|
||||||
|
from yaml import CSafeLoader as YamlLoader, CSafeDumper as YamlDumper
|
||||||
|
except ImportError: # pragma: no cover
|
||||||
|
from yaml import SafeLoader as YamlLoader, SafeDumper as YamlDumper
|
||||||
|
|
||||||
import qutebrowser
|
import qutebrowser
|
||||||
from qutebrowser.utils import qtutils, log
|
from qutebrowser.utils import qtutils, log
|
||||||
@ -876,3 +881,14 @@ def expand_windows_drive(path):
|
|||||||
return path + "\\"
|
return path + "\\"
|
||||||
else:
|
else:
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def yaml_load(f):
|
||||||
|
"""Wrapper over yaml.load using the C loader if possible."""
|
||||||
|
return yaml.load(f, Loader=YamlLoader)
|
||||||
|
|
||||||
|
|
||||||
|
def yaml_dump(data, f=None):
|
||||||
|
"""Wrapper over yaml.dump using the C dumper if possible."""
|
||||||
|
return yaml.dump(data, f, Dumper=YamlDumper, default_flow_style=False,
|
||||||
|
encoding='utf-8', allow_unicode=True)
|
||||||
|
@ -34,6 +34,10 @@ def test_init():
|
|||||||
assert 'ignore_case' in configdata.DATA
|
assert 'ignore_case' in configdata.DATA
|
||||||
|
|
||||||
|
|
||||||
|
def test_init_benchmark(benchmark):
|
||||||
|
benchmark(configdata.init)
|
||||||
|
|
||||||
|
|
||||||
class TestReadYaml:
|
class TestReadYaml:
|
||||||
|
|
||||||
|
|
||||||
|
@ -936,3 +936,11 @@ class TestOpenFile:
|
|||||||
])
|
])
|
||||||
def test_expand_windows_drive(path, expected):
|
def test_expand_windows_drive(path, expected):
|
||||||
assert utils.expand_windows_drive(path) == expected
|
assert utils.expand_windows_drive(path) == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_yaml_load():
|
||||||
|
assert utils.yaml_load("[1, 2]") == [1, 2]
|
||||||
|
|
||||||
|
|
||||||
|
def test_yaml_dump():
|
||||||
|
assert utils.yaml_dump([1, 2]) == b'- 1\n- 2\n'
|
||||||
|
Loading…
Reference in New Issue
Block a user