62 unknown = set(mapping) - set( ('support_entities', 'support_relations', |
62 unknown = set(mapping) - set( ('support_entities', 'support_relations', |
63 'dont_cross_relations', 'cross_relations') ) |
63 'dont_cross_relations', 'cross_relations') ) |
64 assert not unknown, 'unknown mapping attribute(s): %s' % unknown |
64 assert not unknown, 'unknown mapping attribute(s): %s' % unknown |
65 # relations that are necessarily not crossed |
65 # relations that are necessarily not crossed |
66 mapping['dont_cross_relations'] |= set(('owned_by', 'created_by')) |
66 mapping['dont_cross_relations'] |= set(('owned_by', 'created_by')) |
67 for rtype in ('is', 'is_instance_of'): |
67 for rtype in ('is', 'is_instance_of', 'cw_source'): |
68 assert rtype not in mapping['dont_cross_relations'], \ |
68 assert rtype not in mapping['dont_cross_relations'], \ |
69 '%s relation should not be in dont_cross_relations' % rtype |
69 '%s relation should not be in dont_cross_relations' % rtype |
70 assert rtype not in mapping['support_relations'], \ |
70 assert rtype not in mapping['support_relations'], \ |
71 '%s relation should not be in support_relations' % rtype |
71 '%s relation should not be in support_relations' % rtype |
72 return mapping |
72 return mapping |
144 ) |
144 ) |
145 |
145 |
146 PUBLIC_KEYS = AbstractSource.PUBLIC_KEYS + ('base-url',) |
146 PUBLIC_KEYS = AbstractSource.PUBLIC_KEYS + ('base-url',) |
147 _conn = None |
147 _conn = None |
148 |
148 |
149 def __init__(self, repo, appschema, source_config, *args, **kwargs): |
149 def __init__(self, repo, source_config, *args, **kwargs): |
150 AbstractSource.__init__(self, repo, appschema, source_config, |
150 AbstractSource.__init__(self, repo, source_config, *args, **kwargs) |
151 *args, **kwargs) |
|
152 mappingfile = source_config['mapping-file'] |
151 mappingfile = source_config['mapping-file'] |
153 if not mappingfile[0] == '/': |
152 if not mappingfile[0] == '/': |
154 mappingfile = join(repo.config.apphome, mappingfile) |
153 mappingfile = join(repo.config.apphome, mappingfile) |
155 mapping = load_mapping_file(mappingfile) |
154 try: |
156 self.support_entities = mapping['support_entities'] |
155 mapping = load_mapping_file(mappingfile) |
157 self.support_relations = mapping['support_relations'] |
156 except IOError: |
158 self.dont_cross_relations = mapping['dont_cross_relations'] |
157 self.disabled = True |
159 self.cross_relations = mapping['cross_relations'] |
158 self.error('cant read mapping file %s, source disabled', |
|
159 mappingfile) |
|
160 self.support_entities = {} |
|
161 self.support_relations = {} |
|
162 self.dont_cross_relations = set() |
|
163 self.cross_relations = set() |
|
164 else: |
|
165 self.support_entities = mapping['support_entities'] |
|
166 self.support_relations = mapping['support_relations'] |
|
167 self.dont_cross_relations = mapping['dont_cross_relations'] |
|
168 self.cross_relations = mapping['cross_relations'] |
160 baseurl = source_config.get('base-url') |
169 baseurl = source_config.get('base-url') |
161 if baseurl and not baseurl.endswith('/'): |
170 if baseurl and not baseurl.endswith('/'): |
162 source_config['base-url'] += '/' |
171 source_config['base-url'] += '/' |
163 self.config = source_config |
172 self.config = source_config |
164 myoptions = (('%s.latest-update-time' % self.uri, |
173 myoptions = (('%s.latest-update-time' % self.uri, |