# NOTE(apugachev) for big this will fail to load and BrokenPipe # will be raised inside Flask return flask.jsonify({}) @bp.route('progress/<uploaded_filename>/') def progress(uploaded_filename): r = flask.current_app.cache.get(uploaded_filename) return flask.jsonify(r or {}) @bp.route('<image_id>/delete/', methods=['POST']) def delete(image_id): image = clients.admin_clients().glance.images.get(image_id) owner = getattr(image, 'owner') if owner == clients.get_systenant_id(): principal.Permission(('role', 'admin')).test() else: principal.Permission(('role', 'member', owner)).test() form = forms.DeleteForm() if form.validate_on_submit(): image.delete() flask.flash('Image successfully deleted', 'success') else: flask.flash('Invalid form', 'error') return flask.redirect(flask.url_for('.index')) return bp ABP = environments.admin(get_bp('global_images')) PBP = environments.project(get_bp('project_images'))
# You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # <http://www.gnu.org/licenses/>. import flask from flask import blueprints from focus import clients from focus.views import environments from focus.views import forms from focus.views import pagination from openstackclient_base.exceptions import HttpException bp = environments.admin(blueprints.Blueprint('networks', __name__)) @bp.route('') def index(): try: networks = clients.admin_clients().compute.networks.list() except HttpException as ex: networks = [] tenants = clients.admin_clients().identity_admin.tenants.list() tenants = dict(((t.id, t.name) for t in tenants)) p = pagination.Pagination(len(networks)) offset = p.limit_offset() networks = [net._info for net in networks[offset[0]:offset[1]]] for net in networks: net["label"] = tenants.get(net["project_id"], net["label"])
import urllib import flask from flask import blueprints from flaskext import wtf from focus import utils from focus.views import environments from focus.views import forms from focus.views import pagination from openstackclient_base.exceptions import HttpException bp = environments.admin(blueprints.Blueprint('notifications', __name__)) class CreateNotification(wtf.Form): name = wtf.SelectField('Name', [wtf.Required()], choices=[]) is_minimized = wtf.BooleanField('Is minimized') def __init__(self, *args, **kwargs): super(CreateNotification, self).__init__(*args, **kwargs) parameters = utils.notifications_api_call("/parameter") item_list = utils.notifications_api_call("/item") created_keys = set([par["key_"] for par in parameters]) choices_dict = dict(((item["key_"], item["name"]) for item in item_list if item["key_"] not in created_keys)) self.name.choices = sorted(choices_dict.iteritems(), key=lambda i: i[1])
# License along with this program. If not, see # <http://www.gnu.org/licenses/>. import flask from flask import blueprints from focus import clients from focus.views import environments from focus.views import forms from focus.views import pagination from openstackclient_base.exceptions import HttpException bp = environments.admin(blueprints.Blueprint('networks', __name__)) @bp.route('') def index(): try: networks = clients.admin_clients().compute.networks.list() except HttpException as ex: networks = [] tenants = clients.admin_clients().identity_admin.tenants.list() tenants = dict(((t.id, t.name) for t in tenants)) p = pagination.Pagination(len(networks)) offset = p.limit_offset() networks = [net._info for net in networks[offset[0]:offset[1]]] for net in networks: net["label"] = tenants.get(net["project_id"], net["label"])
import urllib import flask from flask import blueprints from flaskext import wtf from focus import utils from focus.views import environments from focus.views import forms from focus.views import pagination from openstackclient_base.exceptions import HttpException bp = environments.admin(blueprints.Blueprint("notifications", __name__)) class CreateNotification(wtf.Form): name = wtf.SelectField("Name", [wtf.Required()], choices=[]) is_minimized = wtf.BooleanField("Is minimized") def __init__(self, *args, **kwargs): super(CreateNotification, self).__init__(*args, **kwargs) parameters = utils.notifications_api_call("/parameter") item_list = utils.notifications_api_call("/item") created_keys = set([par["key_"] for par in parameters]) choices_dict = dict(((item["key_"], item["name"]) for item in item_list if item["key_"] not in created_keys)) self.name.choices = sorted(choices_dict.iteritems(), key=lambda i: i[1])
# You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # <http://www.gnu.org/licenses/>. import flask from flask import blueprints from flaskext import principal from focus.models import orm from focus.views import forms from focus.views import environments from focus.views import pagination bp = environments.admin(blueprints.Blueprint('invitation_domains', __name__)) @bp.before_request def prepare(): principal.Permission(('role', 'admin')).test() flask.g.store = orm.get_store('INVITATIONS') @bp.route('') def index(): total_count = flask.g.store.execute( 'SELECT count(*) from email_masks').get_one()[0] p = pagination.Pagination(total_count) rows = flask.g.store.execute( 'SELECT * from email_masks ORDER BY email_mask LIMIT ?, ?',
""" import flask from flask import blueprints from focus import clients from focus import utils from focus.models import orm from focus.views import environments from focus.views import forms from focus.views import pagination from openstackclient_base.exceptions import HttpException bp = environments.admin(blueprints.Blueprint('projects', __name__)) @bp.route('') def index(): """List projects. List only enabled, sort by name. """ tenants = utils.get_visible_tenants() ordered = sorted(tenants, key=lambda x: x.name) pagina = pagination.Pagination(ordered) delete_form = forms.DeleteForm() return { 'objects': pagina.slice(ordered),
import contextlib import datetime import json import re import urllib import urlparse import flask from flask import blueprints from focus.models import orm from focus.views import environments bp = environments.admin(blueprints.Blueprint('load_history', __name__)) def baseurl(): url = flask.current_app.config['ZABBIX_PROXY_BASEURL'] if not url.endswith('/'): url += '/' return url @bp.context_processor def titles(): return { 'title': 'Load history', 'subtitle': 'CPU/Load Avg./Mem/free space/io-wait history of every compute node' }
# Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # <http://www.gnu.org/licenses/>. import flask from flask import blueprints from flaskext import principal from focus.models import orm from focus.views import forms from focus.views import environments from focus.views import pagination bp = environments.admin(blueprints.Blueprint('invitation_domains', __name__)) @bp.before_request def prepare(): principal.Permission(('role', 'admin')).test() flask.g.store = orm.get_store('INVITATIONS') @bp.route('') def index(): total_count = flask.g.store.execute( 'SELECT count(*) from email_masks').get_one()[0] p = pagination.Pagination(total_count) rows = flask.g.store.execute( 'SELECT * from email_masks ORDER BY email_mask LIMIT ?, ?',
Admins can list users, delete user, grant or revoke admin permissions. TODO(apugachev) Look for a simpler way of deciding if user is admin. TODO(apugachev) Add warnings for destroying operations. TODO(apugachev) Add navigation inside this blueprint's pages. """ import flask from flask import blueprints from focus import clients from focus import utils from focus.views import environments from focus.views import forms from focus.views import pagination bp = environments.admin( blueprints.Blueprint('global_user_management', __name__)) @bp.route('', methods=['GET']) def index(): """List users. TODO(apugachev): find way to count users without fetching all users. This would allow to use marker and limit to fetch one page only. """ identity_admin = clients.admin_clients().identity_admin users = sorted( identity_admin.users.list(limit=1000000), key=lambda x: x.name) p = pagination.Pagination(users) data = p.slice(users)
Admins can list users, delete user, grant or revoke admin permissions. TODO(apugachev) Look for a simpler way of deciding if user is admin. TODO(apugachev) Add warnings for destroying operations. TODO(apugachev) Add navigation inside this blueprint's pages. """ import flask from flask import blueprints from focus import clients from focus import utils from focus.views import environments from focus.views import forms from focus.views import pagination bp = environments.admin( blueprints.Blueprint('global_user_management', __name__)) @bp.route('', methods=['GET']) def index(): """List users. TODO(apugachev): find way to count users without fetching all users. This would allow to use marker and limit to fetch one page only. """ identity_admin = clients.admin_clients().identity_admin users = sorted(identity_admin.users.list(limit=1000000), key=lambda x: x.name) p = pagination.Pagination(users) data = p.slice(users) potential_admins = set([
from flask import blueprints from flaskext import mail from flaskext import principal from focus import clients from focus import utils from focus.models import row_mysql_queries from focus.views import dataset from focus.views import environments from focus.views import exporter from focus.views import forms from focus.views import generic_billing from focus.views import pagination bp = environments.admin(blueprints.Blueprint('global_views', __name__)) @bp.before_request def authorize(): principal.Permission(('role', 'admin')).test() @bp.route('configured_hostname/', methods=['GET', 'POST']) def configured_hostname(): ''' Set hostname to use in all links set via email. ''' form = forms.ConfigureHostnameForm() if form.validate_on_submit(): # save
"""List and update tariffs. Restrict access of non-admin users. """ import sys import flask from flask import blueprints from focus import clients from focus.views import environments from focus.views import forms from focus.views import generic_billing bp = environments.admin(blueprints.Blueprint('tariffs', __name__)) @bp.route('') def index(): """List tariffs""" tariffs = generic_billing.get_tariff_list() return { 'tariffs': tariffs, 'title': bp.name.replace('global_', '').replace('_', ' ').capitalize(), 'subtitle': 'List of tariffs' } @bp.route('<path:name>/', methods=['GET', 'POST']) def edit(name):
import contextlib import datetime import json import re import urllib import urlparse import flask from flask import blueprints from focus.models import orm from focus.views import environments bp = environments.admin(blueprints.Blueprint("load_history", __name__)) def baseurl(): url = flask.current_app.config["ZABBIX_PROXY_BASEURL"] if not url.endswith("/"): url += "/" return url @bp.context_processor def titles(): return {"title": "Load history", "subtitle": "CPU/Load Avg./Mem/free space/io-wait history of every compute node"} COMPUTE_ON = 0