예제 #1
0
    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}')
예제 #3
0
    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}')
예제 #4
0
    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)