Run black on moto & test directories.
This commit is contained in:
parent
c820395dbf
commit
96e5b1993d
507 changed files with 52541 additions and 47814 deletions
|
|
@ -2,6 +2,6 @@ from __future__ import unicode_literals
|
|||
from .models import glacier_backends
|
||||
from ..core.models import base_decorator, deprecated_base_decorator
|
||||
|
||||
glacier_backend = glacier_backends['us-east-1']
|
||||
glacier_backend = glacier_backends["us-east-1"]
|
||||
mock_glacier = base_decorator(glacier_backends)
|
||||
mock_glacier_deprecated = deprecated_base_decorator(glacier_backends)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ class Job(BaseModel):
|
|||
|
||||
|
||||
class ArchiveJob(Job):
|
||||
|
||||
def __init__(self, job_id, tier, arn, archive_id):
|
||||
self.job_id = job_id
|
||||
self.tier = tier
|
||||
|
|
@ -50,7 +49,7 @@ class ArchiveJob(Job):
|
|||
"StatusCode": "InProgress",
|
||||
"StatusMessage": None,
|
||||
"VaultARN": self.arn,
|
||||
"Tier": self.tier
|
||||
"Tier": self.tier,
|
||||
}
|
||||
if datetime.datetime.now() > self.et:
|
||||
d["Completed"] = True
|
||||
|
|
@ -61,7 +60,6 @@ class ArchiveJob(Job):
|
|||
|
||||
|
||||
class InventoryJob(Job):
|
||||
|
||||
def __init__(self, job_id, tier, arn):
|
||||
self.job_id = job_id
|
||||
self.tier = tier
|
||||
|
|
@ -83,7 +81,7 @@ class InventoryJob(Job):
|
|||
"StatusCode": "InProgress",
|
||||
"StatusMessage": None,
|
||||
"VaultARN": self.arn,
|
||||
"Tier": self.tier
|
||||
"Tier": self.tier,
|
||||
}
|
||||
if datetime.datetime.now() > self.et:
|
||||
d["Completed"] = True
|
||||
|
|
@ -94,7 +92,6 @@ class InventoryJob(Job):
|
|||
|
||||
|
||||
class Vault(BaseModel):
|
||||
|
||||
def __init__(self, vault_name, region):
|
||||
self.st = datetime.datetime.now()
|
||||
self.vault_name = vault_name
|
||||
|
|
@ -104,7 +101,9 @@ class Vault(BaseModel):
|
|||
|
||||
@property
|
||||
def arn(self):
|
||||
return "arn:aws:glacier:{0}:012345678901:vaults/{1}".format(self.region, self.vault_name)
|
||||
return "arn:aws:glacier:{0}:012345678901:vaults/{1}".format(
|
||||
self.region, self.vault_name
|
||||
)
|
||||
|
||||
def to_dict(self):
|
||||
archives_size = 0
|
||||
|
|
@ -126,7 +125,9 @@ class Vault(BaseModel):
|
|||
self.archives[archive_id]["body"] = body
|
||||
self.archives[archive_id]["size"] = len(body)
|
||||
self.archives[archive_id]["sha256"] = hashlib.sha256(body).hexdigest()
|
||||
self.archives[archive_id]["creation_date"] = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.000Z")
|
||||
self.archives[archive_id]["creation_date"] = datetime.datetime.now().strftime(
|
||||
"%Y-%m-%dT%H:%M:%S.000Z"
|
||||
)
|
||||
self.archives[archive_id]["description"] = description
|
||||
return archive_id
|
||||
|
||||
|
|
@ -142,7 +143,7 @@ class Vault(BaseModel):
|
|||
"ArchiveDescription": archive["description"],
|
||||
"CreationDate": archive["creation_date"],
|
||||
"Size": archive["size"],
|
||||
"SHA256TreeHash": archive["sha256"]
|
||||
"SHA256TreeHash": archive["sha256"],
|
||||
}
|
||||
archive_list.append(aobj)
|
||||
return archive_list
|
||||
|
|
@ -180,7 +181,7 @@ class Vault(BaseModel):
|
|||
return {
|
||||
"VaultARN": self.arn,
|
||||
"InventoryDate": jobj["CompletionDate"],
|
||||
"ArchiveList": archives
|
||||
"ArchiveList": archives,
|
||||
}
|
||||
else:
|
||||
archive_body = self.get_archive_body(job.archive_id)
|
||||
|
|
@ -188,7 +189,6 @@ class Vault(BaseModel):
|
|||
|
||||
|
||||
class GlacierBackend(BaseBackend):
|
||||
|
||||
def __init__(self, region_name):
|
||||
self.vaults = {}
|
||||
self.region_name = region_name
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ from .utils import region_from_glacier_url, vault_from_glacier_url
|
|||
|
||||
|
||||
class GlacierResponse(_TemplateEnvironmentMixin):
|
||||
|
||||
def __init__(self, backend):
|
||||
super(GlacierResponse, self).__init__()
|
||||
self.backend = backend
|
||||
|
|
@ -22,14 +21,11 @@ class GlacierResponse(_TemplateEnvironmentMixin):
|
|||
|
||||
def _all_vault_response(self, request, full_url, headers):
|
||||
vaults = self.backend.list_vaules()
|
||||
response = json.dumps({
|
||||
"Marker": None,
|
||||
"VaultList": [
|
||||
vault.to_dict() for vault in vaults
|
||||
]
|
||||
})
|
||||
response = json.dumps(
|
||||
{"Marker": None, "VaultList": [vault.to_dict() for vault in vaults]}
|
||||
)
|
||||
|
||||
headers['content-type'] = 'application/json'
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
@classmethod
|
||||
|
|
@ -44,16 +40,16 @@ class GlacierResponse(_TemplateEnvironmentMixin):
|
|||
querystring = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
vault_name = vault_from_glacier_url(full_url)
|
||||
|
||||
if method == 'GET':
|
||||
if method == "GET":
|
||||
return self._vault_response_get(vault_name, querystring, headers)
|
||||
elif method == 'PUT':
|
||||
elif method == "PUT":
|
||||
return self._vault_response_put(vault_name, querystring, headers)
|
||||
elif method == 'DELETE':
|
||||
elif method == "DELETE":
|
||||
return self._vault_response_delete(vault_name, querystring, headers)
|
||||
|
||||
def _vault_response_get(self, vault_name, querystring, headers):
|
||||
vault = self.backend.get_vault(vault_name)
|
||||
headers['content-type'] = 'application/json'
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, json.dumps(vault.to_dict())
|
||||
|
||||
def _vault_response_put(self, vault_name, querystring, headers):
|
||||
|
|
@ -72,40 +68,46 @@ class GlacierResponse(_TemplateEnvironmentMixin):
|
|||
|
||||
def _vault_archive_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, 'body'):
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
description = ""
|
||||
if 'x-amz-archive-description' in request.headers:
|
||||
description = request.headers['x-amz-archive-description']
|
||||
if "x-amz-archive-description" in request.headers:
|
||||
description = request.headers["x-amz-archive-description"]
|
||||
parsed_url = urlparse(full_url)
|
||||
querystring = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
vault_name = full_url.split("/")[-2]
|
||||
|
||||
if method == 'POST':
|
||||
return self._vault_archive_response_post(vault_name, body, description, querystring, headers)
|
||||
if method == "POST":
|
||||
return self._vault_archive_response_post(
|
||||
vault_name, body, description, querystring, headers
|
||||
)
|
||||
else:
|
||||
return 400, headers, "400 Bad Request"
|
||||
|
||||
def _vault_archive_response_post(self, vault_name, body, description, querystring, headers):
|
||||
def _vault_archive_response_post(
|
||||
self, vault_name, body, description, querystring, headers
|
||||
):
|
||||
vault = self.backend.get_vault(vault_name)
|
||||
vault_id = vault.create_archive(body, description)
|
||||
headers['x-amz-archive-id'] = vault_id
|
||||
headers["x-amz-archive-id"] = vault_id
|
||||
return 201, headers, ""
|
||||
|
||||
@classmethod
|
||||
def vault_archive_individual_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_glacier_url(full_url)
|
||||
response_instance = GlacierResponse(glacier_backends[region_name])
|
||||
return response_instance._vault_archive_individual_response(request, full_url, headers)
|
||||
return response_instance._vault_archive_individual_response(
|
||||
request, full_url, headers
|
||||
)
|
||||
|
||||
def _vault_archive_individual_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
vault_name = full_url.split("/")[-3]
|
||||
archive_id = full_url.split("/")[-1]
|
||||
|
||||
if method == 'DELETE':
|
||||
if method == "DELETE":
|
||||
vault = self.backend.get_vault(vault_name)
|
||||
vault.delete_archive(archive_id)
|
||||
return 204, headers, ""
|
||||
|
|
@ -118,42 +120,47 @@ class GlacierResponse(_TemplateEnvironmentMixin):
|
|||
|
||||
def _vault_jobs_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, 'body'):
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
account_id = full_url.split("/")[1]
|
||||
vault_name = full_url.split("/")[-2]
|
||||
|
||||
if method == 'GET':
|
||||
if method == "GET":
|
||||
jobs = self.backend.list_jobs(vault_name)
|
||||
headers['content-type'] = 'application/json'
|
||||
return 200, headers, json.dumps({
|
||||
"JobList": [
|
||||
job.to_dict() for job in jobs
|
||||
],
|
||||
"Marker": None,
|
||||
})
|
||||
elif method == 'POST':
|
||||
headers["content-type"] = "application/json"
|
||||
return (
|
||||
200,
|
||||
headers,
|
||||
json.dumps(
|
||||
{"JobList": [job.to_dict() for job in jobs], "Marker": None}
|
||||
),
|
||||
)
|
||||
elif method == "POST":
|
||||
json_body = json.loads(body.decode("utf-8"))
|
||||
job_type = json_body['Type']
|
||||
job_type = json_body["Type"]
|
||||
archive_id = None
|
||||
if 'ArchiveId' in json_body:
|
||||
archive_id = json_body['ArchiveId']
|
||||
if 'Tier' in json_body:
|
||||
if "ArchiveId" in json_body:
|
||||
archive_id = json_body["ArchiveId"]
|
||||
if "Tier" in json_body:
|
||||
tier = json_body["Tier"]
|
||||
else:
|
||||
tier = "Standard"
|
||||
job_id = self.backend.initiate_job(vault_name, job_type, tier, archive_id)
|
||||
headers['x-amz-job-id'] = job_id
|
||||
headers['Location'] = "/{0}/vaults/{1}/jobs/{2}".format(account_id, vault_name, job_id)
|
||||
headers["x-amz-job-id"] = job_id
|
||||
headers["Location"] = "/{0}/vaults/{1}/jobs/{2}".format(
|
||||
account_id, vault_name, job_id
|
||||
)
|
||||
return 202, headers, ""
|
||||
|
||||
@classmethod
|
||||
def vault_jobs_individual_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_glacier_url(full_url)
|
||||
response_instance = GlacierResponse(glacier_backends[region_name])
|
||||
return response_instance._vault_jobs_individual_response(request, full_url, headers)
|
||||
return response_instance._vault_jobs_individual_response(
|
||||
request, full_url, headers
|
||||
)
|
||||
|
||||
def _vault_jobs_individual_response(self, request, full_url, headers):
|
||||
vault_name = full_url.split("/")[-3]
|
||||
|
|
@ -176,10 +183,10 @@ class GlacierResponse(_TemplateEnvironmentMixin):
|
|||
if vault.job_ready(job_id):
|
||||
output = vault.get_job_output(job_id)
|
||||
if isinstance(output, dict):
|
||||
headers['content-type'] = 'application/json'
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, json.dumps(output)
|
||||
else:
|
||||
headers['content-type'] = 'application/octet-stream'
|
||||
headers["content-type"] = "application/octet-stream"
|
||||
return 200, headers, output
|
||||
else:
|
||||
return 404, headers, "404 Not Found"
|
||||
|
|
|
|||
|
|
@ -1,16 +1,14 @@
|
|||
from __future__ import unicode_literals
|
||||
from .responses import GlacierResponse
|
||||
|
||||
url_bases = [
|
||||
"https?://glacier.(.+).amazonaws.com",
|
||||
]
|
||||
url_bases = ["https?://glacier.(.+).amazonaws.com"]
|
||||
|
||||
url_paths = {
|
||||
'{0}/(?P<account_number>.+)/vaults$': GlacierResponse.all_vault_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>[^/.]+)$': GlacierResponse.vault_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/archives$': GlacierResponse.vault_archive_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/archives/(?P<archive_id>.+)$': GlacierResponse.vault_archive_individual_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs$': GlacierResponse.vault_jobs_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs/(?P<job_id>[^/.]+)$': GlacierResponse.vault_jobs_individual_response,
|
||||
'{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs/(?P<job_id>.+)/output$': GlacierResponse.vault_jobs_output_response,
|
||||
"{0}/(?P<account_number>.+)/vaults$": GlacierResponse.all_vault_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>[^/.]+)$": GlacierResponse.vault_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/archives$": GlacierResponse.vault_archive_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/archives/(?P<archive_id>.+)$": GlacierResponse.vault_archive_individual_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs$": GlacierResponse.vault_jobs_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs/(?P<job_id>[^/.]+)$": GlacierResponse.vault_jobs_individual_response,
|
||||
"{0}/(?P<account_number>.+)/vaults/(?P<vault_name>.+)/jobs/(?P<job_id>.+)/output$": GlacierResponse.vault_jobs_output_response,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ from six.moves.urllib.parse import urlparse
|
|||
def region_from_glacier_url(url):
|
||||
domain = urlparse(url).netloc
|
||||
|
||||
if '.' in domain:
|
||||
if "." in domain:
|
||||
return domain.split(".")[1]
|
||||
else:
|
||||
return 'us-east-1'
|
||||
return "us-east-1"
|
||||
|
||||
|
||||
def vault_from_glacier_url(full_url):
|
||||
|
|
@ -18,4 +18,6 @@ def vault_from_glacier_url(full_url):
|
|||
|
||||
|
||||
def get_job_id():
|
||||
return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(92))
|
||||
return "".join(
|
||||
random.choice(string.ascii_uppercase + string.digits) for _ in range(92)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue