server/schemaserial.py
changeset 2126 a25859917ccc
parent 2044 d5589c5bc4e6
child 2144 51c84d585456
equal deleted inserted replaced
2123:3e1d2ab5f8c0 2126:a25859917ccc
   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):