docs: def parse(cls, request, default_start=0, default_end=9, max_end=50):
          '''
          Parse the range headers into a range object. When there are no range headers,
          check for a page 'pagina' parameter, otherwise use the defaults defaults
  
          :param request: a request object
          :param default_start: default start for  paging (optional, default is 0)
          :param default_end: default end for paging (optional, default is 9)
          :param max_end: maximum end for paging (optional, default is 50,
                          no limits in case of None)
          :return: :class: 'oe_utils.range_parser.Range'
          '''
          settings = request.registry.settings
          page_param = settings.get('oe.paging.page.queryparam', 'pagina')
          if 'Range' in request.headers and request.headers['Range'] is not '':
              match = re.match('^items=([0-9]+)-([0-9]+)$', request.headers['Range'])
  
              if match:
                  start = int(match.group(1))
                  end = int(match.group(2))
  
                  if end < start:
                      end = start
                  if max_end and end > start + max_end:
                      end = start + max_end
                  return cls(start, end)
              else:
                  raise RangeParseException('range header does not match expected format')
          elif page_param in request.params:
              per_page_param = settings.get('oe.paging.per_page.queryparam',
                                            'per_pagina')
              page = int(request.params.get(page_param))
              items_per_page = int(
                  request.params.get(per_page_param,
                                     default_end - default_start + 1)
              )
              start = default_start + items_per_page * (page - 1)
              end = start + items_per_page - 1
              return cls(start, end, page)
          else:
              return cls(default_start, default_end)