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
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'}
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
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"}
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'}
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)
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)
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)
def getPrototypes(self): return to_vect([jarray.array([], java.lang.Class)])