from os.path import join
from Globals import package_home
from _namespaces import namespaces

home = package_home(globals())

f = file(join(home, 'accessors.csv'))
lines = f.readlines()
f.close()

accessors = {}
accessorIds = {}
rdfKwnowTypes = {'Seq':True, 'prop':True, 'Alt':True, 'Bag':True}

prefix2Ns = dict([item[::-1] for item in namespaces.items()])

for l in [l for l in lines if not l.startswith('#')] :
	fields = [f.strip() for f in l.split(',')]

	if not filter(None, fields) : continue
	
	cat, caption, name, root, rdfType = fields

	accessor = { 'id' : name.split(':')[1]
			   , 'root' : root
			   , 'rdfType' : rdfType
			   , 'namespace' : prefix2Ns.get(name.split(':')[0])
				}

	assert not accessors.has_key(name), "Duplicate definition for %r" % name
	assert name.count(':') <=1, "Ambiguous name %r" % name
	assert not accessorIds.has_key(accessor['id']), "Ambiguous name: %r" % name
	assert rdfKwnowTypes.has_key(rdfType), "Unknown rdf type: %r" % rdfType
	if rdfType == 'prop' :
		assert prefix2Ns.has_key(name.split(':')[0]), \
			"Attribute name %r don't match a known namespace prefix" % name
	
	accessors[name] = accessor
	accessorIds[accessor['id']] = True


__all__ = ('namespaces', 'prefix2Ns', 'accessors')
