예제 #1
0
    def handle_noargs(self, *, verbosity=1, dry_run=False, **options):
        verbosity = int(verbosity)

        def log(msg, level=2):
            '''Utility to write log message at appropriate log level.'''
            if verbosity >= level:
                self.stdout.write(msg)

        def failure(fn, path, excinfo):
            log('error: {}: {}'.format(os.strerror(excinfo[1].errno), path), 1)

        storage = ProtectedFileSystemStorage()
        try:
            dirs, _ = storage.listdir('projects')
        except FileNotFoundError:
            return
        for dirname in dirs:
            path = posixpath.join('projects', dirname)
            if not dirname.isdigit():
                log('Skipping directory: {}'.format(path))
            elif not Project.objects.filter(pk=dirname).exists():
                log('Removing directory: {}'.format(path), 2)
                if not dry_run:
                    shutil.rmtree(storage.path(path), onerror=failure)
            else:
                _, files = storage.listdir(posixpath.join('projects', dirname))
                for name in files:
                    name = posixpath.join(path, name)
                    if DataFile.objects.filter(file=name).exists():
                        log('Keeping file: {}'.format(name), 3)
                    else:
                        log('Removing file: {}'.format(name), 2)
                        if not dry_run:
                            storage.delete(name)
예제 #2
0
    def handle_noargs(self, *, verbosity=1, dry_run=False, **options):
        verbosity = int(verbosity)

        def log(msg, level=2):
            '''Utility to write log message at appropriate log level.'''
            if verbosity >= level:
                self.stdout.write(msg)

        def failure(fn, path, excinfo):
            log('error: {}: {}'.format(os.strerror(excinfo[1].errno), path), 1)

        storage = ProtectedFileSystemStorage()
        try:
            _, files = storage.listdir(posixpath.join('projects', 'datafiles'))
        except FileNotFoundError:
            return
        for name in files:
            name = posixpath.join('projects', 'datafiles', name)
            if DataFile.objects.filter(file=name).exists():
                log('Keeping file: {}'.format(name), 2)
            else:
                log('Removing file: {}'.format(name), 1)
                if not dry_run:
                    storage.delete(name)