Example #1
0
    def getIDsForValue(self, field_name, value):
        logger.debug('case index lookup %s %s' % (field_name, value))

        if (field_name, value) not in self.cached_lookups:
            if field_name == 'case-id':
                cases = [self.read_object(value)]
            else:
                try:
                    get_val = {
                        'case-type': lambda c: c.getTypeId(),
                        'case-status': lambda c: 'closed' if c.isClosed() else 'open',
                    }[field_name]
                except KeyError:
                    # Try any unrecognized field name as a case id field.
                    # Needed for 'case-in-goal' lookup in PACT Care Plan app.
                    cases = [self.read_object(value)]
                else:
                    cases = [c for c in self.objects.values() if get_val(c) == value]

            self.cached_lookups[(field_name, value)] = cases

        cases = self.cached_lookups[(field_name, value)]
        id_map = dict((v, k) for k, v in self.ids.iteritems())
        try:
            return to_vect(id_map[c.getCaseId()] for c in cases)
        except KeyError:
            # Case was not found in id_map
            raise CaseNotFound
Example #2
0
    def answer_question(self, answer, _ix=None):
        ix = self.parse_ix(_ix)
        event = self.cur_event if ix is None else self.__parse_event(ix)

        if event['type'] != 'question':
            raise ValueError('not currently on a question')

        datatype = event['datatype']
        if datatype == 'unrecognized':
            # don't commit answers to unrecognized questions, since we
            # couldn't parse what was originally there. whereas for
            # _unsupported_ questions, we're parsing and re-committing the
            # answer verbatim
            return {'status': 'success'}

        def multians(a):
            if hasattr(a, '__iter__'):
                return a
            else:
                return str(a).split()

        if answer == None or str(
                answer).strip() == '' or answer == [] or datatype == 'info':
            ans = None
        elif datatype == 'int':
            ans = IntegerData(int(answer))
        elif datatype == 'longint':
            ans = LongData(int(answer))
        elif datatype == 'float':
            ans = DecimalData(float(answer))
        elif datatype == 'str':
            ans = StringData(str(answer))
        elif datatype == 'date':
            ans = DateData(
                to_jdate(datetime.strptime(str(answer), '%Y-%m-%d').date()))
        elif datatype == 'time':
            ans = TimeData(
                to_jtime(datetime.strptime(str(answer), '%H:%M').time()))
        elif datatype == 'select':
            ans = SelectOneData(event['choices'][int(answer) - 1].to_sel())
        elif datatype == 'multiselect':
            ans = SelectMultiData(
                to_vect(event['choices'][int(k) - 1].to_sel()
                        for k in multians(answer)))
        elif datatype == 'geo':
            ans = GeoPointData(
                to_arr((float(x) for x in multians(answer)), 'd'))

        result = self.fec.answerQuestion(*([ans] if ix is None else [ix, ans]))
        if result == self.fec.ANSWER_REQUIRED_BUT_EMPTY:
            return {'status': 'error', 'type': 'required'}
        elif result == self.fec.ANSWER_CONSTRAINT_VIOLATED:
            q = self.fem.getQuestionPrompt(*([] if ix is None else [ix]))
            return {
                'status': 'error',
                'type': 'constraint',
                'reason': q.getConstraintText()
            }
        elif result == self.fec.ANSWER_OK:
            return {'status': 'success'}
Example #3
0
    def getIDsForValue(self, field_name, value):
        logger.debug('case index lookup %s %s' % (field_name, value))

        if (field_name, value) not in self.cached_lookups:
            if field_name == 'case-id':
                cases = [self.read_object(value)]
            else:
                try:
                    get_val = {
                        'case-type':
                        lambda c: c.getTypeId(),
                        'case-status':
                        lambda c: 'closed' if c.isClosed() else 'open',
                    }[field_name]
                except KeyError:
                    # Try any unrecognized field name as a case id field.
                    # Needed for 'case-in-goal' lookup in PACT Care Plan app.
                    cases = [self.read_object(value)]
                else:
                    cases = [
                        c for c in self.objects.values() if get_val(c) == value
                    ]

            self.cached_lookups[(field_name, value)] = cases

        cases = self.cached_lookups[(field_name, value)]
        id_map = dict((v, k) for k, v in self.ids.iteritems())
        try:
            return to_vect(id_map[c.getCaseId()] for c in cases)
        except KeyError:
            # Case was not found in id_map
            raise CaseNotFound
Example #4
0
    def answer_question(self, answer, _ix=None):
        ix = self.parse_ix(_ix)
        event = self.cur_event if ix is None else self.__parse_event(ix)

        if event["type"] != "question":
            raise ValueError("not currently on a question")

        datatype = event["datatype"]
        if datatype == "unrecognized":
            # don't commit answers to unrecognized questions, since we
            # couldn't parse what was originally there. whereas for
            # _unsupported_ questions, we're parsing and re-committing the
            # answer verbatim
            return {"status": "success"}

        def multians(a):
            if hasattr(a, "__iter__"):
                return a
            else:
                return str(a).split()

        if answer == None or str(answer).strip() == "" or answer == []:
            ans = None
        elif datatype == "int":
            if isinstance(int(answer), long):
                ans = LongData(int(answer))
            else:
                ans = IntegerData(int(answer))
        elif datatype == "longint":
            ans = LongData(int(answer))
        elif datatype == "float":
            ans = DecimalData(float(answer))
        elif datatype == "str" or datatype == "info" or datatype == "barcode":
            ans = StringData(str(answer))
        elif datatype == "date":
            ans = DateData(to_jdate(datetime.strptime(str(answer), "%Y-%m-%d").date()))
        elif datatype == "time":
            ans = TimeData(to_jtime(datetime.strptime(str(answer), "%H:%M").time()))
        elif datatype == "select":
            ans = SelectOneData(event["choices"][int(answer) - 1].to_sel())
        elif datatype == "multiselect":
            ans = SelectMultiData(to_vect(event["choices"][int(k) - 1].to_sel() for k in multians(answer)))
        elif datatype == "geo":
            ans = GeoPointData(to_arr((float(x) for x in multians(answer)), "d"))

        result = self.fec.answerQuestion(*([ans] if ix is None else [ix, ans]))
        if result == self.fec.ANSWER_REQUIRED_BUT_EMPTY:
            return {"status": "error", "type": "required"}
        elif result == self.fec.ANSWER_CONSTRAINT_VIOLATED:
            q = self.fem.getQuestionPrompt(*([] if ix is None else [ix]))
            return {"status": "error", "type": "constraint", "reason": q.getConstraintText()}
        elif result == self.fec.ANSWER_OK:
            return {"status": "success"}
Example #5
0
    def answer_question (self, answer, _ix=None):
        ix = self.parse_ix(_ix)
        event = self.cur_event if ix is None else self.__parse_event(ix)

        if event['type'] != 'question':
            raise ValueError('not currently on a question')

        datatype = event['datatype']
        if datatype == 'unrecognized':
            # don't commit answers to unrecognized questions, since we
            # couldn't parse what was originally there. whereas for
            # _unsupported_ questions, we're parsing and re-committing the
            # answer verbatim
            return {'status': 'success'}

        def multians(a):
            if hasattr(a, '__iter__'):
                return a
            else:
                return str(a).split()

        if answer == None or str(answer).strip() == '' or answer == []:
            ans = None
        elif datatype == 'int':
            if isinstance(int(answer), long):
                ans = LongData(int(answer))
            else:
                ans = IntegerData(int(answer))
        elif datatype == 'longint':
            ans = LongData(int(answer))
        elif datatype == 'float':
            ans = DecimalData(float(answer))
        elif datatype == 'str' or datatype == 'info':
            ans = StringData(str(answer))
        elif datatype == 'date':
            ans = DateData(to_jdate(datetime.strptime(str(answer), '%Y-%m-%d').date()))
        elif datatype == 'time':
            ans = TimeData(to_jtime(datetime.strptime(str(answer), '%H:%M').time()))
        elif datatype == 'select':
            ans = SelectOneData(event['choices'][int(answer) - 1].to_sel())
        elif datatype == 'multiselect':
            ans = SelectMultiData(to_vect(event['choices'][int(k) - 1].to_sel() for k in multians(answer)))
        elif datatype == 'geo':
            ans = GeoPointData(to_arr((float(x) for x in multians(answer)), 'd'))

        result = self.fec.answerQuestion(*([ans] if ix is None else [ix, ans]))
        if result == self.fec.ANSWER_REQUIRED_BUT_EMPTY:
            return {'status': 'error', 'type': 'required'}
        elif result == self.fec.ANSWER_CONSTRAINT_VIOLATED:
            q = self.fem.getQuestionPrompt(*([] if ix is None else [ix]))
            return {'status': 'error', 'type': 'constraint', 'reason': q.getConstraintText()}
        elif result == self.fec.ANSWER_OK:
            return {'status': 'success'}
Example #6
0
    def getIDsForValue(self, field_name, value):
        logger.debug('ledger lookup %s %s' % (field_name, value))
        if (field_name, value) not in self.cached_lookups:
            if field_name == 'entity-id':
                ledgers = [self.read_object(value)]
            else:
                raise NotImplementedError("Only entity-id lookup is currently supported!")

            self.cached_lookups[(field_name, value)] = ledgers

        else:
            ledgers = self.cached_lookups[(field_name, value)]

        id_map = dict((v, k) for k, v in self.ids.iteritems())
        return to_vect(id_map[l.getEntiyId()] for l in ledgers)
Example #7
0
    def getIDsForValue(self, field_name, value):
        logger.debug('ledger lookup %s %s' % (field_name, value))
        if (field_name, value) not in self.cached_lookups:
            if field_name == 'entity-id':
                ledgers = [self.read_object(value)]
            else:
                raise NotImplementedError(
                    "Only entity-id lookup is currently supported!")

            self.cached_lookups[(field_name, value)] = ledgers

        else:
            ledgers = self.cached_lookups[(field_name, value)]

        id_map = dict((v, k) for k, v in self.ids.iteritems())
        return to_vect(id_map[l.getEntiyId()] for l in ledgers)
Example #8
0
    def getIDsForValue(self, field_name, value):
        logging.debug('case index lookup %s %s' % (field_name, value))

        if (field_name, value) not in self.cached_lookups:

            get_val = {
                'case-id': lambda c: c.getCaseId(),
                'case-type': lambda c: c.getTypeId(),
                'case-status': lambda c: 'closed' if c.isClosed() else 'open',
            }[field_name]

            cases = [c for c in self.cases.values() if get_val(c) == value]
            self.cached_lookups[(field_name, value)] = cases

        cases = self.cached_lookups[(field_name, value)]
        id_map = dict((v, k) for k, v in self.case_ids.iteritems())
        return to_vect(id_map[c.getCaseId()] for c in cases)
Example #9
0
    def getIDsForValue(self, field_name, value):
        logging.debug('case index lookup %s %s' % (field_name, value))

        if (field_name, value) not in self.cached_lookups:

            get_val = {
                'case-id': lambda c: c.getCaseId(),
                'case-type': lambda c: c.getTypeId(),
                'case-status': lambda c: 'closed' if c.isClosed() else 'open',
            }[field_name]
            
            cases = [c for c in self.cases.values() if get_val(c) == value]
            self.cached_lookups[(field_name, value)] = cases

        cases = self.cached_lookups[(field_name, value)]
        id_map = dict((v, k) for k, v in self.case_ids.iteritems())
        return to_vect(id_map[c.getCaseId()] for c in cases)
Example #10
0
 def getPrototypes(self):
     return to_vect([jarray.array([], java.lang.Class)])
Example #11
0
 def getPrototypes(self):
     return to_vect([jarray.array([], java.lang.Class)])