def download_yang(request, req): """ This API download yang schema from device """ logger.debug('Download Yang Schema') req = req.replace('<metadata>', '') req = req.replace('</metadata>', '') protocol, device, fmt, payload = Adapter.parse_request(req) if device.get('host', None) is None: return HttpResponse( Response.error('download', 'Netconf agent address missing!!')) # clear session directory if it exists Uploader.clear_upload_files(None, request.session.session_key) # create session directory if it does not exist session_dir = Uploader.create_session_storage(request.session.session_key) if session_dir is None: logger.error('download_yang: Invalid session') return HttpResponse(Response.error('download', 'Invalid session_id')) # extact list of models from request req_xml = ET.fromstring(req) models = [sc.text.strip() for sc in req_xml.find('schemas')] # download all models recursively rpc = ET.fromstring(get_schema_rpc) download_helper(request.user.username, device, session_dir, rpc, models) # prepare list of downloaded models modules = ET.Element('modules') for _file in glob.glob(os.path.join(session_dir, '*.yang')): # see if we need to rename file with revision date parser = Parser(_file) new_fname = os.path.join(session_dir, parser.get_filename()) if _file != new_fname: os.rename(_file, new_fname) module = ET.Element('module') module.text = os.path.basename(new_fname) modules.append(module) return modules
def download_yang(request, req): """ This API download yang schema from device """ logger.debug("Download Yang Schema") req = req.replace("<metadata>", "") req = req.replace("</metadata>", "") protocol, device, fmt, _, payload = Adapter.parse_request(req) if device.get("host", None) is None: return HttpResponse(Response.error("download", "Netconf agent address missing!!")) # clear session directory if it exists Uploader.clear_upload_files(None, request.session.session_key) # create session directory if it does not exist session_dir = Uploader.create_session_storage(request.session.session_key) if session_dir is None: logger.error("download_yang: Invalid session") return HttpResponse(Response.error("download", "Invalid session_id")) # extact list of models from request req_xml = ET.fromstring(req) models = [sc.text.strip() for sc in req_xml.find("schemas")] # download all models recursively rpc = ET.fromstring(get_schema_rpc) download_helper(request.user.username, device, session_dir, rpc, models) # prepare list of downloaded models modules = ET.Element("modules") for _file in glob.glob(os.path.join(session_dir, "*.yang")): # see if we need to rename file with revision date parser = Parser(_file) new_fname = os.path.join(session_dir, parser.get_filename()) if _file != new_fname: os.rename(_file, new_fname) module = ET.Element("module") module.text = os.path.basename(new_fname) modules.append(module) return modules
def upload_handler(request): """ HTTP Request handler function to upload yang models """ mode = request.GET.get('mode', '') logging.debug(request.method + ':Received upload request .. ' + mode) if not request.user.is_authenticated(): logging.warning('User must be logged in !!') return HttpResponse(Response.error(mode, 'Unauthorized')) if not ServerSettings.user_aware(): if not request.user.has_perm('explorer.delete_yangmodel') or \ not request.user.has_perm('explorer.change_yangmodel'): logging.warning('Unauthorized upload request .. ') return HttpResponse(Response.error(mode, 'User does not have permission to upload !!')) if request.method == 'POST': # create a temporary storage for this session directory = ServerSettings.session_path(request.session.session_key) _file = Uploader.upload_file(request.FILES['Filedata'], directory) if _file is not None: module = ET.Element('module') module.text = _file rval = Response.success('upload', 'ok', xml=module) logging.debug(rval) return HttpResponse(rval) return HttpResponse(Response.error('upload', 'Failed to upload')) elif request.method == 'GET': if mode == 'sync': filename = request.GET.get('file', '') index = request.GET.get('index', '') logging.info('Received sync request for ' + filename + ', index ' + index) success, response = Uploader.sync_file(request.user.username, request.session.session_key, filename, index) if success: return HttpResponse(Response.success(mode, 'ok')) return HttpResponse(Response.error(mode, 'compilation failed', xml=response)) elif mode == 'commit': success, modules = Uploader.commit_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success('commit', 'ok', modules)) elif mode == 'init': success, modules = Uploader.get_upload_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success(mode, 'ok', modules)) elif mode == 'clear': success, modules = Uploader.clear_upload_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success(mode, 'ok', modules)) return HttpResponse(Response.error(mode, 'failed')) return render_to_response('upload.html')
def upload_handler(request): """ HTTP Request handler function to upload yang models """ if not request.user.is_authenticated(): logging.debug('Unauthorized upload request .. ') return HttpResponse(Response.error('upload', 'Unauthorized')) mode = request.GET.get('mode', '') logging.debug(request.method + ':Received upload request .. ' + mode) if request.method == 'POST': # create a temporary storage for this session directory = os.path.join('data', 'session', request.session.session_key) _file = upload_file(request.FILES['Filedata'], directory) if _file is not None: module = ET.Element('module') module.text = _file rval = Response.success('upload', 'ok', xml=module) logging.debug(rval) return HttpResponse(rval) return HttpResponse(Response.error('upload', 'Failed to upload')) elif request.method == 'GET': if mode == 'sync': filename = request.GET.get('file', '') index = request.GET.get('index', '') logging.debug('Received sync request for ' + filename + ', index ' + index) success, response = sync_file(request.user.username, request.session.session_key, filename, index) if success: return HttpResponse(Response.success(mode, 'ok')) return HttpResponse(Response.error(mode, 'compilation failed', xml=response)) elif mode == 'commit': success, modules = commit_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success('commit', 'ok', modules)) elif mode == 'init': success, modules = get_upload_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success(mode, 'ok', modules)) elif mode == 'clear': success, modules = clear_upload_files(request.user.username, request.session.session_key) if success: return HttpResponse(Response.success(mode, 'ok', modules)) return HttpResponse(Response.error(mode, 'failed')) return render_to_response('upload.html')