#!/usr/bin/python
import sys
from os.path import exists
from itertools import chain
from traceback import extract_tb

from logilab.common.configuration import Configuration

from yams.reader import SchemaLoader
from yams._exceptions import *
from yams.__pkginfo__ import version

schm_ldr = SchemaLoader()

config = Configuration(
            usage="yams-check [[[...] deps] deps] apps",
            doc="Check the schema of an application.",
            version=version)


return_code = 1

def _error(file=None, line=None, msg=''):
    if file is None:
        file = sys.argv[1]
    if line is None:
        line=''
    else:
        line = str(line)
    print >> sys.stderr, ':'.join(('E', file, line, msg))
dirnames = config.load_command_line_configuration()

if not dirnames:
    print >> sys.stderr, config.help()
    sys.exit(return_code)

for dir in dirnames:
    assert exists(dir), dir

try:
    schm_ldr.load(dirnames)
    return_code = 0
except Exception, ex:
    tb_offset = getattr(ex, 'tb_offset', 0)
    filename, lineno, func, text = extract_tb(sys.exc_traceback)[-1-tb_offset]
    if hasattr(ex, "schema_files"):
        filename = ', '.join(ex.schema_files)
    _error(filename, lineno,"%s -> %s" % (ex.__class__.__name__, ex))
    return_code = 2

sys.exit(return_code)
