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
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")
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"
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")
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)
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)
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
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")