# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceList, Connection from context.client.ContextClient import ContextClient #from slice.client.SliceClient import SliceClient slice = Blueprint('slice', __name__, url_prefix='/slice') context_client = ContextClient() #slice_client = SliceClient() @slice.get('/') def home(): # flash('This is an info message', 'info') # flash('This is a danger message', 'danger') context_uuid = session.get('context_uuid', '-') if context_uuid == "-": flash("Please select a context!", "warning") return redirect(url_for("main.home")) request = ContextId() request.context_uuid.uuid = context_uuid context_client.connect() try: slice_list = context_client.ListSlices(request) # print(slice_list) slices = slice_list.slices context_not_found = False except grpc.RpcError as e: if e.code() != grpc.StatusCode.NOT_FOUND: raise if e.details() != 'Context({:s}) not found'.format(context_uuid): raise slices = [] context_not_found = True context_client.close() return render_template('slice/home.html',slices=slices, context_not_found=context_not_found) # #@slice.route('add', methods=['GET', 'POST']) #def add(): # flash('Add slice route called', 'danger') # raise NotImplementedError() # return render_template('slice/home.html') # # @slice.get('/detail') def detail(slice_uuid: str): context_uuid = session.get('context_uuid', '-') if context_uuid == "-": flash("Please select a context!", "warning") return redirect(url_for("main.home")) request: SliceId = SliceId() request.slice_uuid.uuid = slice_uuid request.context_id.context_uuid.uuid = context_uuid try: context_client.connect() response: Slice = context_client.GetSlice(request) #services: Service = context_client.ListServices(request) context_client.close() except Exception as e: flash('The system encountered an error and cannot show the details of this slice.', 'warning') current_app.logger.exception(e) return redirect(url_for('slice.home')) return render_template('slice/detail.html', slice=response) # #@slice.get('/delete') #def delete(slice_uuid: str): # context_uuid = session.get('context_uuid', '-') # if context_uuid == "-": # flash("Please select a context!", "warning") # return redirect(url_for("main.home")) # # try: # request = SliceId() # request.slice_uuid.uuid = slice_uuid # request.context_id.context_uuid.uuid = context_uuid # slice_client.connect() # response = slice_client.DeleteSlice(request) # slice_client.close() # # flash('Slice "{:s}" deleted successfully!'.format(slice_uuid), 'success') # except Exception as e: # flash('Problem deleting slice "{:s}": {:s}'.format(slice_uuid, str(e.details())), 'danger') # current_app.logger.exception(e) # return redirect(url_for('slice.home'))