コード例 #1
0
ファイル: contribute.py プロジェクト: mars-f/ActiveData
def send_contribute():
    """
    SEND THE contribute.json
    """
    try:
        record_request(flask.request, None, flask.request.get_data(), None)
        return Response(CONTRIBUTE, status=200)
    except Exception as e:
        Log.error("Could not return contribute.json", cause=e)
コード例 #2
0
ファイル: app.py プロジェクト: mars-f/ActiveData
def _default(path):
    record_request(flask.request, None, flask.request.get_data(), None)

    return Response(
        unicode2utf8(OVERVIEW),
        status=200,
        headers={
            "Content-Type": "text/html"
        }
    )
コード例 #3
0
def send_favicon():
    with RegisterThread():
        try:
            record_request(flask.request, None, flask.request.get_data(), None)
            content, status, mimetype = _read_file("favicon.ico")
            return Response(content,
                            status=status,
                            headers={"Content-Type": "image/x-icon"})
        except Exception as e:
            Log.error("Could not get file {{file}}",
                      file="favicon.ico",
                      cause=e)
コード例 #4
0
ファイル: static.py プロジェクト: davehunt/ActiveData
def download(filename):
    """
    DOWNLOAD FILE CONTENTS
    :param filename:  URL PATH
    :return: Response OBJECT WITH FILE CONTENT
    """
    try:
        record_request(flask.request, None, flask.request.get_data(), None)
        content, status, mimetype = _read_file(filename)
        return Response(content,
                        status=status,
                        headers={"Content-Type": mimetype})
    except Exception, e:
        Log.error("Could not get file {{file}}", file=filename, cause=e)
コード例 #5
0
ファイル: query.py プロジェクト: maggienj/ActiveData
def _send_error(active_data_timer, body, e):
    record_request(flask.request, None, body, e)
    Log.warning("Could not process\n{{body}}",
                body=body.decode("latin1"),
                cause=e)
    e = e.__data__()
    e.meta.timing.total = active_data_timer.duration.seconds

    # REMOVE TRACES, BECAUSE NICER TO HUMANS
    # def remove_trace(e):
    #     e.trace = e.trace[0:1:]
    #     for c in listwrap(e.cause):
    #         remove_trace(c)
    # remove_trace(e)

    return Response(convert.unicode2utf8(convert.value2json(e)), status=400)
コード例 #6
0
ファイル: query.py プロジェクト: maggienj/ActiveData
def query(path):
    with CProfiler():
        try:
            with Timer("total duration") as query_timer:
                preamble_timer = Timer("preamble")
                with preamble_timer:
                    if flask.request.headers.get("content-length",
                                                 "") in ["", "0"]:
                        # ASSUME A BROWSER HIT THIS POINT, SEND text/html RESPONSE BACK
                        return Response(BLANK,
                                        status=400,
                                        headers={"Content-Type": "text/html"})
                    elif int(flask.request.headers["content-length"]
                             ) > QUERY_SIZE_LIMIT:
                        Log.error("Query is too large")

                    request_body = flask.request.get_data().strip()
                    text = convert.utf82unicode(request_body)
                    text = replace_vars(text, flask.request.args)
                    data = convert.json2value(text)
                    record_request(flask.request, data, None, None)
                    if data.meta.testing:
                        _test_mode_wait(data)

                translate_timer = Timer("translate")
                with translate_timer:
                    if data.sql:
                        data = parse_sql(data.sql)
                    frum = wrap_from(data['from'])
                    result = jx.run(data, frum=frum)

                    if isinstance(
                            result, Container
                    ):  #TODO: REMOVE THIS CHECK, jx SHOULD ALWAYS RETURN Containers
                        result = result.format(data.format)

                save_timer = Timer("save")
                with save_timer:
                    if data.meta.save:
                        try:
                            result.meta.saved_as = save_query.query_finder.save(
                                data)
                        except Exception, e:
                            Log.warning("Unexpected save problem", cause=e)

                result.meta.timing.preamble = Math.round(
                    preamble_timer.duration.seconds, digits=4)
                result.meta.timing.translate = Math.round(
                    translate_timer.duration.seconds, digits=4)
                result.meta.timing.save = Math.round(
                    save_timer.duration.seconds, digits=4)
                result.meta.timing.total = "{{TOTAL_TIME}}"  # TIMING PLACEHOLDER

                with Timer("jsonification") as json_timer:
                    response_data = convert.unicode2utf8(
                        convert.value2json(result))

            with Timer("post timer"):
                # IMPORTANT: WE WANT TO TIME OF THE JSON SERIALIZATION, AND HAVE IT IN THE JSON ITSELF.
                # WE CHEAT BY DOING A (HOPEFULLY FAST) STRING REPLACEMENT AT THE VERY END
                timing_replacement = b'"total": ' + str(Math.round(query_timer.duration.seconds, digits=4)) +\
                                     b', "jsonification": ' + str(Math.round(json_timer.duration.seconds, digits=4))
                response_data = response_data.replace(
                    b'"total": "{{TOTAL_TIME}}"', timing_replacement)
                Log.note("Response is {{num}} bytes in {{duration}}",
                         num=len(response_data),
                         duration=query_timer.duration)

                return Response(
                    response_data,
                    status=200,
                    headers={"Content-Type": result.meta.content_type})
        except Exception, e:
            e = Except.wrap(e)
            return _send_error(query_timer, request_body, e)
コード例 #7
0
ファイル: sql.py プロジェクト: team-githubs/ActiveData
def sql_query(path):
    query_timer = Timer("total duration")
    request_body = None
    try:
        with query_timer:
            preamble_timer = Timer("preamble", silent=True)
            with preamble_timer:
                if flask.request.headers.get("content-length",
                                             "") in ["", "0"]:
                    # ASSUME A BROWSER HIT THIS POINT, SEND text/html RESPONSE BACK
                    return Response(BLANK,
                                    status=400,
                                    headers={"Content-Type": "text/html"})
                elif int(flask.request.headers["content-length"]
                         ) > QUERY_SIZE_LIMIT:
                    Log.error("Query is too large")

                request_body = flask.request.get_data().strip()
                text = request_body.decode('utf8')
                data = json2value(text)
                record_request(flask.request, data, None, None)

            sql_translate_timer = Timer("sql translate", silent=True)
            with sql_translate_timer:
                if not data.sql:
                    Log.error("Expecting a `sql` parameter")
                jx_query = parse_sql(data.sql)
                if jx_query['from'] != None:
                    if data.meta.testing:
                        test_mode_wait(jx_query, MAIN_THREAD.please_stop)
                    frum = find_container(jx_query['from'], after=None)
                else:
                    frum = None
                result = jx.run(jx_query, container=frum)
                if isinstance(
                        result, Container
                ):  # TODO: REMOVE THIS CHECK, jx SHOULD ALWAYS RETURN Containers
                    result = result.format(jx_query.format)
                result.meta.jx_query = jx_query

            save_timer = Timer("save")
            with save_timer:
                if data.meta.save:
                    try:
                        result.meta.saved_as = save_query.query_finder.save(
                            data)
                    except Exception as e:
                        Log.warning("Unexpected save problem", cause=e)

            result.meta.timing.preamble = mo_math.round(
                preamble_timer.duration.seconds, digits=4)
            result.meta.timing.sql_translate = mo_math.round(
                sql_translate_timer.duration.seconds, digits=4)
            result.meta.timing.save = mo_math.round(
                save_timer.duration.seconds, digits=4)
            result.meta.timing.total = "{{TOTAL_TIME}}"  # TIMING PLACEHOLDER

            with Timer("jsonification", silent=True) as json_timer:
                response_data = value2json(result).encode('utf8')

        with Timer("post timer", silent=True):
            # IMPORTANT: WE WANT TO TIME OF THE JSON SERIALIZATION, AND HAVE IT IN THE JSON ITSELF.
            # WE CHEAT BY DOING A (HOPEFULLY FAST) STRING REPLACEMENT AT THE VERY END
            timing_replacement = b'"total": ' + str(mo_math.round(query_timer.duration.seconds, digits=4)) +\
                                 b', "jsonification": ' + str(mo_math.round(json_timer.duration.seconds, digits=4))
            response_data = response_data.replace(b'"total":"{{TOTAL_TIME}}"',
                                                  timing_replacement)
            Log.note("Response is {{num}} bytes in {{duration}}",
                     num=len(response_data),
                     duration=query_timer.duration)

            return Response(response_data,
                            status=200,
                            headers={"Content-Type": result.meta.content_type})
    except Exception as e:
        e = Except.wrap(e)
        return send_error(query_timer, request_body, e)