misc/scripts/ldapuser2ldapfeed.py
changeset 8188 1867e252e487
child 8468 f52bb4226020
child 8483 4ba11607d84a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/scripts/ldapuser2ldapfeed.py	Tue Jan 31 21:43:24 2012 +0100
@@ -0,0 +1,76 @@
+"""turn a pyro source into a datafeed source
+
+Once this script is run, execute c-c db-check to cleanup relation tables.
+"""
+import sys
+
+try:
+    source_name, = __args__
+    source = repo.sources_by_uri[source_name]
+except ValueError:
+    print('you should specify the source name as script argument (i.e. after --'
+          ' on the command line)')
+    sys.exit(1)
+except KeyError:
+    print '%s is not an active source' % source_name
+    sys.exit(1)
+
+# check source is reachable before doing anything
+if not source.get_connection().cnx:
+    print '%s is not reachable. Fix this before running this script' % source_name
+    sys.exit(1)
+
+raw_input('Ensure you have shutdown all instances of this application before continuing.'
+          ' Type enter when ready.')
+
+system_source = repo.system_source
+
+from datetime import datetime
+from cubicweb.server.edition import EditedEntity
+
+
+session.mode = 'write' # hold on the connections set
+
+print '******************** backport entity content ***************************'
+
+todelete = {}
+for entity in rql('Any X WHERE X cw_source S, S eid %(s)s', {'s': source.eid}).entities():
+        etype = entity.__regid__
+        if not source.support_entity(etype):
+            print "source doesn't support %s, delete %s" % (etype, entity.eid)
+        else:
+            try:
+                entity.complete()
+            except Exception:
+                print '%s %s much probably deleted, delete it (extid %s)' % (
+                    etype, entity.eid, entity.cw_metainformation()['extid'])
+            else:
+                print 'get back', etype, entity.eid
+                entity.cw_edited = EditedEntity(entity, **entity.cw_attr_cache)
+                if not entity.creation_date:
+                    entity.cw_edited['creation_date'] = datetime.now()
+                if not entity.modification_date:
+                    entity.cw_edited['modification_date'] = datetime.now()
+                if not entity.upassword:
+                    entity.cw_edited['upassword'] = u''
+                if not entity.cwuri:
+                    entity.cw_edited['cwuri'] = '%s/?dn=%s' % (
+                        source.urls[0], entity.cw_metainformation()['extid'])
+                print entity.cw_edited
+                system_source.add_entity(session, entity)
+                sql("UPDATE entities SET source='system' "
+                    "WHERE eid=%(eid)s", {'eid': entity.eid})
+                continue
+        todelete.setdefault(etype, []).append(entity)
+
+# only cleanup entities table, remaining stuff should be cleaned by a c-c
+# db-check to be run after this script
+for entities in todelete.values():
+    system_source.delete_info_multi(session, entities, source_name)
+
+
+source_ent = rql('CWSource S WHERE S eid %(s)s', {'s': source.eid}).get_entity(0, 0)
+source_ent.set_attributes(type=u"ldapfeed", parser=u"ldapfeed")
+
+
+commit()