diff -r 541659c39f6a -r c8a5ac2d1eaa server/sources/pyrorql.py --- a/server/sources/pyrorql.py Sat Oct 09 00:05:50 2010 +0200 +++ b/server/sources/pyrorql.py Sat Oct 09 00:05:52 2010 +0200 @@ -64,7 +64,7 @@ assert not unknown, 'unknown mapping attribute(s): %s' % unknown # relations that are necessarily not crossed mapping['dont_cross_relations'] |= set(('owned_by', 'created_by')) - for rtype in ('is', 'is_instance_of'): + for rtype in ('is', 'is_instance_of', 'cw_source'): assert rtype not in mapping['dont_cross_relations'], \ '%s relation should not be in dont_cross_relations' % rtype assert rtype not in mapping['support_relations'], \ @@ -146,17 +146,26 @@ PUBLIC_KEYS = AbstractSource.PUBLIC_KEYS + ('base-url',) _conn = None - def __init__(self, repo, appschema, source_config, *args, **kwargs): - AbstractSource.__init__(self, repo, appschema, source_config, - *args, **kwargs) + def __init__(self, repo, source_config, *args, **kwargs): + AbstractSource.__init__(self, repo, source_config, *args, **kwargs) mappingfile = source_config['mapping-file'] if not mappingfile[0] == '/': mappingfile = join(repo.config.apphome, mappingfile) - mapping = load_mapping_file(mappingfile) - self.support_entities = mapping['support_entities'] - self.support_relations = mapping['support_relations'] - self.dont_cross_relations = mapping['dont_cross_relations'] - self.cross_relations = mapping['cross_relations'] + try: + mapping = load_mapping_file(mappingfile) + except IOError: + self.disabled = True + self.error('cant read mapping file %s, source disabled', + mappingfile) + self.support_entities = {} + self.support_relations = {} + self.dont_cross_relations = set() + self.cross_relations = set() + else: + self.support_entities = mapping['support_entities'] + self.support_relations = mapping['support_relations'] + self.dont_cross_relations = mapping['dont_cross_relations'] + self.cross_relations = mapping['cross_relations'] baseurl = source_config.get('base-url') if baseurl and not baseurl.endswith('/'): source_config['base-url'] += '/'