Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 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)
Ejemplo n.º 7
0
 def process_result_value(self, value, dialect):
     if value is not None:
         try:
             value = json.loads(value)
         except:
             value = None
     return value
 def process_result_value(self, value, dialect):
     if value is not None:
         try:
             value = json.loads(value)
         except:
             value = None
     return value
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)
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 12
0
 def jread(self, resp):
     return json.loads(resp.data)
Ejemplo n.º 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
Ejemplo n.º 14
0
 def process_result_value(self, value, dialect):
     if value is not None:
         value = json.loads(value)
     return value
 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
def booster_json_loads(obj):
    return _json.loads(obj, object_hook=booster_json_decoder)
Ejemplo n.º 17
0
 def jread(self, resp):
     return json.loads(resp.data)