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 |