本文整理汇总了Python中stringprep.in_table_c12方法的典型用法代码示例。如果您正苦于以下问题:Python stringprep.in_table_c12方法的具体用法?Python stringprep.in_table_c12怎么用?Python stringprep.in_table_c12使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stringprep
的用法示例。
在下文中一共展示了stringprep.in_table_c12方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: c12_mapping
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c12 [as 别名]
def c12_mapping(char):
"""Map non-ASCII whitespace to spaces."""
return ' ' if stringprep.in_table_c12(char) else None
示例2: nameprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c12 [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_c12 [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_c12 [as 别名]
def saslprep(data, prohibit_unassigned_code_points=True):
"""An implementation of RFC4013 SASLprep.
:Parameters:
- `data`: The string to SASLprep. Unicode strings
(python 2.x unicode, 3.x str) are supported. Byte strings
(python 2.x str, 3.x bytes) are ignored.
- `prohibit_unassigned_code_points`: True / False. RFC 3454
and RFCs for various SASL mechanisms distinguish between
`queries` (unassigned code points allowed) and
`stored strings` (unassigned code points prohibited). Defaults
to ``True`` (unassigned code points are prohibited).
:Returns:
The SASLprep'ed version of `data`.
"""
if not isinstance(data, _text_type):
return data
if prohibit_unassigned_code_points:
prohibited = _PROHIBITED + (stringprep.in_table_a1,)
else:
prohibited = _PROHIBITED
# RFC3454 section 2, step 1 - Map
# RFC4013 section 2.1 mappings
# Map Non-ASCII space characters to SPACE (U+0020). Map
# commonly mapped to nothing characters to, well, nothing.
in_table_c12 = stringprep.in_table_c12
in_table_b1 = stringprep.in_table_b1
data = u"".join(
[u"\u0020" if in_table_c12(elt) else elt
for elt in data if not in_table_b1(elt)])
# RFC3454 section 2, step 2 - Normalize
# RFC4013 section 2.2 normalization
data = unicodedata.ucd_3_2_0.normalize('NFKC', data)
in_table_d1 = stringprep.in_table_d1
if in_table_d1(data[0]):
if not in_table_d1(data[-1]):
# RFC3454, Section 6, #3. If a string contains any
# RandALCat character, the first and last characters
# MUST be RandALCat characters.
raise ValueError("SASLprep: failed bidirectional check")
# RFC3454, Section 6, #2. If a string contains any RandALCat
# character, it MUST NOT contain any LCat character.
prohibited = prohibited + (stringprep.in_table_d2,)
else:
# RFC3454, Section 6, #3. Following the logic of #3, if
# the first character is not a RandALCat, no other character
# can be either.
prohibited = prohibited + (in_table_d1,)
# RFC3454 section 2, step 3 and 4 - Prohibit and check bidi
for char in data:
if any(in_table(char) for in_table in prohibited):
raise ValueError(
"SASLprep: failed prohibited character check")
return data
示例5: saslprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c12 [as 别名]
def saslprep(data: str, prohibit_unassigned_code_points=True):
"""An implementation of RFC4013 SASLprep."""
if data == '':
return data
if prohibit_unassigned_code_points:
prohibited = _PROHIBITED + (stringprep.in_table_a1,)
else:
prohibited = _PROHIBITED
# RFC3454 section 2, step 1 - Map
# RFC4013 section 2.1 mappings
# Map Non-ASCII space characters to SPACE (U+0020). Map
# commonly mapped to nothing characters to, well, nothing.
in_table_c12 = stringprep.in_table_c12
in_table_b1 = stringprep.in_table_b1
data = u"".join(
[u"\u0020" if in_table_c12(elt) else elt
for elt in data if not in_table_b1(elt)])
# RFC3454 section 2, step 2 - Normalize
# RFC4013 section 2.2 normalization
data = unicodedata.ucd_3_2_0.normalize('NFKC', data)
in_table_d1 = stringprep.in_table_d1
if in_table_d1(data[0]):
if not in_table_d1(data[-1]):
# RFC3454, Section 6, #3. If a string contains any
# RandALCat character, the first and last characters
# MUST be RandALCat characters.
raise ValueError("SASLprep: failed bidirectional check")
# RFC3454, Section 6, #2. If a string contains any RandALCat
# character, it MUST NOT contain any LCat character.
prohibited = prohibited + (stringprep.in_table_d2,)
else:
# RFC3454, Section 6, #3. Following the logic of #3, if
# the first character is not a RandALCat, no other character
# can be either.
prohibited = prohibited + (in_table_d1,)
# RFC3454 section 2, step 3 and 4 - Prohibit and check bidi
for char in data:
if any(in_table(char) for in_table in prohibited):
raise ValueError(
"SASLprep: failed prohibited character check")
return data
示例6: saslprep
# 需要导入模块: import stringprep [as 别名]
# 或者: from stringprep import in_table_c12 [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