1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
"""Implements the `get_profile` factory function used to create profiles."""
import precis_i18n.baseclass as _base
import precis_i18n.profile as _profile
import precis_i18n.unicode as _unicode
UCD = _unicode.UnicodeData()
def _factory(profile, **kwds):
def _construct():
return profile(UCD, **kwds)
return _construct
_PROFILES = {
'identifierclass':
_factory(_base.IdentifierClass, name='IdentifierClass'),
'freeformclass':
_factory(_base.FreeFormClass, name='FreeFormClass'),
'usernamecasepreserved':
_factory(_profile.Username, name='UsernameCasePreserved'),
'usernamecasemapped':
_factory(_profile.Username, name='UsernameCaseMapped', casemap='lower'),
'usernamecasemapped:casefold':
_factory(
_profile.Username, name='UsernameCaseMapped:CaseFold', casemap='fold'),
'usernamecasemapped:tolower':
_factory(
_profile.Username, name='UsernameCaseMapped:ToLower', casemap='lower'),
'opaquestring':
_factory(_profile.OpaqueString, name='OpaqueString'),
'nicknamecasepreserved':
_factory(_profile.Nickname, name='NicknameCasePreserved'),
'nicknamecasemapped':
_factory(_profile.Nickname, name='NicknameCaseMapped', casemap='lower'),
'nicknamecasemapped:casefold':
_factory(
_profile.Nickname, name='NicknameCaseMapped:CaseFold', casemap='fold'),
'nicknamecasemapped:tolower':
_factory(
_profile.Nickname, name='NicknameCaseMapped:ToLower', casemap='lower'),
# Alias for backward-compatibility with previous version of codec.
'nickname':
_factory(_profile.Nickname, name='Nickname', casemap='lower')
}
def get_profile(name):
"""Return the desired PRECIS profile object.
Choose name from:
"IdentifierClass"
"FreeFormClass"
"UsernameCasePreserved"
"UsernameCaseMapped"
"UsernameCaseMapped:CaseFold"
"UsernameCaseMapped:ToLower"
"OpaqueString"
"NicknameCasePreserved"
"NicknameCaseMapped"
"NicknameCaseMapped:CaseFold"
"NicknameCaseMapped:ToLower"
"Nickname" (alias for "NicknameCaseMapped")
This function constructs a new profile each time; there is no cache.
Args:
name (str): name of a PRECIS profile
Returns:
AbstractProfile: PRECIS profile object.
Raises:
KeyError: Profile not found.
"""
return _PROFILES[name.lower()]()
|