52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
from __future__ import print_function, unicode_literals
|
|
|
|
import logging
|
|
|
|
from fuse import FUSE
|
|
|
|
from django.core import management
|
|
from django.core.management.base import CommandError
|
|
|
|
from ...filesystems import IndexFilesystem
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Command(management.BaseCommand):
|
|
help = 'Mount an index as a FUSE filesystem.'
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('slug', nargs='?', help='Index slug')
|
|
parser.add_argument('mount_point', nargs='?', help='Mount point')
|
|
parser.add_argument(
|
|
'--allow-other', action='store_true', dest='allow_other',
|
|
default=False,
|
|
help='All users (including root) can access the index files.'
|
|
)
|
|
parser.add_argument(
|
|
'--allow-root', action='store_true', dest='allow_root',
|
|
default=False,
|
|
help='Mount access is limited to the user mounting the index and '
|
|
'root. This option and --allow-other are mutually exclusive.'
|
|
)
|
|
|
|
def handle(self, *args, **options):
|
|
if not options.get('slug') or not options.get('mount_point'):
|
|
self.stderr.write(self.style.ERROR('Incorrect number of arguments'))
|
|
exit(1)
|
|
|
|
try:
|
|
FUSE(
|
|
operations=IndexFilesystem(index_slug=options['slug']),
|
|
mountpoint=options['mount_point'], nothreads=True, foreground=True,
|
|
allow_other=options['allow_other'],
|
|
allow_root=options['allow_root']
|
|
)
|
|
except RuntimeError:
|
|
if options['allow_other'] or options['allow_root']:
|
|
raise CommandError(
|
|
'Make sure \'user_allow_other\' is set in /etc/fuse.conf'
|
|
)
|
|
else:
|
|
raise
|