Example #1
0
    def __init__(self, uri, method="GET", req_hdrs=None, req_body=None,
                status_cb=None, body_procs=None):
        orig_req_hdrs = req_hdrs or []
        rh = orig_req_hdrs + [('Accept-Encoding', 'gzip')]
        RedFetcher.__init__(self, uri, method, rh, req_body,
                            status_cb, body_procs, req_type=method)

        # Extra metadata that the "main" RED will be adorned with 
        self.state.orig_req_hdrs = orig_req_hdrs
        self.state.age = None
        self.state.store_shared = None
        self.state.store_private = None
        self.state.freshness_lifetime = None
        self.state.stale_serveable = None
        self.state.partial_support = None
        self.state.inm_support = None
        self.state.ims_support = None
        self.state.gzip_support = None
        self.state.gzip_savings = 0

        # check the URI
        if not re.match("^\s*%s\s*$" % absolute_URI, uri, re.VERBOSE):
            self.state.set_message('uri', rs.URI_BAD_SYNTAX)
        if len(uri) > max_uri:
            self.state.set_message('uri', 
                rs.URI_TOO_LONG, 
                uri_len=f_num(len(uri))
            )
Example #2
0
 def __init__(self, red):
     self.red = red
     if "gzip" in red.parsed_hdrs.get('content-encoding', []):
         req_hdrs = [h for h in red.orig_req_hdrs if
                     h[0].lower() != 'accept-encoding']
         RedFetcher.__init__(self, red.uri, red.method, req_hdrs,
                             red.req_body, red.status_cb, [], "conneg")
     else:
         self.red.gzip_support = False
Example #3
0
 def __init__(self, red):
     self.red = red
     if red.parsed_hdrs.has_key('last-modified'):
         date_str = time.strftime(
             '%a, %d %b %Y %H:%M:%S GMT',
             time.gmtime(red.parsed_hdrs['last-modified'])
         )
         req_hdrs = red.req_hdrs + [
             ('If-Modified-Since', date_str),
         ]
         RedFetcher.__init__(self, red.uri, red.method, req_hdrs,
             red.req_body, red.status_cb, [], "LM validation"
         )
     else:
         self.red.ims_support = False
Example #4
0
 def __init__(self, red):
     self.red = red
     if red.parsed_hdrs.has_key('etag'):
         weak, etag = red.parsed_hdrs['etag']
         if weak:
             weak_str = "W/"
             # TODO: message on weak etag
         else:
             weak_str = ""
         etag_str = '%s"%s"' % (weak_str, etag)
         req_hdrs = red.req_hdrs + [
             ('If-None-Match', etag_str),
         ]
         RedFetcher.__init__(self, red.uri, red.method, req_hdrs,
             red.req_body, red.status_cb, [], "ETag validation"
         )
     else:
         self.red.inm_support = False
Example #5
0
    def __init__(self,
                 uri,
                 method="GET",
                 req_hdrs=None,
                 req_body=None,
                 status_cb=None,
                 body_procs=None):
        orig_req_hdrs = req_hdrs or []
        rh = orig_req_hdrs + [(u'Accept-Encoding', u'gzip')]
        RedFetcher.__init__(self,
                            uri,
                            method,
                            rh,
                            req_body,
                            status_cb,
                            body_procs,
                            req_type=method)

        # Extra metadata that the "main" RED will be adorned with
        self.state.orig_req_hdrs = orig_req_hdrs
        self.state.age = None
        self.state.store_shared = None
        self.state.store_private = None
        self.state.freshness_lifetime = None
        self.state.stale_serveable = None
        self.state.partial_support = None
        self.state.inm_support = None
        self.state.ims_support = None
        self.state.gzip_support = None
        self.state.gzip_savings = 0

        # check the URI
        if not re.match("^\s*%s\s*$" % URI, uri, re.VERBOSE):
            self.state.set_message('uri', rs.URI_BAD_SYNTAX)
        if '#' in uri:
            # chop off the fragment
            uri = uri[:uri.index('#')]
        if len(uri) > max_uri:
            self.state.set_message('uri',
                                   rs.URI_TOO_LONG,
                                   uri_len=f_num(len(uri)))
Example #6
0
 def __init__(self, red):
     self.red = red
     if 'bytes' in red.parsed_hdrs.get('accept-ranges', []):
         if len(red.res_body_sample) == 0: return
         sample_num = random.randint(0, len(red.res_body_sample) - 1)
         sample_len = min(96, len(red.res_body_sample[sample_num][1]))
         self.range_start = red.res_body_sample[sample_num][0]
         self.range_end = self.range_start + sample_len
         self.range_target = \
             red.res_body_sample[sample_num][1][:sample_len + 1]
         if self.range_start == self.range_end: 
             # wow, that's a small body.
             return 
         # TODO: uses the compressed version (if available. Revisit.
         req_hdrs = red.req_hdrs + [
             ('Range', "bytes=%s-%s" % (self.range_start, self.range_end))
         ]
         RedFetcher.__init__(self, red.uri, red.method, 
             req_hdrs, red.req_body, red.status_cb, [], "range"
         )
     else:
         self.red.partial_support = False
Example #7
0
 def __init__(self, red, name):
     self.base = red.state
     req_hdrs = self.modify_req_hdrs()
     RedFetcher.__init__(self, self.base.uri, self.base.method, req_hdrs,
                         self.base.req_body, red.status_cb, [], name)
     self.base.subreqs[name] = self.state
Example #8
0
 def __init__(self, red, name):
     self.base = red.state
     req_hdrs = self.modify_req_hdrs()
     RedFetcher.__init__(self, self.base.uri, self.base.method, req_hdrs,
                         self.base.req_body, red.status_cb, [], name)
     self.base.subreqs[name] = self.state