from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import csv import json # from otree.models_concrete import ParticipantToPlayerLookup, RoomToSession # from otree.models.session import Session as BaseSession author = 'Philipp Chapkovski, University of Zurich - adapted' doc = """ Randomizing app sequence """ def seq_to_dict(s): r = {} l = len(s) - 1 for i, j in enumerate(s): if i < l: r[j] = s[i + 1] else: r[j] = None return r class Constants(BaseConstants): name_in_url = 'intro' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): app_seq = self.session.config.get('app_sequence') print(app_seq) for p in self.get_players(): # Séparez 'debut', 'StartApp', les apps intermédiaires et 'fin' # first_app, second_app, third_app, *middle_apps, first_last_app, second_last_app = app_seq # Mélangez uniquement les apps intermédiaires # random.shuffle(middle_apps) # print(random.shuffle(middle_apps)) # Reconstruisez la séquence en préservant la position de 'debut', 'StartApp' et 'fin' # new_app_seq = [first_app, second_app, third_app] + middle_apps + [first_last_app, second_last_app] # Assignez la nouvelle séquence au participant # p.sequence_of_apps = json.dumps(new_app_seq) # p.participant.vars['_updated_seq_apps'] = seq_to_dict(new_app_seq) # print(p.participant.vars['_updated_seq_apps']) # Séparez 'debut', 'StartApp', les apps intermédiaires et 'fin' app1, app2, app3, app4, app5, app6, app7, app8, *middle_apps, app_fin_1, app_fin_2, app_fin_3 = app_seq # Mélangez uniquement les apps intermédiaires random.shuffle(middle_apps) print(random.shuffle(middle_apps)) # Reconstruisez la séquence en préservant la position de 'debut', 'StartApp' et 'fin' new_app_seq = [app1, app2, app3, app4, app5, app6, app7, app8] + middle_apps + [app_fin_1, app_fin_2, app_fin_3 ] # Assignez la nouvelle séquence au participant p.sequence_of_apps = json.dumps(new_app_seq) p.participant.vars['_updated_seq_apps'] = seq_to_dict(new_app_seq) print(p.participant.vars['_updated_seq_apps']) class Group(BaseGroup): pass class Player(BasePlayer): sequence_of_apps = models.LongStringField()