예제 #1
0
def listRooms():
    rooms = Room.select().join(Patient, JOIN.LEFT_OUTER)
    return_list = []
    for room in rooms:
        ret_dict = {
            u'room': room.name,
            u'priority': room.priority,
            u'message': room.message
        }
        if room.patient is None:
            ret_dict[u'empty'] = True
            ret_dict[u'patient'] = None
        else:
            patient = {
                u'id': room.patient.patId,
                u'name': room.patient.name,
                u'surname': room.patient.surname,
                u'title': room.patient.title
            }
            ret_dict[u'patient'] = patient
            ret_dict[u'empty'] = False

        return_list.append(ret_dict)

    return CallResult(return_list)
예제 #2
0
    def read_current_browsing_intent(self, *args):
        def get_and_decode_json_arg(argument_list):
            if len(argument_list) != 1:
                raise Exception(
                    "'read_current_browsing_intent' accepts exactly 1 argument, browsing_session_id_obj."
                )
            browsing_session_id_json = argument_list[0]

            # parse arguments for validity before processing
            if not isinstance(browsing_session_id_json,
                              unicode) and not isinstance(
                                  browsing_session_id_json, str):
                raise Exception(
                    "browsing_session_id_obj must be a unicode or string object. It is {}"
                    .format(type(browsing_session_id_json)))

            try:
                return json.loads(browsing_session_id_json)
            except ValueError:
                print("Decoding JSON argument has failed")
                raise Exception("Decoding JSON argument has failed")

        def check_input_dict_for_id(browsing_data):
            try:
                db_id = browsing_data['id']
                if not isinstance(db_id, unicode) and not isinstance(
                        db_id, str):
                    raise Exception("'id' must be a unicode or string object.")
                db_id = int(db_id)
            except KeyError:
                raise Exception(
                    "id' key is not present in browsing data JSON object.")

            return db_id

        def make_return_dictionary():
            current_intent = browsing_data_row.current_intent
            cta_url = "https://picbackend.herokuapp.com/v2/cta/?intent=" + current_intent
            return_value = {
                'current_intent': current_intent,
                'cta_url': cta_url,
            }

            return return_value

        browsing_session_id_dict = get_and_decode_json_arg(args)

        browsing_session_data_row_id = check_input_dict_for_id(
            browsing_session_id_dict)

        browsing_data_row = yield non_blocking_get_browsing_session_data_row_by_id(
            browsing_session_data_row_id)
        return_dictionary = make_return_dictionary()

        returnValue(CallResult(**return_dictionary))
예제 #3
0
    def delete_browsing_intent_snapshot_row(self, *args):
        def get_and_decode_json_arg(argument_list):
            if len(argument_list) != 1:
                raise Exception(
                    "'delete_browsing_intent_snapshot_row' accepts exactly 1 argument, intent_snapshot_id_obj.")
            id_json = argument_list[0]

            # parse arguments for validity before processing
            if not isinstance(id_json, unicode) and not isinstance(id_json, str):
                raise Exception(
                    "id_json must be a unicode or string object. It is {}".format(
                        type(id_json)))

            try:
                return json.loads(id_json)
            except ValueError:
                print("Decoding JSON argument has failed")
                raise Exception("Decoding JSON argument has failed")

        def check_input_dict_for_id(browsing_data):
            try:
                db_id = browsing_data['id']
                if not isinstance(db_id, unicode) and not isinstance(
                        db_id, str):
                    raise Exception("'id' must be a unicode or string object.")
                db_id = int(db_id)
            except KeyError:
                raise Exception("id' key is not present in browsing data JSON object.")

            return db_id

        def make_return_dictionary():
            return_value = {
                'id': 'deleted'
            }
            return return_value

        intent_snapshot_id_dict = get_and_decode_json_arg(args)

        intent_snapshot_id = check_input_dict_for_id(intent_snapshot_id_dict)

        intent_snapshot_row = yield non_blocking_get_intent_snapshot_row_by_id(intent_snapshot_id)

        yield intent_snapshot_row.delete()

        return_dictionary = make_return_dictionary()

        returnValue(CallResult(**return_dictionary))
예제 #4
0
    def read_browsing_intent_snapshot_rows(self, *args):
        def get_and_decode_json_arg(argument_list):
            if len(argument_list) != 1:
                raise Exception(
                    "'read_browsing_sesion_data_row' accepts exactly 1 argument, browsing_session_id_obj.")
            browsing_session_id_json = argument_list[0]

            # parse arguments for validity before processing
            if not isinstance(browsing_session_id_json, unicode) and not isinstance(browsing_session_id_json, str):
                raise Exception(
                    "browsing_session_id_obj must be a unicode or string object. It is {}".format(type(browsing_session_id_json)))

            try:
                return json.loads(browsing_session_id_json)
            except ValueError:
                print("Decoding JSON argument has failed")
                raise Exception("Decoding JSON argument has failed")

        def check_input_dict_for_id(browsing_data):
            try:
                db_id = browsing_data['id']
                if not isinstance(db_id, unicode) and not isinstance(db_id, str):
                    raise Exception("'id' must be a unicode or string object.")
                db_id = int(db_id)
            except KeyError:
                raise Exception("id' key is not present in browsing data JSON object.")

            return db_id

        def make_return_dictionary():
            return_value = {
                'intent_snapshot_rows': json.dumps([intent_snapshot_row.return_values_dict() for intent_snapshot_row in intent_snapshot_rows]),
            }

            return return_value

        browsing_session_id_dict = get_and_decode_json_arg(args)

        browsing_session_data_row_id = check_input_dict_for_id( browsing_session_id_dict)

        intent_snapshot_rows = yield non_blocking_get_intent_snapshot_rows_from_session_id(browsing_session_data_row_id)
        return_dictionary = make_return_dictionary()

        returnValue(CallResult(**return_dictionary))
예제 #5
0
 def split_name(fullname):
     forename, surname = fullname.split()
     return CallResult(forename, surname)
예제 #6
0
 def add_complex(a, ai, b, bi):
     return CallResult(c=a + b, ci=ai + bi)
예제 #7
0
 def add_complex(a, ai, b, bi):
     print("add_complex() called with {}".format((a, ai, b, bi)))
     return CallResult(c=a + b, ci=ai + bi)
예제 #8
0
 def split_name(fullname):
     print("split_name() called with '{}'".format(fullname))
     parts = fullname.split()
     return CallResult(*parts)
예제 #9
0
    def submit_browsing_data(self, *args):
        """
        This procedure takes a given id corresponding to a presence health browsing data db row along with client
        browsing data information, updates the db record, and returns relevant updated info about the entry.

        :param args: Argument list. Accepts only one argument.
                 [browsing_data_json]
                 browsing_data_json: A JSON formatted object that has the following mandatory keys.
                                     id: (type: String) Cookie id of presence health browsing data row.
                                     keyword: (type: String) keyword corresponding the given browsing data.
                                     keyword_clicks: (type: Integer) number of clicks corresponding to given keyword.
                                     keyword_hover_time: (type: Float) length of hover time corresponding to given keyword.

        :return: Returns keywords results that are accessible through the results' kwargs property.
            id: (type: Integer) Database id of newly created presence health browsing data row.
            oncology_clicks: (type: Integer) Total number of clicks corresponding to the 'oncology' keyword.
            oncology_hover_time: (type: Float) Total amount of time corresponding to the 'oncology' keyword.
        """
        def check_args_for_browsing_data(argument_list):
            """
            This function takes an argument list containing one argument, browsing_data, parses it for errors, and returns the
            JSON object retrieved from the argument list.

            :param argument_list: Argument list. Accepts only one argument.
                         [browsing_data]
                         browsing_data: (type: Unicode or String) JSON object that contains submitted browsing data.
            :return: (type: Unicode or String) JSON object that contains submitted browsing data.
            """

            if len(argument_list) != 1:
                raise Exception(
                    "'patient_assist_backend.submit_browsing_data_presence_health' accepts exactly 1 argument, browsing data."
                )
            browsing_data_json = argument_list[0]
            # parse arguments for validity before processing
            if not isinstance(browsing_data_json, unicode) and not isinstance(
                    browsing_data_json, str):
                raise Exception(
                    "browsing data must be a unicode or string object. It is {}"
                    .format(type(browsing_data_json)))

            return browsing_data_json

        def decode_json_arg(json_arg):
            """
            This function takes a JSON formatted String or Unicode object, parses it for errors, transforms it into a python
            object, and finally returns the decoded object.

            :param json_arg: (type: Unicode or String) JSON object for decoding.
            :return: (type: Dictionary) Dictionary object that contains submitted browsing data.
            """

            try:
                return json.loads(json_arg)
            except ValueError:
                print("Decoding JSON argument has failed")
                raise Exception("Decoding JSON argument has failed")

        def check_browsing_data_for_args(browsing_data):
            """
            This function takes a dictionary, parses it for parameters that are used for submitting browsing data and returns
            any errors. Finally, the function returns an argument list containing any relevant browsing data.

            :param browsing_data: (type: Dictionary) Dictionary object that contains submitted browsing data.
            :return: Argument List: [browsing_session_data_row_id, browsing_keyword, keyword_clicks, keyword_hover_time]
                     browsing_session_data_row_id: (type: String or Unicode) Cookie id of presence health browsing data instance.
                     browsing_keyword: (type: String or Unicode) Browsing data keyword to update.
                     keyword_clicks: (type: Integer) Number of clicks for corresponding keyword.
                     keyword_hover_time: (type: Float) Amount of time, in seconds, of hover time for corresponding keyword.
            """

            try:
                browsing_session_data_row_id = browsing_data['id']
                if not isinstance(browsing_session_data_row_id,
                                  unicode) and not isinstance(
                                      browsing_session_data_row_id, str):
                    raise Exception("'id' must be a unicode or string object.")
                browsing_session_data_row_id = int(
                    browsing_session_data_row_id)
            except KeyError:
                raise Exception(
                    "id' key is not present in browsing data JSON object.")

            try:
                browsing_keyword = browsing_data['keyword']
                if not isinstance(browsing_keyword,
                                  unicode) and not isinstance(
                                      browsing_keyword, str):
                    raise Exception(
                        "'keyword' must be a unicode or string object.")
                if browsing_keyword not in PRESENCE_INTENT_KEYWORDS:
                    raise Exception(
                        "'keyword' must be in the following list of accepted keywords: {}."
                        .format(json.dumps(PRESENCE_INTENT_KEYWORDS)))
            except KeyError:
                raise Exception(
                    "'keyword' key is not present in browsing data JSON object."
                )

            try:
                keyword_clicks = browsing_data['keyword_clicks']
                if not isinstance(keyword_clicks, int):
                    raise Exception("'keyword_clicks' must be an integer.")
                if keyword_clicks < 0:
                    raise Exception("'keyword_clicks' must be an positive.")
            except KeyError:
                raise Exception(
                    "'keyword_clicks' key is not present in browsing data JSON object."
                )
            try:
                keyword_hover_time = browsing_data['keyword_hover_time']
                if not isinstance(keyword_hover_time, float):
                    raise Exception(
                        "'keyword_hover_time' must be a floating point.")
                if keyword_hover_time < 0:
                    raise Exception("'keyword_hover_time' must be positive")
            except KeyError:
                raise Exception(
                    "'keyword_hover_time' key is not present in browsing data JSON object."
                )

            return browsing_session_data_row_id, browsing_keyword, keyword_clicks, keyword_hover_time

        browsing_data_json = check_args_for_browsing_data(args)

        browsing_data_raw = decode_json_arg(browsing_data_json)

        browsing_session_data_row_id, browsing_keyword, keyword_clicks, keyword_hover_time = check_browsing_data_for_args(
            browsing_data_raw)

        presence_browsing_session_data_row = yield non_blocking_get_browsing_session_data_row_by_id(
            browsing_session_data_row_id)

        presence_browsing_session_data_row = yield non_blocking_update_presence_session_row_w_submitted_data(
            presence_browsing_session_data_row, browsing_keyword,
            keyword_clicks, keyword_hover_time)

        returnValue(
            CallResult(
                **presence_browsing_session_data_row.return_values_dict()))
예제 #10
0
    def create_browsing_session_data_row(self):
        presence_data_instance = yield non_blocking_create_presence_browsing_session_data_row(
        )

        returnValue(CallResult(**presence_data_instance.return_values_dict()))