cubicweb/misc/scripts/repair_splitbrain_ldapuser_source.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Sat, 16 Jan 2016 13:48:51 +0100
changeset 11057 0b59724cb3f2
parent 10589 misc/scripts/repair_splitbrain_ldapuser_source.py@7c23b7de2b8d
permissions -rw-r--r--
Reorganize source tree to have a "cubicweb" top-level package Basically: mkdir cubicweb hg mv *.py -X setup.py cubicweb hg mv dataimport devtools entities etwist ext hooks i18n misc schemas server skeleton sobjects test web wsgi cubicweb Other changes: * adjust path to cubicweb-ctl in devtools tests * update setup.py to avoid importing __pkginfo__ (exec it instead), replace os.path.walk by os.walk and prepend `modname` here and there * update tox.ini to account for new test locations * update doc/conf.py so that it still finds __pkginfo__.py and CWDIR in doc/Makefile
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     1
"""
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     2
CAUTION: READ THIS CAREFULLY
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     3
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     4
Sometimes it happens that ldap (specifically ldapuser type) source
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     5
yield "ghost" users. The reasons may vary (server upgrade while some
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     6
instances are still running & syncing with the ldap source, unmanaged
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     7
updates to the upstream ldap, etc.).
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     8
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
     9
This script was written and refined enough times that we are confident
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    10
in that it does something reasonnable (at least it did for the
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    11
target application).
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    12
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    13
However you should really REALLY understand what it does before
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    14
deciding to apply it for you. And then ADAPT it tou your needs.
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    15
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    16
"""
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    17
from __future__ import print_function
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    18
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    19
import base64
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    20
from collections import defaultdict
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    21
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    22
from cubicweb.server.session import hooks_control
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    23
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    24
try:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    25
    source_name, = __args__
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    26
    source = repo.sources_by_uri[source_name]
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    27
except ValueError:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    28
    print('you should specify the source name as script argument (i.e. after --'
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    29
          ' on the command line)')
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    30
    sys.exit(1)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    31
except KeyError:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    32
    print('%s is not an active source' % source_name)
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    33
    sys.exit(1)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    34
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    35
# check source is reachable before doing anything
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    36
if not source.get_connection().cnx:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    37
    print('%s is not reachable. Fix this before running this script' % source_name)
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    38
    sys.exit(1)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    39
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    40
def find_dupes():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    41
    # XXX this retrieves entities from a source name "ldap"
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    42
    #     you will want to adjust
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    43
    rset = sql("SELECT eid, extid FROM entities WHERE source='%s'" % source_name)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    44
    extid2eids = defaultdict(list)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    45
    for eid, extid in rset:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    46
        extid2eids[extid].append(eid)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    47
    return dict((base64.b64decode(extid).lower(), eids)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    48
                for extid, eids in extid2eids.items()
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    49
                if len(eids) > 1)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    50
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    51
def merge_dupes(dupes, docommit=False):
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    52
    gone_eids = []
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    53
    CWUser = schema['CWUser']
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    54
    for extid, eids in dupes.items():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    55
        newest = eids.pop() # we merge everything on the newest
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    56
        print('merging ghosts of', extid, 'into', newest)
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    57
        # now we merge pairwise into the newest
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    58
        for old in eids:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    59
            subst = {'old': old, 'new': newest}
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    60
            print('  merging', old)
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    61
            gone_eids.append(old)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    62
            for rschema in CWUser.subject_relations():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    63
                if rschema.final or rschema == 'identity':
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    64
                    continue
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    65
                if CWUser.rdef(rschema, 'subject').composite == 'subject':
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    66
                    # old 'composite' property is wiped ...
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    67
                    # think about email addresses, excel preferences
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    68
                    for eschema in rschema.objects():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    69
                        rql('DELETE %s X WHERE U %s X, U eid %%(old)s' % (eschema, rschema), subst)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    70
                else:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    71
                    # relink the new user to its old relations
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    72
                    rql('SET NU %s X WHERE NU eid %%(new)s, NOT NU %s X, OU %s X, OU eid %%(old)s' %
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    73
                        (rschema, rschema, rschema), subst)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    74
                    # delete the old relations
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    75
                    rql('DELETE U %s X WHERE U eid %%(old)s' % rschema, subst)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    76
            # same thing ...
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    77
            for rschema in CWUser.object_relations():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    78
                if rschema.final or rschema == 'identity':
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    79
                    continue
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    80
                rql('SET X %s NU WHERE NU eid %%(new)s, NOT X %s NU, X %s OU, OU eid %%(old)s' %
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    81
                    (rschema, rschema, rschema), subst)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    82
                rql('DELETE X %s U WHERE U eid %%(old)s' % rschema, subst)
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    83
    if not docommit:
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    84
        rollback()
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    85
        return
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    86
    commit() # XXX flushing operations is wanted rather than really committing
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    87
    print('clean up entities table')
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    88
    sql('DELETE FROM entities WHERE eid IN (%s)' % (', '.join(str(x) for x in gone_eids)))
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    89
    commit()
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    90
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    91
def main():
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    92
    dupes = find_dupes()
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    93
    if not dupes:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    94
        print('No duplicate user')
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    95
        return
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    96
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
    97
    print('Found %s duplicate user instances' % len(dupes))
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    98
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
    99
    while True:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
   100
        print('Fix or dry-run? (f/d)  ... or Ctrl-C to break out')
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   101
        answer = raw_input('> ')
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   102
        if answer.lower() not in 'fd':
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   103
            continue
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 8568
diff changeset
   104
        print('Please STOP THE APPLICATION INSTANCES (service or interactive), and press Return when done.')
8568
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   105
        raw_input('<I swear all running instances and workers of the application are stopped>')
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   106
        with hooks_control(session, session.HOOKS_DENY_ALL):
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   107
            merge_dupes(dupes, docommit=answer=='f')
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   108
56d9eb013feb [misc/scripts] a slightly experimental script to help repair LDAPUser cwusers suffering from split-brainite (closes #2497108)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
diff changeset
   109
main()