Couple of fixes

This commit is contained in:
Tris 2021-03-23 08:15:08 +11:00
parent 8f6b908100
commit 9c9f1cb2bf
3 changed files with 35 additions and 8 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
__pycache__ __pycache__
*.pyc *.pyc
django_byostorage.egg-info django_byostorage.egg-info
.coverage
htmlcov

View File

@ -1,6 +1,6 @@
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.core.files.storage import get_storage_class from django.core.files.storage import get_storage_class, FileSystemStorage
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
import json import json
@ -52,14 +52,19 @@ class UserStorage(models.Model):
except Exception as e: except Exception as e:
raise ValueError("Error in settings for storage '{0}' [{1}]".format(self.name, e)) raise ValueError("Error in settings for storage '{0}' [{1}]".format(self.name, e))
def test_connection(self): def test_storage(self):
# just do something that requires connection # just do something that requires connection
self.instance().exists('ping.txt') try:
self.instance().listdir('')
except FileNotFoundError:
# FileSystemStorage doesn't create the base_dir until write
pass
return True
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
# check the settings are valid # ensure the settings JSON isvalid
validate_json(self.settings_data) if self.settings_data:
self.test_connection() validate_json(self.settings_data)
super(UserStorage, self).save(*args, **kwargs) super(UserStorage, self).save(*args, **kwargs)

View File

@ -7,6 +7,9 @@ from .models import UserStorage
from .user import BYOStorage from .user import BYOStorage
from .http import HTTPStorage from .http import HTTPStorage
#import logging
#logging.basicConfig(level=logging.DEBUG)
class MultiStorageTestCase(TestCase): class MultiStorageTestCase(TestCase):
def test_storage_selection(self): def test_storage_selection(self):
@ -56,8 +59,8 @@ class UserStorageTestCase(TestCase):
UserStorage.objects.create(name='one', storage='django.core.files.storage.FileSystemStorage', UserStorage.objects.create(name='one', storage='django.core.files.storage.FileSystemStorage',
settings_data='{"location": "foo}') settings_data='{"location": "foo}')
def test_bad_settings(self): def test_connection(self):
UserStorage.objects.create(name='one', storage='storages.backends.s3boto3.S3Boto3Storage', instance = UserStorage.objects.create(name='one', storage='storages.backends.s3boto3.S3Boto3Storage',
settings_data=''' settings_data='''
{ {
"access_key": "polyphonic_test_key", "access_key": "polyphonic_test_key",
@ -67,6 +70,23 @@ class UserStorageTestCase(TestCase):
} }
''') ''')
def test_bad_connection(self):
try:
UserStorage.objects.create(name='one', storage='storages.backends.s3boto3.S3Boto3Storage',
settings_data='''
{
"access_key": "polyphonic_test_key",
"secret_key": "the_wrong_secret",
"endpoint_url": "http://localhost:9000",
"bucket_name": "missing"
}
''')
self.fail("Should have raised an exception")
except Exception as e:
pass
class BYOStorageTestCase(TestCase): class BYOStorageTestCase(TestCase):
def setUp(self): def setUp(self):