from otree.api import Currency as c, currency_range from . import pages from ._builtin import Bot from .models import C,choices_list,choice_support_list from html.parser import HTMLParser import logging class MyHTMLParser(HTMLParser): def __init__(self): super().__init__() self.fields = {} def handle_starttag(self, tag, attrs): if tag in ['input', 'select', 'textarea']: attrs_dict = dict(attrs) field_name = attrs_dict.get('name') if field_name: if tag == 'select': self.fields[field_name] = [] elif tag == 'input' and attrs_dict.get('type') == 'radio': value = attrs_dict.get('value', '') field_values = self.fields.get(field_name, []) field_values.append(value) self.fields[field_name] = field_values def handle_data(self, data): if data.strip() and len(self.fields) > 0: field_name = next(reversed(self.fields)) field_values = self.fields[field_name] field_values.append(data.strip()) self.fields[field_name] = field_values class PlayerBot(Bot): cases = list(range(0, 5)) start_after=0 inputs_cases= {'basic':{''}} def form_for_case(self,field_name,i,choice_list = choices_list): print(field_name) print(choice_list) if field_name in choice_list: return choice_list.get(field_name,choice_support_list)[i % len(choice_list[field_name])] else : return '0' def play_round(self): logging.error('TEST') if self.case >= self.start_after: for page in pages.page_sequence[0:self.case-self.start_after]: parser = MyHTMLParser() myhtml = str(self.html) # Parse the HTML content parser.feed(myhtml) dform = {field_name: self.form_for_case(field_name, 0, field_values) for field_name, field_values in parser.fields.items()} print(dform) yield (page, dform) def play_round_MAN(selfs): yield (pages.Decisions,{'court_decision':'1-generally to the left'}) yield (pages.Profile, {'age': '0', 'political_ide': '1-very left wing', 'political_aff': '1-voted for a party not in the coalition', 'political_gov_sup': '1-Strongly Oppose', 'sex': '1-Male', 'status': '1-Foreign', 'educ': '1-Did not finish high school'})