mirror of
https://github.com/fergalmoran/dss.git
synced 2026-02-05 23:54:31 +00:00
Added storage
This commit is contained in:
64
spa/storage.py
Normal file
64
spa/storage.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from django.conf import settings
|
||||
from django.core.files.storage import Storage
|
||||
from django.core.files.base import ContentFile
|
||||
|
||||
import azure
|
||||
from azure.storage import *
|
||||
from datetime import datetime
|
||||
import os, mimetypes
|
||||
|
||||
class AzureStorage(Storage):
|
||||
|
||||
def __init__(self, container=None):
|
||||
self.blob_service = BlobService(account_name=settings.AZURE_STORAGE_ACCOUNT, account_key=settings.AZURE_STORAGE_KEY)
|
||||
if not container:
|
||||
self.container = settings.AZURE_STORAGE_CONTAINER
|
||||
else:
|
||||
self.container = container
|
||||
self.blob_service.create_container(self.container, x_ms_blob_public_access='blob')
|
||||
|
||||
def _open(self, name, mode='rb'):
|
||||
data = self.blob_service.get_blob(self.container, name)
|
||||
return ContentFile(data)
|
||||
|
||||
def _save(self, name, content):
|
||||
content.open(mode="rb")
|
||||
data = content.read()
|
||||
content_type = mimetypes.guess_type(name)[0]
|
||||
metadata = {"modified_time": "%f" % os.path.getmtime(content.name)}
|
||||
self.blob_service.put_blob(self.container, name, data, x_ms_blob_type='BlockBlob', x_ms_blob_content_type=content_type, x_ms_meta_name_values=metadata)
|
||||
return name
|
||||
|
||||
def delete(self, name):
|
||||
self.blob_service.delete_blob(self.container, name)
|
||||
|
||||
def exists(self, name):
|
||||
try:
|
||||
self.blob_service.get_blob_properties(self.container, name)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
|
||||
def listdir(self, path):
|
||||
dirs = []
|
||||
files = []
|
||||
blobs = self.blob_service.list_blobs(self.container, prefix=(path or None))
|
||||
for blob in blobs:
|
||||
directory, file_name = os.path.split(blob.name)
|
||||
dirs.append(directory)
|
||||
files.append(file_name)
|
||||
return (dirs, files)
|
||||
|
||||
def size(self, name):
|
||||
properties = self.blob_service.get_blob_properties(self.container, name)
|
||||
return properties.get('content-length')
|
||||
|
||||
def url(self, name):
|
||||
blob = self.blob_service.list_blobs(self.container, prefix=name)
|
||||
return blob.blobs[0].url
|
||||
|
||||
def modified_time(self, name):
|
||||
metadata = self.blob_service.get_blob_metadata(self.container, name)
|
||||
modified_time = float(metadata.get('x-ms-meta-modified_time'))
|
||||
return datetime.fromtimestamp(modified_time)
|
||||
Reference in New Issue
Block a user