Azure file downloads

This commit is contained in:
richard-dds
2019-08-06 11:54:43 -04:00
parent 094e44a6b0
commit b182307174
4 changed files with 47 additions and 4 deletions

View File

@@ -6,6 +6,9 @@ class Uploader:
def generate_token(self):
pass
def generate_download_link(self, object_name, filename):
pass
def object_name(self):
return str(uuid4())
@@ -17,6 +20,9 @@ class MockUploader(Uploader):
def get_token(self):
return ({}, self.object_name())
def generate_download_link(self, object_name, filename):
return ""
class AzureUploader(Uploader):
def __init__(self, config):
@@ -53,6 +59,21 @@ class AzureUploader(Uploader):
)
return ({"token": sas_token}, object_name)
def generate_download_link(self, object_name, filename):
account = CloudStorageAccount(
account_name=self.account_name, account_key=self.storage_key
)
bbs = account.create_block_blob_service()
sas_token = bbs.generate_blob_shared_access_signature(
self.container_name,
object_name,
permission=BlobPermissions.READ,
expiry=datetime.utcnow() + self.timeout,
content_disposition=f"attachment; filename={filename}",
protocol="https"
)
return bbs.make_blob_url(self.container_name, object_name, protocol="https", sas_token=sas_token)
class AwsUploader(Uploader):
def __init__(self, config):

View File

@@ -17,8 +17,9 @@ from atst.models.permissions import Permissions
from atst.utils.flash import formatted_flash as flash
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None):
render_args = {}
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None, extra_args=None):
render_args = extra_args or {}
if task_order_id:
task_order = TaskOrders.get(task_order_id)
portfolio_id = task_order.portfolio_id
@@ -114,10 +115,14 @@ def edit(task_order_id):
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_1")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_one_add_pdf(portfolio_id=None, task_order_id=None):
(token, object_name) = current_app.uploader.get_token()
extra_args = {"token": token, "object_name": object_name}
return render_task_orders_edit(
"task_orders/step_1.html",
portfolio_id=portfolio_id,
task_order_id=task_order_id,
extra_args=extra_args,
)
@@ -219,11 +224,19 @@ def submit_form_step_three_add_clins(task_order_id):
def form_step_four_review(task_order_id):
task_order = TaskOrders.get(task_order_id)
(token, object_name) = current_app.uploader.get_token()
extra_args = {
"token": token,
"object_name": object_name,
"pdf_download_url": current_app.uploader.generate_download_link(task_order.pdf.object_name, task_order.pdf.filename)
}
if task_order.is_completed == False:
raise NoAccessError("task order form review")
return render_task_orders_edit(
"task_orders/step_4.html", task_order_id=task_order_id
"task_orders/step_4.html", task_order_id=task_order_id,
extra_args=extra_args,
)