def browse( request, repo, org, cid, eid, role='master' ): """Browse for a file in vbox shared folder. """ identifier = Identifier(request) file_role = identifier.object() entity = file_role.parent(stubs=True) collection = entity.collection() path = request.GET.get('path') home = None parent = None if path: path_abs = os.path.join(settings.VIRTUALBOX_SHARED_FOLDER, path) parent = os.path.dirname(path) home = settings.VIRTUALBOX_SHARED_FOLDER else: path_abs = settings.VIRTUALBOX_SHARED_FOLDER listdir = [] if os.path.exists(path_abs): for x in os.listdir(path_abs): xabs = os.path.join(path_abs, x) rel = xabs.replace(settings.VIRTUALBOX_SHARED_FOLDER, '') if rel and rel[0] == '/': rel = rel[1:] isdir = os.path.isdir(xabs) if isdir: x = '%s/' % x mtime = datetime.fromtimestamp(os.path.getmtime(xabs)) size = None if not isdir: size = os.path.getsize(xabs) attribs = {'basename':x, 'rel':rel, 'path':xabs, 'isdir':isdir, 'size':size, 'mtime':mtime} if os.path.exists(xabs): listdir.append(attribs) return render_to_response( 'webui/files/browse.html', {'collection': collection, 'entity': entity, 'file_role': file_role, 'new_file_url': entity.new_file_url(role), 'shared_folder': settings.VIRTUALBOX_SHARED_FOLDER, 'listdir': listdir, 'parent': parent, 'home': home,}, context_instance=RequestContext(request, processors=[]) )
def new( request, repo, org, cid, eid, role='master' ): git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if not git_name and git_mail: messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) fidentifier = Identifier(request) file_role = fidentifier.object() module = MODULES[CHILDREN_ALL[fidentifier.model]] entity = file_role.parent(stubs=True) collection = entity.collection() if collection.locked(): messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id)) return HttpResponseRedirect(entity.absolute_url()) if collection.repo_behind(): messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_BEHIND'].format(collection.id)) return HttpResponseRedirect(entity.absolute_url()) if entity.locked(): messages.error(request, WEBUI_MESSAGES['VIEWS_ENT_LOCKED']) return HttpResponseRedirect(entity.absolute_url()) # path = request.GET.get('path', None) FIELDS = prep_newfile_form_fields(module.FIELDS_NEW) if request.method == 'POST': form = NewFileDDRForm(request.POST, fields=FIELDS, path_choices=shared_folder_files()) if form.is_valid(): data = form.cleaned_data src_path = path # inheritable fields inherited = [] for field in entity.inheritable_fields(): inherited.append( (field,getattr(entity,field)) ) # start tasks result = entity_add_file.apply_async( (git_name, git_mail, entity, src_path, role, data, settings.AGENT), countdown=2) result_dict = result.__dict__ log = addfile_logger(entity.identifier) log.ok('START task_id %s' % result.task_id) log.ok('ddrlocal.webui.file.new') log.ok('Locking %s' % entity.id) # lock entity lockstatus = entity.lock(result.task_id) if lockstatus == 'ok': log.ok('locked') else: log.not_ok(lockstatus) # add celery task_id to session celery_tasks = request.session.get(settings.CELERY_TASKS_SESSION_KEY, {}) # IMPORTANT: 'action' *must* match a message in webui.tasks.TASK_STATUS_MESSAGES. task = {'task_id': result.task_id, 'action': 'webui-file-new-%s' % role, 'filename': os.path.basename(src_path), 'entity_id': entity.id, 'start': datetime.now().strftime(settings.TIMESTAMP_FORMAT),} celery_tasks[result.task_id] = task #del request.session[settings.CELERY_TASKS_SESSION_KEY] request.session[settings.CELERY_TASKS_SESSION_KEY] = celery_tasks # feedback # messages.success(request, WEBUI_MESSAGES['VIEWS_FILES_UPLOADING'] % (os.path.basename(src_path), result)) # redirect to entity return HttpResponseRedirect(entity.absolute_url()) else: if not path: messages.error(request, 'specify a path') data = {'path': path, 'role':role, 'sort': 1, 'label': '',} # inheritable fields for field in entity.inheritable_fields(): data[field] = getattr(entity, field) form = NewFileDDRForm(data, fields=FIELDS, path_choices=shared_folder_files()) return render_to_response( 'webui/files/new.html', {'collection': collection, 'entity': entity, 'file_role': file_role, 'form': form, 'path': path,}, context_instance=RequestContext(request, processors=[]) )