appier 1.31.4__py2.py3-none-any.whl → 1.32.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- appier/__init__.py +333 -52
- appier/amqp.py +29 -30
- appier/api.py +214 -212
- appier/asgi.py +54 -55
- appier/async_neo.py +46 -35
- appier/async_old.py +55 -42
- appier/asynchronous.py +7 -13
- appier/base.py +1762 -1429
- appier/bus.py +51 -52
- appier/cache.py +99 -84
- appier/common.py +9 -11
- appier/component.py +17 -19
- appier/compress.py +25 -28
- appier/config.py +96 -73
- appier/controller.py +9 -15
- appier/crypt.py +25 -21
- appier/data.py +73 -57
- appier/defines.py +191 -226
- appier/exceptions.py +103 -63
- appier/execution.py +94 -88
- appier/export.py +90 -88
- appier/extra.py +6 -13
- appier/extra_neo.py +8 -11
- appier/extra_old.py +18 -16
- appier/geo.py +57 -47
- appier/git.py +101 -90
- appier/graph.py +23 -24
- appier/http.py +520 -398
- appier/legacy.py +373 -180
- appier/log.py +90 -97
- appier/meta.py +42 -42
- appier/mock.py +32 -34
- appier/model.py +793 -681
- appier/model_a.py +208 -183
- appier/mongo.py +183 -107
- appier/observer.py +39 -31
- appier/part.py +23 -24
- appier/preferences.py +44 -47
- appier/queuing.py +78 -96
- appier/redisdb.py +40 -35
- appier/request.py +227 -175
- appier/scheduler.py +13 -18
- appier/serialize.py +37 -31
- appier/session.py +161 -147
- appier/settings.py +2 -11
- appier/smtp.py +53 -49
- appier/storage.py +39 -33
- appier/structures.py +50 -45
- appier/test/__init__.py +2 -11
- appier/test/base.py +111 -108
- appier/test/cache.py +28 -35
- appier/test/config.py +10 -19
- appier/test/crypt.py +3 -12
- appier/test/data.py +3 -12
- appier/test/exceptions.py +8 -17
- appier/test/export.py +16 -33
- appier/test/graph.py +27 -60
- appier/test/http.py +42 -54
- appier/test/legacy.py +20 -30
- appier/test/log.py +14 -35
- appier/test/mock.py +27 -123
- appier/test/model.py +79 -91
- appier/test/part.py +5 -14
- appier/test/preferences.py +5 -13
- appier/test/queuing.py +29 -37
- appier/test/request.py +61 -73
- appier/test/serialize.py +12 -23
- appier/test/session.py +10 -19
- appier/test/smtp.py +8 -14
- appier/test/structures.py +20 -24
- appier/test/typesf.py +14 -28
- appier/test/util.py +480 -438
- appier/typesf.py +251 -171
- appier/util.py +578 -407
- appier/validation.py +280 -143
- {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/METADATA +6 -1
- appier-1.32.0.dist-info/RECORD +86 -0
- appier-1.31.4.dist-info/RECORD +0 -86
- {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/LICENSE +0 -0
- {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/WHEEL +0 -0
- {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/top_level.txt +0 -0
appier/test/util.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Hive Appier Framework
|
|
5
|
-
# Copyright (c) 2008-
|
|
5
|
+
# Copyright (c) 2008-2024 Hive Solutions Lda.
|
|
6
6
|
#
|
|
7
7
|
# This file is part of Hive Appier Framework.
|
|
8
8
|
#
|
|
@@ -22,16 +22,7 @@
|
|
|
22
22
|
__author__ = "João Magalhães <joamag@hive.pt>"
|
|
23
23
|
""" The author(s) of the module """
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
""" The version of the module """
|
|
27
|
-
|
|
28
|
-
__revision__ = "$LastChangedRevision$"
|
|
29
|
-
""" The revision number of the module """
|
|
30
|
-
|
|
31
|
-
__date__ = "$LastChangedDate$"
|
|
32
|
-
""" The last change date of the module """
|
|
33
|
-
|
|
34
|
-
__copyright__ = "Copyright (c) 2008-2022 Hive Solutions Lda."
|
|
25
|
+
__copyright__ = "Copyright (c) 2008-2024 Hive Solutions Lda."
|
|
35
26
|
""" The copyright for the module """
|
|
36
27
|
|
|
37
28
|
__license__ = "Apache License, Version 2.0"
|
|
@@ -41,8 +32,8 @@ import unittest
|
|
|
41
32
|
|
|
42
33
|
import appier
|
|
43
34
|
|
|
44
|
-
class UtilTest(unittest.TestCase):
|
|
45
35
|
|
|
36
|
+
class UtilTest(unittest.TestCase):
|
|
46
37
|
def test_to_sort(self):
|
|
47
38
|
result = appier.to_sort("name:descending")
|
|
48
39
|
self.assertEqual(result, [("name", -1)])
|
|
@@ -54,22 +45,34 @@ class UtilTest(unittest.TestCase):
|
|
|
54
45
|
self.assertEqual(result, [("name", 1), ("age", -1)])
|
|
55
46
|
|
|
56
47
|
def test_is_mobile(self):
|
|
57
|
-
result = appier.is_mobile(
|
|
48
|
+
result = appier.is_mobile(
|
|
49
|
+
"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"
|
|
50
|
+
)
|
|
58
51
|
self.assertEqual(result, True)
|
|
59
52
|
|
|
60
|
-
result = appier.is_mobile(
|
|
53
|
+
result = appier.is_mobile(
|
|
54
|
+
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
|
|
55
|
+
)
|
|
61
56
|
self.assertEqual(result, True)
|
|
62
57
|
|
|
63
|
-
result = appier.is_mobile(
|
|
58
|
+
result = appier.is_mobile(
|
|
59
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"
|
|
60
|
+
)
|
|
64
61
|
self.assertEqual(result, False)
|
|
65
62
|
|
|
66
|
-
result = appier.is_mobile(
|
|
63
|
+
result = appier.is_mobile(
|
|
64
|
+
"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
|
65
|
+
)
|
|
67
66
|
self.assertEqual(result, False)
|
|
68
67
|
|
|
69
|
-
result = appier.is_mobile(
|
|
68
|
+
result = appier.is_mobile(
|
|
69
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
|
|
70
|
+
)
|
|
70
71
|
self.assertEqual(result, False)
|
|
71
72
|
|
|
72
|
-
result = appier.is_mobile(
|
|
73
|
+
result = appier.is_mobile(
|
|
74
|
+
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1"
|
|
75
|
+
)
|
|
73
76
|
self.assertEqual(result, False)
|
|
74
77
|
|
|
75
78
|
result = appier.is_mobile("")
|
|
@@ -79,25 +82,39 @@ class UtilTest(unittest.TestCase):
|
|
|
79
82
|
self.assertEqual(result, False)
|
|
80
83
|
|
|
81
84
|
def test_is_tablet(self):
|
|
82
|
-
result = appier.is_tablet(
|
|
85
|
+
result = appier.is_tablet(
|
|
86
|
+
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1"
|
|
87
|
+
)
|
|
83
88
|
self.assertEqual(result, True)
|
|
84
89
|
|
|
85
|
-
result = appier.is_tablet(
|
|
90
|
+
result = appier.is_tablet(
|
|
91
|
+
"Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329"
|
|
92
|
+
)
|
|
86
93
|
self.assertEqual(result, True)
|
|
87
94
|
|
|
88
|
-
result = appier.is_tablet(
|
|
95
|
+
result = appier.is_tablet(
|
|
96
|
+
"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"
|
|
97
|
+
)
|
|
89
98
|
self.assertEqual(result, True)
|
|
90
99
|
|
|
91
|
-
result = appier.is_tablet(
|
|
100
|
+
result = appier.is_tablet(
|
|
101
|
+
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
|
|
102
|
+
)
|
|
92
103
|
self.assertEqual(result, True)
|
|
93
104
|
|
|
94
|
-
result = appier.is_tablet(
|
|
105
|
+
result = appier.is_tablet(
|
|
106
|
+
"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
|
107
|
+
)
|
|
95
108
|
self.assertEqual(result, True)
|
|
96
109
|
|
|
97
|
-
result = appier.is_tablet(
|
|
110
|
+
result = appier.is_tablet(
|
|
111
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"
|
|
112
|
+
)
|
|
98
113
|
self.assertEqual(result, False)
|
|
99
114
|
|
|
100
|
-
result = appier.is_tablet(
|
|
115
|
+
result = appier.is_tablet(
|
|
116
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
|
|
117
|
+
)
|
|
101
118
|
self.assertEqual(result, False)
|
|
102
119
|
|
|
103
120
|
result = appier.is_tablet("")
|
|
@@ -107,31 +124,49 @@ class UtilTest(unittest.TestCase):
|
|
|
107
124
|
self.assertEqual(result, False)
|
|
108
125
|
|
|
109
126
|
def test_is_browser(self):
|
|
110
|
-
result = appier.is_browser(
|
|
127
|
+
result = appier.is_browser(
|
|
128
|
+
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1"
|
|
129
|
+
)
|
|
111
130
|
self.assertEqual(result, True)
|
|
112
131
|
|
|
113
|
-
result = appier.is_browser(
|
|
132
|
+
result = appier.is_browser(
|
|
133
|
+
"Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329"
|
|
134
|
+
)
|
|
114
135
|
self.assertEqual(result, True)
|
|
115
136
|
|
|
116
|
-
result = appier.is_browser(
|
|
137
|
+
result = appier.is_browser(
|
|
138
|
+
"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"
|
|
139
|
+
)
|
|
117
140
|
self.assertEqual(result, True)
|
|
118
141
|
|
|
119
|
-
result = appier.is_browser(
|
|
142
|
+
result = appier.is_browser(
|
|
143
|
+
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
|
|
144
|
+
)
|
|
120
145
|
self.assertEqual(result, True)
|
|
121
146
|
|
|
122
|
-
result = appier.is_browser(
|
|
147
|
+
result = appier.is_browser(
|
|
148
|
+
"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
|
149
|
+
)
|
|
123
150
|
self.assertEqual(result, True)
|
|
124
151
|
|
|
125
|
-
result = appier.is_browser(
|
|
152
|
+
result = appier.is_browser(
|
|
153
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"
|
|
154
|
+
)
|
|
126
155
|
self.assertEqual(result, True)
|
|
127
156
|
|
|
128
|
-
result = appier.is_browser(
|
|
157
|
+
result = appier.is_browser(
|
|
158
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
|
|
159
|
+
)
|
|
129
160
|
self.assertEqual(result, True)
|
|
130
161
|
|
|
131
|
-
result = appier.is_browser(
|
|
162
|
+
result = appier.is_browser(
|
|
163
|
+
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136"
|
|
164
|
+
)
|
|
132
165
|
self.assertEqual(result, True)
|
|
133
166
|
|
|
134
|
-
result = appier.is_browser(
|
|
167
|
+
result = appier.is_browser(
|
|
168
|
+
"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"
|
|
169
|
+
)
|
|
135
170
|
self.assertEqual(result, False)
|
|
136
171
|
|
|
137
172
|
result = appier.is_browser("netius/1.1.10")
|
|
@@ -144,31 +179,49 @@ class UtilTest(unittest.TestCase):
|
|
|
144
179
|
self.assertEqual(result, False)
|
|
145
180
|
|
|
146
181
|
def test_is_bot(self):
|
|
147
|
-
result = appier.is_bot(
|
|
182
|
+
result = appier.is_bot(
|
|
183
|
+
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1"
|
|
184
|
+
)
|
|
148
185
|
self.assertEqual(result, False)
|
|
149
186
|
|
|
150
|
-
result = appier.is_bot(
|
|
187
|
+
result = appier.is_bot(
|
|
188
|
+
"Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329"
|
|
189
|
+
)
|
|
151
190
|
self.assertEqual(result, False)
|
|
152
191
|
|
|
153
|
-
result = appier.is_bot(
|
|
192
|
+
result = appier.is_bot(
|
|
193
|
+
"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"
|
|
194
|
+
)
|
|
154
195
|
self.assertEqual(result, False)
|
|
155
196
|
|
|
156
|
-
result = appier.is_bot(
|
|
197
|
+
result = appier.is_bot(
|
|
198
|
+
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
|
|
199
|
+
)
|
|
157
200
|
self.assertEqual(result, False)
|
|
158
201
|
|
|
159
|
-
result = appier.is_bot(
|
|
202
|
+
result = appier.is_bot(
|
|
203
|
+
"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
|
204
|
+
)
|
|
160
205
|
self.assertEqual(result, False)
|
|
161
206
|
|
|
162
|
-
result = appier.is_bot(
|
|
207
|
+
result = appier.is_bot(
|
|
208
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"
|
|
209
|
+
)
|
|
163
210
|
self.assertEqual(result, False)
|
|
164
211
|
|
|
165
|
-
result = appier.is_bot(
|
|
212
|
+
result = appier.is_bot(
|
|
213
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
|
|
214
|
+
)
|
|
166
215
|
self.assertEqual(result, False)
|
|
167
216
|
|
|
168
|
-
result = appier.is_bot(
|
|
217
|
+
result = appier.is_bot(
|
|
218
|
+
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136"
|
|
219
|
+
)
|
|
169
220
|
self.assertEqual(result, False)
|
|
170
221
|
|
|
171
|
-
result = appier.is_bot(
|
|
222
|
+
result = appier.is_bot(
|
|
223
|
+
"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"
|
|
224
|
+
)
|
|
172
225
|
self.assertEqual(result, True)
|
|
173
226
|
|
|
174
227
|
result = appier.is_bot("netius/1.1.10")
|
|
@@ -184,112 +237,160 @@ class UtilTest(unittest.TestCase):
|
|
|
184
237
|
self.assertEqual(result, False)
|
|
185
238
|
|
|
186
239
|
def test_browser_info(self):
|
|
187
|
-
result = appier.browser_info(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
240
|
+
result = appier.browser_info(
|
|
241
|
+
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136"
|
|
242
|
+
)
|
|
243
|
+
self.assertEqual(
|
|
244
|
+
result,
|
|
245
|
+
dict(
|
|
246
|
+
name="Edge",
|
|
247
|
+
version="12.10136",
|
|
248
|
+
version_f=12.10136,
|
|
249
|
+
version_i=12,
|
|
250
|
+
interactive=True,
|
|
251
|
+
bot=False,
|
|
252
|
+
os="Windows",
|
|
253
|
+
),
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
result = appier.browser_info(
|
|
257
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
|
|
258
|
+
)
|
|
259
|
+
self.assertEqual(
|
|
260
|
+
result,
|
|
261
|
+
dict(
|
|
262
|
+
name="Chrome",
|
|
263
|
+
version="62.0.3202.75",
|
|
264
|
+
version_f=62.0,
|
|
265
|
+
version_i=62,
|
|
266
|
+
interactive=True,
|
|
267
|
+
bot=False,
|
|
268
|
+
os="Windows",
|
|
269
|
+
),
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
result = appier.browser_info(
|
|
273
|
+
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1"
|
|
274
|
+
)
|
|
275
|
+
self.assertEqual(
|
|
276
|
+
result,
|
|
277
|
+
dict(
|
|
278
|
+
name="Safari",
|
|
279
|
+
version="601.1",
|
|
280
|
+
version_f=601.1,
|
|
281
|
+
version_i=601,
|
|
282
|
+
interactive=True,
|
|
283
|
+
bot=False,
|
|
284
|
+
os="Mac",
|
|
285
|
+
),
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
result = appier.browser_info(
|
|
289
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"
|
|
290
|
+
)
|
|
291
|
+
self.assertEqual(
|
|
292
|
+
result,
|
|
293
|
+
dict(
|
|
294
|
+
name="Firefox",
|
|
295
|
+
version="56.0",
|
|
296
|
+
version_f=56.0,
|
|
297
|
+
version_i=56,
|
|
298
|
+
interactive=True,
|
|
299
|
+
bot=False,
|
|
300
|
+
os="Windows",
|
|
301
|
+
),
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
result = appier.browser_info(
|
|
305
|
+
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"
|
|
306
|
+
)
|
|
307
|
+
self.assertEqual(
|
|
308
|
+
result,
|
|
309
|
+
dict(
|
|
310
|
+
name="Explorer",
|
|
311
|
+
version="8.0",
|
|
312
|
+
version_f=8.0,
|
|
313
|
+
version_i=8,
|
|
314
|
+
interactive=True,
|
|
315
|
+
bot=False,
|
|
316
|
+
os="Windows",
|
|
317
|
+
),
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
result = appier.browser_info(
|
|
321
|
+
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
|
|
322
|
+
)
|
|
323
|
+
self.assertEqual(
|
|
324
|
+
result,
|
|
325
|
+
dict(
|
|
326
|
+
name="Googlebot",
|
|
327
|
+
version="2.1",
|
|
328
|
+
version_f=2.1,
|
|
329
|
+
version_i=2,
|
|
330
|
+
interactive=False,
|
|
331
|
+
bot=True,
|
|
332
|
+
),
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
result = appier.browser_info(
|
|
336
|
+
"Mozilla/5.0 (compatible; Bingbot/2.0; +http://www.bing.com/bingbot.htm)"
|
|
337
|
+
)
|
|
338
|
+
self.assertEqual(
|
|
339
|
+
result,
|
|
340
|
+
dict(
|
|
341
|
+
name="Bingbot",
|
|
342
|
+
version="2.0",
|
|
343
|
+
version_f=2.0,
|
|
344
|
+
version_i=2,
|
|
345
|
+
interactive=False,
|
|
346
|
+
bot=True,
|
|
347
|
+
),
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
result = appier.browser_info(
|
|
351
|
+
"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"
|
|
352
|
+
)
|
|
353
|
+
self.assertEqual(
|
|
354
|
+
result,
|
|
355
|
+
dict(
|
|
356
|
+
name="DuckDuckBot",
|
|
357
|
+
version="1.0",
|
|
358
|
+
version_f=1.0,
|
|
359
|
+
version_i=1,
|
|
360
|
+
interactive=False,
|
|
361
|
+
bot=True,
|
|
362
|
+
),
|
|
363
|
+
)
|
|
271
364
|
|
|
272
365
|
result = appier.browser_info("netius/1.1.10")
|
|
273
|
-
self.assertEqual(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
366
|
+
self.assertEqual(
|
|
367
|
+
result,
|
|
368
|
+
dict(
|
|
369
|
+
name="netius",
|
|
370
|
+
version="1.1.10",
|
|
371
|
+
version_f=1.1,
|
|
372
|
+
version_i=1,
|
|
373
|
+
interactive=False,
|
|
374
|
+
bot=False,
|
|
375
|
+
),
|
|
376
|
+
)
|
|
281
377
|
|
|
282
378
|
result = appier.browser_info("netius/1.1b")
|
|
283
|
-
self.assertEqual(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
379
|
+
self.assertEqual(
|
|
380
|
+
result,
|
|
381
|
+
dict(
|
|
382
|
+
name="netius",
|
|
383
|
+
version="1.1b",
|
|
384
|
+
version_f=0,
|
|
385
|
+
version_i=0,
|
|
386
|
+
interactive=False,
|
|
387
|
+
bot=False,
|
|
388
|
+
),
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
result = appier.browser_info(
|
|
392
|
+
"APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)"
|
|
393
|
+
)
|
|
293
394
|
self.assertEqual(result, None)
|
|
294
395
|
|
|
295
396
|
result = appier.browser_info(None)
|
|
@@ -299,16 +400,16 @@ class UtilTest(unittest.TestCase):
|
|
|
299
400
|
result = appier.obfuscate("hello world")
|
|
300
401
|
self.assertEqual(result, "hel********")
|
|
301
402
|
|
|
302
|
-
result = appier.obfuscate("hello world", display_l
|
|
403
|
+
result = appier.obfuscate("hello world", display_l=6)
|
|
303
404
|
self.assertEqual(result, "hello *****")
|
|
304
405
|
|
|
305
|
-
result = appier.obfuscate("hello world", display_l
|
|
406
|
+
result = appier.obfuscate("hello world", display_l=100)
|
|
306
407
|
self.assertEqual(result, "hello world")
|
|
307
408
|
|
|
308
|
-
result = appier.obfuscate("hello world", display_l
|
|
409
|
+
result = appier.obfuscate("hello world", display_l=6, token="-")
|
|
309
410
|
self.assertEqual(result, "hello -----")
|
|
310
411
|
|
|
311
|
-
result = appier.obfuscate(appier.legacy.u("你好世界"), display_l
|
|
412
|
+
result = appier.obfuscate(appier.legacy.u("你好世界"), display_l=3)
|
|
312
413
|
self.assertEqual(result, appier.legacy.u("你好世*"))
|
|
313
414
|
|
|
314
415
|
def test_email_parts(self):
|
|
@@ -318,7 +419,9 @@ class UtilTest(unittest.TestCase):
|
|
|
318
419
|
self.assertEqual(name, "João Magalhães")
|
|
319
420
|
self.assertEqual(email, "joamag@hive.pt")
|
|
320
421
|
|
|
321
|
-
name, email = appier.email_parts(
|
|
422
|
+
name, email = appier.email_parts(
|
|
423
|
+
appier.legacy.u("João Magalhães <joamag@hive.pt>")
|
|
424
|
+
)
|
|
322
425
|
self.assertEqual(type(name), appier.legacy.UNICODE)
|
|
323
426
|
self.assertEqual(type(email), appier.legacy.UNICODE)
|
|
324
427
|
self.assertEqual(name, appier.legacy.u("João Magalhães"))
|
|
@@ -339,26 +442,38 @@ class UtilTest(unittest.TestCase):
|
|
|
339
442
|
def test_email_mime(self):
|
|
340
443
|
result = appier.email_mime("João Magalhães <joamag@hive.pt>")
|
|
341
444
|
self.assertEqual(type(result), str)
|
|
342
|
-
self.assertEqual(
|
|
445
|
+
self.assertEqual(
|
|
446
|
+
result, "=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>"
|
|
447
|
+
)
|
|
343
448
|
|
|
344
449
|
result = appier.email_mime(appier.legacy.u("João Magalhães <joamag@hive.pt>"))
|
|
345
450
|
self.assertEqual(type(result), appier.legacy.UNICODE)
|
|
346
|
-
self.assertEqual(
|
|
451
|
+
self.assertEqual(
|
|
452
|
+
result,
|
|
453
|
+
appier.legacy.u("=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>"),
|
|
454
|
+
)
|
|
347
455
|
|
|
348
456
|
result = appier.email_mime(appier.legacy.u(" joamag@hive.pt "))
|
|
349
457
|
self.assertEqual(type(result), appier.legacy.UNICODE)
|
|
350
458
|
self.assertEqual(result, appier.legacy.u("joamag@hive.pt <joamag@hive.pt>"))
|
|
351
459
|
|
|
352
|
-
result = appier.email_mime(
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
460
|
+
result = appier.email_mime(
|
|
461
|
+
[
|
|
462
|
+
appier.legacy.u("João Magalhães <joamag@hive.pt>"),
|
|
463
|
+
appier.legacy.u(" joamag@hive.pt "),
|
|
464
|
+
None,
|
|
465
|
+
]
|
|
466
|
+
)
|
|
357
467
|
self.assertEqual(type(result), list)
|
|
358
|
-
self.assertEqual(
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
468
|
+
self.assertEqual(
|
|
469
|
+
result,
|
|
470
|
+
[
|
|
471
|
+
appier.legacy.u(
|
|
472
|
+
"=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>"
|
|
473
|
+
),
|
|
474
|
+
appier.legacy.u("joamag@hive.pt <joamag@hive.pt>"),
|
|
475
|
+
],
|
|
476
|
+
)
|
|
362
477
|
|
|
363
478
|
def test_email_name(self):
|
|
364
479
|
result = appier.email_name("João Magalhães <joamag@hive.pt>")
|
|
@@ -379,37 +494,26 @@ class UtilTest(unittest.TestCase):
|
|
|
379
494
|
result = appier.email_name(appier.legacy.u(""))
|
|
380
495
|
self.assertEqual(result, None)
|
|
381
496
|
|
|
382
|
-
result = appier.email_name(
|
|
383
|
-
appier.legacy.u("joamag@hive.pt"),
|
|
384
|
-
|
|
385
|
-
None
|
|
386
|
-
])
|
|
497
|
+
result = appier.email_name(
|
|
498
|
+
[appier.legacy.u("joamag@hive.pt"), appier.legacy.u("joamag@hive.pt"), None]
|
|
499
|
+
)
|
|
387
500
|
self.assertEqual(type(result), list)
|
|
388
|
-
self.assertEqual(
|
|
389
|
-
|
|
390
|
-
appier.legacy.u("joamag@hive.pt")
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
result = appier.email_name(
|
|
394
|
-
appier.legacy.u("joamag"),
|
|
395
|
-
|
|
396
|
-
None
|
|
397
|
-
])
|
|
501
|
+
self.assertEqual(
|
|
502
|
+
result,
|
|
503
|
+
[appier.legacy.u("joamag@hive.pt"), appier.legacy.u("joamag@hive.pt")],
|
|
504
|
+
)
|
|
505
|
+
|
|
506
|
+
result = appier.email_name(
|
|
507
|
+
[appier.legacy.u("joamag"), appier.legacy.u("joamag@hive.pt"), None]
|
|
508
|
+
)
|
|
398
509
|
self.assertEqual(type(result), list)
|
|
399
|
-
self.assertEqual(result, [
|
|
400
|
-
|
|
401
|
-
])
|
|
402
|
-
|
|
403
|
-
result = appier.email_name([
|
|
404
|
-
appier.legacy.u(""),
|
|
405
|
-
None
|
|
406
|
-
])
|
|
510
|
+
self.assertEqual(result, [appier.legacy.u("joamag@hive.pt")])
|
|
511
|
+
|
|
512
|
+
result = appier.email_name([appier.legacy.u(""), None])
|
|
407
513
|
self.assertEqual(type(result), list)
|
|
408
514
|
self.assertEqual(result, [])
|
|
409
515
|
|
|
410
|
-
result = appier.email_name([
|
|
411
|
-
appier.legacy.u("")
|
|
412
|
-
])
|
|
516
|
+
result = appier.email_name([appier.legacy.u("")])
|
|
413
517
|
self.assertEqual(type(result), list)
|
|
414
518
|
self.assertEqual(result, [])
|
|
415
519
|
|
|
@@ -432,37 +536,30 @@ class UtilTest(unittest.TestCase):
|
|
|
432
536
|
result = appier.email_base(appier.legacy.u(""))
|
|
433
537
|
self.assertEqual(result, None)
|
|
434
538
|
|
|
435
|
-
result = appier.email_base(
|
|
436
|
-
appier.legacy.u("joamag@hive.pt"),
|
|
437
|
-
|
|
438
|
-
None
|
|
439
|
-
])
|
|
539
|
+
result = appier.email_base(
|
|
540
|
+
[appier.legacy.u("joamag@hive.pt"), appier.legacy.u("joamag@hive.pt"), None]
|
|
541
|
+
)
|
|
440
542
|
self.assertEqual(type(result), list)
|
|
441
|
-
self.assertEqual(
|
|
442
|
-
|
|
443
|
-
appier.legacy.u("joamag@hive.pt")
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
result = appier.email_base(
|
|
447
|
-
appier.legacy.u("joamag"),
|
|
448
|
-
|
|
449
|
-
None
|
|
450
|
-
])
|
|
543
|
+
self.assertEqual(
|
|
544
|
+
result,
|
|
545
|
+
[appier.legacy.u("joamag@hive.pt"), appier.legacy.u("joamag@hive.pt")],
|
|
546
|
+
)
|
|
547
|
+
|
|
548
|
+
result = appier.email_base(
|
|
549
|
+
[appier.legacy.u("joamag"), appier.legacy.u("joamag@hive.pt"), None]
|
|
550
|
+
)
|
|
451
551
|
self.assertEqual(type(result), list)
|
|
452
|
-
self.assertEqual(result, [
|
|
453
|
-
|
|
454
|
-
])
|
|
455
|
-
|
|
456
|
-
result = appier.email_base([
|
|
457
|
-
appier.legacy.u(""),
|
|
458
|
-
None
|
|
459
|
-
])
|
|
552
|
+
self.assertEqual(result, [appier.legacy.u("joamag@hive.pt")])
|
|
553
|
+
|
|
554
|
+
result = appier.email_base([appier.legacy.u(""), None])
|
|
460
555
|
self.assertEqual(type(result), list)
|
|
461
556
|
self.assertEqual(result, [])
|
|
462
557
|
|
|
463
|
-
result = appier.email_base(
|
|
464
|
-
|
|
465
|
-
|
|
558
|
+
result = appier.email_base(
|
|
559
|
+
[
|
|
560
|
+
appier.legacy.u(""),
|
|
561
|
+
]
|
|
562
|
+
)
|
|
466
563
|
self.assertEqual(type(result), list)
|
|
467
564
|
self.assertEqual(result, [])
|
|
468
565
|
|
|
@@ -474,30 +571,32 @@ class UtilTest(unittest.TestCase):
|
|
|
474
571
|
result = appier.date_to_timestamp("29/06/0000")
|
|
475
572
|
self.assertEqual(result, None)
|
|
476
573
|
|
|
477
|
-
result = appier.date_to_timestamp("1984-06-29", format
|
|
574
|
+
result = appier.date_to_timestamp("1984-06-29", format="%Y-%m-%d")
|
|
478
575
|
self.assertEqual(result, 457315200)
|
|
479
576
|
|
|
480
|
-
result = appier.date_to_timestamp("1984-13-29", format
|
|
577
|
+
result = appier.date_to_timestamp("1984-13-29", format="%Y-%m-%d")
|
|
481
578
|
self.assertEqual(result, None)
|
|
482
579
|
|
|
483
580
|
def test_gather_errors(self):
|
|
484
|
-
def raiser():
|
|
581
|
+
def raiser():
|
|
582
|
+
raise appier.OperationalError(message="hello")
|
|
583
|
+
|
|
485
584
|
struct = appier.lazy_dict(
|
|
486
|
-
first
|
|
487
|
-
second
|
|
585
|
+
first=appier.lazy(lambda: raiser()),
|
|
586
|
+
second=appier.lazy(lambda: 2),
|
|
488
587
|
)
|
|
489
588
|
|
|
490
589
|
errors = appier.gather_errors(struct)
|
|
491
|
-
self.assertEqual(errors, dict(first
|
|
590
|
+
self.assertEqual(errors, dict(first=["hello"]))
|
|
492
591
|
|
|
493
|
-
struct.__getitem__("first", force
|
|
592
|
+
struct.__getitem__("first", force=True)._value = 1
|
|
494
593
|
|
|
495
594
|
errors = appier.gather_errors(struct)
|
|
496
|
-
self.assertEqual(errors, dict(first
|
|
595
|
+
self.assertEqual(errors, dict(first=["hello"]))
|
|
497
596
|
|
|
498
|
-
struct.__getitem__("first", force
|
|
597
|
+
struct.__getitem__("first", force=True)._value = 1
|
|
499
598
|
|
|
500
|
-
errors = appier.gather_errors(struct, resolve
|
|
599
|
+
errors = appier.gather_errors(struct, resolve=False)
|
|
501
600
|
self.assertEqual(errors, dict())
|
|
502
601
|
|
|
503
602
|
def test_camel_to_underscore(self):
|
|
@@ -532,11 +631,11 @@ class UtilTest(unittest.TestCase):
|
|
|
532
631
|
self.assertEqual(type(result), str)
|
|
533
632
|
self.assertEqual(result, "Hello World")
|
|
534
633
|
|
|
535
|
-
result = appier.camel_to_readable("HelloWorld", lower
|
|
634
|
+
result = appier.camel_to_readable("HelloWorld", lower=True)
|
|
536
635
|
self.assertEqual(type(result), str)
|
|
537
636
|
self.assertEqual(result, "Hello world")
|
|
538
637
|
|
|
539
|
-
result = appier.camel_to_readable("HelloWorld", lower
|
|
638
|
+
result = appier.camel_to_readable("HelloWorld", lower=True, capitalize=True)
|
|
540
639
|
self.assertEqual(type(result), str)
|
|
541
640
|
self.assertEqual(result, "Hello World")
|
|
542
641
|
|
|
@@ -544,15 +643,11 @@ class UtilTest(unittest.TestCase):
|
|
|
544
643
|
self.assertEqual(type(result), str)
|
|
545
644
|
self.assertEqual(result, "HELLO World")
|
|
546
645
|
|
|
547
|
-
result = appier.camel_to_readable("HELLOWorld", lower
|
|
646
|
+
result = appier.camel_to_readable("HELLOWorld", lower=True)
|
|
548
647
|
self.assertEqual(type(result), str)
|
|
549
648
|
self.assertEqual(result, "Hello world")
|
|
550
649
|
|
|
551
|
-
result = appier.camel_to_readable(
|
|
552
|
-
"HELLOWorld",
|
|
553
|
-
lower = True,
|
|
554
|
-
capitalize = True
|
|
555
|
-
)
|
|
650
|
+
result = appier.camel_to_readable("HELLOWorld", lower=True, capitalize=True)
|
|
556
651
|
self.assertEqual(type(result), str)
|
|
557
652
|
self.assertEqual(result, "Hello World")
|
|
558
653
|
|
|
@@ -560,17 +655,12 @@ class UtilTest(unittest.TestCase):
|
|
|
560
655
|
self.assertEqual(type(result), str)
|
|
561
656
|
self.assertEqual(result, "HELLO World HELLO World")
|
|
562
657
|
|
|
563
|
-
result = appier.camel_to_readable(
|
|
564
|
-
"HELLOWorldHELLOWorld",
|
|
565
|
-
lower = True
|
|
566
|
-
)
|
|
658
|
+
result = appier.camel_to_readable("HELLOWorldHELLOWorld", lower=True)
|
|
567
659
|
self.assertEqual(type(result), str)
|
|
568
660
|
self.assertEqual(result, "Hello world hello world")
|
|
569
661
|
|
|
570
662
|
result = appier.camel_to_readable(
|
|
571
|
-
"HELLOWorldHELLOWorld",
|
|
572
|
-
lower = True,
|
|
573
|
-
capitalize = True
|
|
663
|
+
"HELLOWorldHELLOWorld", lower=True, capitalize=True
|
|
574
664
|
)
|
|
575
665
|
self.assertEqual(type(result), str)
|
|
576
666
|
self.assertEqual(result, "Hello World Hello World")
|
|
@@ -587,7 +677,7 @@ class UtilTest(unittest.TestCase):
|
|
|
587
677
|
self.assertEqual(type(result), str)
|
|
588
678
|
self.assertEqual(result, "HelloWorld")
|
|
589
679
|
|
|
590
|
-
result = appier.underscore_to_camel("hello_world", lower
|
|
680
|
+
result = appier.underscore_to_camel("hello_world", lower=True)
|
|
591
681
|
self.assertEqual(type(result), str)
|
|
592
682
|
self.assertEqual(result, "helloWorld")
|
|
593
683
|
|
|
@@ -595,7 +685,7 @@ class UtilTest(unittest.TestCase):
|
|
|
595
685
|
self.assertEqual(type(result), str)
|
|
596
686
|
self.assertEqual(result, "HelloWorldHelloWorld")
|
|
597
687
|
|
|
598
|
-
result = appier.underscore_to_camel("hello_world_hello_world", lower
|
|
688
|
+
result = appier.underscore_to_camel("hello_world_hello_world", lower=True)
|
|
599
689
|
self.assertEqual(type(result), str)
|
|
600
690
|
self.assertEqual(result, "helloWorldHelloWorld")
|
|
601
691
|
|
|
@@ -603,7 +693,7 @@ class UtilTest(unittest.TestCase):
|
|
|
603
693
|
self.assertEqual(type(result), str)
|
|
604
694
|
self.assertEqual(result, "HelloWorld")
|
|
605
695
|
|
|
606
|
-
result = appier.underscore_to_camel("hello_world_", lower
|
|
696
|
+
result = appier.underscore_to_camel("hello_world_", lower=True)
|
|
607
697
|
self.assertEqual(type(result), str)
|
|
608
698
|
self.assertEqual(result, "helloWorld")
|
|
609
699
|
|
|
@@ -611,7 +701,7 @@ class UtilTest(unittest.TestCase):
|
|
|
611
701
|
self.assertEqual(type(result), str)
|
|
612
702
|
self.assertEqual(result, "HelloWorld")
|
|
613
703
|
|
|
614
|
-
result = appier.underscore_to_camel("__hello_world__", lower
|
|
704
|
+
result = appier.underscore_to_camel("__hello_world__", lower=True)
|
|
615
705
|
self.assertEqual(type(result), str)
|
|
616
706
|
self.assertEqual(result, "helloWorld")
|
|
617
707
|
|
|
@@ -619,7 +709,7 @@ class UtilTest(unittest.TestCase):
|
|
|
619
709
|
self.assertEqual(type(result), str)
|
|
620
710
|
self.assertEqual(result, "HelloWorld")
|
|
621
711
|
|
|
622
|
-
result = appier.underscore_to_camel("__hello___world__", lower
|
|
712
|
+
result = appier.underscore_to_camel("__hello___world__", lower=True)
|
|
623
713
|
self.assertEqual(type(result), str)
|
|
624
714
|
self.assertEqual(result, "helloWorld")
|
|
625
715
|
|
|
@@ -627,7 +717,7 @@ class UtilTest(unittest.TestCase):
|
|
|
627
717
|
self.assertEqual(type(result), str)
|
|
628
718
|
self.assertEqual(result, "HelloWORLD")
|
|
629
719
|
|
|
630
|
-
result = appier.underscore_to_camel("__hello___WORLD__", lower
|
|
720
|
+
result = appier.underscore_to_camel("__hello___WORLD__", lower=True)
|
|
631
721
|
self.assertEqual(type(result), str)
|
|
632
722
|
self.assertEqual(result, "helloWORLD")
|
|
633
723
|
|
|
@@ -635,7 +725,7 @@ class UtilTest(unittest.TestCase):
|
|
|
635
725
|
self.assertEqual(type(result), str)
|
|
636
726
|
self.assertEqual(result, "HelloWorld")
|
|
637
727
|
|
|
638
|
-
result = appier.underscore_to_camel("HelloWorld", lower
|
|
728
|
+
result = appier.underscore_to_camel("HelloWorld", lower=True)
|
|
639
729
|
self.assertEqual(type(result), str)
|
|
640
730
|
self.assertEqual(result, "helloWorld")
|
|
641
731
|
|
|
@@ -651,7 +741,7 @@ class UtilTest(unittest.TestCase):
|
|
|
651
741
|
self.assertEqual(type(result), str)
|
|
652
742
|
self.assertEqual(result, "Hello world")
|
|
653
743
|
|
|
654
|
-
result = appier.underscore_to_readable("hello_world", capitalize
|
|
744
|
+
result = appier.underscore_to_readable("hello_world", capitalize=True)
|
|
655
745
|
self.assertEqual(type(result), str)
|
|
656
746
|
self.assertEqual(result, "Hello World")
|
|
657
747
|
|
|
@@ -659,7 +749,9 @@ class UtilTest(unittest.TestCase):
|
|
|
659
749
|
self.assertEqual(type(result), str)
|
|
660
750
|
self.assertEqual(result, "Hello world hello world")
|
|
661
751
|
|
|
662
|
-
result = appier.underscore_to_readable(
|
|
752
|
+
result = appier.underscore_to_readable(
|
|
753
|
+
"hello_world_hello_world", capitalize=True
|
|
754
|
+
)
|
|
663
755
|
self.assertEqual(type(result), str)
|
|
664
756
|
self.assertEqual(result, "Hello World Hello World")
|
|
665
757
|
|
|
@@ -667,7 +759,7 @@ class UtilTest(unittest.TestCase):
|
|
|
667
759
|
self.assertEqual(type(result), str)
|
|
668
760
|
self.assertEqual(result, "Hello world")
|
|
669
761
|
|
|
670
|
-
result = appier.underscore_to_readable("hello_world_", capitalize
|
|
762
|
+
result = appier.underscore_to_readable("hello_world_", capitalize=True)
|
|
671
763
|
self.assertEqual(type(result), str)
|
|
672
764
|
self.assertEqual(result, "Hello World")
|
|
673
765
|
|
|
@@ -675,7 +767,7 @@ class UtilTest(unittest.TestCase):
|
|
|
675
767
|
self.assertEqual(type(result), str)
|
|
676
768
|
self.assertEqual(result, "Hello world")
|
|
677
769
|
|
|
678
|
-
result = appier.underscore_to_readable("__hello_world__", capitalize
|
|
770
|
+
result = appier.underscore_to_readable("__hello_world__", capitalize=True)
|
|
679
771
|
self.assertEqual(type(result), str)
|
|
680
772
|
self.assertEqual(result, "Hello World")
|
|
681
773
|
|
|
@@ -683,35 +775,37 @@ class UtilTest(unittest.TestCase):
|
|
|
683
775
|
self.assertEqual(type(result), str)
|
|
684
776
|
self.assertEqual(result, "Hello world")
|
|
685
777
|
|
|
686
|
-
result = appier.underscore_to_readable("__hello___world__", capitalize
|
|
778
|
+
result = appier.underscore_to_readable("__hello___world__", capitalize=True)
|
|
687
779
|
self.assertEqual(type(result), str)
|
|
688
780
|
self.assertEqual(result, "Hello World")
|
|
689
781
|
|
|
690
|
-
result = appier.underscore_to_readable(
|
|
782
|
+
result = appier.underscore_to_readable(
|
|
783
|
+
"__hello___world__", capitalize=True, separator="-"
|
|
784
|
+
)
|
|
691
785
|
self.assertEqual(type(result), str)
|
|
692
786
|
self.assertEqual(result, "Hello-World")
|
|
693
787
|
|
|
694
788
|
def test_escape(self):
|
|
695
|
-
result = appier.escape("foo,bar", ",", escape
|
|
789
|
+
result = appier.escape("foo,bar", ",", escape="$")
|
|
696
790
|
self.assertEqual(result, "foo$,bar")
|
|
697
791
|
|
|
698
|
-
result = appier.escape("foo$,bar", ",", escape
|
|
792
|
+
result = appier.escape("foo$,bar", ",", escape="$")
|
|
699
793
|
self.assertEqual(result, "foo$$$,bar")
|
|
700
794
|
|
|
701
|
-
result = appier.escape("foo$,bar:", (",", ":"), escape
|
|
795
|
+
result = appier.escape("foo$,bar:", (",", ":"), escape="$")
|
|
702
796
|
self.assertEqual(result, "foo$$$,bar$:")
|
|
703
797
|
|
|
704
798
|
def test_unescape(self):
|
|
705
|
-
result = appier.unescape("foo$,bar", escape
|
|
799
|
+
result = appier.unescape("foo$,bar", escape="$")
|
|
706
800
|
self.assertEqual(result, "foo,bar")
|
|
707
801
|
|
|
708
|
-
result = appier.unescape("foo$$,bar", escape
|
|
802
|
+
result = appier.unescape("foo$$,bar", escape="$")
|
|
709
803
|
self.assertEqual(result, "foo$,bar")
|
|
710
804
|
|
|
711
|
-
result = appier.unescape("foo$$,bar$:", escape
|
|
805
|
+
result = appier.unescape("foo$$,bar$:", escape="$")
|
|
712
806
|
self.assertEqual(result, "foo$,bar:")
|
|
713
807
|
|
|
714
|
-
result = appier.unescape("$$foo$,bar$$$$", escape
|
|
808
|
+
result = appier.unescape("$$foo$,bar$$$$", escape="$")
|
|
715
809
|
self.assertEqual(result, "$foo,bar$$")
|
|
716
810
|
|
|
717
811
|
def test_count_unescape(self):
|
|
@@ -740,28 +834,28 @@ class UtilTest(unittest.TestCase):
|
|
|
740
834
|
result = appier.split_unescape("foo bar")
|
|
741
835
|
self.assertEqual(result, ["foo", "bar"])
|
|
742
836
|
|
|
743
|
-
result = appier.split_unescape("foo bar hello world", max
|
|
837
|
+
result = appier.split_unescape("foo bar hello world", max=2)
|
|
744
838
|
self.assertEqual(result, ["foo", "bar", "hello world"])
|
|
745
839
|
|
|
746
840
|
result = appier.split_unescape("foo,bar", ",")
|
|
747
841
|
self.assertEqual(result, ["foo", "bar"])
|
|
748
842
|
|
|
749
|
-
result = appier.split_unescape("foo$,bar", ",", escape
|
|
843
|
+
result = appier.split_unescape("foo$,bar", ",", escape="$")
|
|
750
844
|
self.assertEqual(result, ["foo,bar"])
|
|
751
845
|
|
|
752
|
-
result = appier.split_unescape("foo$$,bar", ",", escape
|
|
846
|
+
result = appier.split_unescape("foo$$,bar", ",", escape="$", unescape=True)
|
|
753
847
|
self.assertEqual(result, ["foo$", "bar"])
|
|
754
848
|
|
|
755
|
-
result = appier.split_unescape("foo$$,bar", ",", escape
|
|
849
|
+
result = appier.split_unescape("foo$$,bar", ",", escape="$", unescape=False)
|
|
756
850
|
self.assertEqual(result, ["foo$$", "bar"])
|
|
757
851
|
|
|
758
|
-
result = appier.split_unescape("foo$", ",", escape
|
|
852
|
+
result = appier.split_unescape("foo$", ",", escape="$", unescape=True)
|
|
759
853
|
self.assertEqual(result, ["foo$"])
|
|
760
854
|
|
|
761
|
-
result = appier.split_unescape("foo\\\\\\:bar", ":", unescape
|
|
855
|
+
result = appier.split_unescape("foo\\\\\\:bar", ":", unescape=True)
|
|
762
856
|
self.assertEqual(result, ["foo\\:bar"])
|
|
763
857
|
|
|
764
|
-
result = appier.split_unescape("foo\\\\:bar", ":", unescape
|
|
858
|
+
result = appier.split_unescape("foo\\\\:bar", ":", unescape=True)
|
|
765
859
|
self.assertEqual(result, ["foo\\", "bar"])
|
|
766
860
|
|
|
767
861
|
def test_is_content_type(self):
|
|
@@ -803,19 +897,21 @@ class UtilTest(unittest.TestCase):
|
|
|
803
897
|
self.assertEqual(type(result), tuple)
|
|
804
898
|
self.assertEqual(len(result), 2)
|
|
805
899
|
self.assertEqual(result[0], ["text/plain", "text/json"])
|
|
806
|
-
self.assertEqual(result[1], dict(charset
|
|
900
|
+
self.assertEqual(result[1], dict(charset="utf-8"))
|
|
807
901
|
|
|
808
902
|
result = appier.parse_content_type("text/plain+json ; charset=utf-8")
|
|
809
903
|
self.assertEqual(type(result), tuple)
|
|
810
904
|
self.assertEqual(len(result), 2)
|
|
811
905
|
self.assertEqual(result[0], ["text/plain", "text/json"])
|
|
812
|
-
self.assertEqual(result[1], dict(charset
|
|
906
|
+
self.assertEqual(result[1], dict(charset="utf-8"))
|
|
813
907
|
|
|
814
|
-
result = appier.parse_content_type(
|
|
908
|
+
result = appier.parse_content_type(
|
|
909
|
+
"text/plain+json; charset=utf-8; boundary=hello;"
|
|
910
|
+
)
|
|
815
911
|
self.assertEqual(type(result), tuple)
|
|
816
912
|
self.assertEqual(len(result), 2)
|
|
817
913
|
self.assertEqual(result[0], ["text/plain", "text/json"])
|
|
818
|
-
self.assertEqual(result[1], dict(charset
|
|
914
|
+
self.assertEqual(result[1], dict(charset="utf-8", boundary="hello"))
|
|
819
915
|
|
|
820
916
|
result = appier.parse_content_type("")
|
|
821
917
|
self.assertEqual(type(result), tuple)
|
|
@@ -836,143 +932,104 @@ class UtilTest(unittest.TestCase):
|
|
|
836
932
|
self.assertEqual(result[1], dict())
|
|
837
933
|
|
|
838
934
|
def test_check_login(self):
|
|
839
|
-
request = appier.Request("GET", "/", session_c
|
|
935
|
+
request = appier.Request("GET", "/", session_c=appier.MemorySession)
|
|
840
936
|
|
|
841
937
|
request.session["tokens"] = ["*"]
|
|
842
|
-
result = appier.check_login(None, token
|
|
938
|
+
result = appier.check_login(None, token="admin", request=request)
|
|
843
939
|
self.assertEqual(result, True)
|
|
844
|
-
self.assertEqual(request.session["tokens"], {"*"
|
|
940
|
+
self.assertEqual(request.session["tokens"], {"*": True})
|
|
845
941
|
|
|
846
942
|
request.session["tokens"] = []
|
|
847
|
-
result = appier.check_login(None, token
|
|
943
|
+
result = appier.check_login(None, token="admin", request=request)
|
|
848
944
|
self.assertEqual(result, False)
|
|
849
945
|
self.assertEqual(request.session["tokens"], {})
|
|
850
946
|
|
|
851
947
|
request.session["tokens"] = ["admin"]
|
|
852
|
-
result = appier.check_login(None, token
|
|
948
|
+
result = appier.check_login(None, token="admin", request=request)
|
|
853
949
|
self.assertEqual(result, True)
|
|
854
|
-
self.assertEqual(request.session["tokens"], {"admin"
|
|
950
|
+
self.assertEqual(request.session["tokens"], {"admin": True})
|
|
855
951
|
|
|
856
952
|
request.session["tokens"] = ["admin.read"]
|
|
857
|
-
result = appier.check_login(None, token
|
|
953
|
+
result = appier.check_login(None, token="admin", request=request)
|
|
858
954
|
self.assertEqual(result, False)
|
|
859
|
-
result = appier.check_login(None, token
|
|
955
|
+
result = appier.check_login(None, token="admin.read", request=request)
|
|
860
956
|
self.assertEqual(result, True)
|
|
861
|
-
self.assertEqual(request.session["tokens"], {
|
|
862
|
-
"admin" : {
|
|
863
|
-
"read" : True
|
|
864
|
-
}
|
|
865
|
-
})
|
|
957
|
+
self.assertEqual(request.session["tokens"], {"admin": {"read": True}})
|
|
866
958
|
|
|
867
959
|
request.session["tokens"] = ["admin.*"]
|
|
868
|
-
result = appier.check_login(None, token
|
|
960
|
+
result = appier.check_login(None, token="admin.read", request=request)
|
|
869
961
|
self.assertEqual(result, True)
|
|
870
|
-
self.assertEqual(request.session["tokens"], {
|
|
871
|
-
"admin" : {
|
|
872
|
-
"*" : True
|
|
873
|
-
}
|
|
874
|
-
})
|
|
962
|
+
self.assertEqual(request.session["tokens"], {"admin": {"*": True}})
|
|
875
963
|
|
|
876
964
|
request.session["tokens"] = ["admin", "admin.write"]
|
|
877
|
-
result = appier.check_login(None, token
|
|
965
|
+
result = appier.check_login(None, token="admin.read", request=request)
|
|
878
966
|
self.assertEqual(result, False)
|
|
879
|
-
self.assertEqual(
|
|
880
|
-
"admin" :
|
|
881
|
-
|
|
882
|
-
"write" : True
|
|
883
|
-
}
|
|
884
|
-
})
|
|
967
|
+
self.assertEqual(
|
|
968
|
+
request.session["tokens"], {"admin": {"_": True, "write": True}}
|
|
969
|
+
)
|
|
885
970
|
|
|
886
971
|
request.session["tokens"] = ["admin.write", "admin.*"]
|
|
887
|
-
result = appier.check_login(None, token
|
|
972
|
+
result = appier.check_login(None, token="admin.read", request=request)
|
|
888
973
|
self.assertEqual(result, True)
|
|
889
|
-
self.assertEqual(
|
|
890
|
-
"admin" :
|
|
891
|
-
|
|
892
|
-
"*" : True
|
|
893
|
-
}
|
|
894
|
-
})
|
|
974
|
+
self.assertEqual(
|
|
975
|
+
request.session["tokens"], {"admin": {"write": True, "*": True}}
|
|
976
|
+
)
|
|
895
977
|
|
|
896
978
|
del request.session["tokens"]
|
|
897
|
-
result = appier.check_login(None, token
|
|
979
|
+
result = appier.check_login(None, token="admin.read", request=request)
|
|
898
980
|
self.assertEqual(result, False)
|
|
899
981
|
self.assertEqual("tokens" in request.session, False)
|
|
900
982
|
|
|
901
983
|
def test_check_tokens(self):
|
|
902
|
-
result = appier.check_tokens(None, ("admin", "user"), tokens_m
|
|
984
|
+
result = appier.check_tokens(None, ("admin", "user"), tokens_m={"*": True})
|
|
903
985
|
self.assertEqual(result, True)
|
|
904
986
|
|
|
905
|
-
result = appier.check_tokens(None, ("admin", "user"), tokens_m
|
|
987
|
+
result = appier.check_tokens(None, ("admin", "user"), tokens_m={})
|
|
906
988
|
self.assertEqual(result, False)
|
|
907
989
|
|
|
908
|
-
result = appier.check_tokens(None, ("admin", "user"), tokens_m
|
|
990
|
+
result = appier.check_tokens(None, ("admin", "user"), tokens_m={"admin": True})
|
|
909
991
|
self.assertEqual(result, False)
|
|
910
992
|
|
|
911
993
|
def test_check_token(self):
|
|
912
|
-
result = appier.check_token(None, "admin", tokens_m
|
|
994
|
+
result = appier.check_token(None, "admin", tokens_m={"*": True})
|
|
913
995
|
self.assertEqual(result, True)
|
|
914
996
|
|
|
915
|
-
result = appier.check_token(None, "admin", tokens_m
|
|
997
|
+
result = appier.check_token(None, "admin", tokens_m={})
|
|
916
998
|
self.assertEqual(result, False)
|
|
917
999
|
|
|
918
|
-
result = appier.check_token(None, "admin", tokens_m
|
|
1000
|
+
result = appier.check_token(None, "admin", tokens_m={"admin": True})
|
|
919
1001
|
self.assertEqual(result, True)
|
|
920
1002
|
|
|
921
|
-
result = appier.check_token(
|
|
922
|
-
"admin" : {
|
|
923
|
-
|
|
924
|
-
}
|
|
925
|
-
})
|
|
1003
|
+
result = appier.check_token(
|
|
1004
|
+
None, "admin.read", tokens_m={"admin": {"read": True}}
|
|
1005
|
+
)
|
|
926
1006
|
self.assertEqual(result, True)
|
|
927
1007
|
|
|
928
|
-
result = appier.check_token(None, "admin", tokens_m
|
|
929
|
-
"admin" : {
|
|
930
|
-
"read" : True
|
|
931
|
-
}
|
|
932
|
-
})
|
|
1008
|
+
result = appier.check_token(None, "admin", tokens_m={"admin": {"read": True}})
|
|
933
1009
|
self.assertEqual(result, False)
|
|
934
1010
|
|
|
935
|
-
result = appier.check_token(None, "admin.read", tokens_m
|
|
936
|
-
"admin" : {
|
|
937
|
-
"*" : True
|
|
938
|
-
}
|
|
939
|
-
})
|
|
1011
|
+
result = appier.check_token(None, "admin.read", tokens_m={"admin": {"*": True}})
|
|
940
1012
|
self.assertEqual(result, True)
|
|
941
1013
|
|
|
942
|
-
result = appier.check_token(None, None, tokens_m
|
|
1014
|
+
result = appier.check_token(None, None, tokens_m={})
|
|
943
1015
|
self.assertEqual(result, True)
|
|
944
1016
|
|
|
945
1017
|
def test_to_tokens_m(self):
|
|
946
1018
|
result = appier.to_tokens_m(["admin"])
|
|
947
|
-
self.assertEqual(result, {"admin"
|
|
1019
|
+
self.assertEqual(result, {"admin": True})
|
|
948
1020
|
|
|
949
1021
|
result = appier.to_tokens_m(["admin", "admin.read"])
|
|
950
|
-
self.assertEqual(result, {
|
|
951
|
-
"admin" : {
|
|
952
|
-
"_" : True,
|
|
953
|
-
"read" : True
|
|
954
|
-
}
|
|
955
|
-
})
|
|
1022
|
+
self.assertEqual(result, {"admin": {"_": True, "read": True}})
|
|
956
1023
|
|
|
957
1024
|
result = appier.to_tokens_m(["admin.read", "admin"])
|
|
958
|
-
self.assertEqual(result, {
|
|
959
|
-
"admin" : {
|
|
960
|
-
"_" : True,
|
|
961
|
-
"read" : True
|
|
962
|
-
}
|
|
963
|
-
})
|
|
1025
|
+
self.assertEqual(result, {"admin": {"_": True, "read": True}})
|
|
964
1026
|
|
|
965
1027
|
result = appier.to_tokens_m(["admin", "admin.*"])
|
|
966
|
-
self.assertEqual(result, {
|
|
967
|
-
"admin" : {
|
|
968
|
-
"_" : True,
|
|
969
|
-
"*" : True
|
|
970
|
-
}
|
|
971
|
-
})
|
|
1028
|
+
self.assertEqual(result, {"admin": {"_": True, "*": True}})
|
|
972
1029
|
|
|
973
1030
|
def test_dict_merge(self):
|
|
974
|
-
first = dict(a
|
|
975
|
-
second = dict(a
|
|
1031
|
+
first = dict(a="hello", b="world")
|
|
1032
|
+
second = dict(a="hello_new", b="world_new", c="other")
|
|
976
1033
|
|
|
977
1034
|
result = appier.dict_merge(first, second)
|
|
978
1035
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
@@ -980,99 +1037,87 @@ class UtilTest(unittest.TestCase):
|
|
|
980
1037
|
self.assertEqual(result["b"], "world_new")
|
|
981
1038
|
self.assertEqual(result["c"], "other")
|
|
982
1039
|
|
|
983
|
-
result = appier.dict_merge(first, second, override
|
|
1040
|
+
result = appier.dict_merge(first, second, override=False)
|
|
984
1041
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
985
1042
|
self.assertEqual(result["a"], "hello")
|
|
986
1043
|
self.assertEqual(result["b"], "world")
|
|
987
1044
|
self.assertEqual(result["c"], "other")
|
|
988
1045
|
|
|
989
|
-
first = dict(a
|
|
990
|
-
second = dict(
|
|
1046
|
+
first = dict(a=dict(a="hello", b="world", d="other", m=dict(a="hello")))
|
|
1047
|
+
second = dict(
|
|
1048
|
+
a=dict(a="hello_new", b="world_new", c="other", m=dict(b="world"))
|
|
1049
|
+
)
|
|
991
1050
|
|
|
992
1051
|
result = appier.dict_merge(first, second)
|
|
993
1052
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
994
|
-
self.assertEqual(
|
|
995
|
-
a
|
|
996
|
-
b = "
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
)
|
|
1000
|
-
|
|
1001
|
-
result = appier.dict_merge(first, second, recursive = True)
|
|
1053
|
+
self.assertEqual(
|
|
1054
|
+
result["a"],
|
|
1055
|
+
dict(a="hello_new", b="world_new", c="other", m=dict(b="world")),
|
|
1056
|
+
)
|
|
1057
|
+
|
|
1058
|
+
result = appier.dict_merge(first, second, recursive=True)
|
|
1002
1059
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
1003
|
-
self.assertEqual(
|
|
1004
|
-
a
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
b
|
|
1011
|
-
)
|
|
1012
|
-
)
|
|
1013
|
-
|
|
1014
|
-
result = appier.dict_merge(first, second, override
|
|
1060
|
+
self.assertEqual(
|
|
1061
|
+
result["a"],
|
|
1062
|
+
dict(
|
|
1063
|
+
a="hello_new",
|
|
1064
|
+
b="world_new",
|
|
1065
|
+
c="other",
|
|
1066
|
+
d="other",
|
|
1067
|
+
m=dict(a="hello", b="world"),
|
|
1068
|
+
),
|
|
1069
|
+
)
|
|
1070
|
+
|
|
1071
|
+
result = appier.dict_merge(first, second, override=False, recursive=True)
|
|
1015
1072
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
1016
|
-
self.assertEqual(
|
|
1017
|
-
a
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
a = "hello",
|
|
1023
|
-
b = "world"
|
|
1024
|
-
)
|
|
1025
|
-
))
|
|
1073
|
+
self.assertEqual(
|
|
1074
|
+
result["a"],
|
|
1075
|
+
dict(
|
|
1076
|
+
a="hello", b="world", c="other", d="other", m=dict(a="hello", b="world")
|
|
1077
|
+
),
|
|
1078
|
+
)
|
|
1026
1079
|
|
|
1027
1080
|
first = {
|
|
1028
|
-
"info"
|
|
1029
|
-
"personal"
|
|
1030
|
-
"general"
|
|
1031
|
-
"kind"
|
|
1081
|
+
"info": {
|
|
1082
|
+
"personal": {
|
|
1083
|
+
"general": {
|
|
1084
|
+
"kind": "human",
|
|
1032
1085
|
}
|
|
1033
1086
|
}
|
|
1034
1087
|
}
|
|
1035
1088
|
}
|
|
1036
1089
|
second = {
|
|
1037
|
-
"info"
|
|
1038
|
-
"personal" : {
|
|
1039
|
-
|
|
1040
|
-
"kind" : "cat",
|
|
1041
|
-
"tail" : "long",
|
|
1042
|
-
"meaw" : 12
|
|
1043
|
-
}
|
|
1044
|
-
},
|
|
1045
|
-
"profile": "base"
|
|
1090
|
+
"info": {
|
|
1091
|
+
"personal": {"general": {"kind": "cat", "tail": "long", "meaw": 12}},
|
|
1092
|
+
"profile": "base",
|
|
1046
1093
|
}
|
|
1047
1094
|
}
|
|
1048
1095
|
|
|
1049
|
-
result = appier.dict_merge(first, second, override
|
|
1096
|
+
result = appier.dict_merge(first, second, override=False, recursive=True)
|
|
1050
1097
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
1051
|
-
self.assertEqual(
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
"
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
})
|
|
1098
|
+
self.assertEqual(
|
|
1099
|
+
result,
|
|
1100
|
+
{
|
|
1101
|
+
"info": {
|
|
1102
|
+
"personal": {
|
|
1103
|
+
"general": {"kind": "human", "tail": "long", "meaw": 12}
|
|
1104
|
+
},
|
|
1105
|
+
"profile": "base",
|
|
1106
|
+
}
|
|
1107
|
+
},
|
|
1108
|
+
)
|
|
1063
1109
|
|
|
1064
|
-
result = appier.dict_merge(
|
|
1110
|
+
result = appier.dict_merge(
|
|
1111
|
+
first["info"], second["info"], override=False, recursive=True
|
|
1112
|
+
)
|
|
1065
1113
|
self.assertEqual(id(result) in (id(first), (id(second))), False)
|
|
1066
|
-
self.assertEqual(
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
"meaw" : 12
|
|
1072
|
-
}
|
|
1114
|
+
self.assertEqual(
|
|
1115
|
+
result,
|
|
1116
|
+
{
|
|
1117
|
+
"personal": {"general": {"kind": "human", "tail": "long", "meaw": 12}},
|
|
1118
|
+
"profile": "base",
|
|
1073
1119
|
},
|
|
1074
|
-
|
|
1075
|
-
})
|
|
1120
|
+
)
|
|
1076
1121
|
|
|
1077
1122
|
def test_verify(self):
|
|
1078
1123
|
result = appier.verify(1 == 1)
|
|
@@ -1085,7 +1130,7 @@ class UtilTest(unittest.TestCase):
|
|
|
1085
1130
|
|
|
1086
1131
|
self.assertRaises(
|
|
1087
1132
|
appier.OperationalError,
|
|
1088
|
-
lambda: appier.verify(1 == 2, exception
|
|
1133
|
+
lambda: appier.verify(1 == 2, exception=appier.OperationalError),
|
|
1089
1134
|
)
|
|
1090
1135
|
|
|
1091
1136
|
def test_verify_equal(self):
|
|
@@ -1099,7 +1144,7 @@ class UtilTest(unittest.TestCase):
|
|
|
1099
1144
|
|
|
1100
1145
|
self.assertRaises(
|
|
1101
1146
|
appier.OperationalError,
|
|
1102
|
-
lambda: appier.verify_equal(1, 2, exception
|
|
1147
|
+
lambda: appier.verify_equal(1, 2, exception=appier.OperationalError),
|
|
1103
1148
|
)
|
|
1104
1149
|
|
|
1105
1150
|
def test_verify_not_equal(self):
|
|
@@ -1113,7 +1158,7 @@ class UtilTest(unittest.TestCase):
|
|
|
1113
1158
|
|
|
1114
1159
|
self.assertRaises(
|
|
1115
1160
|
appier.OperationalError,
|
|
1116
|
-
lambda: appier.verify_not_equal(1, 1, exception
|
|
1161
|
+
lambda: appier.verify_not_equal(1, 1, exception=appier.OperationalError),
|
|
1117
1162
|
)
|
|
1118
1163
|
|
|
1119
1164
|
def test_verify_type(self):
|
|
@@ -1130,14 +1175,18 @@ class UtilTest(unittest.TestCase):
|
|
|
1130
1175
|
|
|
1131
1176
|
self.assertRaises(
|
|
1132
1177
|
appier.OperationalError,
|
|
1133
|
-
lambda: appier.verify_type(1, str, exception
|
|
1178
|
+
lambda: appier.verify_type(1, str, exception=appier.OperationalError),
|
|
1134
1179
|
)
|
|
1135
1180
|
|
|
1136
|
-
self.assertRaises(
|
|
1181
|
+
self.assertRaises(
|
|
1182
|
+
appier.AssertionError, lambda: appier.verify_type(None, str, null=False)
|
|
1183
|
+
)
|
|
1137
1184
|
|
|
1138
1185
|
self.assertRaises(
|
|
1139
1186
|
appier.OperationalError,
|
|
1140
|
-
lambda: appier.verify_type(
|
|
1187
|
+
lambda: appier.verify_type(
|
|
1188
|
+
None, str, null=False, exception=appier.OperationalError
|
|
1189
|
+
),
|
|
1141
1190
|
)
|
|
1142
1191
|
|
|
1143
1192
|
def test_verify_many(self):
|
|
@@ -1149,23 +1198,22 @@ class UtilTest(unittest.TestCase):
|
|
|
1149
1198
|
|
|
1150
1199
|
self.assertRaises(appier.AssertionError, lambda: appier.verify_many((1 == 2,)))
|
|
1151
1200
|
|
|
1152
|
-
self.assertRaises(
|
|
1201
|
+
self.assertRaises(
|
|
1202
|
+
appier.AssertionError, lambda: appier.verify_many((1 == 1, 1 == 2))
|
|
1203
|
+
)
|
|
1153
1204
|
|
|
1154
1205
|
self.assertRaises(
|
|
1155
1206
|
appier.OperationalError,
|
|
1156
1207
|
lambda: appier.verify_many(
|
|
1157
|
-
(1 == 1, 1 == 2),
|
|
1158
|
-
|
|
1159
|
-
)
|
|
1208
|
+
(1 == 1, 1 == 2), exception=appier.OperationalError
|
|
1209
|
+
),
|
|
1160
1210
|
)
|
|
1161
1211
|
|
|
1162
|
-
class FileTupleTest(unittest.TestCase):
|
|
1163
1212
|
|
|
1213
|
+
class FileTupleTest(unittest.TestCase):
|
|
1164
1214
|
def test_basic(self):
|
|
1165
1215
|
file = appier.FileTuple.from_data(
|
|
1166
|
-
b"hello world",
|
|
1167
|
-
name = "hello",
|
|
1168
|
-
mime = "text/plain"
|
|
1216
|
+
b"hello world", name="hello", mime="text/plain"
|
|
1169
1217
|
)
|
|
1170
1218
|
|
|
1171
1219
|
self.assertEqual(file.read(), b"hello world")
|
|
@@ -1175,9 +1223,7 @@ class FileTupleTest(unittest.TestCase):
|
|
|
1175
1223
|
|
|
1176
1224
|
def test_interface(self):
|
|
1177
1225
|
file = appier.FileTuple.from_data(
|
|
1178
|
-
b"hello world",
|
|
1179
|
-
name = "hello",
|
|
1180
|
-
mime = "text/plain"
|
|
1226
|
+
b"hello world", name="hello", mime="text/plain"
|
|
1181
1227
|
)
|
|
1182
1228
|
|
|
1183
1229
|
self.assertEqual(file.read(), b"hello world")
|
|
@@ -1190,13 +1236,9 @@ class FileTupleTest(unittest.TestCase):
|
|
|
1190
1236
|
self.assertEqual(file.read(5), b"hello")
|
|
1191
1237
|
self.assertEqual(file.tell(), 5)
|
|
1192
1238
|
|
|
1193
|
-
class BaseThreadTest(unittest.TestCase):
|
|
1194
1239
|
|
|
1240
|
+
class BaseThreadTest(unittest.TestCase):
|
|
1195
1241
|
def test_basic(self):
|
|
1196
|
-
thread = appier.BaseThread(
|
|
1197
|
-
args = (),
|
|
1198
|
-
daemon = True,
|
|
1199
|
-
name = "Test"
|
|
1200
|
-
)
|
|
1242
|
+
thread = appier.BaseThread(args=(), daemon=True, name="Test")
|
|
1201
1243
|
|
|
1202
1244
|
self.assertEqual(thread.name, "Test")
|