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/defines.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"
@@ -47,19 +38,28 @@ ITERABLES = (list, tuple)
47
38
  """ The tuple that defined the various base types
48
39
  that are considered to be generally "iterable" """
49
40
 
50
- MOBILE_REGEX = re.compile(r"(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", re.I | re.M) #@UndefinedVariable
41
+ MOBILE_REGEX = re.compile(
42
+ r"(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino",
43
+ re.I | re.M,
44
+ ) # @UndefinedVariable
51
45
  """ The regular expression that is going to be used
52
46
  to validate the complete user agent string for mobile """
53
47
 
54
- TABLET_REGEX = re.compile(r"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk", re.I | re.M) #@UndefinedVariable
48
+ TABLET_REGEX = re.compile(
49
+ r"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk",
50
+ re.I | re.M,
51
+ ) # @UndefinedVariable
55
52
  """ The regular expression that is going to be used
56
53
  to validate the complete user agent string for tablet """
57
54
 
58
- MOBILE_PREFIX_REGEX = re.compile(r"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-", re.I | re.M) #@UndefinedVariable
55
+ MOBILE_PREFIX_REGEX = re.compile(
56
+ r"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-",
57
+ re.I | re.M,
58
+ ) # @UndefinedVariable
59
59
  """ The regular expression to test the base prefix
60
60
  of the user agent string for mobile browser """
61
61
 
62
- BODY_REGEX = re.compile(r"<body[^<>]*?>(.*?)</body>", re.I) #@UndefinedVariable
62
+ BODY_REGEX = re.compile(r"<body[^<>]*?>(.*?)</body>", re.I) # @UndefinedVariable
63
63
  """ Regular expression that is going to be used in the matching
64
64
  of the partial contents (child) nodes of a body HTML node """
65
65
 
@@ -69,230 +69,195 @@ of an html/xml based node in the HTML to plain text conversion """
69
69
 
70
70
  EMAIL_REGEX = re.compile(
71
71
  r"((?P<name>^.+) \<(?P<email_a>[\w\d\._%+-]+@[\w\d\.\-]+)\>)|(?P<email_b>[\w\d\._%+-]+@[\w\d\.\-]+)$",
72
- flags = re.UNICODE #@UndefinedVariable
72
+ flags=re.UNICODE, # @UndefinedVariable
73
73
  )
74
74
  """ The regular expression that is going to be used
75
75
  in the matching of email lines, it supports both the
76
76
  extended (including name) and the simplified versions """
77
77
 
78
- BROWSER_INFO = [dict(
79
- identity = "Edge",
80
- sub_string = "Edge"
81
- ), dict(
82
- identity = "Chrome",
83
- sub_string = "Chrome"
84
- ), dict(
85
- identity = "Safari",
86
- sub_string = "Safari"
87
- ), dict(
88
- identity = "Opera"
89
- ), dict(
90
- identity = "Firefox",
91
- sub_string = "Firefox"
92
- ), dict(
93
- identity = "Explorer",
94
- sub_string = "MSIE",
95
- version_search = "MSIE "
96
- ), dict(
97
- identity = "AppleWebKit",
98
- sub_string = "AppleWebKit"
99
- ), dict(
100
- identity = "Googlebot",
101
- sub_string = "Googlebot",
102
- interactive = False,
103
- bot = True
104
- ), dict(
105
- identity = "Bingbot",
106
- sub_string = "Bingbot",
107
- interactive = False,
108
- bot = True
109
- ), dict(
110
- identity = "DuckDuckBot",
111
- sub_string = "DuckDuckBot",
112
- interactive = False,
113
- bot = True
114
- ), dict(
115
- identity = "netius",
116
- sub_string = "netius",
117
- interactive = False
118
- )]
78
+ BROWSER_INFO = [
79
+ dict(identity="Edge", sub_string="Edge"),
80
+ dict(identity="Chrome", sub_string="Chrome"),
81
+ dict(identity="Safari", sub_string="Safari"),
82
+ dict(identity="Opera"),
83
+ dict(identity="Firefox", sub_string="Firefox"),
84
+ dict(identity="Explorer", sub_string="MSIE", version_search="MSIE "),
85
+ dict(identity="AppleWebKit", sub_string="AppleWebKit"),
86
+ dict(identity="Googlebot", sub_string="Googlebot", interactive=False, bot=True),
87
+ dict(identity="Bingbot", sub_string="Bingbot", interactive=False, bot=True),
88
+ dict(identity="DuckDuckBot", sub_string="DuckDuckBot", interactive=False, bot=True),
89
+ dict(identity="netius", sub_string="netius", interactive=False),
90
+ ]
119
91
  """ List that contains the complete information used
120
92
  for the parsing and identification of the browser information
121
93
  from a typical user agent string """
122
94
 
123
- OS_INFO = [dict(
124
- identity = "Windows",
125
- sub_string = "Win"
126
- ), dict(
127
- identity = "Mac",
128
- sub_string = "Mac"
129
- ), dict(
130
- identity = "iPhone/iPod",
131
- sub_string = "iPhone"
132
- ), dict(
133
- sub_string = "Linux",
134
- identity = "Linux"
135
- )]
95
+ OS_INFO = [
96
+ dict(identity="Windows", sub_string="Win"),
97
+ dict(identity="Mac", sub_string="Mac"),
98
+ dict(identity="iPhone/iPod", sub_string="iPhone"),
99
+ dict(sub_string="Linux", identity="Linux"),
100
+ ]
136
101
  """ List that contains the complete information used
137
102
  for the parsing and identification of the os information
138
103
  from a typical user agent string """
139
104
 
140
105
  WINDOWS_LOCALE = dict(
141
- af = "Afrikaans",
142
- sq = "Albanian",
143
- am = "Amharic",
144
- ar_DZ = "Arabic_Algeria",
145
- ar_BH = "Arabic_Bahrain",
146
- ar_EG = "Arabic_Egypt",
147
- ar_IQ = "Arabic_Iraq",
148
- ar_JO = "Arabic_Jordan",
149
- ar_KW = "Arabic_Kuwait",
150
- ar_LB = "Arabic_Lebanon",
151
- ar_LY = "Arabic_Libya",
152
- ar_MA = "Arabic_Morocco",
153
- ar_OM = "Arabic_Oman",
154
- ar_QA = "Arabic_Qatar",
155
- ar_SA = "Arabic_Saudi Arabia",
156
- ar_SY = "Arabic_Syria",
157
- ar_TN = "Arabic_Tunisia",
158
- ar_AE = "Arabic_United Arab Emirates",
159
- ar_YE = "Arabic_Yemen",
160
- hy = "Armenian",
161
- az_AZ = "Azeri_Cyrillic",
162
- eu = "Basque",
163
- be = "Belarusian",
164
- bn = "Bengali_Bangladesh",
165
- bs = "Bosnian",
166
- bg = "Bulgarian",
167
- my = "Burmese",
168
- ca = "Catalan",
169
- zh_CN = "Chinese_China",
170
- zh_HK = "Chinese_Hong Kong SAR",
171
- zh_MO = "Chinese_Macau SAR",
172
- zh_SG = "Chinese_Singapore",
173
- zh_TW = "Chinese_Taiwan",
174
- hr = "Croatian",
175
- cs = "Czech",
176
- da = "Danish",
177
- dv = "Divehi; Dhivehi; Maldivian",
178
- nl_BE = "Dutch_Belgium",
179
- nl_NL = "Dutch_Netherlands",
180
- en_AU = "English_Australia",
181
- en_BZ = "English_Belize",
182
- en_CA = "English_Canada",
183
- en_CB = "English_Caribbean",
184
- en_GB = "English_Great Britain",
185
- en_IN = "English_India",
186
- en_IE = "English_Ireland",
187
- en_JM = "English_Jamaica",
188
- en_NZ = "English_New Zealand",
189
- en_PH = "English_Phillippines",
190
- en_ZA = "English_Southern Africa",
191
- en_TT = "English_Trinidad",
192
- en_US = "English_United States",
193
- et = "Estonian",
194
- fo = "Faroese",
195
- fa = "Farsi_Persian",
196
- fi = "Finnish",
197
- fr_BE = "French_Belgium",
198
- fr_CA = "French_Canada",
199
- fr_FR = "French_France",
200
- fr_LU = "French_Luxembourg",
201
- fr_CH = "French_Switzerland",
202
- mk = "FYRO Macedonia",
203
- gd_IE = "Gaelic_Ireland",
204
- gd = "Gaelic_Scotland",
205
- de_AT = "German_Austria",
206
- de_DE = "German_Germany",
207
- de_LI = "German_Liechtenstein",
208
- de_LU = "German_Luxembourg",
209
- de_CH = "German_Switzerland",
210
- el = "Greek",
211
- gn = "Guarani_Paraguay",
212
- gu = "Gujarati",
213
- he = "Hebrew",
214
- hi = "Hindi",
215
- hu = "Hungarian",
216
- id = "Indonesian",
217
- it_IT = "Italian_Italy",
218
- it_CH = "Italian_Switzerland",
219
- ja = "Japanese",
220
- kn = "Kannada",
221
- ks = "Kashmiri",
222
- kk = "Kazakh",
223
- km = "Khmer",
224
- ko = "Korean",
225
- lo = "Lao",
226
- la = "Latin",
227
- lv = "Latvian",
228
- lt = "Lithuanian",
229
- ms_BN = "Malay_Brunei",
230
- ms_MY = "Malay_Malaysia",
231
- ml = "Malayalam",
232
- mt = "Maltese",
233
- mi = "Maori",
234
- mr = "Marathi",
235
- mn = "Mongolian",
236
- ne = "Nepali",
237
- no_NO = "Norwegian_Bokml",
238
- pl = "Polish",
239
- pt_BR = "Portuguese_Brazil",
240
- pt_PT = "Portuguese_Portugal",
241
- pa = "Punjabi",
242
- rm = "Raeto-Romance",
243
- ro_MO = "Romanian_Moldova",
244
- ro = "Romanian_Romania",
245
- ru = "Russian",
246
- ru_MO = "Russian_Moldova",
247
- sa = "Sanskrit",
248
- sr_SP = "Serbian_Cyrillic",
249
- tn = "Setsuana",
250
- sd = "Sindhi",
251
- si = "Sinhala; Sinhalese",
252
- sk = "Slovak",
253
- sl = "Slovenian",
254
- so = "Somali",
255
- sb = "Sorbian",
256
- es_AR = "Spanish_Argentina",
257
- es_BO = "Spanish_Bolivia",
258
- es_CL = "Spanish_Chile",
259
- es_CO = "Spanish_Colombia",
260
- es_CR = "Spanish_Costa Rica",
261
- es_DO = "Spanish_Dominican Republic",
262
- es_EC = "Spanish_Ecuador",
263
- es_SV = "Spanish_El Salvador",
264
- es_GT = "Spanish_Guatemala",
265
- es_HN = "Spanish_Honduras",
266
- es_MX = "Spanish_Mexico",
267
- es_NI = "Spanish_Nicaragua",
268
- es_PA = "Spanish_Panama",
269
- es_PY = "Spanish_Paraguay",
270
- es_PE = "Spanish_Peru",
271
- es_PR = "Spanish_Puerto Rico",
272
- es_ES = "Spanish_Spain (Traditional)",
273
- es_UY = "Spanish_Uruguay",
274
- es_VE = "Spanish_Venezuela",
275
- sw = "Swahili",
276
- sv_FI = "Swedish_Finland",
277
- sv_SE = "Swedish_Sweden",
278
- tg = "Tajik",
279
- ta = "Tamil",
280
- tt = "Tatar",
281
- te = "Telugu",
282
- th = "Thai",
283
- bo = "Tibetan",
284
- ts = "Tsonga",
285
- tr = "Turkish",
286
- tk = "Turkmen",
287
- uk = "Ukrainian",
288
- UTF_8 = "Unicode",
289
- ur = "Urdu",
290
- uz_UZ = "Uzbek_Cyrillic",
291
- vi = "Vietnamese",
292
- cy = "Welsh",
293
- xh = "Xhosa",
294
- yi = "Yiddish",
295
- zu = "Zulu"
106
+ af="Afrikaans",
107
+ sq="Albanian",
108
+ am="Amharic",
109
+ ar_DZ="Arabic_Algeria",
110
+ ar_BH="Arabic_Bahrain",
111
+ ar_EG="Arabic_Egypt",
112
+ ar_IQ="Arabic_Iraq",
113
+ ar_JO="Arabic_Jordan",
114
+ ar_KW="Arabic_Kuwait",
115
+ ar_LB="Arabic_Lebanon",
116
+ ar_LY="Arabic_Libya",
117
+ ar_MA="Arabic_Morocco",
118
+ ar_OM="Arabic_Oman",
119
+ ar_QA="Arabic_Qatar",
120
+ ar_SA="Arabic_Saudi Arabia",
121
+ ar_SY="Arabic_Syria",
122
+ ar_TN="Arabic_Tunisia",
123
+ ar_AE="Arabic_United Arab Emirates",
124
+ ar_YE="Arabic_Yemen",
125
+ hy="Armenian",
126
+ az_AZ="Azeri_Cyrillic",
127
+ eu="Basque",
128
+ be="Belarusian",
129
+ bn="Bengali_Bangladesh",
130
+ bs="Bosnian",
131
+ bg="Bulgarian",
132
+ my="Burmese",
133
+ ca="Catalan",
134
+ zh_CN="Chinese_China",
135
+ zh_HK="Chinese_Hong Kong SAR",
136
+ zh_MO="Chinese_Macau SAR",
137
+ zh_SG="Chinese_Singapore",
138
+ zh_TW="Chinese_Taiwan",
139
+ hr="Croatian",
140
+ cs="Czech",
141
+ da="Danish",
142
+ dv="Divehi; Dhivehi; Maldivian",
143
+ nl_BE="Dutch_Belgium",
144
+ nl_NL="Dutch_Netherlands",
145
+ en_AU="English_Australia",
146
+ en_BZ="English_Belize",
147
+ en_CA="English_Canada",
148
+ en_CB="English_Caribbean",
149
+ en_GB="English_Great Britain",
150
+ en_IN="English_India",
151
+ en_IE="English_Ireland",
152
+ en_JM="English_Jamaica",
153
+ en_NZ="English_New Zealand",
154
+ en_PH="English_Phillippines",
155
+ en_ZA="English_Southern Africa",
156
+ en_TT="English_Trinidad",
157
+ en_US="English_United States",
158
+ et="Estonian",
159
+ fo="Faroese",
160
+ fa="Farsi_Persian",
161
+ fi="Finnish",
162
+ fr_BE="French_Belgium",
163
+ fr_CA="French_Canada",
164
+ fr_FR="French_France",
165
+ fr_LU="French_Luxembourg",
166
+ fr_CH="French_Switzerland",
167
+ mk="FYRO Macedonia",
168
+ gd_IE="Gaelic_Ireland",
169
+ gd="Gaelic_Scotland",
170
+ de_AT="German_Austria",
171
+ de_DE="German_Germany",
172
+ de_LI="German_Liechtenstein",
173
+ de_LU="German_Luxembourg",
174
+ de_CH="German_Switzerland",
175
+ el="Greek",
176
+ gn="Guarani_Paraguay",
177
+ gu="Gujarati",
178
+ he="Hebrew",
179
+ hi="Hindi",
180
+ hu="Hungarian",
181
+ id="Indonesian",
182
+ it_IT="Italian_Italy",
183
+ it_CH="Italian_Switzerland",
184
+ ja="Japanese",
185
+ kn="Kannada",
186
+ ks="Kashmiri",
187
+ kk="Kazakh",
188
+ km="Khmer",
189
+ ko="Korean",
190
+ lo="Lao",
191
+ la="Latin",
192
+ lv="Latvian",
193
+ lt="Lithuanian",
194
+ ms_BN="Malay_Brunei",
195
+ ms_MY="Malay_Malaysia",
196
+ ml="Malayalam",
197
+ mt="Maltese",
198
+ mi="Maori",
199
+ mr="Marathi",
200
+ mn="Mongolian",
201
+ ne="Nepali",
202
+ no_NO="Norwegian_Bokml",
203
+ pl="Polish",
204
+ pt_BR="Portuguese_Brazil",
205
+ pt_PT="Portuguese_Portugal",
206
+ pa="Punjabi",
207
+ rm="Raeto-Romance",
208
+ ro_MO="Romanian_Moldova",
209
+ ro="Romanian_Romania",
210
+ ru="Russian",
211
+ ru_MO="Russian_Moldova",
212
+ sa="Sanskrit",
213
+ sr_SP="Serbian_Cyrillic",
214
+ tn="Setsuana",
215
+ sd="Sindhi",
216
+ si="Sinhala; Sinhalese",
217
+ sk="Slovak",
218
+ sl="Slovenian",
219
+ so="Somali",
220
+ sb="Sorbian",
221
+ es_AR="Spanish_Argentina",
222
+ es_BO="Spanish_Bolivia",
223
+ es_CL="Spanish_Chile",
224
+ es_CO="Spanish_Colombia",
225
+ es_CR="Spanish_Costa Rica",
226
+ es_DO="Spanish_Dominican Republic",
227
+ es_EC="Spanish_Ecuador",
228
+ es_SV="Spanish_El Salvador",
229
+ es_GT="Spanish_Guatemala",
230
+ es_HN="Spanish_Honduras",
231
+ es_MX="Spanish_Mexico",
232
+ es_NI="Spanish_Nicaragua",
233
+ es_PA="Spanish_Panama",
234
+ es_PY="Spanish_Paraguay",
235
+ es_PE="Spanish_Peru",
236
+ es_PR="Spanish_Puerto Rico",
237
+ es_ES="Spanish_Spain (Traditional)",
238
+ es_UY="Spanish_Uruguay",
239
+ es_VE="Spanish_Venezuela",
240
+ sw="Swahili",
241
+ sv_FI="Swedish_Finland",
242
+ sv_SE="Swedish_Sweden",
243
+ tg="Tajik",
244
+ ta="Tamil",
245
+ tt="Tatar",
246
+ te="Telugu",
247
+ th="Thai",
248
+ bo="Tibetan",
249
+ ts="Tsonga",
250
+ tr="Turkish",
251
+ tk="Turkmen",
252
+ uk="Ukrainian",
253
+ UTF_8="Unicode",
254
+ ur="Urdu",
255
+ uz_UZ="Uzbek_Cyrillic",
256
+ vi="Vietnamese",
257
+ cy="Welsh",
258
+ xh="Xhosa",
259
+ yi="Yiddish",
260
+ zu="Zulu",
296
261
  )
297
262
  """ The map containing the associations between the
298
263
  normalized version/descriptor of the locale and the
@@ -319,7 +284,7 @@ SLUG_PERMUTATIONS = (
319
284
  ("ü", "u"),
320
285
  ("ÿ", "y"),
321
286
  ("æ", "ae"),
322
- ("œ", "oe")
287
+ ("œ", "oe"),
323
288
  )
324
289
  """ The complete set of permutation tuples to be used in
325
290
  a slug based simplification process """