646fee8ccd
This patch adds support to manila-ui for the mountable snapshots feature. Manage Rules row buttons are included in Snapshots tables from projects section. Snapshots Rules table is accessible from Manage Rules row buttons. Snapshot and Share details views are updated to show information about mountable snapshots. Implements: blueprint manila-mountable-snapshots Change-Id: I2804bf20767ac60a0b9566346465e69d74d89d45 Depends-On: Idb2eb5ee18ce55edb77545bcdf4df4ec4dd90135 Depends-On: I785a784bcae7cf3bcef4fa6c64ba28ee58328389
115 lines
3.8 KiB
Python
115 lines
3.8 KiB
Python
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
from django.forms import ValidationError # noqa
|
|
from django.utils.safestring import mark_safe
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
|
html_escape_table = {
|
|
"&": "&",
|
|
'"': """,
|
|
"'": "'",
|
|
">": ">",
|
|
"<": "<",
|
|
}
|
|
|
|
|
|
def html_escape(text):
|
|
return ''.join(html_escape_table.get(s, s) for s in text)
|
|
|
|
|
|
def parse_str_meta(meta_s):
|
|
"""Parse multiline string with data from form.
|
|
|
|
:option meta_s: str - string with keys and values
|
|
:returns: tuple of dict with key-value for set and list with keys for unset
|
|
:raises: ValidationError
|
|
"""
|
|
strings = [el.strip() for el in meta_s.split("\n") if len(el.strip()) > 0]
|
|
set_dict = {}
|
|
unset_list = []
|
|
msg = ""
|
|
for string in strings:
|
|
if string.count("=") == 0:
|
|
# Key for unsetting
|
|
key = string.strip('\"\'\ ')
|
|
if len(key) not in range(1, 256):
|
|
msg = _("Key '%s' has improper length.") % key
|
|
elif " " in key:
|
|
msg = _("Key can not contain spaces. See string '%s'.") % key
|
|
elif key not in unset_list:
|
|
unset_list.append(key)
|
|
else:
|
|
# Key-value pair for setting
|
|
pair = [p.strip('\"\'\ ') for p in string.split("=", 1)]
|
|
if not all(len(p) in range(1, 256) for p in pair):
|
|
msg = _("All keys and values must be in range from 1 to 255.")
|
|
elif pair[0] in list(set_dict.keys()):
|
|
msg = _("Duplicated keys '%s'.") % pair[0]
|
|
elif " " in pair[0]:
|
|
msg = _("Keys should not contain spaces. "
|
|
"Error in '%s'.") % string
|
|
else:
|
|
set_dict[pair[0]] = pair[1]
|
|
|
|
duplicated_keys = [uk for uk in unset_list if uk in list(set_dict.keys())]
|
|
if duplicated_keys:
|
|
msg = _("Duplicated keys '%s'.") % str(duplicated_keys)
|
|
if msg:
|
|
raise ValidationError(message=msg)
|
|
return set_dict, unset_list
|
|
|
|
|
|
def metadata_to_str(metadata, meta_visible_limit=4, text_length_limit=25):
|
|
|
|
# Only convert dictionaries
|
|
if not hasattr(metadata, 'keys'):
|
|
return metadata
|
|
|
|
meta = []
|
|
meta_keys = metadata.keys()
|
|
meta_keys.sort()
|
|
meta_keys = meta_keys[:meta_visible_limit]
|
|
for k in meta_keys:
|
|
k_shortenned = k
|
|
if len(k) > text_length_limit:
|
|
k_shortenned = k[:text_length_limit] + '...'
|
|
v = metadata[k]
|
|
if len(v) > text_length_limit:
|
|
v = v[:text_length_limit] + '...'
|
|
meta.append("%s = %s" % (html_escape(k_shortenned), html_escape(v)))
|
|
meta_str = "<br/>".join(meta)
|
|
if len(metadata.keys()) > meta_visible_limit and meta_str[-3:] != "...":
|
|
meta_str += '...'
|
|
return mark_safe(meta_str)
|
|
|
|
|
|
def get_nice_security_service_type(security_service):
|
|
type_mapping = {
|
|
'ldap': 'LDAP',
|
|
'active_directory': 'Active Directory',
|
|
'kerberos': 'Kerberos',
|
|
}
|
|
return type_mapping.get(security_service.type, security_service.type)
|
|
|
|
|
|
def calculate_longest_str_size(str_list):
|
|
size = 40
|
|
for str_val in str_list:
|
|
current_size = len(str_val)
|
|
if current_size > size:
|
|
size = current_size
|
|
return size
|