0.2.0 - Add extension to object_name - Use source name as object name if empty

This commit is contained in:
Mardix
2015-05-24 01:00:51 -04:00
parent a8e9c60dac
commit 5937569eb7
5 changed files with 56 additions and 18 deletions
+3
View File
@@ -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
View File
@@ -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):
+2 -1
View File
@@ -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"
+19 -1
View File
@@ -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"