Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ htmlcov
*.egg-info/
build
dist
*.swp
9 changes: 4 additions & 5 deletions django_webdav_storage/listing.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import re


NGINX_AUTOINDEX_RE = re.compile(b'\<a href="([^"]+)"\>')
NGINX_AUTOINDEX_RE = re.compile(r'\<a href="([^"]+)"\>')


def nginx_autoindex(storage, path):
directories, files = [], []

response = storage.webdav('GET', path)

for link in NGINX_AUTOINDEX_RE.findall(response.content):
if link == b'../':
for link in NGINX_AUTOINDEX_RE.findall(response.content.decode('utf-8')):
if link == '../':
continue

if link.endswith(b'/'):
if link.endswith('/'):
directories.append(link[:-1])
else:
files.append(link)
Expand Down
11 changes: 10 additions & 1 deletion django_webdav_storage/storage.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# coding: utf-8

from __future__ import unicode_literals
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
from tempfile import NamedTemporaryFile

from django.core.files.storage import Storage as StorageBase
from django.core.files.base import ContentFile
from django.conf import settings
Expand Down Expand Up @@ -114,6 +115,14 @@ def exists(self, name):
else:
return True

def path(self, name):
try:
with NamedTemporaryFile(delete=False) as tf:
tf.write(self.webdav('GET', name).content)
return tf.name
except requests.exceptions.HTTPError:
pass

def size(self, name):
try:
return int(self.webdav('HEAD', name).headers['content-length'])
Expand Down
4 changes: 2 additions & 2 deletions django_webdav_storage/tests/tests_list_dir.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ def test_listdir_works(self):

self.assertSetEqual(
{f for f in files},
{b'file.img', b'hello.pdf'}
{'file.img', 'hello.pdf'}
)
self.assertSetEqual(
{d for d in dirs},
{b'hello'},
{'hello'},
)

def test_listdir_not_found(self):
Expand Down
31 changes: 31 additions & 0 deletions django_webdav_storage/tests/tests_path.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# coding: utf-8
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
import os

from django_webdav_storage.tests import TestBase, LAZY_FOX


class TestPathMethod(TestBase):
"""
Tests for `path` storage method
"""
def test_path_non_exists(self):
self.assertIsNone(
self.storage.path(self.session_id + '_non_exists.txt')
)

def test_path_exists(self):
with self.existing_file('exists.txt') as f:
path = self.storage.path(f.filename)
self.assertTrue(os.path.exists(path))
self.storage.delete(f.filename)
self.assertIsNone(self.storage.path(f.filename))

def test_path_file_content(self):
with self.existing_file('exists.txt') as f:
path = self.storage.path(f.filename)
with open(path) as tmp:
self.assertEqual(tmp.read(), LAZY_FOX)