mirror of
https://gitlab.crans.org/bde/nk20-scripts
synced 2025-02-25 09:26:30 +00:00
Compare commits
3 Commits
86bc2d2698
...
c4f128786d
Author | SHA1 | Date | |
---|---|---|---|
c4f128786d | |||
861f03eb6d | |||
48d9a8b5d2 |
62
README.md
62
README.md
@ -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;'"
|
|
||||||
```
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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"]
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user