-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathaliases.py
More file actions
58 lines (52 loc) · 1.61 KB
/
Copy pathaliases.py
File metadata and controls
58 lines (52 loc) · 1.61 KB
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
##
# .encodings.aliases
##
"""
Module for mapping PostgreSQL encoding names to Python encoding names.
These are **not** installed in Python's aliases. Rather, `get_python_name`
should be used directly.
URLs of interest:
* http://docs.python.org/library/codecs.html
* http://git.postgresql.org/gitweb?p=postgresql.git;a=blob;f=src/backend/utils/mb/encnames.c
"""
##
#: Dictionary of Postgres encoding names to Python encoding names.
#: This mapping only contains those encoding names that do not intersect.
postgres_to_python = {
'unicode' : 'utf_8',
'sql_ascii' : 'ascii',
'euc_jp' : 'eucjp',
'euc_cn' : 'euccn',
'euc_kr' : 'euckr',
'shift_jis_2004' : 'euc_jis_2004',
'sjis' : 'shift_jis',
'alt' : 'cp866', # IBM866
'abc' : 'cp1258',
'vscii' : 'cp1258',
'koi8r' : 'koi8_r',
'koi8u' : 'koi8_u',
'tcvn' : 'cp1258',
'tcvn5712' : 'cp1258',
# 'euc_tw' : None, # N/A
# 'mule_internal' : None, # N/A
}
def get_python_name(encname):
"""
Lookup the name in the `postgres_to_python` dictionary. If no match is
found, check for a 'win' or 'windows-' name and convert that to a 'cp###'
name.
Returns `None` if there is no alias for `encname`.
The win[0-9]+ and windows-[0-9]+ entries are handled functionally.
"""
# check the dictionary first
localname = postgres_to_python.get(encname)
if localname is not None:
return localname
# no explicit mapping, check for functional transformation
if encname.startswith('win'):
# handle win#### and windows-####
# remove the trailing CP number
bare = encname.rstrip('0123456789')
if bare.strip('_-') in ('win', 'windows'):
return 'cp' + encname[len(bare):]
return encname