1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-03-14 17:57:39 +00:00

continue the script and few change to model

This commit is contained in:
quark 2025-02-13 02:39:33 +01:00
parent b0c3eee699
commit 19d1ecfc66
3 changed files with 126 additions and 55 deletions

View File

@ -5,20 +5,11 @@
from argparse import ArgumentParser
from django.core.management import BaseCommand
from django.db.models import Q
from note.models import Note
from member.models import User, Club
from ...models import Bde
########################################################################################################
"""
Cahier des charges :
- Un script lisible
- Avec beaucoup d'options
- Personnalisable
"""
########################################################################################################
from ...models import Bde, Wrapped
class Command(BaseCommand):
@ -63,18 +54,18 @@ class Command(BaseCommand):
dest='club',
)
parser.add_argument(
'-f', '--force',
'-f', '--force-change',
required=False,
action='store_true',
help="if wrapped already exist delete it and regenerate",
dest='force',
help="if wrapped already exist change data_json",
dest='change',
)
parser.add_argument(
'-d', '--delete',
'-n', '--no-creation',
required=False,
action='store_true',
help="delete all wrapped selectionned and don't regenerate them",
dest='delete',
action='store_false',
help="if wrapped don't already exist, don't generate it",
dest='create',
)
@ -146,8 +137,8 @@ class Command(BaseCommand):
if verb >= 0: print(abort)
return
force = options['force']
delete = options['delete']
change = options['change']
create = options['create']
# check if parameters are sufficient for generate wrapped with the desired option
if not bde:
@ -170,42 +161,130 @@ class Command(BaseCommand):
print('BDE: ' + bde_str)
if user: print('User: ' + user[0])
if club: print('Club: ' + club[0])
print('force: ' + str(force))
print('delete: ' + str(delete))
print('change: ' + str(change))
print('create: ' + str(create))
print('')
if verb >=1 and force:
if not (change or create):
if verb >= 1:
print(warning)
print(yellow + 'change and create is set to false, none wrapped will be created')
if verb >= 0:
print(abort)
return
if verb >=1 and change:
print(warning)
print(yellow + 'force is set to true, some wrapped may be deleted !')
if verb >=1 and delete:
print(yellow + 'change is set to true, some wrapped may be replaced !')
if verb >=1 and not create:
print(warning)
print(yellow + 'wrapped will be deleted !')
if verb >= 2 or force or delete:
print(yellow + 'create is set to false, wrapped will not be created !')
if verb >= 2 or change or not create:
a = str(input('\033[mContinue ? (y/n) ')).lower()
if a in ['n','no','non','0']:
if verb >= 0: print(abort)
return
# à partir de maintenant si ça foire ce n'est plus de la faute de l'utilisateur...
#########################################
#### Transform club and user in note ####
#########################################
note = self.convert_to_note(user=user, club=club, verb=verb)
if verb >= 1: print("\033[32mUser and/or Club given has successfully convert in their note\033[m")
########################
#### Delete wrapped ####
########################
global_data = self.global_data(bde, verb=verb)
if verb >= 1: print("\033[32mGlobal data has been successfully generated\033[m")
###########################################
#### Global data (in all user wrapped) ####
########## modify it each year ! ##########
###########################################
unique_data = self.unique_data(bde, note, change, create, global_data=global_data, verb=verb)
if verb >= 1: print("\033[32mUnique data has been successfully generated\033[m")
self.make_wrapped(unique_data, note, bde, change, create, verb=verb)
if verb >= 1: print(green + "The wrapped has been generated !")
if verb >= 0: print(success)
#################################
########## Unique data ##########
##### modify it each year ! #####
#################################
###############################
#### Create/Change wrapped ####
###############################
return
def convert_to_note(self, user=None, club=None, verb=1):
query = Q(pk=-1)
if user:
if 'custom' in user[0]:
for u in user[1]:
query |= Q(noteuser__user=u)
elif user[0] == 'all':
query |= Q(noteuser__user__pk__gte=-1)
elif user[0] == 'adh':
# TODO some complex query
query |= query
elif user[0] == 'superuser':
query |= Q(noteuser__user__is_superuser=True)
else:
return
if club:
if 'custom' in club[0]:
for c in club[1]:
query |= Q(noteclub__club=c)
elif club[0] == 'all':
query |= Q(noteclub__club__pk__gte=-1)
elif club[0] == 'active':
# TODO some complex query
query |= query
else:
return
if verb >= 3: print('\033[mQuery: ' + str(query))
note = Note.objects.filter(query)
return note
def global_data(self, bde, verb=1):
data = {}
for b in bde:
if b.name == 'Rave Part[list]':
# TODO
data = {}
else:
# make your wrapped or reuse previous wrapped
raise NotImplementedError("The BDE: {bde_name} has not personalized wrapped, make it !"
.format(bde_name=b.name))
return data
def unique_data(self, bde, note, change, create, global_data=None, verb=1):
data = {}
for i in range(len(bde)):
if verb >= 2: print('\033[mlen(note) = {nb}'.format(nb=len(note)))
note_filtered = self.filter_note(bde[i], note, change, create, verb=verb)
if verb >= 2: print('\033[mlen(note_after_filter) = {nb}'.format(nb=len(note_filtered)))
if bde[i].name == 'Rave Part[list]':
# TODO
data = {}
else:
# make your wrapped or reuse previous wrapped
raise NotImplementedError("The BDE: {bde_name} has not personalized wrapped, make it !"
.format(bde_name=bde[i].name))
return data
def make_wrapped(self, unique_data, note, bde, change, create, verb=1):
for i in range(len(bde)):
for j in len(note[i]):
if create and not Wrapped.objects.filter(bde=bde[i], note=note[i][j]):
Wrapped(bde=bde[i],
note=note[i][j],
data_json=unique_data[i][j],
public=False,
generated=True).save()
elif change:
w = Wrapped.objects.get(bde=bde[i], note=note[i][j])
w.data_json = unique_data[i][j]
w.save()
return
def filter_note(self, bde, note, change, create, verb=1):
if change and create:
return note
if change and not create:
note_new = []
for n in note:
if Wrapped.objects.filter(bde=bde, note=n):
note_new.append(n)
return note_new
if not change and create:
note_new = []
for n in note:
if not Wrapped.objects.filter(bde=bde, note=n):
note_new.append(n)
return note_new

View File

@ -1,4 +1,4 @@
# Generated by Django 4.2.15 on 2025-02-10 12:41
# Generated by Django 4.2.15 on 2025-02-13 01:38
from django.db import migrations, models
import django.db.models.deletion

View File

@ -79,11 +79,3 @@ class Wrapped(models.Model):
self.public = not self.public
self.save()
return
@property
def data(self):
return json.load(self.data_json)
@data.setter
def data(self, data):
self.data_json = json.dumps(data, indent=2)