def drop( self, items: Union[str, List[str]] ) -> Union['QuestionGroup', SingleTypeQuestionGroups, MixedTypeQuestionGroups]: if isinstance(items, str): items = [items] items = OrderedDict([ (question_name, question) for question_name, question in self._item_dict.items() if question_name not in items ]) if all_are(items.values(), CountQuestion): return CountQuestionGroup(items) elif all_are(items.values(), FreeTextQuestion): return FreeTextQuestionGroup(items) elif all_are(items.values(), LikertQuestion): return LikertQuestionGroup(items) elif all_are(items.values(), MultiChoiceQuestion): return MultiChoiceQuestionGroup(items) elif all_are(items.values(), PositiveMeasureQuestion): return PositiveMeasureQuestionGroup(items) elif all_are(items.values(), RankedChoiceQuestion): return RankedChoiceQuestionGroup(items) elif all_are(items.values(), SingleChoiceQuestion): return SingleChoiceQuestionGroup(items) elif all_are(items.values(), CategoricalQuestion): return CategoricalQuestionGroup(items) elif all_are(items.values(), NumericalQuestion): return NumericalQuestionGroup(items) else: return QuestionGroup(items)
def __init__(self, questions: Dict[str, FreeTextQuestion] = None): if not all_are(questions.values(), FreeTextQuestion): raise TypeError('Not all attributes are FreeTextQuestions.') self._questions: List[FreeTextQuestion] = [q for q in questions.values()] self._item_dict: Dict[str, FreeTextQuestion] = questions for property_name, question in questions.items(): try: setattr(self, property_name, question) except: print(f'Warning - could not set dynamic property' f' for Question: {question}')
def __init__(self, attributes: Dict[str, PositiveMeasureAttribute] = None): if not all_are(attributes.values(), PositiveMeasureAttribute): raise TypeError('Not all attributes are PositiveMeasureAttribute.') self._attributes: List[PositiveMeasureAttribute] = [ a for a in attributes.values() ] self._item_dict: Dict[str, PositiveMeasureAttribute] = attributes for property_name, attribute in attributes.items(): try: setattr(self, property_name, attribute) except: print(f'Warning - could not set dynamic property' f' for Attribute: {attribute}')
def new_question_group( self, names: Union[List[str], Dict[str, str]] ) -> Union[SingleTypeQuestionGroups, MixedTypeQuestionGroups, 'QuestionGroup']: """ Return a new QuestionGroup from named items of the Group. :param names: Names of items to return in the QuestionGroup or mapping from existing names to new names. """ group_items: Dict[str, Question] = {} for name in names: item = self._find_item(name) if not (isinstance(item, Question) or isinstance(item, QuestionContainerMixin)): raise TypeError( f'Item {item} is not a Question or QuestionGroup.') if isinstance(names, list): group_items[name] = item elif isinstance(names, dict): group_items[names[name]] = item else: raise TypeError('names should be List[str] or Dict[str, str]') questions = list(group_items.values()) if all_are(questions, CountQuestion): return CountQuestionGroup(group_items) elif all_are(questions, FreeTextQuestion): return FreeTextQuestionGroup(group_items) elif all_are(questions, LikertQuestion): return LikertQuestionGroup(group_items) elif all_are(questions, MultiChoiceQuestion): return MultiChoiceQuestionGroup(group_items) elif all_are(questions, PositiveMeasureQuestion): return PositiveMeasureQuestionGroup(group_items) elif all_are(questions, RankedChoiceQuestion): return RankedChoiceQuestionGroup(group_items) elif all_are(questions, SingleChoiceQuestion): return SingleChoiceQuestionGroup(group_items) else: return QuestionGroup(items=group_items)