260 bad_related_msg(rschema, 'object', eid, fix) |
260 bad_related_msg(rschema, 'object', eid, fix) |
261 if fix: |
261 if fix: |
262 sql = 'DELETE FROM %s_relation WHERE eid_to=%s;' % ( |
262 sql = 'DELETE FROM %s_relation WHERE eid_to=%s;' % ( |
263 rschema, eid) |
263 rschema, eid) |
264 session.system_sql(sql) |
264 session.system_sql(sql) |
|
265 |
|
266 |
|
267 def check_mandatory_relations(schema, session, eids, fix=1): |
|
268 """check entities missing some mandatory relation""" |
|
269 print 'Checking mandatory relations' |
|
270 for rschema in schema.relations(): |
|
271 if rschema.final or rschema in PURE_VIRTUAL_RTYPES: |
|
272 continue |
|
273 smandatory = set() |
|
274 omandatory = set() |
|
275 for rdef in rschema.rdefs.values(): |
|
276 if rdef.cardinality[0] in '1+': |
|
277 smandatory.add(rdef.subject) |
|
278 if rdef.cardinality[1] in '1+': |
|
279 omandatory.add(rdef.object) |
|
280 for role, etypes in (('subject', smandatory), ('object', omandatory)): |
|
281 for etype in etypes: |
|
282 if role == 'subject': |
|
283 rql = 'Any X WHERE NOT X %s Y, X is %s' % (rschema, etype) |
|
284 else: |
|
285 rql = 'Any X WHERE NOT Y %s X, X is %s' % (rschema, etype) |
|
286 for entity in session.execute(rql).entities(): |
|
287 print >> sys.stderr, '%s #%s is missing mandatory %s relation %s' % ( |
|
288 entity.__regid__, entity.eid, role, rschema) |
|
289 if fix: |
|
290 #if entity.cw_describe()['source']['uri'] == 'system': XXX |
|
291 entity.delete() |
|
292 notify_fixed(fix) |
|
293 |
|
294 |
|
295 def check_mandatory_attributes(schema, session, eids, fix=1): |
|
296 """check for entities stored in the system source missing some mandatory |
|
297 attribute |
|
298 """ |
|
299 print 'Checking mandatory attributes' |
|
300 for rschema in schema.relations(): |
|
301 if not rschema.final or rschema in VIRTUAL_RTYPES: |
|
302 continue |
|
303 for rdef in rschema.rdefs.values(): |
|
304 if rdef.cardinality[0] in '1+': |
|
305 rql = 'Any X WHERE X %s NULL, X is %s, X cw_source S, S name "system"' % ( |
|
306 rschema, rdef.subject) |
|
307 for entity in session.execute(rql).entities(): |
|
308 print >> sys.stderr, '%s #%s is missing mandatory attribute %s' % ( |
|
309 entity.__regid__, entity.eid, rschema) |
|
310 if fix: |
|
311 entity.delete() |
|
312 notify_fixed(fix) |
265 |
313 |
266 |
314 |
267 def check_metadata(schema, session, eids, fix=1): |
315 def check_metadata(schema, session, eids, fix=1): |
268 """check entities has required metadata |
316 """check entities has required metadata |
269 |
317 |