docs: def from_jabsorb(request, seems_raw=False):
      """
      Transforms a jabsorb request into a more Python data model (converts maps
      and lists)
  
      :param request: Data coming from Jabsorb
      :param seems_raw: Set it to True if the given data seems to already have
                        been parsed (no Java class hint). If True, the lists will
                        be kept as lists instead of being converted to tuples.
      :return: A Python representation of the given data
      """
      if isinstance(request, (tuple, set, frozenset)):
          # Special case : JSON arrays (Python lists)
          return type(request)(from_jabsorb(element) for element in request)
  
      elif isinstance(request, list):
          # Check if we were a list or a tuple
          if seems_raw:
              return list(from_jabsorb(element) for element in request)
  
          return tuple(from_jabsorb(element) for element in request)
  
      elif isinstance(request, dict):
          # Dictionary
          java_class = request.get(JAVA_CLASS)
          json_class = request.get(JSON_CLASS)
          seems_raw = not java_class and not json_class
  
          if java_class:
              # Java Map ?
              if JAVA_MAPS_PATTERN.match(java_class) is not None:
                  return HashableDict(
                      (from_jabsorb(key), from_jabsorb(value))
                      for key, value in request["map"].items()
                  )
  
              # Java List ?
              elif JAVA_LISTS_PATTERN.match(java_class) is not None:
                  return HashableList(
                      from_jabsorb(element) for element in request["list"]
                  )
  
              # Java Set ?
              elif JAVA_SETS_PATTERN.match(java_class) is not None:
                  return HashableSet(
                      from_jabsorb(element) for element in request["set"]
                  )
  
          # Any other case
          result = AttributeMap(
              (from_jabsorb(key), from_jabsorb(value, seems_raw))
              for key, value in request.items()
          )
  
          # Keep JSON class information as is
          if json_class:
              result[JSON_CLASS] = json_class
  
          return result
  
      elif not _is_builtin(request):
          # Bean
          for attr in dir(request):
              # Only convert public fields
              if not attr[0] == "_":
                  # Field conversion
                  setattr(request, attr, from_jabsorb(getattr(request, attr)))
  
          return request
  
      else:
          # Any other case
          return request