MCPcopy Create free account
hub / github.com/s3tools/s3cmd / S3Request

Class S3Request

S3/S3.py:135–213  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133__all__ = []
134
135class S3Request(object):
136 region_map = {}
137 ## S3 sometimes sends HTTP-301, HTTP-307 response
138 redir_map = {}
139
140 def __init__(self, s3, method_string, resource, headers, body, params = None):
141 self.s3 = s3
142 self.headers = SortedDict(headers or {}, ignore_case = True)
143 if len(self.s3.config.access_token)>0:
144 self.s3.config.role_refresh()
145 self.headers['x-amz-security-token']=self.s3.config.access_token
146 self.resource = resource
147 self.method_string = method_string
148 self.params = params or {}
149 self.body = body
150 self.requester_pays()
151
152 def requester_pays(self):
153 if self.s3.config.requester_pays and self.method_string in ("GET", "POST", "PUT", "HEAD"):
154 self.headers['x-amz-request-payer'] = 'requester'
155
156 def update_timestamp(self):
157 if "date" in self.headers:
158 del(self.headers["date"])
159 self.headers["x-amz-date"] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
160
161 def use_signature_v2(self):
162 if self.s3.endpoint_requires_signature_v4:
163 return False
164
165 if self.s3.config.signature_v2 or self.s3.fallback_to_signature_v2:
166 return True
167
168 return False
169
170 def sign(self):
171 bucket_name = self.resource.get('bucket')
172
173 if self.use_signature_v2():
174 debug("Using signature v2")
175 if bucket_name:
176 resource_uri = "/%s%s" % (bucket_name, self.resource['uri'])
177 else:
178 resource_uri = self.resource['uri']
179
180 self.headers = sign_request_v2(self.method_string, resource_uri, self.params, self.headers)
181 else:
182 debug("Using signature v4")
183 hostname = self.s3.get_hostname(self.resource['bucket'])
184
185 ## Default to bucket part of DNS.
186 ## If bucket is not part of DNS assume path style to complete the request.
187 ## Like for format_uri, take care that redirection could be to base path
188 if bucket_name and (
189 (bucket_name in S3Request.redir_map
190 and not S3Request.redir_map.get(bucket_name, '').startswith("%s."% bucket_name))
191 or (bucket_name not in S3Request.redir_map
192 and not check_bucket_name_dns_support(Config().host_bucket, bucket_name))

Callers 1

create_requestMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…