Fix error loading configuration schema on Fedora Linux (#703).
Reviewed-on: https://projects.torsion.org/borgmatic-collective/borgmatic/pulls/702
This commit is contained in:
commit
b3f70434df
2 changed files with 19 additions and 27 deletions
|
@ -3,11 +3,6 @@ import os
|
||||||
import jsonschema
|
import jsonschema
|
||||||
import ruamel.yaml
|
import ruamel.yaml
|
||||||
|
|
||||||
try:
|
|
||||||
import importlib_metadata
|
|
||||||
except ModuleNotFoundError: # pragma: nocover
|
|
||||||
import importlib.metadata as importlib_metadata
|
|
||||||
|
|
||||||
import borgmatic.config
|
import borgmatic.config
|
||||||
from borgmatic.config import environment, load, normalize, override
|
from borgmatic.config import environment, load, normalize, override
|
||||||
|
|
||||||
|
@ -19,16 +14,10 @@ def schema_filename():
|
||||||
|
|
||||||
Raise FileNotFoundError when the schema path does not exist.
|
Raise FileNotFoundError when the schema path does not exist.
|
||||||
'''
|
'''
|
||||||
try:
|
schema_path = os.path.join(os.path.dirname(borgmatic.config.__file__), 'schema.yaml')
|
||||||
return next(
|
|
||||||
str(path.locate())
|
with open(schema_path):
|
||||||
for path in importlib_metadata.files('borgmatic')
|
return schema_path
|
||||||
if path.match('config/schema.yaml')
|
|
||||||
)
|
|
||||||
except StopIteration:
|
|
||||||
# If the schema wasn't found in the package's files, this is probably a pip editable
|
|
||||||
# install, so try a different approach to get the schema.
|
|
||||||
return os.path.join(os.path.dirname(borgmatic.config.__file__), 'schema.yaml')
|
|
||||||
|
|
||||||
|
|
||||||
def format_json_error_path_element(path_element):
|
def format_json_error_path_element(path_element):
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from flexmock import flexmock
|
from flexmock import flexmock
|
||||||
|
|
||||||
|
@ -7,22 +11,21 @@ from borgmatic.config import validate as module
|
||||||
def test_schema_filename_finds_schema_path():
|
def test_schema_filename_finds_schema_path():
|
||||||
schema_path = '/var/borgmatic/config/schema.yaml'
|
schema_path = '/var/borgmatic/config/schema.yaml'
|
||||||
|
|
||||||
flexmock(module.importlib_metadata).should_receive('files').and_return(
|
flexmock(os.path).should_receive('dirname').and_return("/var/borgmatic/config")
|
||||||
flexmock(match=lambda path: False, locate=lambda: None),
|
builtins = flexmock(sys.modules['builtins'])
|
||||||
flexmock(match=lambda path: True, locate=lambda: schema_path),
|
builtins.should_receive('open').with_args(schema_path).and_return(StringIO())
|
||||||
flexmock(match=lambda path: False, locate=lambda: None),
|
|
||||||
)
|
|
||||||
|
|
||||||
assert module.schema_filename() == schema_path
|
assert module.schema_filename() == schema_path
|
||||||
|
|
||||||
|
|
||||||
def test_schema_filename_with_missing_schema_path_in_package_still_finds_it_in_config_directory():
|
def test_schema_filename_raises_filenotfounderror():
|
||||||
flexmock(module.importlib_metadata).should_receive('files').and_return(
|
schema_path = '/var/borgmatic/config/schema.yaml'
|
||||||
flexmock(match=lambda path: False, locate=lambda: None),
|
|
||||||
flexmock(match=lambda path: False, locate=lambda: None),
|
|
||||||
)
|
|
||||||
|
|
||||||
assert module.schema_filename().endswith('/borgmatic/config/schema.yaml')
|
flexmock(os.path).should_receive('dirname').and_return("/var/borgmatic/config")
|
||||||
|
builtins = flexmock(sys.modules['builtins'])
|
||||||
|
builtins.should_receive('open').with_args(schema_path).and_raise(FileNotFoundError)
|
||||||
|
|
||||||
|
with pytest.raises(FileNotFoundError):
|
||||||
|
module.schema_filename()
|
||||||
|
|
||||||
|
|
||||||
def test_format_json_error_path_element_formats_array_index():
|
def test_format_json_error_path_element_formats_array_index():
|
||||||
|
|
Loading…
Reference in a new issue