Ejemplo n.º 1
0
    def httpRequest(self, value):
        from opencsp import AVAILABLE_STORAGES

        self.storage = AVAILABLE_STORAGES.get(value.user)
        self._httpRequest = value
        for control in self.formControls.values():
            control.httpRequest = value
Ejemplo n.º 2
0
def removefile(request):
    filename = request.POST.get('filename', None)
    if filename != None:
        storage = AVAILABLE_STORAGES.get(request.user)
        success = storage.delete(filename)
    data = simplejson.dumps({})
    return HttpResponse(data, "application/json")
Ejemplo n.º 3
0
    def prepare_job(self, job):
        server = job.server

        server.write(os.path.join(server.running_env, 'server_id.txt'),
                     server.server_id)
        server.run("mkdir %s" % os.path.join(server.running_env, 'output'))
        server.run("chmod 777 %s" % os.path.join(server.running_env, 'output'))

        server.run("mkdir %s" % os.path.join(server.running_env, 'input'))
        server.run("chmod 777 %s" % os.path.join(server.running_env, 'input'))

        destiny_folder = os.path.join(server.running_env, 'input')

        job.job_uploadedBytes = 0
        storage = AVAILABLE_STORAGES.get(job.user)

        job.info("Loading slave server:")
        for filepath in job.inputfiles:
            print "\t{0} -> server".format(filepath)
            job.info("\t{0} -> server".format(filepath))
            filehandler = storage.get_file_handler(filepath)

            filename = os.path.join(destiny_folder, filepath[1:])
            server.run("mkdir -p '%s'" % os.path.dirname(filename))
            job.server.write(filename, filehandler)

            fileinfo = storage.file_info(filepath)
            job.job_uploadedBytes += fileinfo.size

        job.save()

        self.create_remote_script(job)
        print "Files loaded"
Ejemplo n.º 4
0
def createfolder(request):
    try:
        path = request.POST.get('path', '.')
        storage = AVAILABLE_STORAGES.get(request.user)
        success = storage.mkdir(path)
    except:
        success = False
    return HttpResponse(simplejson.dumps(success), "application/json")
Ejemplo n.º 5
0
def upload_delete(request, filename):
    success = True
    try:
        storage = AVAILABLE_STORAGES.get(request.user)
        success = storage.delete(filename)
    except:
        success = False
    return JFUResponse(request, success)
Ejemplo n.º 6
0
def upload(request):
    path = request.POST.get('path', '/')

    files = upload_receive(request)
    if not isinstance(files, list): files = [files]
    data = files[0]
    filename = os.path.join(path, str(data))

    storage = AVAILABLE_STORAGES.get(request.user)
    storage.put_file_contents(filename, data)
    fileinfo = storage.file_info(filename)

    file_dict = {
        'name': fileinfo.filename,
        'size': sizeof_fmt(fileinfo.size),
        'thumbnail_url': fileinfo.small_thumb,
        'url': fileinfo.open_link,
        'delete':
        '',  #'delete_url': reverse('jfu_delete', kwargs = {'filename': str(data) }),
        'delete_type': 'POST',
    }
    return UploadResponse(request, file_dict)
Ejemplo n.º 7
0
 def httpRequest(self, value):
     from opencsp import AVAILABLE_STORAGES
     self.storage = AVAILABLE_STORAGES.get(value.user)
     self._httpRequest = value
     for control in self.formControls.values():
         control.httpRequest = value
Ejemplo n.º 8
0
    def unload_files(self, job, userpath):
        server = job.server
        outputFolder = os.path.join(server.running_env, 'output')

        job.job_startDownload = timezone.now()
        job.job_downloadedBytes = 0
        job.job_outparameters = self.read(server, 'out-parameters.txt')

        try:
            job.info("Downloading job's output:")
            if server.exists(outputFolder):
                job.job_outputSize = self.remote_path_size(
                    server, outputFolder)
                job.info("du -sb {0}".format(outputFolder))
                job.save()

                storage = AVAILABLE_STORAGES.get(job.user)

                client = paramiko.SSHClient()
                client.load_system_host_keys()
                client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

                if len(server.password) > 0:
                    client.connect(server.server_host,
                                   timeout=5.0,
                                   username=server.server_user,
                                   password=server.server_pass)
                if len(server.server_certificate) > 0:
                    client.connect(server.server_host,
                                   timeout=20.0,
                                   username=server.server_user,
                                   key_filename=server.server_certificate)
                else:
                    client.connect(server.server_host,
                                   timeout=5.0,
                                   username=server.server_user,
                                   look_for_keys=True)

                sftp_client = client.open_sftp()

                params = eval(str(job.job_parameters))
                userpath = params['userpath']

                for f in server.output_files(job, directories=True):
                    if len(f.strip()) == 0: continue
                    job.info("\t{0} <- {1}".format(userpath, f))
                    directory_path = os.path.join(userpath, f)
                    storage.mkdir(directory_path)

                for f in server.output_files(job, directories=False):
                    if len(f.strip()) == 0: continue
                    job.info("\t{0} <- {1}".format(userpath, f))
                    filepath = os.path.join(userpath, f)

                    filehandler = sftp_client.file(
                        os.path.join(outputFolder, f), 'rb')
                    filehandler.prefetch()
                    filebuffer = SFTPFileBuffer(filehandler)
                    try:
                        storage.put_file_contents(filepath, filebuffer)
                    finally:
                        filehandler.close()

                    fileinfo = storage.file_info(filepath)
                    job.job_downloadedBytes += fileinfo.size
        except Exception, e:
            job.error(str(e))
import sys, os
sys.path.append("./")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
import django
django.setup()
from django.conf import settings
from django.utils import timezone
from dateutil import parser
from opencsp import AVAILABLE_STORAGES
from django.contrib.auth.models import User

infodir = os.path.join(settings.MEDIA_ROOT, 'mounts', 'mountsinfo')
for subdir, dirs, files in os.walk(infodir):
    for filename in files:
        username = filename[:-4]
        infofile = os.path.join(infodir, filename)

        try:
            with open(infofile, 'r') as f:
                lastmount = parser.parse(f.read())
            timediff = (timezone.now() - lastmount).total_seconds()
            if timediff > settings.WAITING_TIME_BEFORE_UNMOUNT_USER_AREA:
                user = User.objects.get(username=username)
                storage = AVAILABLE_STORAGES.get(user)
                storage.umount()
        except:
            pass
Ejemplo n.º 10
0
def browsefiles(request):
    path = request.GET.get('p', '/')
    backfolder = request.GET.get('backfolder', 'true') == 'true'

    storage = AVAILABLE_STORAGES.get(request.user)

    rows = []
    if path != '/' and path != '//' and backfolder:
        link = """<a href='javascript:openFolder("/{0}")' >..</a>""".format(
            os.path.split(path[1:-1])[0])
        rows.append({
            'values': [
                link,
                '',
                '',
                '',
            ],
            'small_thumb': '',
            'big_thumb': '',
            'url': '',
            'file': '..'
        })

    for index, f in enumerate(storage.list(path)):
        rows.append({
            'values': [
                """<a target='_blank' href='{0}' >{1}</a>""".format(
                    f.open_link, f.filename),
                sizeof_fmt(f.size), f.lastmodified,
                """<a href='javascript:removeFile("{0}",{1});' ><i class="glyphicon glyphicon-trash remove-button"></i></a>"""
                .format(f.fullpath, index)
            ],
            'small_thumb':
            f.small_thumb,
            'big_thumb':
            f.big_thumb,
            'url':
            f.fullpath,
            'file':
            f.fullpath,
            'filename':
            f.filename
        })

    #Implement the filter
    querystring = request.POST.get('q', '')
    for q in shlex.split(querystring):
        rows = filter(lambda x: q in x['values'][0], rows)

    #Implement the sorting
    sortby = request.POST.get('s', '')
    sorbylist = []
    for col in sortby.split(','):
        if col == '0': rows = sorted(rows, key=lambda x: x['values'][0])
        elif col == '-0':
            rows = sorted(rows, key=lambda x: x['values'][0], reverse=True)

        if col == '1': rows = sorted(rows, key=lambda x: x['values'][1])
        elif col == '-1':
            rows = sorted(rows, key=lambda x: x['values'][1], reverse=True)

        if col == '2': rows = sorted(rows, key=lambda x: x['values'][2])
        elif col == '-2':
            rows = sorted(rows, key=lambda x: x['values'][2], reverse=True)

    data = simplejson.dumps(rows)
    return HttpResponse(data, "application/json")