mirror of
https://github.com/wassname/flask-cloudy.git
synced 2026-09-09 11:22:27 +08:00
0.2.0 - Add extension to object_name - Use source name as object name if empty
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
|
||||
0.2.0
|
||||
- Add extension of original file on upload if object_name doesn't have an extension
|
||||
- Use the original file name as object name, if object name is None
|
||||
0.1.0
|
||||
- First
|
||||
+32
-16
@@ -30,15 +30,10 @@ ALL_EXTENSIONS = EXTENSIONS["TEXT"] \
|
||||
+ EXTENSIONS["AUDIO"] \
|
||||
+ EXTENSIONS["DATA"]
|
||||
|
||||
def get_filename(filename):
|
||||
return os.path.splitext(filename)[0]
|
||||
def get_file_name(filename):
|
||||
return os.path.basename(filename)
|
||||
|
||||
def get_file_extension(filename):
|
||||
"""
|
||||
Return the file extension without the dot
|
||||
:param filename:
|
||||
:return:
|
||||
"""
|
||||
return os.path.splitext(filename)[1][1:].lower()
|
||||
|
||||
def get_file_extension_type(filename):
|
||||
@@ -166,33 +161,53 @@ class Storage(object):
|
||||
meta_data=meta_data,
|
||||
container=self.container,
|
||||
driver=self.driver)
|
||||
return StorageObject(obj, cloudstorage=self)
|
||||
return StorageObject(obj=obj, cloudstorage=self)
|
||||
|
||||
def upload(self, file, object_name,
|
||||
def upload(self,
|
||||
file,
|
||||
object_name=None,
|
||||
acl="private",
|
||||
meta_data={},
|
||||
allowed_extensions=None,
|
||||
overwrite=False):
|
||||
|
||||
"""
|
||||
To upload file
|
||||
:param file:
|
||||
:param object_name:
|
||||
:param acl:
|
||||
:param meta_data:
|
||||
:param allowed_extensions:
|
||||
:param overwrite:
|
||||
:return: StorageObject
|
||||
"""
|
||||
extra = {
|
||||
"meta_data": meta_data,
|
||||
"acl": acl
|
||||
}
|
||||
object_name = object_name.strip("/").strip()
|
||||
|
||||
if isinstance(self.driver, LocalStorageDriver):
|
||||
object_name = secure_filename(object_name)
|
||||
|
||||
if isinstance(file, FileStorage):
|
||||
extension = get_file_extension(file.filename)
|
||||
else:
|
||||
extension = get_file_extension(file)
|
||||
|
||||
if not object_name:
|
||||
if isinstance(file, FileStorage):
|
||||
object_name = get_file_name(file.filename)
|
||||
else:
|
||||
object_name = get_file_name(file)
|
||||
object_name = object_name.strip("/").strip()
|
||||
|
||||
if not allowed_extensions:
|
||||
allowed_extensions = self.allowed_extensions
|
||||
if extension.lower() not in allowed_extensions:
|
||||
raise InvalidExtensionError("Invalid file extension")
|
||||
|
||||
if isinstance(self.driver, LocalStorageDriver):
|
||||
object_name = secure_filename(object_name)
|
||||
|
||||
if get_file_extension(object_name).strip() == "":
|
||||
object_name += "." + extension
|
||||
|
||||
if not overwrite:
|
||||
object_name = self._safe_object_name(object_name)
|
||||
|
||||
@@ -226,11 +241,12 @@ class Storage(object):
|
||||
str
|
||||
A safe filenaem to use when writting the file
|
||||
"""
|
||||
filename = get_filename(object_name)
|
||||
extension = get_file_extension(object_name)
|
||||
filename = get_file_name(object_name)
|
||||
file_name = filename.strip("." + extension)
|
||||
while self.object_exists(object_name):
|
||||
uuid = shortuuid.uuid()
|
||||
object_name = "%s_%s.%s" % (filename, uuid, extension)
|
||||
object_name = "%s__%s.%s" % (file_name, uuid, extension)
|
||||
return object_name
|
||||
|
||||
class StorageObject(object):
|
||||
|
||||
@@ -17,7 +17,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
|
||||
__NAME__ = "flask-CloudStorage"
|
||||
__version__ = "0.1.0"
|
||||
__version__ = "0.2.0"
|
||||
__author__ = "Mardix"
|
||||
__license__ = "MIT"
|
||||
__copyright__ = "2015"
|
||||
@@ -36,6 +36,7 @@ setup(
|
||||
include_package_data=True,
|
||||
packages=find_packages(),
|
||||
install_requires=[
|
||||
"werkzeug==0.10.1",
|
||||
"apache-libcloud==0.17.0",
|
||||
"lockfile==0.10.2",
|
||||
"shortuuid==0.1"
|
||||
|
||||
@@ -6,6 +6,7 @@ from libcloud.storage.base import (StorageDriver,
|
||||
from tests import config
|
||||
from flask_cloudstorage import (get_file_extension,
|
||||
get_file_extension_type,
|
||||
get_file_name,
|
||||
Storage,
|
||||
StorageObject,
|
||||
InvalidExtensionError)
|
||||
@@ -36,6 +37,11 @@ def test_get_file_extension_type():
|
||||
filename = "hello.mp3"
|
||||
assert get_file_extension_type(filename) == "AUDIO"
|
||||
|
||||
def test_get_file_name():
|
||||
filename = "/dir1/dir2/dir3/hello.jpg"
|
||||
assert get_file_name(filename) == "hello.jpg"
|
||||
|
||||
|
||||
#---
|
||||
|
||||
app = App()
|
||||
@@ -112,4 +118,16 @@ def test_storage_upload():
|
||||
storage.upload(CWD + "/data/hello.txt", object_name)
|
||||
o = storage.upload(CWD + "/data/hello.txt", object_name)
|
||||
assert isinstance(o, StorageObject)
|
||||
assert o.name != object_name
|
||||
assert o.name != object_name
|
||||
|
||||
def test_storage_upload_use_filename_name():
|
||||
storage = app_storage()
|
||||
object_name = "hello.js"
|
||||
o = storage.upload(CWD + "/data/hello.js", overwrite=True, allowed_extensions=["js"])
|
||||
assert o.name == object_name
|
||||
|
||||
def test_storage_upload_append_extension():
|
||||
storage = app_storage()
|
||||
object_name = "my-txt-hello-hello"
|
||||
o = storage.upload(CWD + "/data/hello.txt", object_name, overwrite=True)
|
||||
assert get_file_extension(o.name) == "txt"
|
||||
Reference in New Issue
Block a user