コード例 #1
0
def _serializable_params(args, check_groupby=False):
    params = {}
    if '_ds' in args:
        params['dict_struct'] = _json.loads(args['_ds'])
        if isinstance(params['dict_struct'], str) or isinstance(params['dict_struct'], six.text_type):
            params['dict_struct'] = _json.loads(params['dict_struct'])
    if 'attrs' in args:
        attrs = args.get('attrs')
        if attrs.lower() == 'none':
            params['attrs_to_serialize'] = []
        else:
            params['attrs_to_serialize'] = attrs.split(',')
    if 'rels' in args:
        rels = args.get('rels')
        if rels.lower() == 'none':
            params['rels_to_serialize'] = []
        else:
            params['rels_to_serialize'] = [
                (rel.partition(':')[0], rel.partition(':')[2]) for rel in rels.split(',')
                if ':' in rel]
    if 'expand' in args:
        expand = args.get('expand')
        if expand.lower() == 'none':
            params['rels_to_expand'] = []
        else:
            params['rels_to_expand'] = expand.split(',')
    if 'grouprelby' in request.args:
        params['group_listrels_by'] = {
            arg.partition(':')[0]: arg.partition(':')[2].split(',')
            for arg in request.args.getlist('grouprelby')}
    if check_groupby and 'groupby' in request.args:
        params['groupby'] = request.args.get('groupby').split(',')
        if 'preserve_order' in request.args:
            params['preserve_order'] = boolify(request.args.get('preserve_order'))
    return params
コード例 #2
0
def process_args_and_fetch_rows(
        q, default_limit=None, default_sort=None, default_orderby=None,
        default_offset=None, default_page=None, default_per_page=None):

    if isinstance(q, Response):
        return q

    if '_f' in request.args:
        filters = _json.loads(request.args['_f'])
        if isinstance(filters, str) or isinstance(filters, six.text_type):
            filters = _json.loads(filters)
        # print("filters are ", filters)
        q = filter_query_using_filters_list(q, filters)
        # print("after applying filters")
        # print(str(q))

    filtered_query = filter_query_using_args(q)

    count_only = boolify(request.args.get('count_only', 'false'))
    if count_only:
        return as_json(filtered_query.count())

    result = fetch_results_in_requested_format(
        filtered_query,
        default_limit=default_limit,
        default_sort=default_sort,
        default_orderby=default_orderby,
        default_offset=default_offset,
        default_page=default_page,
        default_per_page=default_per_page
    )
    return result
コード例 #3
0
def _serializable_params(args, check_groupby=False):
    params = {}
    if '_ds' in args:
        params['dict_struct'] = _json.loads(args['_ds'])
        if isinstance(params['dict_struct'], str) or isinstance(params['dict_struct'], unicode):
            params['dict_struct'] = _json.loads(params['dict_struct'])
    if 'attrs' in args:
        attrs = args.get('attrs')
        if attrs.lower() == 'none':
            params['attrs_to_serialize'] = []
        else:
            params['attrs_to_serialize'] = attrs.split(',')
    if 'rels' in args:
        rels = args.get('rels')
        if rels.lower() == 'none':
            params['rels_to_serialize'] = []
        else:
            params['rels_to_serialize'] = [
                (rel.partition(':')[0], rel.partition(':')[2]) for rel in rels.split(',')
                if ':' in rel]
    if 'expand' in args:
        expand = args.get('expand')
        if expand.lower() == 'none':
            params['rels_to_expand'] = []
        else:
            params['rels_to_expand'] = expand.split(',')
    if 'grouprelby' in request.args:
        params['group_listrels_by'] = {
            arg.partition(':')[0]: arg.partition(':')[2].split(',')
            for arg in request.args.getlist('grouprelby')}
    if check_groupby and 'groupby' in request.args:
        params['groupby'] = request.args.get('groupby').split(',')
        if 'preserve_order' in request.args:
            params['preserve_order'] = boolify(request.args.get('preserve_order'))
    return params
コード例 #4
0
    def test(config):
        """Test the given Flask configuration. If configured correctly,
        an error will be tracked by Exceptional for your app. Unlike
        the initialized extension, this test will post data to Exceptional,
        regardless of the configured ``DEBUG`` setting.

        :param config: The Flask application configuration object to test.
                       Accepts either :class:`flask.Config` or the object
                       types allowed by :meth:`flask.Config.from_object`.
        """
        context = getattr(stack.top, "exceptional_context", None)
        app = Flask(__name__)
        exceptional = Exceptional()

        if isinstance(config, Config):
            app.config = config
        else:
            app.config.from_object(config)

        assert "EXCEPTIONAL_API_KEY" in app.config
        app.debug = False
        app.testing = False
        exceptional.init_app(app)
        app.testing = True

        @app.route("/exception")
        def exception():
            setattr(stack.top, "exceptional_context", context)
            message = "Congratulations! Your application is configured for Exceptional error tracking."  # NOQA

            raise Exception(message)

        with app.test_client() as client:
            client.get("/exception")
            json.loads(g.exceptional)
コード例 #5
0
def process_args_and_fetch_rows(
        q, default_limit=None, default_sort=None, default_orderby=None,
        default_offset=None, default_page=None, default_per_page=None):

    if isinstance(q, Response):
        return q

    if '_f' in request.args:
        filters = _json.loads(request.args['_f'])
        if isinstance(filters, str) or isinstance(filters, unicode):
            filters = _json.loads(filters)
        q = filter_query_using_filters_list(q, filters)

    filtered_query = filter_query_using_args(q)

    count_only = boolify(request.args.get('count_only', 'false'))
    if count_only:
        return as_json(filtered_query.count())

    result = fetch_results_in_requested_format(
        filtered_query,
        default_limit=default_limit,
        default_sort=default_sort,
        default_orderby=default_orderby,
        default_offset=default_offset,
        default_page=default_page,
        default_per_page=default_per_page
    )
    return result
コード例 #6
0
    def test(config):
        """Test the given Flask configuration. If configured correctly,
        an error will be tracked by Exceptional for your app. Unlike
        the initialized extension, this test will post data to Exceptional,
        regardless of the configured ``DEBUG`` setting.

        :param config: The Flask application configuration object to test.
                       Accepts either :class:`flask.Config` or the object
                       types allowed by :meth:`flask.Config.from_object`.
        """
        context = getattr(stack.top, "exceptional_context", None)
        app = Flask(__name__)
        exceptional = Exceptional()

        if isinstance(config, Config):
            app.config = config
        else:
            app.config.from_object(config)

        assert "EXCEPTIONAL_API_KEY" in app.config
        app.debug = False
        app.testing = False
        exceptional.init_app(app)
        app.testing = True

        @app.route("/exception")
        def exception():
            setattr(stack.top, "exceptional_context", context)
            message = "Congratulations! Your application is configured for Exceptional error tracking."  # NOQA

            raise Exception(message)

        with app.test_client() as client:
            client.get("/exception")
            json.loads(g.exceptional)
コード例 #7
0
 def process_result_value(self, value, dialect):
     if value is not None:
         try:
             value = json.loads(value)
         except:
             value = None
     return value
コード例 #8
0
 def process_result_value(self, value, dialect):
     if value is not None:
         try:
             value = json.loads(value)
         except:
             value = None
     return value
コード例 #9
0
def process_args_and_render_json_list(q, **kwargs):

    if isinstance(q, Response):
        return q

    if '_f' in request.args:
        filters = _json.loads(request.args['_f'])
        if isinstance(filters, str) or isinstance(filters, unicode):
            filters = _json.loads(filters)
        q = filter_query_using_filters_list(q, filters)

    filtered_query = filter_query_using_args(q)

    count_only = boolify(request.args.get('count_only', 'false'))
    if count_only:
        return as_json(filtered_query.count())

    try:
        result = fetch_results_in_requested_format(
            filtered_query,
            default_limit=kwargs.pop('default_limit', None),
            default_sort=kwargs.pop('default_sort', None),
            default_orderby=kwargs.pop('default_orderby', None),
            default_offset=kwargs.pop('default_offset', None),
            default_page=kwargs.pop('default_page', None),
            default_per_page=kwargs.pop('default_per_page', None))
    except:
        traceback.print_exc()
        per_page = request.args.get('per_page', PER_PAGE_ITEMS_COUNT)
        return as_json(
            {
                "status":
                "failure",
                "error":
                "PAGE_NOT_FOUND",
                "total_pages":
                int(math.ceil(float(filtered_query.count()) / int(per_page)))
            },
            status=404,
            wrap=False)

    return convert_result_to_response(result, **kwargs)
コード例 #10
0
def process_args_and_render_json_list(q, **kwargs):

    if isinstance(q, Response):
        return q

    if '_f' in request.args:
        filters = _json.loads(request.args['_f'])
        if isinstance(filters, str) or isinstance(filters, unicode):
            filters = _json.loads(filters)
        q = filter_query_using_filters_list(q, filters)

    filtered_query = filter_query_using_args(q)

    count_only = boolify(request.args.get('count_only', 'false'))
    if count_only:
        return as_json(filtered_query.count())

    try:
        result = fetch_results_in_requested_format(
            filtered_query,
            default_limit=kwargs.pop('default_limit', None),
            default_sort=kwargs.pop('default_sort', None),
            default_orderby=kwargs.pop('default_orderby', None),
            default_offset=kwargs.pop('default_offset', None),
            default_page=kwargs.pop('default_page', None),
            default_per_page=kwargs.pop('default_per_page', None))
    except:
        traceback.print_exc()
        per_page = request.args.get('per_page', PER_PAGE_ITEMS_COUNT)
        return as_json({
            "status": "failure",
            "error": "PAGE_NOT_FOUND",
            "total_pages": int(math.ceil(float(filtered_query.count()) / int(per_page)))
        }, status=404, wrap=False)

    return convert_result_to_response(result, **kwargs)
コード例 #11
0
def _sanitize_object(obj):
    result = {}
    for k, v in obj.items():
        if isinstance(v, int) or isinstance(v, Decimal):
            result[k] = v
        elif not (isinstance(v, str) or isinstance(v, six.text_type)):
            result[k] = json.loads(bleach.clean(json.dumps(v)))
        else:
            result[k] = bleach.clean(v)
        if result[k] == '':
            result[k] = None
        # Making an assumption that there is no good usecase
        # for setting an empty string. This will help prevent
        # cases where empty string is sent because of client
        # not clearing form fields to null
    return result
コード例 #12
0
 def jread(self, resp):
     return json.loads(resp.data)
コード例 #13
0
 def jpatch(self, url, data, **kwargs):
     kwargs['content_type'] = "application/json"
     jdata = json.dumps(data, default=json_encoder)
     parse_json_response = kwargs.pop('parse_json_response', True)
     resp = self.patch(url, data=jdata, **kwargs)
     return json.loads(resp.data) if parse_json_response else resp
コード例 #14
0
 def process_result_value(self, value, dialect):
     if value is not None:
         value = json.loads(value)
     return value
コード例 #15
0
 def jpatch(self, url, data, **kwargs):
     kwargs['content_type'] = "application/json"
     jdata = json.dumps(data, default=json_encoder)
     parse_json_response = kwargs.pop('parse_json_response', True)
     resp = self.patch(url, data=jdata, **kwargs)
     return json.loads(resp.data) if parse_json_response else resp
コード例 #16
0
def booster_json_loads(obj):
    return _json.loads(obj, object_hook=booster_json_decoder)
コード例 #17
0
 def jread(self, resp):
     return json.loads(resp.data)