diff --git a/docbow_project/docbow/management/commands/sync-tabellio.py b/docbow_project/docbow/management/commands/sync-tabellio.py index ded270f..2cd12c7 100644 --- a/docbow_project/docbow/management/commands/sync-tabellio.py +++ b/docbow_project/docbow/management/commands/sync-tabellio.py @@ -34,6 +34,7 @@ class Command(BaseCommand): comppols = {} + # connect to tabellio database conn = psycopg2.connect("host=%s dbname=%s user=%s password=%s" % ( settings.TABELLIO_DBHOST, settings.TABELLIO_DBNAME, @@ -41,6 +42,8 @@ class Command(BaseCommand): settings.TABELLIO_DBPASSWORD)) cur = conn.cursor() + # get list of persons that are neither deputy or ministre so they can + # be disabled if they exists in docbow cur.execute('''SELECT t_pers.nom, t_pers.prenom FROM t_pers WHERE t_pers.st != 'S_PARL' @@ -58,17 +61,21 @@ class Command(BaseCommand): try: user = User.objects.get(username=username) except User.DoesNotExist: + # a user didn't exist for that person, fine. continue if not user.is_active: + # the user was already disabled, ok. continue if verbose: print 'disabling', username - user.is_active = False + # disable the user + user.is_active = False user.save() + # remove the user from lists if user in parl_list.members.all(): parl_list.members.remove(user) parl_list.save() @@ -76,6 +83,8 @@ class Command(BaseCommand): ministres_list.members.remove(user) ministres_list.save() + + # get current deputies cur.execute('''SELECT t_pers.nom, t_pers.prenom, t_adresse.email, t_comppol.abbr FROM t_pers, t_pershistoline, t_adresse, t_comppol WHERE t_pers.st = 'S_PARL' @@ -105,6 +114,8 @@ class Command(BaseCommand): user.is_active = True if created: + # this is a new user, assign a password and print the info on + # stdout pw = create_password() user.set_password(pw) if verbose: @@ -112,9 +123,11 @@ class Command(BaseCommand): user.save() + # create/update matching docbow profile profile, created = DocbowProfile.objects.get_or_create(user=user) profile.personal_email = email + # update mailing lists if not user in parl_list.members.all(): parl_list.members.add(user) parl_list.save() @@ -122,20 +135,25 @@ class Command(BaseCommand): ministres_list.members.remove(user) ministres_list.save() + # keep track of its political group, to be used later if not comppol in comppols: comppols[comppol] = [] comppols[comppol].append(user) + # create mailing lists for political groups for comppol, members in comppols.items(): maillist, created = MailingList.objects.get_or_create( name=u'Appartenance politique - %s' % comppol) + # remove members of the list that should no longer be in there for member in maillist.members.all(): if member not in members: maillist.members.remove(member) + # add new members for member in members: if member not in maillist.members.all(): maillist.members.add(member) + # get current ministres cur.execute('''SELECT t_pers.nom, t_pers.prenom, t_adresse.email FROM t_pers, t_pershistoline, t_adresse WHERE t_pers.st = 'S_MINISTRE' @@ -164,6 +182,8 @@ class Command(BaseCommand): user.is_active = True if created: + # this is a new user, assign a password and print the info on + # stdout pw = create_password() user.set_password(pw) if verbose: @@ -171,9 +191,11 @@ class Command(BaseCommand): user.save() + # create/update matching docbow profile profile, created = DocbowProfile.objects.get_or_create(user=user) profile.personal_email = email + # update mailing lists if user in parl_list.members.all(): parl_list.members.remove(user) parl_list.save()