def check_metadata(p, interactive=False):
    data = jsonf.load(p)
    errors = validator.validate(data)
    if not errors:
        return
    if errors and not interactive:
        raise ValueError(errors)
    for k, v in errors.items():
        cn.pverr(cn.color.red(k), v.args[0])
    ask_edit(p, errors)
    check_metadata(p, interactive)
def process_meta(meta):
    failed = validator.validate(meta, broadcast=True)
    failed.pop('broadcast', None)  # TODO: remove this after until v0.3
    if failed:
        keys = ', '.join(failed.keys())
        msg = "Metadata validation failed for keys: {0}".format(keys)
        raise MetadataError(msg, failed)

    replace_aliases(meta)
    add_missing_keys(meta)
    clean_keys(meta)
    return meta
def process_meta(meta):
    # attempt bringing metadata up to latest specification before passing it to
    # the validator
    upgrade_meta(meta)
    failed = validator.validate(meta, broadcast=True)
    if failed:
        keys = ', '.join(failed.keys())
        msg = "Metadata validation failed for keys: {0}".format(keys)
        raise MetadataError(msg, failed)
    replace_aliases(meta)
    add_missing_keys(meta)
    clean_keys(meta)
    parse_datetime(meta)
    return meta
def add_to_servers(cid, servers):
    """ Add content with given cid to the server """
    cdir = path.contentdir(cid)
    ipath = path.infopath(cdir)
    # We only let content that has been fully updated to be added
    if git.has_changes(cdir):
        raise RuntimeError('content has pending changes, please update first')
    # We let the exception from validation propagate up to the caller, and
    # caller is expected to handle this.
    if validator.validate(jsonf.load(ipath)):
        raise RuntimeError('content contains invalid metadata')
    for s in servers:
        target = path.contentdir(cid, server=s)
        if not os.path.islink(target):
            os.symlink(cdir, target)
            git.commit_add_to_server(target, s)
        # We add this to backlog regardless of whether a new symlink is crated.
        # We assume that user wishes to update the content even if symlink
        # already exists.
        backlog.cadd(cid, s)
def test_broadcast_flag():
    data = BASE_METADATA.copy()
    data['broadcast'] = '$BROADCAST'
    with pytest.raises(ValueError):
        mod.validate(data, broadcast=True)
def test_validation(data):
    assert mod.validate(data) == {}
def test_broadcast_flag():
    data = BASE_METADATA.copy()
    data['broadcast'] = '$BROADCAST'
    with pytest.raises(ValueError):
        mod.validate(data, broadcast=True)
def test_validation(data):
    assert mod.validate(data) == {}