server/schemaserial.py
changeset 4189 bd552b341334
parent 4033 732eccbed54a
child 4252 6c4f109c2b03
equal deleted inserted replaced
4188:b3258d2afe04 4189:bd552b341334
   398 def __rdef2rql(genmap, rschema, subjtype=None, objtype=None, props=None,
   398 def __rdef2rql(genmap, rschema, subjtype=None, objtype=None, props=None,
   399                groupmap=None):
   399                groupmap=None):
   400     if subjtype is None:
   400     if subjtype is None:
   401         assert objtype is None
   401         assert objtype is None
   402         assert props is None
   402         assert props is None
   403         targets = rschema.rdefs
   403         targets = sorted(rschema.rdefs)
   404     else:
   404     else:
   405         assert not objtype is None
   405         assert not objtype is None
   406         targets = [(subjtype, objtype)]
   406         targets = [(subjtype, objtype)]
   407     # relation schema
   407     # relation schema
   408     if rschema.final:
   408     if rschema.final:
   447 def erschema2rql(erschema, groupmap):
   447 def erschema2rql(erschema, groupmap):
   448     if isinstance(erschema, schemamod.EntitySchema):
   448     if isinstance(erschema, schemamod.EntitySchema):
   449         return eschema2rql(erschema, groupmap=groupmap)
   449         return eschema2rql(erschema, groupmap=groupmap)
   450     return rschema2rql(erschema, groupmap=groupmap)
   450     return rschema2rql(erschema, groupmap=groupmap)
   451 
   451 
   452 def eschema2rql(eschema, groupmap):
   452 def eschema2rql(eschema, groupmap=None):
   453     """return a list of rql insert statements to enter an entity schema
   453     """return a list of rql insert statements to enter an entity schema
   454     in the database as an CWEType entity
   454     in the database as an CWEType entity
   455     """
   455     """
   456     relations, values = eschema_relations_values(eschema)
   456     relations, values = eschema_relations_values(eschema)
   457     # NOTE: 'specializes' relation can't be inserted here since there's no
   457     # NOTE: 'specializes' relation can't be inserted here since there's no
   458     # way to make sure the parent type is inserted before the child type
   458     # way to make sure the parent type is inserted before the child type
   459     yield 'INSERT CWEType X: %s' % ','.join(relations) , values
   459     yield 'INSERT CWEType X: %s' % ','.join(relations) , values
   460         # entity schema
   460     # entity permissions
   461     for rql, args in _erperms2rql(eschema, groupmap):
   461     if groupmap is not None:
   462         args['name'] = str(eschema)
   462         for rql, args in _erperms2rql(eschema, groupmap):
   463         yield rql + 'X is CWEType, X name %(name)s', args
   463             args['name'] = str(eschema)
       
   464             yield rql + 'X is CWEType, X name %(name)s', args
   464 
   465 
   465 def specialize2rql(schema):
   466 def specialize2rql(schema):
   466     for eschema in schema.entities():
   467     for eschema in schema.entities():
   467         for rql, kwargs in eschemaspecialize2rql(eschema):
   468         for rql, kwargs in eschemaspecialize2rql(eschema):
   468             yield rql, kwargs
   469             yield rql, kwargs