1
0
mirror of https://gitlab.crans.org/bde/nk20-scripts synced 2025-02-25 09:26:30 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
c4f128786d
De l'inclusif, partout
Signed-off-by: Emmy D'ANELLO <ynerant@crans.org>
2022-08-29 13:18:58 +02:00
861f03eb6d
[scripts] Remove README and add link to documentation
Signed-off-by: Emmy D'ANELLO <ynerant@crans.org>
2022-08-29 11:54:27 +02:00
48d9a8b5d2
Replace ... by …
Signed-off-by: Emmy D'ANELLO <ynerant@crans.org>
2022-08-29 11:17:17 +02:00
5 changed files with 16 additions and 76 deletions

View File

@ -1,63 +1,3 @@
# Script de la NoteKfet 2020 # Script de la NoteKfet 2020
## Commandes Django La documentation est disponible sur <https://note.crans.org/doc/scripts/>.
> les commandes sont documentées:
> `./manage.py command --help`
- `import_nk15` :
Importe un dump de la NoteKfet 2015.
- `make_su [--STAFF|-s] [--SUPER|-S]` :
Rend actifs les pseudos renseignés.
* Si `--STAFF` ou `-s` est renseigné, donne en plus le statut d'équipe aux pseudos renseignés,
permettant l'accès à l'interface admin.
* Si `--SUPER` ou `-S` est renseigné, donne en plus le statut de super-utilisateur aux pseudos renseignés,
octroyant tous les droits sur la plateforme.
- `wei_algorithm` :
Lance l'algorithme de répartition des 1A au dernier WEI. Cela a pour effet de suggérer un bus pour tous les 1A
inscrits au dernier WEI en fonction des données rentrées dans le sondage, la validation se faisant ensuite
manuellement via l'interface Web.
- `extract_ml_registrations --type {members, clubs, events, art, sport} [--year|-y YEAR]` :
Récupère la liste des adresses mail à inscrire à une liste de diffusion donnée.
* `members` : Liste des adresses mail des utilisateurs ayant une adhésion BDE (et non Kfet) active.
* `clubs` : Liste des adresses mail de contact de tous les clubs BDE enregistrés.
* `events` : Liste de toutes les adresses mails des utilisateurs inscrits au WEI ayant demandé à s'inscrire sur
la liste de diffusion des événements du BDE.
* `art` : Liste de toutes les adresses mails des utilisateurs inscrits au WEI ayant demandé à s'inscrire sur
la liste de diffusion concertnant les actualités artistiques du BDA.
* `sport` : Liste de toutes les adresses mails des utilisateurs inscrits au WEI ayant demandé à s'inscrire sur
la liste de diffusion concertnant les actualités sportives du BDS.
Le champ `--year` est optionnel : il permet de choisir l'année du WEI en question (pour les trois dernières
options). Si non renseigné, il s'agit du dernier WEI.
Par défaut, si `--type` est non renseigné, la liste des adhérents BDE est renvoyée.
- `extract_wei_registrations [--year|-y YEAR] [--bus|-b BUS] [--team|-t TEAM] [--sep SEP]` :
Récupère la liste des inscriptions au WEI et l'exporte au format CSV. Arguments possibles, optionnels :
* `--year YEAR` : sélectionne l'année du WEI. Par défaut, il s'agit du dernier WEI ayant eu lieu.
* `--bus BUS` : filtre par bus, en récupérant uniquement les inscriptions sur un bus. Par défaut, on affiche
tous les bus.
* `--team TEAM` : filtre par équipe, en récupérant uniquement les inscriptions sur une équipe. Par défaut, on
affiche toutes les équipes. Entrer `"none"` filtre les inscriptions sans équipe (chefs de bus, ...)
* `--sep` : définit le caractère de séparation des colonnes du fichier CSV. Par défaut, il s'agit du caractère `|`.
Merci de ne pas rentrer plus d'un caractère.
## Shell
- Tabula rasa :
```shell script
sudo -u postgres sh -c "dropdb note_db && psql -c 'CREATE DATABASE note_db OWNER note;'"
```

View File

@ -57,13 +57,13 @@ class Command(BaseCommand):
if user_id.isnumeric(): if user_id.isnumeric():
qs = User.objects.filter(pk=int(user_id)) qs = User.objects.filter(pk=int(user_id))
if not qs.exists(): if not qs.exists():
self.stderr.write(self.style.WARNING(f"User {user_id} was not found. Ignoring...")) self.stderr.write(self.style.WARNING(f"User {user_id} was not found. Ignoring"))
continue continue
user = qs.get() user = qs.get()
else: else:
qs = Alias.objects.filter(normalized_name=Alias.normalize(user_id), note__noteuser__isnull=False) qs = Alias.objects.filter(normalized_name=Alias.normalize(user_id), note__noteuser__isnull=False)
if not qs.exists(): if not qs.exists():
self.stderr.write(self.style.WARNING(f"User {user_id} was not found. Ignoring...")) self.stderr.write(self.style.WARNING(f"User {user_id} was not found. Ignoring"))
continue continue
user = qs.get().note.user user = qs.get().note.user
@ -80,7 +80,7 @@ class Command(BaseCommand):
local_deleted += list(transactions) local_deleted += list(transactions)
for tr in transactions: for tr in transactions:
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
self.stdout.write(f"Removing {tr}...") self.stdout.write(f"Removing {tr}")
if force: if force:
tr.delete() tr.delete()
@ -89,7 +89,7 @@ class Command(BaseCommand):
local_deleted += list(memberships) local_deleted += list(memberships)
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
for membership in memberships: for membership in memberships:
self.stdout.write(f"Removing {membership}...") self.stdout.write(f"Removing {membership}")
if force: if force:
memberships.delete() memberships.delete()
@ -98,7 +98,7 @@ class Command(BaseCommand):
local_deleted += list(alias_set) local_deleted += list(alias_set)
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
for alias in alias_set: for alias in alias_set:
self.stdout.write(f"Removing alias {alias}...") self.stdout.write(f"Removing alias {alias}")
if force: if force:
alias_set.delete() alias_set.delete()
@ -110,7 +110,7 @@ class Command(BaseCommand):
local_deleted += list(entries) local_deleted += list(entries)
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
for entry in entries: for entry in entries:
self.stdout.write(f"Removing {entry}...") self.stdout.write(f"Removing {entry}")
if force: if force:
entries.delete() entries.delete()
@ -119,7 +119,7 @@ class Command(BaseCommand):
local_deleted += list(guests) local_deleted += list(guests)
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
for guest in guests: for guest in guests:
self.stdout.write(f"Removing guest {guest}...") self.stdout.write(f"Removing guest {guest}")
if force: if force:
guests.delete() guests.delete()
@ -131,7 +131,7 @@ class Command(BaseCommand):
local_deleted += list(credits) local_deleted += list(credits)
if kwargs['verbosity'] >= 1: if kwargs['verbosity'] >= 1:
for credit in credits: for credit in credits:
self.stdout.write(f"Removing {credit}...") self.stdout.write(f"Removing {credit}")
if force: if force:
credits.delete() credits.delete()
@ -169,9 +169,9 @@ class Command(BaseCommand):
deleted += local_deleted deleted += local_deleted
if deleted_users: if deleted_users:
message = f"Les utilisateurs {deleted_users} ont été supprimés par {executor}.\n\n" message = f"Les utilisateur⋅rices {deleted_users} ont été supprimé⋅es par {executor}.\n\n"
message += "Ont été supprimés en conséquence les objets suivants :\n\n" message += "Ont été supprimés en conséquence les objets suivants :\n\n"
for obj in deleted: for obj in deleted:
message += f"{repr(obj)} (pk: {obj.pk})\n" message += f"{repr(obj)} (pk: {obj.pk})\n"
if force and kwargs['doit']: if force and kwargs['doit']:
mail_admins("Utilisateurs supprimés", message) mail_admins("Utilisateur⋅rices supprimés", message)

View File

@ -214,7 +214,7 @@ class Command(ImportCommand):
pk_alias = Alias.objects.order_by('-id').first().id + 1 pk_alias = Alias.objects.order_by('-id').first().id + 1
for idx, row in enumerate(cur): for idx, row in enumerate(cur):
alias_name = row["alias"] alias_name = row["alias"]
alias_name = (alias_name[:252] + '...') if len(alias_name) > 255 else alias_name alias_name = (alias_name[:254] + '') if len(alias_name) > 255 else alias_name
alias_norm = Alias.normalize(alias_name) alias_norm = Alias.normalize(alias_name)
self.update_line(idx, n, alias_norm) self.update_line(idx, n, alias_norm)
# clean pseudo (normalized pseudo must be unique) # clean pseudo (normalized pseudo must be unique)

View File

@ -102,7 +102,7 @@ class Command(ImportCommand):
def _basic_transaction(self, row, obj_dict, child_dict): def _basic_transaction(self, row, obj_dict, child_dict):
if len(row["description"]) > 255: if len(row["description"]) > 255:
obj_dict["reason"] = obj_dict["reason"][:250] + "...)" obj_dict["reason"] = obj_dict["reason"][:252] + ")"
return obj_dict, None, None return obj_dict, None, None
def _template_transaction(self, row, obj_dict, child_dict): def _template_transaction(self, row, obj_dict, child_dict):
@ -221,7 +221,7 @@ class Command(ImportCommand):
"valid": row["valide"], "valid": row["valide"],
} }
if len(obj_dict["reason"]) > 255: if len(obj_dict["reason"]) > 255:
obj_dict["reason"] = obj_dict["reason"][:252] + "..." obj_dict["reason"] = obj_dict["reason"][:254] + ""
# for child transaction Models # for child transaction Models
child_dict = {"pk": pk_transaction} child_dict = {"pk": pk_transaction}
ttype = row["type"] ttype = row["type"]

View File

@ -17,10 +17,10 @@ class Command(BaseCommand):
user.is_active = True user.is_active = True
if kwargs['STAFF']: if kwargs['STAFF']:
if kwargs['verbosity'] > 0: if kwargs['verbosity'] > 0:
self.stdout.write(f"Add {user} to staff users...") self.stdout.write(f"Add {user} to staff users")
user.is_staff = True user.is_staff = True
if kwargs['SUPER']: if kwargs['SUPER']:
if kwargs['verbosity'] > 0: if kwargs['verbosity'] > 0:
self.stdout.write(f"Add {user} to superusers...") self.stdout.write(f"Add {user} to superusers")
user.is_superuser = True user.is_superuser = True
user.save() user.save()