本文整理汇总了Python中stringprep.in_table_c8方法的典型用法代码示例。如果您正苦于以下问题:Python stringprep.in_table_c8方法的具体用法?Python stringprep.in_table_c8怎么用?Python stringprep.in_table_c8使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stringprep
的用法示例。
在下文中一共展示了stringprep.in_table_c8方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: check_bidi
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c8 [as 别名]
def check_bidi(data):
"""
1) The characters in section 5.8 MUST be prohibited.
2) If a string contains any RandALCat character, the string MUST NOT
contain any LCat character.
3) If a string contains any RandALCat character, a RandALCat
character MUST be the first character of the string, and a
RandALCat character MUST be the last character of the string.
"""
if not data:
return data
has_lcat = False
has_randal = False
for c in data:
if stringprep.in_table_c8(c):
raise StringPrepError("BIDI violation: seciton 6 (1)")
if stringprep.in_table_d1(c):
has_randal = True
elif stringprep.in_table_d2(c):
has_lcat = True
if has_randal and has_lcat:
raise StringPrepError("BIDI violation: section 6 (2)")
first_randal = stringprep.in_table_d1(data[0])
last_randal = stringprep.in_table_d1(data[-1])
if has_randal and not (first_randal and last_randal):
raise StringPrepError("BIDI violation: section 6 (3)")
示例2: nameprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c8 [as 别名]
def nameprep(label):
# Map
newlabel = []
for c in label:
if stringprep.in_table_b1(c):
# Map to nothing
continue
newlabel.append(stringprep.map_table_b2(c))
label = u"".join(newlabel)
# Normalize
label = unicodedata.normalize("NFKC", label)
# Prohibit
for c in label:
if stringprep.in_table_c12(c) or \
stringprep.in_table_c22(c) or \
stringprep.in_table_c3(c) or \
stringprep.in_table_c4(c) or \
stringprep.in_table_c5(c) or \
stringprep.in_table_c6(c) or \
stringprep.in_table_c7(c) or \
stringprep.in_table_c8(c) or \
stringprep.in_table_c9(c):
raise UnicodeError("Invalid character %r" % c)
# Check bidi
RandAL = map(stringprep.in_table_d1, label)
for c in RandAL:
if c:
# There is a RandAL char in the string. Must perform further
# tests:
# 1) The characters in section 5.8 MUST be prohibited.
# This is table C.8, which was already checked
# 2) If a string contains any RandALCat character, the string
# MUST NOT contain any LCat character.
if filter(stringprep.in_table_d2, label):
raise UnicodeError("Violation of BIDI requirement 2")
# 3) If a string contains any RandALCat character, a
# RandALCat character MUST be the first character of the
# string, and a RandALCat character MUST be the last
# character of the string.
if not RandAL[0] or not RandAL[-1]:
raise UnicodeError("Violation of BIDI requirement 3")
return label
示例3: nameprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c8 [as 别名]
def nameprep(label):
# Map
newlabel = []
for c in label:
if stringprep.in_table_b1(c):
# Map to nothing
continue
newlabel.append(stringprep.map_table_b2(c))
label = "".join(newlabel)
# Normalize
label = unicodedata.normalize("NFKC", label)
# Prohibit
for c in label:
if stringprep.in_table_c12(c) or \
stringprep.in_table_c22(c) or \
stringprep.in_table_c3(c) or \
stringprep.in_table_c4(c) or \
stringprep.in_table_c5(c) or \
stringprep.in_table_c6(c) or \
stringprep.in_table_c7(c) or \
stringprep.in_table_c8(c) or \
stringprep.in_table_c9(c):
raise UnicodeError("Invalid character %r" % c)
# Check bidi
RandAL = [stringprep.in_table_d1(x) for x in label]
for c in RandAL:
if c:
# There is a RandAL char in the string. Must perform further
# tests:
# 1) The characters in section 5.8 MUST be prohibited.
# This is table C.8, which was already checked
# 2) If a string contains any RandALCat character, the string
# MUST NOT contain any LCat character.
if any(stringprep.in_table_d2(x) for x in label):
raise UnicodeError("Violation of BIDI requirement 2")
# 3) If a string contains any RandALCat character, a
# RandALCat character MUST be the first character of the
# string, and a RandALCat character MUST be the last
# character of the string.
if not RandAL[0] or not RandAL[-1]:
raise UnicodeError("Violation of BIDI requirement 3")
return label
示例4: saslprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c8 [as 别名]
def saslprep(s, allow_unassigned = False):
'''
Prepare Unicode string s according to SASLprep: Stringprep Profile for
User Names and Passwords, a.k.a. RFC 4013
If the optional parameter allow_unassigned is set to True,
unassigned codepoints will be allowed. This is recommended for
query terms and other non-storing situations only.
The return value is a Unicode string appropriately prepared.
Disallowed input leads to a ValueError.
'''
if type(s) != type(u''):
raise TypeError("input must be a Unicode string")
# phase 1: mapping
s = u''.join([ stringprep.in_table_c12(ch) and u' ' or ch for ch in unichars(s) if not stringprep.in_table_b1(ch) ])
# phase 2: normalization
s = unicodedata.normalize('NFKC', s)
# phase 3: prohibition
for ch in unichars(s):
if stringprep.in_table_c12(ch):
raise ValueError("prohibited non-ASCII space character")
if stringprep.in_table_c21(ch):
raise ValueError("prohibited ASCII control character")
if stringprep.in_table_c22(ch):
raise ValueError("prohibited non-ASCII control character")
if stringprep.in_table_c3(ch):
raise ValueError("prohibited private use character")
if stringprep.in_table_c4(ch):
raise ValueError("prohibited non-character code point")
if stringprep.in_table_c5(ch):
raise ValueError("prohibited surrogate code point")
if stringprep.in_table_c6(ch):
raise ValueError("prohibited character inappropriate for plain text")
if stringprep.in_table_c7(ch):
raise ValueError("prohibited character inappropriate for canonical representation")
if stringprep.in_table_c8(ch):
raise ValueError("prohibited character changing display properties, or a deprecated character")
if stringprep.in_table_c9(ch):
raise ValueError("prohibited tagging character")
# phase 4: bidi check
bidi_map = ''.join([ stringprep.in_table_d1(ch) and 'r' or stringprep.in_table_d2(ch) and 'l' or 'x' for ch in unichars(s) ])
if 'r' in bidi_map:
if 'l' in bidi_map:
raise ValueError("prohibited mixture of strong left-to-right and right-to-left text")
if bidi_map[0] != 'r' or bidi_map[-1] != 'r':
raise ValueError("string containing right-to-left text must start and end with right-to-left text")
# phase 5: unassigned check
if not allow_unassigned:
for ch in unichars(s):
if stringprep.in_table_a1(ch):
raise ValueError("prohibited unassigned code point")
return s