:art: Cn2An support Python3.7

huangqimin001 %!s(int64=9) %!d(string=hace) meses
padre
commit
35d318cd52
Se han modificado 5 ficheros con 199 adiciones y 183 borrados
  1. 3 1
      api/lensman/contract_mp_views.py
  2. 8 6
      utils/cn2an/__init__.py
  3. 55 51
      utils/cn2an/an2cn.py
  4. 128 125
      utils/cn2an/conf.py
  5. 5 0
      utils/error/errno_utils.py

+ 3 - 1
api/lensman/contract_mp_views.py

@@ -12,6 +12,8 @@ from account.models import LensmanInfo
12 12
 from apps.contract.models import LensmanContributionContractInfo
13 13
 from apps.lensman.activity.models import LensmanContributionActivityIncomeExpensesInfo
14 14
 from member.models import MemberActivityContributionInfo
15
+from utils import cn2an
16
+from utils.error.errno_utils import ContractStatusCode
15 17
 from utils.redis.rimage import get_images_data
16 18
 from utils.tencentcloud.ess import (callback_decode, create_document, create_flow, create_scheme_url, start_flow,
17 19
                                     test_upload_document_files, upload_document_files)
@@ -26,7 +28,7 @@ def get_contribtion_contract_status_api(request):
26 28
     try:
27 29
         contract = LensmanContributionContractInfo.objects.get(user_id=user_id, activity_id=activity_id, contribution_id=contribution_id)
28 30
     except LensmanContributionContractInfo.DoesNotExist:
29
-        return response(404, 'Contract Not Found', '合同不存在')
31
+        return response(ContractStatusCode.CONTRACT_NOT_FOUND)
30 32
 
31 33
     return response(200, data={
32 34
         'contract_status': contract.contract_status,

+ 8 - 6
utils/cn2an/__init__.py

@@ -1,16 +1,18 @@
1 1
 __version__ = "0.5.22"
2 2
 
3
-from .cn2an import Cn2An
3
+# from .cn2an import Cn2An
4 4
 from .an2cn import An2Cn
5
-from .transform import Transform
6 5
 
7
-cn2an = Cn2An().cn2an
6
+
7
+# from .transform import Transform
8
+
9
+# cn2an = Cn2An().cn2an
8 10
 an2cn = An2Cn().an2cn
9
-transform = Transform().transform
11
+# transform = Transform().transform
10 12
 
11 13
 __all__ = [
12 14
     "__version__",
13
-    "cn2an",
15
+    # "cn2an",
14 16
     "an2cn",
15
-    "transform"
17
+    # "transform"
16 18
 ]

+ 55 - 51
utils/cn2an/an2cn.py

@@ -1,19 +1,23 @@
1
-from typing import Union
2
-from warnings import warn
1
+# -*- coding: utf-8 -*-
3 2
 
4
-from proces import preprocess
3
+# from typing import Union
4
+from warnings import warn
5 5
 
6 6
 from .conf import NUMBER_LOW_AN2CN, NUMBER_UP_AN2CN, UNIT_LOW_ORDER_AN2CN, UNIT_UP_ORDER_AN2CN
7 7
 
8 8
 
9
+# from proces import preprocess
10
+
11
+
12
+
9 13
 class An2Cn(object):
10
-    def __init__(self) -> None:
14
+    def __init__(self):
11 15
         self.all_num = "0123456789"
12 16
         self.number_low = NUMBER_LOW_AN2CN
13 17
         self.number_up = NUMBER_UP_AN2CN
14 18
         self.mode_list = ["low", "up", "rmb", "direct"]
15 19
 
16
-    def an2cn(self, inputs: Union[str, int, float] = None, mode: str = "low") -> str:
20
+    def an2cn(self, inputs=None, mode="low"):
17 21
         """阿拉伯数字转中文数字
18 22
 
19 23
         :param inputs: 阿拉伯数字
@@ -22,7 +26,7 @@ class An2Cn(object):
22 26
         """
23 27
         if inputs is not None and inputs != "":
24 28
             if mode not in self.mode_list:
25
-                raise ValueError(f"mode 仅支持 {str(self.mode_list)} !")
29
+                raise ValueError(u"mode 仅支持 {} !".format(str(self.mode_list)))
26 30
 
27 31
             # 将数字转化为字符串,这里会有Python会自动做转化
28 32
             # 1. -> 1.0 1.00 -> 1.0 -0 -> 0
@@ -32,17 +36,17 @@ class An2Cn(object):
32 36
             # 数据预处理:
33 37
             # 1. 繁体转简体
34 38
             # 2. 全角转半角
35
-            inputs = preprocess(inputs, pipelines=[
36
-                "traditional_to_simplified",
37
-                "full_angle_to_half_angle"
38
-            ])
39
+            # inputs = preprocess(inputs, pipelines=[
40
+            #     "traditional_to_simplified",
41
+            #     "full_angle_to_half_angle"
42
+            # ])
39 43
 
40 44
             # 检查数据是否有效
41 45
             self.__check_inputs_is_valid(inputs)
42 46
 
43 47
             # 判断正负
44 48
             if inputs[0] == "-":
45
-                sign = "负"
49
+                sign = u"负"
46 50
                 inputs = inputs[1:]
47 51
             else:
48 52
                 sign = ""
@@ -57,7 +61,7 @@ class An2Cn(object):
57 61
                     # 不包含小数的输入
58 62
                     integer_data = split_result[0]
59 63
                     if mode == "rmb":
60
-                        output = self.__integer_convert(integer_data, "up") + "元整"
64
+                        output = self.__integer_convert(integer_data, "up") + u"元整"
61 65
                     else:
62 66
                         output = self.__integer_convert(integer_data, mode)
63 67
                 elif len_split_result == 2:
@@ -69,57 +73,57 @@ class An2Cn(object):
69 73
                         len_dec_data = len(dec_data)
70 74
 
71 75
                         if len_dec_data == 0:
72
-                            output = int_data + "元整"
76
+                            output = int_data + u"元整"
73 77
                         elif len_dec_data == 1:
74
-                            raise ValueError(f"异常输出:{dec_data}")
78
+                            raise ValueError(u"异常输出:{}".format(dec_data))
75 79
                         elif len_dec_data == 2:
76
-                            if dec_data[1] != "零":
77
-                                if int_data == "零":
78
-                                    output = dec_data[1] + "角"
80
+                            if dec_data[1] != u"零":
81
+                                if int_data == u"零":
82
+                                    output = dec_data[1] + u"角"
79 83
                                 else:
80
-                                    output = int_data + "元" + dec_data[1] + "角"
84
+                                    output = int_data + u"元" + dec_data[1] + u"角"
81 85
                             else:
82
-                                output = int_data + "元整"
86
+                                output = int_data + u"元整"
83 87
                         else:
84
-                            if dec_data[1] != "零":
85
-                                if dec_data[2] != "零":
86
-                                    if int_data == "零":
87
-                                        output = dec_data[1] + "角" + dec_data[2] + "分"
88
+                            if dec_data[1] != u"零":
89
+                                if dec_data[2] != u"零":
90
+                                    if int_data == u"零":
91
+                                        output = dec_data[1] + u"角" + dec_data[2] + u"分"
88 92
                                     else:
89
-                                        output = int_data + "元" + dec_data[1] + "角" + dec_data[2] + "分"
93
+                                        output = int_data + u"元" + dec_data[1] + u"角" + dec_data[2] + u"分"
90 94
                                 else:
91
-                                    if int_data == "零":
92
-                                        output = dec_data[1] + "角"
95
+                                    if int_data == u"零":
96
+                                        output = dec_data[1] + u"角"
93 97
                                     else:
94
-                                        output = int_data + "元" + dec_data[1] + "角"
98
+                                        output = int_data + u"元" + dec_data[1] + u"角"
95 99
                             else:
96
-                                if dec_data[2] != "零":
97
-                                    if int_data == "零":
98
-                                        output = dec_data[2] + "分"
100
+                                if dec_data[2] != u"零":
101
+                                    if int_data == u"零":
102
+                                        output = dec_data[2] + u"分"
99 103
                                     else:
100
-                                        output = int_data + "元" + "零" + dec_data[2] + "分"
104
+                                        output = int_data + u"元" + u"零" + dec_data[2] + u"分"
101 105
                                 else:
102
-                                    output = int_data + "元整"
106
+                                    output = int_data + u"元整"
103 107
                     else:
104 108
                         output = self.__integer_convert(integer_data, mode) + self.__decimal_convert(decimal_data, mode)
105 109
                 else:
106
-                    raise ValueError(f"输入格式错误:{inputs}!")
110
+                    raise ValueError(u"输入格式错误:{}!".format(inputs))
107 111
         else:
108
-            raise ValueError("输入数据为空!")
112
+            raise ValueError(u"输入数据为空!")
109 113
 
110 114
         return sign + output
111 115
 
112
-    def __direct_convert(self, inputs: str) -> str:
116
+    def __direct_convert(self, inputs):
113 117
         _output = ""
114 118
         for d in inputs:
115 119
             if d == ".":
116
-                _output += "点"
120
+                _output += u"点"
117 121
             else:
118 122
                 _output += self.number_low[int(d)]
119 123
         return _output
120 124
 
121 125
     @staticmethod
122
-    def __number_to_string(number_data: Union[int, float]) -> str:
126
+    def __number_to_string(number_data):
123 127
         # 小数处理:python 会自动把 0.00005 转化成 5e-05,因此 str(0.00005) != "0.00005"
124 128
         string_data = str(number_data)
125 129
         if "e" in string_data:
@@ -132,14 +136,14 @@ class An2Cn(object):
132 136
                 string_data = string_key + "0" * int(string_value)
133 137
         return string_data
134 138
 
135
-    def __check_inputs_is_valid(self, check_data: str) -> None:
139
+    def __check_inputs_is_valid(self, check_data):
136 140
         # 检查输入数据是否在规定的字典中
137 141
         all_check_keys = self.all_num + ".-"
138 142
         for data in check_data:
139 143
             if data not in all_check_keys:
140
-                raise ValueError(f"输入的数据不在转化范围内:{data}!")
144
+                raise ValueError(u"输入的数据不在转化范围内:{}!".format(data))
141 145
 
142
-    def __integer_convert(self, integer_data: str, mode: str) -> str:
146
+    def __integer_convert(self, integer_data, mode):
143 147
         if mode == "low":
144 148
             numeral_list = NUMBER_LOW_AN2CN
145 149
             unit_list = UNIT_LOW_ORDER_AN2CN
@@ -147,14 +151,14 @@ class An2Cn(object):
147 151
             numeral_list = NUMBER_UP_AN2CN
148 152
             unit_list = UNIT_UP_ORDER_AN2CN
149 153
         else:
150
-            raise ValueError(f"error mode: {mode}")
154
+            raise ValueError("error mode: {}".format(mode))
151 155
 
152 156
         # 去除前面的 0,比如 007 => 7
153 157
         integer_data = str(int(integer_data))
154 158
 
155 159
         len_integer_data = len(integer_data)
156 160
         if len_integer_data > len(unit_list):
157
-            raise ValueError(f"超出数据范围,最长支持 {len(unit_list)} 位")
161
+            raise ValueError(u"超出数据范围,最长支持 {} 位".format(len(unit_list)))
158 162
 
159 163
         output_an = ""
160 164
         for i, d in enumerate(integer_data):
@@ -164,31 +168,31 @@ class An2Cn(object):
164 168
                 if not (len_integer_data - i - 1) % 4:
165 169
                     output_an += numeral_list[int(d)] + unit_list[len_integer_data - i - 1]
166 170
 
167
-                if i > 0 and not output_an[-1] == "零":
171
+                if i > 0 and not output_an[-1] == u"零":
168 172
                     output_an += numeral_list[int(d)]
169 173
 
170
-        output_an = output_an.replace("零零", "零").replace("零万", "万").replace("零亿", "亿").replace("亿万", "亿") \
171
-            .strip("零")
174
+        output_an = output_an.replace(u"零零", u"零").replace(u"零万", u"万").replace(u"零亿", u"亿").replace(u"亿万", u"亿") \
175
+            .strip(u"零")
172 176
 
173 177
         # 解决「一十几」问题
174
-        if output_an[:2] in ["一十"]:
178
+        if output_an[:2] in [u"一十"]:
175 179
             output_an = output_an[1:]
176 180
 
177 181
         # 0 - 1 之间的小数
178 182
         if not output_an:
179
-            output_an = "零"
183
+            output_an = u"零"
180 184
 
181 185
         return output_an
182 186
 
183
-    def __decimal_convert(self, decimal_data: str, o_mode: str) -> str:
187
+    def __decimal_convert(self, decimal_data, o_mode):
184 188
         len_decimal_data = len(decimal_data)
185 189
 
186 190
         if len_decimal_data > 16:
187
-            warn(f"注意:小数部分长度为 {len_decimal_data} ,将自动截取前 16 位有效精度!")
191
+            warn(u"注意:小数部分长度为 {} ,将自动截取前 16 位有效精度!".format(len_decimal_data))
188 192
             decimal_data = decimal_data[:16]
189 193
 
190 194
         if len_decimal_data:
191
-            output_an = "点"
195
+            output_an = u"点"
192 196
         else:
193 197
             output_an = ""
194 198
 
@@ -197,7 +201,7 @@ class An2Cn(object):
197 201
         elif o_mode == "up":
198 202
             numeral_list = NUMBER_UP_AN2CN
199 203
         else:
200
-            raise ValueError(f"error mode: {o_mode}")
204
+            raise ValueError("error mode: {}".format(o_mode))
201 205
 
202 206
         for data in decimal_data:
203 207
             output_an += numeral_list[int(data)]

+ 128 - 125
utils/cn2an/conf.py

@@ -1,135 +1,138 @@
1
-NUMBER_CN2AN = {
2
-    "零": 0,
3
-    "〇": 0,
4
-    "一": 1,
5
-    "壹": 1,
6
-    "幺": 1,
7
-    "二": 2,
8
-    "贰": 2,
9
-    "两": 2,
10
-    "三": 3,
11
-    "叁": 3,
12
-    "四": 4,
13
-    "肆": 4,
14
-    "五": 5,
15
-    "伍": 5,
16
-    "六": 6,
17
-    "陆": 6,
18
-    "七": 7,
19
-    "柒": 7,
20
-    "八": 8,
21
-    "捌": 8,
22
-    "九": 9,
23
-    "玖": 9,
24
-}
25
-UNIT_CN2AN = {
26
-    "十": 10,
27
-    "拾": 10,
28
-    "百": 100,
29
-    "佰": 100,
30
-    "千": 1000,
31
-    "仟": 1000,
32
-    "万": 10000,
33
-    "亿": 100000000,
34
-}
35
-UNIT_LOW_AN2CN = {
36
-    10: "十",
37
-    100: "百",
38
-    1000: "千",
39
-    10000: "万",
40
-    100000000: "亿",
41
-}
1
+# -*- coding: utf-8 -*-
2
+
3
+
4
+# NUMBER_CN2AN = {
5
+#     "零": 0,
6
+#     "〇": 0,
7
+#     "一": 1,
8
+#     "壹": 1,
9
+#     "幺": 1,
10
+#     "二": 2,
11
+#     "贰": 2,
12
+#     "两": 2,
13
+#     "三": 3,
14
+#     "叁": 3,
15
+#     "四": 4,
16
+#     "肆": 4,
17
+#     "五": 5,
18
+#     "伍": 5,
19
+#     "六": 6,
20
+#     "陆": 6,
21
+#     "七": 7,
22
+#     "柒": 7,
23
+#     "八": 8,
24
+#     "捌": 8,
25
+#     "九": 9,
26
+#     "玖": 9,
27
+# }
28
+# UNIT_CN2AN = {
29
+#     "十": 10,
30
+#     "拾": 10,
31
+#     "百": 100,
32
+#     "佰": 100,
33
+#     "千": 1000,
34
+#     "仟": 1000,
35
+#     "万": 10000,
36
+#     "亿": 100000000,
37
+# }
38
+# UNIT_LOW_AN2CN = {
39
+#     10: "十",
40
+#     100: "百",
41
+#     1000: "千",
42
+#     10000: "万",
43
+#     100000000: "亿",
44
+# }
42 45
 NUMBER_LOW_AN2CN = {
43
-    0: "零",
44
-    1: "一",
45
-    2: "二",
46
-    3: "三",
47
-    4: "四",
48
-    5: "五",
49
-    6: "六",
50
-    7: "七",
51
-    8: "八",
52
-    9: "九",
46
+    0: u"零",
47
+    1: u"一",
48
+    2: u"二",
49
+    3: u"三",
50
+    4: u"四",
51
+    5: u"五",
52
+    6: u"六",
53
+    7: u"七",
54
+    8: u"八",
55
+    9: u"九",
53 56
 }
54 57
 NUMBER_UP_AN2CN = {
55
-    0: "零",
56
-    1: "壹",
57
-    2: "贰",
58
-    3: "叁",
59
-    4: "肆",
60
-    5: "伍",
61
-    6: "陆",
62
-    7: "柒",
63
-    8: "捌",
64
-    9: "玖",
58
+    0: u"零",
59
+    1: u"壹",
60
+    2: u"贰",
61
+    3: u"叁",
62
+    4: u"肆",
63
+    5: u"伍",
64
+    6: u"陆",
65
+    7: u"柒",
66
+    8: u"捌",
67
+    9: u"玖",
65 68
 }
66 69
 UNIT_LOW_ORDER_AN2CN = [
67 70
     "",
68
-    "十",
69
-    "百",
70
-    "千",
71
-    "万",
72
-    "十",
73
-    "百",
74
-    "千",
75
-    "亿",
76
-    "十",
77
-    "百",
78
-    "千",
79
-    "万",
80
-    "十",
81
-    "百",
82
-    "千",
71
+    u"十",
72
+    u"百",
73
+    u"千",
74
+    u"万",
75
+    u"十",
76
+    u"百",
77
+    u"千",
78
+    u"亿",
79
+    u"十",
80
+    u"百",
81
+    u"千",
82
+    u"万",
83
+    u"十",
84
+    u"百",
85
+    u"千",
83 86
 ]
84 87
 UNIT_UP_ORDER_AN2CN = [
85 88
     "",
86
-    "拾",
87
-    "佰",
88
-    "仟",
89
-    "万",
90
-    "拾",
91
-    "佰",
92
-    "仟",
93
-    "亿",
94
-    "拾",
95
-    "佰",
96
-    "仟",
97
-    "万",
98
-    "拾",
99
-    "佰",
100
-    "仟",
89
+    u"拾",
90
+    u"佰",
91
+    u"仟",
92
+    u"万",
93
+    u"拾",
94
+    u"佰",
95
+    u"仟",
96
+    u"亿",
97
+    u"拾",
98
+    u"佰",
99
+    u"仟",
100
+    u"万",
101
+    u"拾",
102
+    u"佰",
103
+    u"仟",
101 104
 ]
102
-STRICT_CN_NUMBER = {
103
-    "零": "零",
104
-    "一": "一壹",
105
-    "二": "二贰",
106
-    "三": "三叁",
107
-    "四": "四肆",
108
-    "五": "五伍",
109
-    "六": "六陆",
110
-    "七": "七柒",
111
-    "八": "八捌",
112
-    "九": "九玖",
113
-    "十": "十拾",
114
-    "百": "百佰",
115
-    "千": "千仟",
116
-    "万": "万",
117
-    "亿": "亿",
118
-}
119
-NORMAL_CN_NUMBER = {
120
-    "零": "零〇",
121
-    "一": "一壹幺",
122
-    "二": "二贰两",
123
-    "三": "三叁仨",
124
-    "四": "四肆",
125
-    "五": "五伍",
126
-    "六": "六陆",
127
-    "七": "七柒",
128
-    "八": "八捌",
129
-    "九": "九玖",
130
-    "十": "十拾",
131
-    "百": "百佰",
132
-    "千": "千仟",
133
-    "万": "万",
134
-    "亿": "亿",
135
-}
105
+# STRICT_CN_NUMBER = {
106
+#     "零": "零",
107
+#     "一": "一壹",
108
+#     "二": "二贰",
109
+#     "三": "三叁",
110
+#     "四": "四肆",
111
+#     "五": "五伍",
112
+#     "六": "六陆",
113
+#     "七": "七柒",
114
+#     "八": "八捌",
115
+#     "九": "九玖",
116
+#     "十": "十拾",
117
+#     "百": "百佰",
118
+#     "千": "千仟",
119
+#     "万": "万",
120
+#     "亿": "亿",
121
+# }
122
+# NORMAL_CN_NUMBER = {
123
+#     "零": "零〇",
124
+#     "一": "一壹幺",
125
+#     "二": "二贰两",
126
+#     "三": "三叁仨",
127
+#     "四": "四肆",
128
+#     "五": "五伍",
129
+#     "六": "六陆",
130
+#     "七": "七柒",
131
+#     "八": "八捌",
132
+#     "九": "九玖",
133
+#     "十": "十拾",
134
+#     "百": "百佰",
135
+#     "千": "千仟",
136
+#     "万": "万",
137
+#     "亿": "亿",
138
+# }

+ 5 - 0
utils/error/errno_utils.py

@@ -226,6 +226,11 @@ class TenancyStatusCode(BaseStatusCode):
226 226
     TENANCY_SHOT_REQUEST_NOT_FOUND = StatusCodeField(509011, 'Tenancy Shot Request Not Found', description=u'租赁镜头申请不存在')
227 227
 
228 228
 
229
+class ContractStatusCode(BaseStatusCode):
230
+    """ 合同相关错误码 5091xx """
231
+    CONTRACT_NOT_FOUND = StatusCodeField(509101, 'Contract Not Found', description=u'合同不存在')
232
+
233
+
229 234
 class TencentCloudStatusCode(BaseStatusCode):
230 235
     """ 腾讯云SDK错误码 5099xx """
231 236
     TENCENT_CLOUD_SDK_EXCEPTION = StatusCodeField(509901, 'Tencent Cloud SDK Exception', description=u'腾讯云SDK报错')