mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-03 17:50:11 +02:00
ruamel.yaml is now required and the packages are all new enough
This commit is contained in:
parent
e794ccb38c
commit
8300ed051b
@ -24,14 +24,12 @@ import platform
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
import importlib
|
||||
import ruamel.yaml
|
||||
from collections import OrderedDict
|
||||
|
||||
from ruamel.yaml import YAML, YAMLError
|
||||
|
||||
from . import common
|
||||
from . import _
|
||||
from .exception import MetaDataException, FDroidException
|
||||
from .exception import MetaDataException
|
||||
|
||||
srclibs = None
|
||||
warnings_action = None
|
||||
@ -486,7 +484,7 @@ def parse_yaml_srclib(metadatapath):
|
||||
|
||||
with metadatapath.open("r", encoding="utf-8") as f:
|
||||
try:
|
||||
yaml = YAML(typ='safe')
|
||||
yaml = ruamel.yaml.YAML(typ='safe')
|
||||
data = yaml.load(f)
|
||||
if type(data) is not dict:
|
||||
if platform.system() == 'Windows':
|
||||
@ -496,10 +494,10 @@ def parse_yaml_srclib(metadatapath):
|
||||
with symlink.open("r", encoding="utf-8") as s:
|
||||
data = yaml.load(s)
|
||||
if type(data) is not dict:
|
||||
raise YAMLError(
|
||||
raise ruamel.yaml.YAMLError(
|
||||
_('{file} is blank or corrupt!').format(file=metadatapath)
|
||||
)
|
||||
except YAMLError as e:
|
||||
except ruamel.yaml.YAMLError as e:
|
||||
_warn_or_exception(_("Invalid srclib metadata: could not "
|
||||
"parse '{file}'")
|
||||
.format(file=metadatapath) + '\n'
|
||||
@ -722,9 +720,9 @@ def parse_yaml_metadata(mf):
|
||||
|
||||
"""
|
||||
try:
|
||||
yaml = YAML(typ='safe')
|
||||
yaml = ruamel.yaml.YAML(typ='safe')
|
||||
yamldata = yaml.load(mf)
|
||||
except YAMLError as e:
|
||||
except ruamel.yaml.YAMLError as e:
|
||||
_warn_or_exception(
|
||||
_("could not parse '{path}'").format(path=mf.name)
|
||||
+ '\n'
|
||||
@ -867,21 +865,6 @@ def write_yaml(mf, app):
|
||||
app
|
||||
app metadata to written to the yaml file
|
||||
"""
|
||||
# import rumael.yaml and check version
|
||||
try:
|
||||
import ruamel.yaml
|
||||
except ImportError as e:
|
||||
raise FDroidException('ruamel.yaml not installed, can not write metadata.') from e
|
||||
if not ruamel.yaml.__version__:
|
||||
raise FDroidException('ruamel.yaml.__version__ not accessible. Please make sure a ruamel.yaml >= 0.13 is installed..')
|
||||
m = re.match(r'(?P<major>[0-9]+)\.(?P<minor>[0-9]+)\.(?P<patch>[0-9]+)(-.+)?',
|
||||
ruamel.yaml.__version__)
|
||||
if not m:
|
||||
raise FDroidException('ruamel.yaml version malfored, please install an upstream version of ruamel.yaml')
|
||||
if int(m.group('major')) < 0 or int(m.group('minor')) < 13:
|
||||
raise FDroidException('currently installed version of ruamel.yaml ({}) is too old, >= 1.13 required.'.format(ruamel.yaml.__version__))
|
||||
# suiteable version ruamel.yaml imported successfully
|
||||
|
||||
def _field_to_yaml(typ, value):
|
||||
"""Convert data to YAML 1.2 format that keeps the right TYPE_*."""
|
||||
if typ is TYPE_STRING:
|
||||
@ -974,13 +957,8 @@ def write_yaml(mf, app):
|
||||
def write_metadata(metadatapath, app):
|
||||
metadatapath = Path(metadatapath)
|
||||
if metadatapath.suffix == '.yml':
|
||||
if importlib.util.find_spec('ruamel.yaml'):
|
||||
with metadatapath.open('w') as mf:
|
||||
return write_yaml(mf, app)
|
||||
else:
|
||||
raise FDroidException(
|
||||
_('ruamel.yaml not installed, can not write metadata.')
|
||||
)
|
||||
|
||||
_warn_or_exception(_('Unknown metadata format: %s') % metadatapath)
|
||||
|
||||
|
@ -7,10 +7,8 @@ import sys
|
||||
import unittest
|
||||
import tempfile
|
||||
import textwrap
|
||||
from unittest import mock
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
from testcommon import TmpCwd
|
||||
|
||||
localmodule = Path(__file__).resolve().parent.parent
|
||||
@ -20,7 +18,6 @@ if localmodule not in sys.path:
|
||||
|
||||
from fdroidserver import common
|
||||
from fdroidserver import rewritemeta
|
||||
from fdroidserver.exception import FDroidException
|
||||
|
||||
|
||||
class RewriteMetaTest(unittest.TestCase):
|
||||
@ -71,24 +68,6 @@ class RewriteMetaTest(unittest.TestCase):
|
||||
),
|
||||
)
|
||||
|
||||
def test_rewrite_scenario_yml_no_ruamel(self):
|
||||
sys.argv = ['rewritemeta', 'a']
|
||||
with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir):
|
||||
Path('metadata').mkdir()
|
||||
with Path('metadata/a.yml').open('w') as f:
|
||||
f.write('AutoName: a')
|
||||
|
||||
def boom(*args):
|
||||
raise FDroidException(' '.join((str(x) for x in args)))
|
||||
|
||||
with mock.patch('importlib.util.find_spec', boom):
|
||||
with self.assertRaises(FDroidException):
|
||||
rewritemeta.main()
|
||||
|
||||
self.assertEqual(
|
||||
Path('metadata/a.yml').read_text(encoding='utf-8'), 'AutoName: a'
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = optparse.OptionParser()
|
||||
|
Loading…
Reference in New Issue
Block a user