server/checkintegrity.py
branchstable
changeset 7036 63386b35ec69
parent 7035 8d2cf36bd79d
child 7040 9b1f9bc74f5d
equal deleted inserted replaced
7035:8d2cf36bd79d 7036:63386b35ec69
   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