2022-01-23 04:47:42 +00:00
|
|
|
from collections.abc import Mapping
|
|
|
|
|
|
|
|
from bundlewrap.exceptions import BundleError
|
|
|
|
from bundlewrap.utils.text import bold, green
|
|
|
|
from bundlewrap.utils.ui import io
|
|
|
|
|
2023-02-05 16:30:58 +00:00
|
|
|
|
2022-01-23 04:47:42 +00:00
|
|
|
def test_underscore_vs_dash(node, metadata, path=[]):
|
|
|
|
for k, v in metadata.items():
|
|
|
|
if not isinstance(k, str):
|
|
|
|
continue
|
|
|
|
|
|
|
|
all_dashes = k.replace('_', '-')
|
|
|
|
all_underscores = k.replace('-', '_')
|
|
|
|
|
|
|
|
if k != all_dashes and all_dashes in metadata:
|
|
|
|
raise BundleError('{n} metadata contains both {k} and {p}'.format(
|
|
|
|
n=node.name,
|
|
|
|
k='/'.join(path + [k]),
|
|
|
|
p='/'.join(path + [all_dashes]),
|
|
|
|
))
|
|
|
|
|
|
|
|
if k != all_underscores and all_underscores in metadata:
|
|
|
|
raise BundleError('{n} metadata contains both {k} and {p}'.format(
|
|
|
|
n=node.name,
|
|
|
|
k='/'.join(path + [k]),
|
|
|
|
p='/'.join(path + [all_underscores]),
|
|
|
|
))
|
|
|
|
|
|
|
|
if isinstance(v, Mapping):
|
|
|
|
test_underscore_vs_dash(
|
|
|
|
node,
|
|
|
|
v,
|
|
|
|
path + [k],
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_node(repo, node, **kwargs):
|
|
|
|
test_underscore_vs_dash(
|
|
|
|
node,
|
|
|
|
node.metadata.get(tuple()),
|
|
|
|
)
|
|
|
|
|
|
|
|
io.stdout('{x} {node} metadata contains no dashes-vs-underscores errors'.format(
|
|
|
|
x=green("✓"),
|
|
|
|
node=bold(node.name),
|
|
|
|
))
|