server/schemaserial.py
changeset 4003 b9436fe77c9e
parent 3998 94cc7cad3d2d
child 4010 b2d0b14a365d
equal deleted inserted replaced
3998:94cc7cad3d2d 4003:b9436fe77c9e
   181         rtype = ybo.RelationType(name=rtype, description=desc,
   181         rtype = ybo.RelationType(name=rtype, description=desc,
   182                                  symetric=bool(sym), inlined=bool(il),
   182                                  symetric=bool(sym), inlined=bool(il),
   183                                  fulltext_container=ft_container, eid=eid)
   183                                  fulltext_container=ft_container, eid=eid)
   184         rschema = schema.add_relation_type(rtype)
   184         rschema = schema.add_relation_type(rtype)
   185         index[eid] = rschema
   185         index[eid] = rschema
   186         set_perms(rschema, permsdict.get(eid, {}))
       
   187     cstrsdict = deserialize_rdef_constraints(session)
   186     cstrsdict = deserialize_rdef_constraints(session)
   188     for values in session.execute(
   187     for values in session.execute(
   189         'Any X,SE,RT,OE,CARD,ORD,DESC,IDX,FTIDX,I18N,DFLT WHERE X is CWAttribute,'
   188         'Any X,SE,RT,OE,CARD,ORD,DESC,IDX,FTIDX,I18N,DFLT WHERE X is CWAttribute,'
   190         'X relation_type RT, X cardinality CARD, X ordernum ORD, X indexed IDX,'
   189         'X relation_type RT, X cardinality CARD, X ordernum ORD, X indexed IDX,'
   191         'X description DESC, X internationalizable I18N, X defaultval DFLT,'
   190         'X description DESC, X internationalizable I18N, X defaultval DFLT,'
   200                                   order=ord, description=desc,
   199                                   order=ord, description=desc,
   201                                   constraints=constraints,
   200                                   constraints=constraints,
   202                                   indexed=idx, fulltextindexed=ftidx,
   201                                   indexed=idx, fulltextindexed=ftidx,
   203                                   internationalizable=i18n,
   202                                   internationalizable=i18n,
   204                                   default=default, eid=rdefeid)
   203                                   default=default, eid=rdefeid)
   205         schema.add_relation_def(rdef)
   204         rdefs = schema.add_relation_def(rdef)
       
   205         set_perms(rdefs, permsdict.get(rdefeid, {}))
   206     for values in session.execute(
   206     for values in session.execute(
   207         'Any X,SE,RT,OE,CARD,ORD,DESC,C WHERE X is CWRelation, X relation_type RT,'
   207         'Any X,SE,RT,OE,CARD,ORD,DESC,C WHERE X is CWRelation, X relation_type RT,'
   208         'X cardinality CARD, X ordernum ORD, X description DESC, '
   208         'X cardinality CARD, X ordernum ORD, X description DESC, '
   209         'X from_entity SE, X to_entity OE, X composite C', build_descr=False):
   209         'X from_entity SE, X to_entity OE, X composite C', build_descr=False):
   210         rdefeid, seid, reid, teid, card, ord, desc, c = values
   210         rdefeid, seid, reid, teid, card, ord, desc, c = values
   214         constraints = cstrsdict.get(rdefeid, ())
   214         constraints = cstrsdict.get(rdefeid, ())
   215         rdef = ybo.RelationDefinition(frometype, rtype, toetype, cardinality=card,
   215         rdef = ybo.RelationDefinition(frometype, rtype, toetype, cardinality=card,
   216                                   order=ord, description=desc,
   216                                   order=ord, description=desc,
   217                                   composite=c, constraints=constraints,
   217                                   composite=c, constraints=constraints,
   218                                   eid=rdefeid)
   218                                   eid=rdefeid)
   219         schema.add_relation_def(rdef)
   219         rdefs = schema.add_relation_def(rdef)
       
   220         set_perms(rdefs, permsdict.get(rdefeid, {}))
   220     schema.infer_specialization_rules()
   221     schema.infer_specialization_rules()
   221     if _3_2_migration:
   222     if _3_2_migration:
   222         _update_database(schema, sqlcu)
   223         _update_database(schema, sqlcu)
   223         _set_sql_prefix('cw_')
   224         _set_sql_prefix('cw_')
   224     session.commit()
   225     session.commit()
   361 
   362 
   362 def _rdef_values(rschema, objtype, props):
   363 def _rdef_values(rschema, objtype, props):
   363     amap = {'order': 'ordernum'}
   364     amap = {'order': 'ordernum'}
   364     values = {}
   365     values = {}
   365     for prop, default in rschema.rproperty_defs(objtype).iteritems():
   366     for prop, default in rschema.rproperty_defs(objtype).iteritems():
   366         if prop in ('eid', 'constraints', 'uid', 'infered'):
   367         if prop in ('eid', 'constraints', 'uid', 'infered', 'permissions'):
   367             continue
   368             continue
   368         value = props.get(prop, default)
   369         value = props.get(prop, default)
   369         if prop in ('indexed', 'fulltextindexed', 'internationalizable'):
   370         if prop in ('indexed', 'fulltextindexed', 'internationalizable'):
   370             value = bool(value)
   371             value = bool(value)
   371         elif prop == 'ordernum':
   372         elif prop == 'ordernum':
   534                       'X relation_type RT, RT name %%(rt)s, ST name %%(st)s, '\
   535                       'X relation_type RT, RT name %%(rt)s, ST name %%(st)s, '\
   535                       'OT name %%(ot)s' % etype, args
   536                       'OT name %%(ot)s' % etype, args
   536     else:
   537     else:
   537         # entity schema
   538         # entity schema
   538         for rql, args in _erperms2rql(erschema, groupmapping):
   539         for rql, args in _erperms2rql(erschema, groupmapping):
   539             args['name'] = str(eschema)
   540             args['name'] = str(erschema)
   540             yield rql + 'X is CWEType, X name %(name)s', args
   541             yield rql + 'X is CWEType, X name %(name)s', args
   541 
   542 
   542 def _erperms2rql(erschema, groupmapping):
   543 def _erperms2rql(erschema, groupmapping):
   543     """return rql insert statements to enter the entity or relation
   544     """return rql insert statements to enter the entity or relation
   544     schema's permissions in the database as
   545     schema's permissions in the database as
   548     for action in erschema.ACTIONS:
   549     for action in erschema.ACTIONS:
   549         for group_or_rqlexpr in erschema.action_permissions(action):
   550         for group_or_rqlexpr in erschema.action_permissions(action):
   550             if isinstance(group_or_rqlexpr, basestring):
   551             if isinstance(group_or_rqlexpr, basestring):
   551                 # group
   552                 # group
   552                 try:
   553                 try:
   553                     yield ('SET X %s_permission Y WHERE Y eid %%(g)s' % action,
   554                     yield ('SET X %s_permission Y WHERE Y eid %%(g)s, ' % action,
   554                            {'g': groupmapping[group_or_rqlexpr]})
   555                            {'g': groupmapping[group_or_rqlexpr]})
   555                 except KeyError:
   556                 except KeyError:
   556                     continue
   557                     continue
   557             else:
   558             else:
   558                 # rqlexpr
   559                 # rqlexpr