112 # other table renaming done once schema has been readen |
112 # other table renaming done once schema has been readen |
113 # print 'reading schema from the database...' |
113 # print 'reading schema from the database...' |
114 index = {} |
114 index = {} |
115 permsdict = deserialize_ertype_permissions(session) |
115 permsdict = deserialize_ertype_permissions(session) |
116 schema.reading_from_database = True |
116 schema.reading_from_database = True |
117 for eid, etype, desc, meta in session.execute('Any X, N, D, M WHERE ' |
117 for eid, etype, desc in session.execute('Any X, N, D WHERE ' |
118 'X is CWEType, X name N, ' |
118 'X is CWEType, X name N, ' |
119 'X description D, X meta M', |
119 'X description D', |
120 build_descr=False): |
120 build_descr=False): |
121 # base types are already in the schema, skip them |
121 # base types are already in the schema, skip them |
122 if etype in schemamod.BASE_TYPES: |
122 if etype in schemamod.BASE_TYPES: |
123 # just set the eid |
123 # just set the eid |
124 eschema = schema.eschema(etype) |
124 eschema = schema.eschema(etype) |
125 eschema.eid = eid |
125 eschema.eid = eid |
150 tocleanup += (eid for eid, (eidetype, uri, extid) in repo._type_source_cache.items() |
150 tocleanup += (eid for eid, (eidetype, uri, extid) in repo._type_source_cache.items() |
151 if etype == eidetype) |
151 if etype == eidetype) |
152 repo.clear_caches(tocleanup) |
152 repo.clear_caches(tocleanup) |
153 session.commit(False) |
153 session.commit(False) |
154 etype = netype |
154 etype = netype |
155 etype = ybo.EntityType(name=etype, description=desc, meta=meta, eid=eid) |
155 etype = ybo.EntityType(name=etype, description=desc, eid=eid) |
156 eschema = schema.add_entity_type(etype) |
156 eschema = schema.add_entity_type(etype) |
157 index[eid] = eschema |
157 index[eid] = eschema |
158 set_perms(eschema, permsdict.get(eid, {})) |
158 set_perms(eschema, permsdict.get(eid, {})) |
159 try: |
159 try: |
160 rset = session.execute('Any XN, ETN WHERE X is CWEType, X name XN, ' |
160 rset = session.execute('Any XN, ETN WHERE X is CWEType, X name XN, ' |
165 for etype, stype in rset: |
165 for etype, stype in rset: |
166 eschema = schema.eschema(etype) |
166 eschema = schema.eschema(etype) |
167 seschema = schema.eschema(stype) |
167 seschema = schema.eschema(stype) |
168 eschema._specialized_type = stype |
168 eschema._specialized_type = stype |
169 seschema._specialized_by.append(etype) |
169 seschema._specialized_by.append(etype) |
170 for eid, rtype, desc, meta, sym, il in session.execute( |
170 for eid, rtype, desc, sym, il in session.execute( |
171 'Any X,N,D,M,S,I WHERE X is CWRType, X name N, X description D, ' |
171 'Any X,N,D,S,I WHERE X is CWRType, X name N, X description D, ' |
172 'X meta M, X symetric S, X inlined I', build_descr=False): |
172 'X symetric S, X inlined I', build_descr=False): |
173 try: |
173 try: |
174 # bw compat: fulltext_container added in 2.47 |
174 # bw compat: fulltext_container added in 2.47 |
175 ft_container = session.execute('Any FTC WHERE X eid %(x)s, X fulltext_container FTC', |
175 ft_container = session.execute('Any FTC WHERE X eid %(x)s, X fulltext_container FTC', |
176 {'x': eid}).rows[0][0] |
176 {'x': eid}).rows[0][0] |
177 except: |
177 except: |
178 ft_container = None |
178 ft_container = None |
179 session.rollback(False) |
179 session.rollback(False) |
180 rtype = ybo.RelationType(name=rtype, description=desc, meta=bool(meta), |
180 rtype = ybo.RelationType(name=rtype, description=desc, |
181 symetric=bool(sym), inlined=bool(il), |
181 symetric=bool(sym), inlined=bool(il), |
182 fulltext_container=ft_container, eid=eid) |
182 fulltext_container=ft_container, eid=eid) |
183 rschema = schema.add_relation_type(rtype) |
183 rschema = schema.add_relation_type(rtype) |
184 index[eid] = rschema |
184 index[eid] = rschema |
185 set_perms(rschema, permsdict.get(eid, {})) |
185 set_perms(rschema, permsdict.get(eid, {})) |
324 desc = unicode(erschema.description) or u'' |
324 desc = unicode(erschema.description) or u'' |
325 except UnicodeDecodeError, e: |
325 except UnicodeDecodeError, e: |
326 raise Exception("can't decode %s [was %s]" % (erschema.description, e)) |
326 raise Exception("can't decode %s [was %s]" % (erschema.description, e)) |
327 return { |
327 return { |
328 'name': type_, |
328 'name': type_, |
329 'meta': erschema.meta, |
|
330 'final': erschema.is_final(), |
329 'final': erschema.is_final(), |
331 'description': desc, |
330 'description': desc, |
332 } |
331 } |
333 |
332 |
334 def eschema_relations_values(eschema): |
333 def eschema_relations_values(eschema): |