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.
Files changed (81) hide show
  1. appier/__init__.py +333 -52
  2. appier/amqp.py +29 -30
  3. appier/api.py +214 -212
  4. appier/asgi.py +54 -55
  5. appier/async_neo.py +46 -35
  6. appier/async_old.py +55 -42
  7. appier/asynchronous.py +7 -13
  8. appier/base.py +1762 -1429
  9. appier/bus.py +51 -52
  10. appier/cache.py +99 -84
  11. appier/common.py +9 -11
  12. appier/component.py +17 -19
  13. appier/compress.py +25 -28
  14. appier/config.py +96 -73
  15. appier/controller.py +9 -15
  16. appier/crypt.py +25 -21
  17. appier/data.py +73 -57
  18. appier/defines.py +191 -226
  19. appier/exceptions.py +103 -63
  20. appier/execution.py +94 -88
  21. appier/export.py +90 -88
  22. appier/extra.py +6 -13
  23. appier/extra_neo.py +8 -11
  24. appier/extra_old.py +18 -16
  25. appier/geo.py +57 -47
  26. appier/git.py +101 -90
  27. appier/graph.py +23 -24
  28. appier/http.py +520 -398
  29. appier/legacy.py +373 -180
  30. appier/log.py +90 -97
  31. appier/meta.py +42 -42
  32. appier/mock.py +32 -34
  33. appier/model.py +793 -681
  34. appier/model_a.py +208 -183
  35. appier/mongo.py +183 -107
  36. appier/observer.py +39 -31
  37. appier/part.py +23 -24
  38. appier/preferences.py +44 -47
  39. appier/queuing.py +78 -96
  40. appier/redisdb.py +40 -35
  41. appier/request.py +227 -175
  42. appier/scheduler.py +13 -18
  43. appier/serialize.py +37 -31
  44. appier/session.py +161 -147
  45. appier/settings.py +2 -11
  46. appier/smtp.py +53 -49
  47. appier/storage.py +39 -33
  48. appier/structures.py +50 -45
  49. appier/test/__init__.py +2 -11
  50. appier/test/base.py +111 -108
  51. appier/test/cache.py +28 -35
  52. appier/test/config.py +10 -19
  53. appier/test/crypt.py +3 -12
  54. appier/test/data.py +3 -12
  55. appier/test/exceptions.py +8 -17
  56. appier/test/export.py +16 -33
  57. appier/test/graph.py +27 -60
  58. appier/test/http.py +42 -54
  59. appier/test/legacy.py +20 -30
  60. appier/test/log.py +14 -35
  61. appier/test/mock.py +27 -123
  62. appier/test/model.py +79 -91
  63. appier/test/part.py +5 -14
  64. appier/test/preferences.py +5 -13
  65. appier/test/queuing.py +29 -37
  66. appier/test/request.py +61 -73
  67. appier/test/serialize.py +12 -23
  68. appier/test/session.py +10 -19
  69. appier/test/smtp.py +8 -14
  70. appier/test/structures.py +20 -24
  71. appier/test/typesf.py +14 -28
  72. appier/test/util.py +480 -438
  73. appier/typesf.py +251 -171
  74. appier/util.py +578 -407
  75. appier/validation.py +280 -143
  76. {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/METADATA +6 -1
  77. appier-1.32.0.dist-info/RECORD +86 -0
  78. appier-1.31.4.dist-info/RECORD +0 -86
  79. {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/LICENSE +0 -0
  80. {appier-1.31.4.dist-info → appier-1.32.0.dist-info}/WHEEL +0 -0
  81. {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-2022 Hive Solutions Lda.
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
- __version__ = "1.0.0"
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("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")
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("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")
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("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")
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("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")
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("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36")
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("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")
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("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")
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("Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329")
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("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")
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("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")
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("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")
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("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")
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("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36")
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("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")
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("Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329")
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("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")
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("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")
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("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")
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("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")
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("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36")
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("Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136")
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("DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)")
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("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")
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("Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329")
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("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")
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("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")
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("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")
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("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")
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("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36")
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("Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136")
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("DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)")
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("Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136")
188
- self.assertEqual(result, dict(
189
- name = "Edge",
190
- version = "12.10136",
191
- version_f = 12.10136,
192
- version_i = 12,
193
- interactive = True,
194
- bot = False,
195
- os = "Windows"
196
- ))
197
-
198
- result = appier.browser_info("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36")
199
- self.assertEqual(result, dict(
200
- name = "Chrome",
201
- version = "62.0.3202.75",
202
- version_f = 62.0,
203
- version_i = 62,
204
- interactive = True,
205
- bot = False,
206
- os = "Windows"
207
- ))
208
-
209
- result = appier.browser_info("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")
210
- self.assertEqual(result, dict(
211
- name = "Safari",
212
- version = "601.1",
213
- version_f = 601.1,
214
- version_i = 601,
215
- interactive = True,
216
- bot = False,
217
- os = "Mac"
218
- ))
219
-
220
- result = appier.browser_info("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0")
221
- self.assertEqual(result, dict(
222
- name = "Firefox",
223
- version = "56.0",
224
- version_f = 56.0,
225
- version_i = 56,
226
- interactive = True,
227
- bot = False,
228
- os = "Windows"
229
- ))
230
-
231
- result = appier.browser_info("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)")
232
- self.assertEqual(result, dict(
233
- name = "Explorer",
234
- version = "8.0",
235
- version_f = 8.0,
236
- version_i = 8,
237
- interactive = True,
238
- bot = False,
239
- os = "Windows"
240
- ))
241
-
242
- result = appier.browser_info("Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
243
- self.assertEqual(result, dict(
244
- name = "Googlebot",
245
- version = "2.1",
246
- version_f = 2.1,
247
- version_i = 2,
248
- interactive = False,
249
- bot = True
250
- ))
251
-
252
- result = appier.browser_info("Mozilla/5.0 (compatible; Bingbot/2.0; +http://www.bing.com/bingbot.htm)")
253
- self.assertEqual(result, dict(
254
- name = "Bingbot",
255
- version = "2.0",
256
- version_f = 2.0,
257
- version_i = 2,
258
- interactive = False,
259
- bot = True
260
- ))
261
-
262
- result = appier.browser_info("DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)")
263
- self.assertEqual(result, dict(
264
- name = "DuckDuckBot",
265
- version = "1.0",
266
- version_f = 1.0,
267
- version_i = 1,
268
- interactive = False,
269
- bot = True
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(result, dict(
274
- name = "netius",
275
- version = "1.1.10",
276
- version_f = 1.1,
277
- version_i = 1,
278
- interactive = False,
279
- bot = False
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(result, dict(
284
- name = "netius",
285
- version = "1.1b",
286
- version_f = 0,
287
- version_i = 0,
288
- interactive = False,
289
- bot = False
290
- ))
291
-
292
- result = appier.browser_info("APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)")
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 = 6)
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 = 100)
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 = 6, token = "-")
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 = 3)
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(appier.legacy.u("João Magalhães <joamag@hive.pt>"))
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(result, "=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>")
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(result, appier.legacy.u("=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>"))
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
- appier.legacy.u("João Magalhães <joamag@hive.pt>"),
354
- appier.legacy.u(" joamag@hive.pt "),
355
- None
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(result, [
359
- appier.legacy.u("=?utf-8?q?Jo=C3=A3o_Magalh=C3=A3es?= <joamag@hive.pt>"),
360
- appier.legacy.u("joamag@hive.pt <joamag@hive.pt>")
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
- appier.legacy.u("joamag@hive.pt"),
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(result, [
389
- appier.legacy.u("joamag@hive.pt"),
390
- appier.legacy.u("joamag@hive.pt")
391
- ])
392
-
393
- result = appier.email_name([
394
- appier.legacy.u("joamag"),
395
- appier.legacy.u("joamag@hive.pt"),
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
- appier.legacy.u("joamag@hive.pt")
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
- appier.legacy.u("joamag@hive.pt"),
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(result, [
442
- appier.legacy.u("joamag@hive.pt"),
443
- appier.legacy.u("joamag@hive.pt")
444
- ])
445
-
446
- result = appier.email_base([
447
- appier.legacy.u("joamag"),
448
- appier.legacy.u("joamag@hive.pt"),
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
- appier.legacy.u("joamag@hive.pt")
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
- appier.legacy.u(""),
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 = "%Y-%m-%d")
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 = "%Y-%m-%d")
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(): raise appier.OperationalError(message = "hello")
581
+ def raiser():
582
+ raise appier.OperationalError(message="hello")
583
+
485
584
  struct = appier.lazy_dict(
486
- first = appier.lazy(lambda: raiser()),
487
- second = appier.lazy(lambda: 2),
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 = ["hello"]))
590
+ self.assertEqual(errors, dict(first=["hello"]))
492
591
 
493
- struct.__getitem__("first", force = True)._value = 1
592
+ struct.__getitem__("first", force=True)._value = 1
494
593
 
495
594
  errors = appier.gather_errors(struct)
496
- self.assertEqual(errors, dict(first = ["hello"]))
595
+ self.assertEqual(errors, dict(first=["hello"]))
497
596
 
498
- struct.__getitem__("first", force = True)._value = 1
597
+ struct.__getitem__("first", force=True)._value = 1
499
598
 
500
- errors = appier.gather_errors(struct, resolve = False)
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 = True)
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 = True, capitalize = True)
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 = True)
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 = True)
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 = True)
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 = True)
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 = True)
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 = True)
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 = True)
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 = True)
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 = True)
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("hello_world_hello_world", capitalize = True)
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 = True)
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 = True)
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 = True)
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("__hello___world__", capitalize = True, separator = "-")
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 = 2)
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 = "$", unescape = True)
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 = "$", unescape = False)
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 = "$", unescape = True)
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 = True)
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 = True)
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 = "utf-8"))
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 = "utf-8"))
906
+ self.assertEqual(result[1], dict(charset="utf-8"))
813
907
 
814
- result = appier.parse_content_type("text/plain+json; charset=utf-8; boundary=hello;")
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 = "utf-8", boundary = "hello"))
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 = appier.MemorySession)
935
+ request = appier.Request("GET", "/", session_c=appier.MemorySession)
840
936
 
841
937
  request.session["tokens"] = ["*"]
842
- result = appier.check_login(None, token = "admin", request = request)
938
+ result = appier.check_login(None, token="admin", request=request)
843
939
  self.assertEqual(result, True)
844
- self.assertEqual(request.session["tokens"], {"*" : True})
940
+ self.assertEqual(request.session["tokens"], {"*": True})
845
941
 
846
942
  request.session["tokens"] = []
847
- result = appier.check_login(None, token = "admin", request = request)
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 = "admin", request = request)
948
+ result = appier.check_login(None, token="admin", request=request)
853
949
  self.assertEqual(result, True)
854
- self.assertEqual(request.session["tokens"], {"admin" : True})
950
+ self.assertEqual(request.session["tokens"], {"admin": True})
855
951
 
856
952
  request.session["tokens"] = ["admin.read"]
857
- result = appier.check_login(None, token = "admin", request = request)
953
+ result = appier.check_login(None, token="admin", request=request)
858
954
  self.assertEqual(result, False)
859
- result = appier.check_login(None, token = "admin.read", request = request)
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 = "admin.read", request = request)
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 = "admin.read", request = request)
965
+ result = appier.check_login(None, token="admin.read", request=request)
878
966
  self.assertEqual(result, False)
879
- self.assertEqual(request.session["tokens"], {
880
- "admin" : {
881
- "_" : True,
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 = "admin.read", request = request)
972
+ result = appier.check_login(None, token="admin.read", request=request)
888
973
  self.assertEqual(result, True)
889
- self.assertEqual(request.session["tokens"], {
890
- "admin" : {
891
- "write" : True,
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 = "admin.read", request = request)
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 = {"*" : True})
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 = {"admin" : True})
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 = {"*" : True})
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 = {"admin" : True})
1000
+ result = appier.check_token(None, "admin", tokens_m={"admin": True})
919
1001
  self.assertEqual(result, True)
920
1002
 
921
- result = appier.check_token(None, "admin.read", tokens_m = {
922
- "admin" : {
923
- "read" : True
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" : True})
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 = "hello", b = "world")
975
- second = dict(a = "hello_new", b = "world_new", c = "other")
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 = False)
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 = dict(a = "hello", b = "world", d = "other", m = dict(a = "hello")))
990
- second = dict(a = dict(a = "hello_new", b = "world_new", c = "other", m = dict(b = "world")))
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(result["a"], dict(
995
- a = "hello_new",
996
- b = "world_new",
997
- c = "other",
998
- m = dict(b = "world")
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(result["a"], dict(
1004
- a = "hello_new",
1005
- b = "world_new",
1006
- c = "other",
1007
- d = "other",
1008
- m = dict(
1009
- a = "hello",
1010
- b = "world"
1011
- )
1012
- ))
1013
-
1014
- result = appier.dict_merge(first, second, override = False, recursive = True)
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(result["a"], dict(
1017
- a = "hello",
1018
- b = "world",
1019
- c = "other",
1020
- d = "other",
1021
- m = dict(
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" : "human",
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
- "general": {
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 = False, recursive = True)
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(result, {
1052
- "info" : {
1053
- "personal" : {
1054
- "general" : {
1055
- "kind" : "human",
1056
- "tail" : "long",
1057
- "meaw" : 12
1058
- }
1059
- },
1060
- "profile": "base"
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(first["info"], second["info"], override = False, recursive = True)
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(result, {
1067
- "personal": {
1068
- "general": {
1069
- "kind" : "human",
1070
- "tail" : "long",
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
- "profile": "base"
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 = appier.OperationalError)
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 = appier.OperationalError)
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 = appier.OperationalError)
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 = appier.OperationalError)
1178
+ lambda: appier.verify_type(1, str, exception=appier.OperationalError),
1134
1179
  )
1135
1180
 
1136
- self.assertRaises(appier.AssertionError, lambda: appier.verify_type(None, str, null = False))
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(None, str, null = False, exception = appier.OperationalError)
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(appier.AssertionError, lambda: appier.verify_many((1 == 1, 1 == 2)))
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
- exception = appier.OperationalError
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")