test
This commit is contained in:
parent
826f67f254
commit
df47775b0a
@ -180,8 +180,8 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|||||||
|
|
||||||
# Les documents privés ne doivent pas être servis directement par STATIC_URL
|
# Les documents privés ne doivent pas être servis directement par STATIC_URL
|
||||||
# ou MEDIA_URL : les téléchargements sont contrôlés par les vues de GoodDrive.
|
# ou MEDIA_URL : les téléchargements sont contrôlés par les vues de GoodDrive.
|
||||||
DRIVE_STORAGE_ROOT = Path(config('DRIVE_STORAGE_ROOT', default='/data/files')).resolve()
|
DRIVE_STORAGE_ROOT = Path(config('DRIVE_STORAGE_ROOT', default='/storage')).resolve()
|
||||||
FILE_UPLOAD_TEMP_DIR = str(DRIVE_STORAGE_ROOT.parent / 'tmp')
|
FILE_UPLOAD_TEMP_DIR = str(Path(config('FILE_UPLOAD_TEMP_DIR', default=str(DRIVE_STORAGE_ROOT / '.uploads'))).resolve())
|
||||||
DRIVE_STORAGE_ROOT.mkdir(parents=True, exist_ok=True)
|
DRIVE_STORAGE_ROOT.mkdir(parents=True, exist_ok=True)
|
||||||
Path(FILE_UPLOAD_TEMP_DIR).mkdir(parents=True, exist_ok=True)
|
Path(FILE_UPLOAD_TEMP_DIR).mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,7 @@ class DriveItem(models.Model):
|
|||||||
is_folder = models.BooleanField(default=False)
|
is_folder = models.BooleanField(default=False)
|
||||||
storage_key = models.CharField(max_length=120, blank=True)
|
storage_key = models.CharField(max_length=120, blank=True)
|
||||||
# Existing files keep a blank storage_location (legacy /files/ab/<uuid>).
|
# Existing files keep a blank storage_location (legacy /files/ab/<uuid>).
|
||||||
# New files go under /files/root/0001/.../ab/<uuid>.
|
# Files go under /storage/0001/.../ab/<uuid>, without a /root layer.
|
||||||
storage_location = models.CharField(max_length=1200, blank=True)
|
storage_location = models.CharField(max_length=1200, blank=True)
|
||||||
size = models.BigIntegerField(default=0)
|
size = models.BigIntegerField(default=0)
|
||||||
mime_type = models.CharField(max_length=180, default='application/octet-stream')
|
mime_type = models.CharField(max_length=180, default='application/octet-stream')
|
||||||
|
|||||||
@ -47,6 +47,9 @@ def ancestry(space):
|
|||||||
|
|
||||||
def subtree_space_ids(space):
|
def subtree_space_ids(space):
|
||||||
"""Use the stable DB path rather than a filesystem traversal."""
|
"""Use the stable DB path rather than a filesystem traversal."""
|
||||||
|
# The logical root has an empty relative_path and contains every space.
|
||||||
|
if space.parent_id is None and space.relative_path == '':
|
||||||
|
return DriveSpace.objects.all().values_list('pk', flat=True)
|
||||||
return DriveSpace.objects.filter(
|
return DriveSpace.objects.filter(
|
||||||
Q(relative_path=space.relative_path) | Q(relative_path__startswith=space.relative_path + '/')
|
Q(relative_path=space.relative_path) | Q(relative_path__startswith=space.relative_path + '/')
|
||||||
).values_list('pk', flat=True)
|
).values_list('pk', flat=True)
|
||||||
|
|||||||
@ -26,7 +26,7 @@ def ensure_space(user):
|
|||||||
if root is None:
|
if root is None:
|
||||||
if not is_admin(user):
|
if not is_admin(user):
|
||||||
raise PermissionError('Un administrateur doit initialiser le Drive.')
|
raise PermissionError('Un administrateur doit initialiser le Drive.')
|
||||||
obj = DriveSpace.objects.create(user=user, relative_path='root', display_name='Racine')
|
obj = DriveSpace.objects.create(user=user, relative_path='', display_name='Racine')
|
||||||
else:
|
else:
|
||||||
obj = create_space(user, root, user.username)
|
obj = create_space(user, root, user.username)
|
||||||
return obj
|
return obj
|
||||||
@ -37,7 +37,7 @@ def _make_numbered_space(parent, **fields):
|
|||||||
raise ValueError('Hiérarchie trop profonde.')
|
raise ValueError('Hiérarchie trop profonde.')
|
||||||
obj = DriveSpace.objects.create(parent=parent, relative_path=f'pending/{secrets.token_hex(10)}', **fields)
|
obj = DriveSpace.objects.create(parent=parent, relative_path=f'pending/{secrets.token_hex(10)}', **fields)
|
||||||
obj.directory_name = f'{obj.pk - 1:04d}'
|
obj.directory_name = f'{obj.pk - 1:04d}'
|
||||||
obj.relative_path = f'{parent.relative_path}/{obj.directory_name}'
|
obj.relative_path = '/'.join(part for part in (parent.relative_path, obj.directory_name) if part)
|
||||||
obj.save(update_fields=['directory_name', 'relative_path'])
|
obj.save(update_fields=['directory_name', 'relative_path'])
|
||||||
(Path(settings.DRIVE_STORAGE_ROOT) / obj.relative_path).mkdir(mode=0o700, parents=True, exist_ok=True)
|
(Path(settings.DRIVE_STORAGE_ROOT) / obj.relative_path).mkdir(mode=0o700, parents=True, exist_ok=True)
|
||||||
return obj
|
return obj
|
||||||
@ -162,7 +162,7 @@ def storage_path(item):
|
|||||||
|
|
||||||
|
|
||||||
def new_storage_location(space, key):
|
def new_storage_location(space, key):
|
||||||
return f'{space.relative_path}/{key[:2]}/{key}'
|
return '/'.join(part for part in (space.relative_path, key[:2], key) if part)
|
||||||
|
|
||||||
|
|
||||||
def hash_token(token):
|
def hash_token(token):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user