# Copyright 2020 Matthias L. Duch
#
# This software and associated documentation files can be freely redistributed
# under the terms of the MIT License, a copy of which you should have received.
from otree.api import (
models,
widgets,
BaseConstants,
BaseSubsession,
BaseGroup,
BasePlayer,
Currency as c,
currency_range,
)
import random
import string
def genpw(len = 16, letters = string.ascii_letters + string.digits):
return ''.join(random.choices(letters, k = len))
def pwList(number_of_pws=1, pw_length=8):
uniqueKeys=[str(genpw(pw_length)) for x in [*range(number_of_pws)]]
i=1
while len(uniqueKeys) != len(set(uniqueKeys)):
print("Found duplicates while creating the list")
print(i)
uniqueKeys=[str(genpw(pw_length)) for x in [*range(number_of_pws)]]
if i > 10:
pw_length = pw_length + 1
if i == 30:
print("Error; Tried 30 times to draw a random sequence, but did not found one without duplicates... Try to increase pw_length... ")
uniqueKeys="Error"
break
i += 1
return uniqueKeys
doc = """
Der Link zur Datenspeicherung wird aus der Datei
'cler_collector/targetWebsite.txt'
gelesen. Dort darf sich nur eine Zeile mit dem session-wide Link der Umfrage befinden.
Wichtig:
Nachdem die Textdatei geändert wurde, muss der Prodserver neugestartet werden, damit die Datei von oTree gelesen wird!
Der folgende Link wurde aus der Datei 'cler_collector/targetWebsite.txt' gelesen.
Bitte vergleichen Sie den Link mit dem Ihnen zugesandten:
"""
class Constants(BaseConstants):
name_in_url = 'cler_collector'
players_per_group = None
num_rounds = 1
# Remember to restart the prodserver after changing this file!
filepath='cler_collector/targetWebsite.txt'
f = open(filepath,'r')
url_of_the_email_survey=f.readline()
f.close()
global doc # Change the doc Information displayed on the oTree Admin page
doc = doc + "" + str(url_of_the_email_survey) + ""
# Der Link zur Datenspeicherung wird aus dieser Datei gelesen. Dazu darf sich nur eine Zeile in dieser Datei befinden.
# Der Prodserver muss nach dem Einfügen oder Ändern des Links neugestartet werden!!!
class Subsession(BaseSubsession):
def creating_session(self):
n=len(self.get_players())
unique_keys=pwList(n)
i=0
for p in self.get_players():
p.uniqueID = unique_keys[i]
#print(p.uniqueID)
p.uniqueURL = Constants.url_of_the_email_survey + '?participant_label=' + p.uniqueID
i=i+1
class Group(BaseGroup):
pass
class Player(BasePlayer):
uniqueID = models.StringField()
uniqueURL = models.StringField()