wbnews 1.58.3__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 (65) hide show
  1. wbnews/.coveragerc +23 -0
  2. wbnews/__init__.py +1 -0
  3. wbnews/admin.py +30 -0
  4. wbnews/apps.py +9 -0
  5. wbnews/factories.py +36 -0
  6. wbnews/filters/__init__.py +1 -0
  7. wbnews/filters/news.py +46 -0
  8. wbnews/fixtures/wbnews.yaml +1 -0
  9. wbnews/import_export/__init__.py +0 -0
  10. wbnews/import_export/backends/__init__.py +1 -0
  11. wbnews/import_export/backends/news.py +36 -0
  12. wbnews/import_export/handlers/__init__.py +1 -0
  13. wbnews/import_export/handlers/news.py +57 -0
  14. wbnews/import_export/parsers/__init__.py +0 -0
  15. wbnews/import_export/parsers/emails/__init__.py +0 -0
  16. wbnews/import_export/parsers/emails/news.py +39 -0
  17. wbnews/import_export/parsers/emails/utils.py +65 -0
  18. wbnews/import_export/parsers/rss/__init__.py +0 -0
  19. wbnews/import_export/parsers/rss/news.py +58 -0
  20. wbnews/locale/de/LC_MESSAGES/django.mo +0 -0
  21. wbnews/locale/de/LC_MESSAGES/django.po +166 -0
  22. wbnews/locale/de/LC_MESSAGES/django.po.translated +173 -0
  23. wbnews/locale/en/LC_MESSAGES/django.mo +0 -0
  24. wbnews/locale/en/LC_MESSAGES/django.po +159 -0
  25. wbnews/locale/fr/LC_MESSAGES/django.mo +0 -0
  26. wbnews/locale/fr/LC_MESSAGES/django.po +162 -0
  27. wbnews/migrations/0001_initial_squashed_0005_alter_news_import_source.py +349 -0
  28. wbnews/migrations/0006_alter_news_language.py +122 -0
  29. wbnews/migrations/0007_auto_20240103_0955.py +43 -0
  30. wbnews/migrations/0008_alter_news_language.py +123 -0
  31. wbnews/migrations/0009_newsrelationship_analysis_newsrelationship_sentiment.py +94 -0
  32. wbnews/migrations/0010_newsrelationship_important.py +17 -0
  33. wbnews/migrations/0011_newsrelationship_content_object_repr.py +18 -0
  34. wbnews/migrations/0012_alter_news_unique_together_news_identifier_and_more.py +91 -0
  35. wbnews/migrations/0013_alter_news_datetime.py +19 -0
  36. wbnews/migrations/0014_newsrelationship_unique_news_relationship.py +27 -0
  37. wbnews/migrations/__init__.py +0 -0
  38. wbnews/models/__init__.py +3 -0
  39. wbnews/models/llm/cleaned_news.py +66 -0
  40. wbnews/models/news.py +131 -0
  41. wbnews/models/relationships.py +45 -0
  42. wbnews/models/sources.py +73 -0
  43. wbnews/models/utils.py +15 -0
  44. wbnews/serializers.py +134 -0
  45. wbnews/signals.py +4 -0
  46. wbnews/tasks.py +16 -0
  47. wbnews/tests/__init__.py +0 -0
  48. wbnews/tests/conftest.py +6 -0
  49. wbnews/tests/parsers/__init__.py +0 -0
  50. wbnews/tests/parsers/test_emails.py +25 -0
  51. wbnews/tests/test_models.py +80 -0
  52. wbnews/tests/test_utils.py +7 -0
  53. wbnews/tests/tests.py +12 -0
  54. wbnews/urls.py +25 -0
  55. wbnews/utils.py +57 -0
  56. wbnews/viewsets/__init__.py +12 -0
  57. wbnews/viewsets/buttons.py +42 -0
  58. wbnews/viewsets/display.py +148 -0
  59. wbnews/viewsets/endpoints.py +34 -0
  60. wbnews/viewsets/menu.py +29 -0
  61. wbnews/viewsets/titles.py +44 -0
  62. wbnews/viewsets/views.py +168 -0
  63. wbnews-1.58.3.dist-info/METADATA +7 -0
  64. wbnews-1.58.3.dist-info/RECORD +65 -0
  65. wbnews-1.58.3.dist-info/WHEEL +5 -0
@@ -0,0 +1,159 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2025-05-30 11:37+0200\n"
11
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "Language: \n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #: models/news.py:51 viewsets/display.py:54 viewsets/display.py:100
20
+ #: viewsets/display.py:141
21
+ msgid "Datetime"
22
+ msgstr ""
23
+
24
+ #: models/news.py:52 serializers.py:21 serializers.py:76 viewsets/display.py:20
25
+ #: viewsets/display.py:55 viewsets/display.py:102 viewsets/display.py:142
26
+ msgid "Title"
27
+ msgstr ""
28
+
29
+ #: models/news.py:54 serializers.py:24 serializers.py:77 viewsets/display.py:23
30
+ #: viewsets/display.py:57 viewsets/display.py:104 viewsets/display.py:143
31
+ msgid "Description"
32
+ msgstr ""
33
+
34
+ #: models/news.py:55 serializers.py:78 viewsets/display.py:56
35
+ #: viewsets/display.py:103
36
+ msgid "Summary"
37
+ msgstr ""
38
+
39
+ #: models/news.py:56 viewsets/display.py:60 viewsets/display.py:144
40
+ msgid "Language"
41
+ msgstr ""
42
+
43
+ #: models/news.py:57
44
+ msgid "Link"
45
+ msgstr ""
46
+
47
+ #: models/news.py:61 viewsets/display.py:59 viewsets/display.py:106
48
+ msgid "Source"
49
+ msgstr ""
50
+
51
+ #: models/news.py:64
52
+ msgid "Mark as duplicate"
53
+ msgstr ""
54
+
55
+ #: models/relationships.py:9
56
+ msgid "Positive"
57
+ msgstr ""
58
+
59
+ #: models/relationships.py:10
60
+ msgid "Slightly Positive"
61
+ msgstr ""
62
+
63
+ #: models/relationships.py:11
64
+ msgid "Slightly Negative"
65
+ msgstr ""
66
+
67
+ #: models/relationships.py:12
68
+ msgid "Negative"
69
+ msgstr ""
70
+
71
+ #: serializers.py:22
72
+ msgid "Identifier"
73
+ msgstr ""
74
+
75
+ #: serializers.py:25 viewsets/display.py:22
76
+ msgid "Author"
77
+ msgstr ""
78
+
79
+ #: serializers.py:26
80
+ msgid "Updated"
81
+ msgstr ""
82
+
83
+ #: serializers.py:79
84
+ msgid "Date"
85
+ msgstr ""
86
+
87
+ #: serializers.py:92 viewsets/menu.py:6 viewsets/titles.py:24
88
+ msgid "News"
89
+ msgstr ""
90
+
91
+ #: viewsets/buttons.py:14
92
+ msgid "Open News"
93
+ msgstr ""
94
+
95
+ #: viewsets/buttons.py:21 viewsets/buttons.py:22 viewsets/buttons.py:24
96
+ msgid "Reset relationships"
97
+ msgstr ""
98
+
99
+ #: viewsets/display.py:21
100
+ msgid "RSS feed"
101
+ msgstr ""
102
+
103
+ #: viewsets/display.py:24
104
+ msgid "Last Update"
105
+ msgstr ""
106
+
107
+ #: viewsets/display.py:61
108
+ msgid "Image"
109
+ msgstr ""
110
+
111
+ #: viewsets/display.py:93
112
+ msgid "Linked Object"
113
+ msgstr ""
114
+
115
+ #: viewsets/display.py:101
116
+ msgid "Analysis"
117
+ msgstr ""
118
+
119
+ #: viewsets/display.py:105
120
+ msgid "Important"
121
+ msgstr ""
122
+
123
+ #: viewsets/menu.py:11
124
+ msgid "News Relationships"
125
+ msgstr ""
126
+
127
+ #: viewsets/menu.py:17 viewsets/titles.py:9
128
+ msgid "Sources"
129
+ msgstr ""
130
+
131
+ #: viewsets/menu.py:23
132
+ msgid "Create Source"
133
+ msgstr ""
134
+
135
+ #: viewsets/titles.py:13
136
+ #, python-brace-format
137
+ msgid "Source: {source}"
138
+ msgstr ""
139
+
140
+ #: viewsets/titles.py:14
141
+ msgid "News Source"
142
+ msgstr ""
143
+
144
+ #: viewsets/titles.py:19
145
+ msgid "News Flow"
146
+ msgstr ""
147
+
148
+ #: viewsets/titles.py:30
149
+ #, python-brace-format
150
+ msgid "News from {source}"
151
+ msgstr ""
152
+
153
+ #: viewsets/titles.py:36
154
+ msgid "News Article for {}"
155
+ msgstr ""
156
+
157
+ #: viewsets/titles.py:37 viewsets/titles.py:44
158
+ msgid "News Article"
159
+ msgstr ""
Binary file
@@ -0,0 +1,162 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2025-05-30 11:37+0200\n"
12
+ "PO-Revision-Date: 2025-05-30 09:40+0000\n"
13
+ "Language-Team: French (https://app.transifex.com/stainly/teams/171242/fr/)\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Language: fr\n"
18
+ "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
19
+
20
+ #: models/news.py:51 viewsets/display.py:54 viewsets/display.py:100
21
+ #: viewsets/display.py:141
22
+ msgid "Datetime"
23
+ msgstr ""
24
+
25
+ #: models/news.py:52 serializers.py:21 serializers.py:76
26
+ #: viewsets/display.py:20 viewsets/display.py:55 viewsets/display.py:102
27
+ #: viewsets/display.py:142
28
+ msgid "Title"
29
+ msgstr ""
30
+
31
+ #: models/news.py:54 serializers.py:24 serializers.py:77
32
+ #: viewsets/display.py:23 viewsets/display.py:57 viewsets/display.py:104
33
+ #: viewsets/display.py:143
34
+ msgid "Description"
35
+ msgstr ""
36
+
37
+ #: models/news.py:55 serializers.py:78 viewsets/display.py:56
38
+ #: viewsets/display.py:103
39
+ msgid "Summary"
40
+ msgstr ""
41
+
42
+ #: models/news.py:56 viewsets/display.py:60 viewsets/display.py:144
43
+ msgid "Language"
44
+ msgstr ""
45
+
46
+ #: models/news.py:57
47
+ msgid "Link"
48
+ msgstr ""
49
+
50
+ #: models/news.py:61 viewsets/display.py:59 viewsets/display.py:106
51
+ msgid "Source"
52
+ msgstr ""
53
+
54
+ #: models/news.py:64
55
+ msgid "Mark as duplicate"
56
+ msgstr ""
57
+
58
+ #: models/relationships.py:9
59
+ msgid "Positive"
60
+ msgstr ""
61
+
62
+ #: models/relationships.py:10
63
+ msgid "Slightly Positive"
64
+ msgstr ""
65
+
66
+ #: models/relationships.py:11
67
+ msgid "Slightly Negative"
68
+ msgstr ""
69
+
70
+ #: models/relationships.py:12
71
+ msgid "Negative"
72
+ msgstr ""
73
+
74
+ #: serializers.py:22
75
+ msgid "Identifier"
76
+ msgstr ""
77
+
78
+ #: serializers.py:25 viewsets/display.py:22
79
+ msgid "Author"
80
+ msgstr ""
81
+
82
+ #: serializers.py:26
83
+ msgid "Updated"
84
+ msgstr ""
85
+
86
+ #: serializers.py:79
87
+ msgid "Date"
88
+ msgstr ""
89
+
90
+ #: serializers.py:92 viewsets/menu.py:6 viewsets/titles.py:24
91
+ msgid "News"
92
+ msgstr ""
93
+
94
+ #: viewsets/buttons.py:14
95
+ msgid "Open News"
96
+ msgstr ""
97
+
98
+ #: viewsets/buttons.py:21 viewsets/buttons.py:22 viewsets/buttons.py:24
99
+ msgid "Reset relationships"
100
+ msgstr ""
101
+
102
+ #: viewsets/display.py:21
103
+ msgid "RSS feed"
104
+ msgstr ""
105
+
106
+ #: viewsets/display.py:24
107
+ msgid "Last Update"
108
+ msgstr ""
109
+
110
+ #: viewsets/display.py:61
111
+ msgid "Image"
112
+ msgstr ""
113
+
114
+ #: viewsets/display.py:93
115
+ msgid "Linked Object"
116
+ msgstr ""
117
+
118
+ #: viewsets/display.py:101
119
+ msgid "Analysis"
120
+ msgstr ""
121
+
122
+ #: viewsets/display.py:105
123
+ msgid "Important"
124
+ msgstr ""
125
+
126
+ #: viewsets/menu.py:11
127
+ msgid "News Relationships"
128
+ msgstr ""
129
+
130
+ #: viewsets/menu.py:17 viewsets/titles.py:9
131
+ msgid "Sources"
132
+ msgstr ""
133
+
134
+ #: viewsets/menu.py:23
135
+ msgid "Create Source"
136
+ msgstr ""
137
+
138
+ #: viewsets/titles.py:13
139
+ #, python-brace-format
140
+ msgid "Source: {source}"
141
+ msgstr ""
142
+
143
+ #: viewsets/titles.py:14
144
+ msgid "News Source"
145
+ msgstr ""
146
+
147
+ #: viewsets/titles.py:19
148
+ msgid "News Flow"
149
+ msgstr ""
150
+
151
+ #: viewsets/titles.py:30
152
+ #, python-brace-format
153
+ msgid "News from {source}"
154
+ msgstr ""
155
+
156
+ #: viewsets/titles.py:36
157
+ msgid "News Article for {}"
158
+ msgstr ""
159
+
160
+ #: viewsets/titles.py:37 viewsets/titles.py:44
161
+ msgid "News Article"
162
+ msgstr ""
@@ -0,0 +1,349 @@
1
+ # Generated by Django 4.1.8 on 2023-04-19 05:31
2
+
3
+ import django.contrib.postgres.fields
4
+ import django.db.models.deletion
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ initial = True
10
+
11
+ dependencies = [
12
+ ("io", "0001_initial_squashed"),
13
+ ("contenttypes", "0002_remove_content_type_name"),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.CreateModel(
18
+ name="NewsSource",
19
+ fields=[
20
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
21
+ ("title", models.CharField(max_length=255)),
22
+ ("identifier", models.CharField(blank=True, max_length=255, null=True, unique=True)),
23
+ (
24
+ "tags",
25
+ django.contrib.postgres.fields.ArrayField(
26
+ base_field=models.CharField(max_length=16), default=list, size=None
27
+ ),
28
+ ),
29
+ ("image", models.URLField(blank=True, null=True)),
30
+ ("description", models.TextField(default="")),
31
+ ("author", models.CharField(default="", max_length=255)),
32
+ ("url", models.URLField(blank=True, null=True, unique=True)),
33
+ ],
34
+ ),
35
+ migrations.CreateModel(
36
+ name="News",
37
+ fields=[
38
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
39
+ ("datetime", models.DateTimeField()),
40
+ ("title", models.CharField(max_length=500)),
41
+ ("description", models.TextField(blank=True)),
42
+ ("summary", models.TextField(blank=True)),
43
+ (
44
+ "language",
45
+ models.CharField(
46
+ blank=True,
47
+ choices=[
48
+ ("af", "Afrikaans"),
49
+ ("ar", "Arabic"),
50
+ ("ar-dz", "Algerian Arabic"),
51
+ ("ast", "Asturian"),
52
+ ("az", "Azerbaijani"),
53
+ ("bg", "Bulgarian"),
54
+ ("be", "Belarusian"),
55
+ ("bn", "Bengali"),
56
+ ("br", "Breton"),
57
+ ("bs", "Bosnian"),
58
+ ("ca", "Catalan"),
59
+ ("cs", "Czech"),
60
+ ("cy", "Welsh"),
61
+ ("da", "Danish"),
62
+ ("de", "German"),
63
+ ("dsb", "Lower Sorbian"),
64
+ ("el", "Greek"),
65
+ ("en", "English"),
66
+ ("en-au", "Australian English"),
67
+ ("en-gb", "British English"),
68
+ ("eo", "Esperanto"),
69
+ ("es", "Spanish"),
70
+ ("es-ar", "Argentinian Spanish"),
71
+ ("es-co", "Colombian Spanish"),
72
+ ("es-mx", "Mexican Spanish"),
73
+ ("es-ni", "Nicaraguan Spanish"),
74
+ ("es-ve", "Venezuelan Spanish"),
75
+ ("et", "Estonian"),
76
+ ("eu", "Basque"),
77
+ ("fa", "Persian"),
78
+ ("fi", "Finnish"),
79
+ ("fr", "French"),
80
+ ("fy", "Frisian"),
81
+ ("ga", "Irish"),
82
+ ("gd", "Scottish Gaelic"),
83
+ ("gl", "Galician"),
84
+ ("he", "Hebrew"),
85
+ ("hi", "Hindi"),
86
+ ("hr", "Croatian"),
87
+ ("hsb", "Upper Sorbian"),
88
+ ("hu", "Hungarian"),
89
+ ("hy", "Armenian"),
90
+ ("ia", "Interlingua"),
91
+ ("id", "Indonesian"),
92
+ ("ig", "Igbo"),
93
+ ("io", "Ido"),
94
+ ("is", "Icelandic"),
95
+ ("it", "Italian"),
96
+ ("ja", "Japanese"),
97
+ ("ka", "Georgian"),
98
+ ("kab", "Kabyle"),
99
+ ("kk", "Kazakh"),
100
+ ("km", "Khmer"),
101
+ ("kn", "Kannada"),
102
+ ("ko", "Korean"),
103
+ ("ky", "Kyrgyz"),
104
+ ("lb", "Luxembourgish"),
105
+ ("lt", "Lithuanian"),
106
+ ("lv", "Latvian"),
107
+ ("mk", "Macedonian"),
108
+ ("ml", "Malayalam"),
109
+ ("mn", "Mongolian"),
110
+ ("mr", "Marathi"),
111
+ ("ms", "Malay"),
112
+ ("my", "Burmese"),
113
+ ("nb", "Norwegian Bokmål"),
114
+ ("ne", "Nepali"),
115
+ ("nl", "Dutch"),
116
+ ("nn", "Norwegian Nynorsk"),
117
+ ("os", "Ossetic"),
118
+ ("pa", "Punjabi"),
119
+ ("pl", "Polish"),
120
+ ("pt", "Portuguese"),
121
+ ("pt-br", "Brazilian Portuguese"),
122
+ ("ro", "Romanian"),
123
+ ("ru", "Russian"),
124
+ ("sk", "Slovak"),
125
+ ("sl", "Slovenian"),
126
+ ("sq", "Albanian"),
127
+ ("sr", "Serbian"),
128
+ ("sr-latn", "Serbian Latin"),
129
+ ("sv", "Swedish"),
130
+ ("sw", "Swahili"),
131
+ ("ta", "Tamil"),
132
+ ("te", "Telugu"),
133
+ ("tg", "Tajik"),
134
+ ("th", "Thai"),
135
+ ("tk", "Turkmen"),
136
+ ("tr", "Turkish"),
137
+ ("tt", "Tatar"),
138
+ ("udm", "Udmurt"),
139
+ ("uk", "Ukrainian"),
140
+ ("ur", "Urdu"),
141
+ ("uz", "Uzbek"),
142
+ ("vi", "Vietnamese"),
143
+ ("zh-hans", "Simplified Chinese"),
144
+ ("zh-hant", "Traditional Chinese"),
145
+ ],
146
+ max_length=16,
147
+ null=True,
148
+ ),
149
+ ),
150
+ ("link", models.CharField(blank=True, max_length=500, null=True)),
151
+ (
152
+ "tags",
153
+ django.contrib.postgres.fields.ArrayField(
154
+ base_field=models.CharField(max_length=16), default=list, size=None
155
+ ),
156
+ ),
157
+ (
158
+ "enclosures",
159
+ django.contrib.postgres.fields.ArrayField(base_field=models.URLField(), default=list, size=None),
160
+ ),
161
+ ("image_url", models.URLField(blank=True, null=True)),
162
+ (
163
+ "source",
164
+ models.ForeignKey(
165
+ on_delete=django.db.models.deletion.CASCADE, related_name="news", to="wbnews.newssource"
166
+ ),
167
+ ),
168
+ ],
169
+ options={
170
+ "unique_together": {("title", "source", "datetime")},
171
+ },
172
+ bases=(models.Model,),
173
+ ),
174
+ migrations.CreateModel(
175
+ name="NewsRelationship",
176
+ fields=[
177
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
178
+ ("object_id", models.PositiveIntegerField()),
179
+ (
180
+ "content_type",
181
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype"),
182
+ ),
183
+ (
184
+ "news",
185
+ models.ForeignKey(
186
+ on_delete=django.db.models.deletion.CASCADE, related_name="relationships", to="wbnews.news"
187
+ ),
188
+ ),
189
+ ],
190
+ options={
191
+ "verbose_name": "News Relationship",
192
+ },
193
+ ),
194
+ migrations.AddIndex(
195
+ model_name="newsrelationship",
196
+ index=models.Index(fields=["content_type", "object_id"], name="wbnews_news_content_b40dfe_idx"),
197
+ ),
198
+ migrations.AlterField(
199
+ model_name="news",
200
+ name="datetime",
201
+ field=models.DateTimeField(verbose_name="Datetime"),
202
+ ),
203
+ migrations.AlterField(
204
+ model_name="news",
205
+ name="description",
206
+ field=models.TextField(blank=True, verbose_name="Description"),
207
+ ),
208
+ migrations.AlterField(
209
+ model_name="news",
210
+ name="language",
211
+ field=models.CharField(
212
+ blank=True,
213
+ choices=[
214
+ ("af", "Afrikaans"),
215
+ ("ar", "Arabic"),
216
+ ("ar-dz", "Algerian Arabic"),
217
+ ("ast", "Asturian"),
218
+ ("az", "Azerbaijani"),
219
+ ("bg", "Bulgarian"),
220
+ ("be", "Belarusian"),
221
+ ("bn", "Bengali"),
222
+ ("br", "Breton"),
223
+ ("bs", "Bosnian"),
224
+ ("ca", "Catalan"),
225
+ ("cs", "Czech"),
226
+ ("cy", "Welsh"),
227
+ ("da", "Danish"),
228
+ ("de", "German"),
229
+ ("dsb", "Lower Sorbian"),
230
+ ("el", "Greek"),
231
+ ("en", "English"),
232
+ ("en-au", "Australian English"),
233
+ ("en-gb", "British English"),
234
+ ("eo", "Esperanto"),
235
+ ("es", "Spanish"),
236
+ ("es-ar", "Argentinian Spanish"),
237
+ ("es-co", "Colombian Spanish"),
238
+ ("es-mx", "Mexican Spanish"),
239
+ ("es-ni", "Nicaraguan Spanish"),
240
+ ("es-ve", "Venezuelan Spanish"),
241
+ ("et", "Estonian"),
242
+ ("eu", "Basque"),
243
+ ("fa", "Persian"),
244
+ ("fi", "Finnish"),
245
+ ("fr", "French"),
246
+ ("fy", "Frisian"),
247
+ ("ga", "Irish"),
248
+ ("gd", "Scottish Gaelic"),
249
+ ("gl", "Galician"),
250
+ ("he", "Hebrew"),
251
+ ("hi", "Hindi"),
252
+ ("hr", "Croatian"),
253
+ ("hsb", "Upper Sorbian"),
254
+ ("hu", "Hungarian"),
255
+ ("hy", "Armenian"),
256
+ ("ia", "Interlingua"),
257
+ ("id", "Indonesian"),
258
+ ("ig", "Igbo"),
259
+ ("io", "Ido"),
260
+ ("is", "Icelandic"),
261
+ ("it", "Italian"),
262
+ ("ja", "Japanese"),
263
+ ("ka", "Georgian"),
264
+ ("kab", "Kabyle"),
265
+ ("kk", "Kazakh"),
266
+ ("km", "Khmer"),
267
+ ("kn", "Kannada"),
268
+ ("ko", "Korean"),
269
+ ("ky", "Kyrgyz"),
270
+ ("lb", "Luxembourgish"),
271
+ ("lt", "Lithuanian"),
272
+ ("lv", "Latvian"),
273
+ ("mk", "Macedonian"),
274
+ ("ml", "Malayalam"),
275
+ ("mn", "Mongolian"),
276
+ ("mr", "Marathi"),
277
+ ("ms", "Malay"),
278
+ ("my", "Burmese"),
279
+ ("nb", "Norwegian Bokmål"),
280
+ ("ne", "Nepali"),
281
+ ("nl", "Dutch"),
282
+ ("nn", "Norwegian Nynorsk"),
283
+ ("os", "Ossetic"),
284
+ ("pa", "Punjabi"),
285
+ ("pl", "Polish"),
286
+ ("pt", "Portuguese"),
287
+ ("pt-br", "Brazilian Portuguese"),
288
+ ("ro", "Romanian"),
289
+ ("ru", "Russian"),
290
+ ("sk", "Slovak"),
291
+ ("sl", "Slovenian"),
292
+ ("sq", "Albanian"),
293
+ ("sr", "Serbian"),
294
+ ("sr-latn", "Serbian Latin"),
295
+ ("sv", "Swedish"),
296
+ ("sw", "Swahili"),
297
+ ("ta", "Tamil"),
298
+ ("te", "Telugu"),
299
+ ("tg", "Tajik"),
300
+ ("th", "Thai"),
301
+ ("tk", "Turkmen"),
302
+ ("tr", "Turkish"),
303
+ ("tt", "Tatar"),
304
+ ("udm", "Udmurt"),
305
+ ("uk", "Ukrainian"),
306
+ ("ur", "Urdu"),
307
+ ("uz", "Uzbek"),
308
+ ("vi", "Vietnamese"),
309
+ ("zh-hans", "Simplified Chinese"),
310
+ ("zh-hant", "Traditional Chinese"),
311
+ ],
312
+ max_length=16,
313
+ null=True,
314
+ verbose_name="Language",
315
+ ),
316
+ ),
317
+ migrations.AlterField(
318
+ model_name="news",
319
+ name="link",
320
+ field=models.CharField(blank=True, max_length=500, null=True, verbose_name="Link"),
321
+ ),
322
+ migrations.AlterField(
323
+ model_name="news",
324
+ name="source",
325
+ field=models.ForeignKey(
326
+ on_delete=django.db.models.deletion.CASCADE,
327
+ related_name="news",
328
+ to="wbnews.newssource",
329
+ verbose_name="Source",
330
+ ),
331
+ ),
332
+ migrations.AlterField(
333
+ model_name="news",
334
+ name="summary",
335
+ field=models.TextField(blank=True, verbose_name="Summary"),
336
+ ),
337
+ migrations.AlterField(
338
+ model_name="news",
339
+ name="title",
340
+ field=models.CharField(max_length=500, verbose_name="Title"),
341
+ ),
342
+ migrations.AddField(
343
+ model_name="news",
344
+ name="import_source",
345
+ field=models.ForeignKey(
346
+ blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="io.importsource"
347
+ ),
348
+ ),
349
+ ]