Exemple #1
0
 def execute(self, *args, **kwargs):
     if request:
         size = request.args.get("size", default=25, type=int)
         max_page_size = current_app.config.get(
             "SEARCH_MAX_SEARCH_PAGE_SIZE", 500)
         if size > max_page_size:
             raise MaximumSearchPageSizeExceeded(max_size=max_page_size)
     with RecursionLimit(
             current_app.config.get("SEARCH_MAX_RECURSION_LIMIT", 5000)):
         return super().execute(*args, **kwargs)
Exemple #2
0
def test_setting_recursion_limit():
    def recursion_test(max_depth, current_level=1):
        level = current_level
        if current_level < max_depth:
            level = recursion_test(max_depth, current_level + 1)
        return level

    assert recursion_test(100) == 100
    with pytest.raises(RecursionError):
        with RecursionLimit(50):
            recursion_test(100)
    assert recursion_test(100) == 100
Exemple #3
0
 def dumps(self, data):
     if isinstance(data, string_types):
         return data
     try:
         with RecursionLimit(
             current_app.config.get("SEARCH_MAX_RECURSION_LIMIT", 5000)
         ):
             dump = orjson.dumps(data, default=self.orjson_default).decode("utf-8")
         return dump
     except (ValueError, TypeError) as ex:
         if isinstance(ex, TypeError) and ex.args == ("Recursion limit reached",):
             # As currently we can only turn off recursion limit but we don't want that as
             # then we should handle overflow error in rust
             return super().dumps(data)
         raise SerializationError(data, ex)
Exemple #4
0
 def inspire_query(query_string, search):
     with RecursionLimit(current_app.config.get("SEARCH_MAX_RECURSION_LIMIT", 5000)):
         return Q(inspire_query_parser.parse_query(query_string))