#!/usr/bin/env python

import os
import sys
import json


class DuplicatedKeysException(Exception):
    pass


def json_checker(pair):
    ret = {}
    for key, value in pair:
        if key in ret:
            raise DuplicatedKeysException(
                "Duplicate key {!r} in json document".format(key))
        else:
            ret[key] = value
    return ret

if len(sys.argv) != 2:
    sys.stderr.write(
        "Syntax: {} path/to/file.json\n".format(os.path.basename(__file__)))
    sys.exit(1)

try:
    f = open(sys.argv[1], encoding='utf-8')
    json.load(f, object_pairs_hook=json_checker)
except DuplicatedKeysException as e:
    sys.stderr.write("Error validating %s: %s\n" % (sys.argv[1], e.args[0]))
    sys.exit(1)
