wbnews 1.45.0__py2.py3-none-any.whl → 1.58.1__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 (44) hide show
  1. wbnews/admin.py +4 -1
  2. wbnews/factories.py +7 -5
  3. wbnews/filters/__init__.py +1 -1
  4. wbnews/filters/news.py +39 -2
  5. wbnews/import_export/backends/news.py +3 -3
  6. wbnews/import_export/handlers/news.py +35 -3
  7. wbnews/import_export/parsers/emails/news.py +0 -9
  8. wbnews/import_export/parsers/emails/utils.py +16 -12
  9. wbnews/import_export/parsers/rss/news.py +3 -9
  10. wbnews/locale/de/LC_MESSAGES/django.mo +0 -0
  11. wbnews/locale/de/LC_MESSAGES/django.po +93 -39
  12. wbnews/locale/de/LC_MESSAGES/django.po.translated +173 -0
  13. wbnews/locale/en/LC_MESSAGES/django.mo +0 -0
  14. wbnews/locale/en/LC_MESSAGES/django.po +159 -0
  15. wbnews/locale/fr/LC_MESSAGES/django.mo +0 -0
  16. wbnews/locale/fr/LC_MESSAGES/django.po +162 -0
  17. wbnews/migrations/0011_newsrelationship_content_object_repr.py +18 -0
  18. wbnews/migrations/0012_alter_news_unique_together_news_identifier_and_more.py +91 -0
  19. wbnews/migrations/0013_alter_news_datetime.py +19 -0
  20. wbnews/migrations/0014_newsrelationship_unique_news_relationship.py +27 -0
  21. wbnews/models/llm/cleaned_news.py +26 -23
  22. wbnews/models/news.py +35 -21
  23. wbnews/models/relationships.py +25 -1
  24. wbnews/models/sources.py +35 -5
  25. wbnews/models/utils.py +15 -0
  26. wbnews/serializers.py +51 -5
  27. wbnews/tasks.py +16 -0
  28. wbnews/tests/parsers/__init__.py +0 -0
  29. wbnews/tests/parsers/test_emails.py +25 -0
  30. wbnews/tests/test_models.py +65 -0
  31. wbnews/tests/test_utils.py +7 -0
  32. wbnews/urls.py +0 -5
  33. wbnews/utils.py +57 -0
  34. wbnews/viewsets/__init__.py +1 -1
  35. wbnews/viewsets/buttons.py +21 -2
  36. wbnews/viewsets/display.py +34 -21
  37. wbnews/viewsets/endpoints.py +22 -6
  38. wbnews/viewsets/menu.py +6 -0
  39. wbnews/viewsets/titles.py +5 -1
  40. wbnews/viewsets/views.py +48 -23
  41. {wbnews-1.45.0.dist-info → wbnews-1.58.1.dist-info}/METADATA +1 -2
  42. wbnews-1.58.1.dist-info/RECORD +65 -0
  43. wbnews-1.45.0.dist-info/RECORD +0 -49
  44. {wbnews-1.45.0.dist-info → wbnews-1.58.1.dist-info}/WHEEL +0 -0
wbnews/viewsets/views.py CHANGED
@@ -2,8 +2,12 @@ from functools import reduce
2
2
  from operator import or_
3
3
 
4
4
  from django.contrib.contenttypes.models import ContentType
5
- from django.db.models import OuterRef, Q, Subquery
5
+ from django.db.models import F, Q
6
+ from django.shortcuts import get_object_or_404
6
7
  from django.utils.functional import cached_property
8
+ from rest_framework.decorators import action
9
+ from rest_framework.permissions import IsAdminUser
10
+ from rest_framework.response import Response
7
11
  from wbcore import viewsets
8
12
  from wbcore.content_type.utils import get_ancestors_content_type
9
13
 
@@ -16,15 +20,15 @@ from wbnews.serializers import (
16
20
  SourceRepresentationSerializer,
17
21
  )
18
22
 
19
- from ..filters import NewsFilterSet
20
- from .buttons import NewsButtonConfig
23
+ from ..filters import NewsFilterSet, NewsRelationshipFilterSet
24
+ from .buttons import NewsButtonConfig, NewsRelationshipButtonConfig
21
25
  from .display import (
22
26
  NewsDisplayConfig,
23
27
  NewsRelationshipDisplayConfig,
24
28
  NewsSourceDisplayConfig,
25
29
  SourceDisplayConfig,
26
30
  )
27
- from .endpoints import NewsEndpointConfig, NewsSourceEndpointConfig
31
+ from .endpoints import NewsEndpointConfig, NewsRelationshipEndpointConfig, NewsSourceEndpointConfig
28
32
  from .titles import (
29
33
  NewsRelationshipTitleConfig,
30
34
  NewsSourceModelTitleConfig,
@@ -93,45 +97,66 @@ class NewsModelViewSet(viewsets.ReadOnlyModelViewSet):
93
97
  qs = qs.filter(relationships__in=relationships)
94
98
  return qs.distinct()
95
99
 
96
-
97
- class NewsRelationshipModelViewSet(viewsets.ReadOnlyModelViewSet):
100
+ @action(detail=True, methods=["PATCH"], permission_classes=[IsAdminUser])
101
+ def refreshrelationship(self, request, pk=None):
102
+ """
103
+ Action to allow administrator to reset news relationships and recreate them on demand.
104
+ """
105
+ new = get_object_or_404(News, pk=pk)
106
+ relationships = new.relationships.all()
107
+ if content_type_id := self.request.GET.get("content_type_id", None):
108
+ relationships = relationships.filter(content_type_id=content_type_id)
109
+ if object_id := self.request.GET.get("content_id", None):
110
+ relationships = relationships.filter(object_id=object_id)
111
+ relationships.delete()
112
+ new.update_and_create_news_relationships()
113
+ return Response({"status": "ok"})
114
+
115
+
116
+ class NewsRelationshipModelViewSet(viewsets.ModelViewSet):
117
+ IDENTIFIER = "wbnews:newsrelationship"
98
118
  serializer_class = NewsRelationshipModelSerializer
99
- queryset = News.objects.all()
119
+ queryset = NewsRelationship.objects.all()
100
120
  display_config_class = NewsRelationshipDisplayConfig
101
121
  title_config_class = NewsRelationshipTitleConfig
122
+ button_config_class = NewsRelationshipButtonConfig
123
+ endpoint_config_class = NewsRelationshipEndpointConfig
102
124
  ordering = ["-datetime"]
125
+ filterset_class = NewsRelationshipFilterSet
103
126
 
104
127
  @cached_property
105
128
  def content_type(self) -> ContentType:
106
- if content_type_id := self.kwargs.get("content_type"):
129
+ if content_type_id := self.request.GET.get("content_type", self.request.POST.get("content_type")):
107
130
  return ContentType.objects.get_for_id(content_type_id)
108
131
 
132
+ @cached_property
133
+ def object_id(self) -> int:
134
+ return self.request.GET.get("object_id", self.request.POST.get("object_id"))
135
+
109
136
  @cached_property
110
137
  def content_object(self):
111
- if (object_id := self.kwargs.get("content_id")) and self.content_type:
138
+ if (object_id := self.object_id) and self.content_type:
112
139
  return self.content_type.get_object_for_this_type(id=object_id)
113
140
 
114
141
  def get_queryset(self):
115
142
  queryset = super().get_queryset()
116
143
 
117
- if self.content_type and self.content_object:
144
+ if self.content_type:
118
145
  content_types = list(get_ancestors_content_type(self.content_type))
146
+ queryset = queryset.filter(content_type__in=content_types)
147
+ if self.content_object:
119
148
  # we ensure that for MPTT model, all descendants news are included as well
120
149
  if hasattr(self.content_object, "get_family"):
121
- conditions = []
122
- for descendant in self.content_object.get_family():
123
- for ct in content_types:
124
- conditions.append(Q(content_type=ct, object_id=descendant.id))
150
+ queryset = queryset.filter(object_id__in=[obj.id for obj in self.content_object.get_family()])
125
151
  else:
126
- conditions = [Q(content_type=ct, object_id=self.content_object.id) for ct in content_types]
127
- relationships = NewsRelationship.objects.filter(reduce(or_, conditions))
128
-
129
- return queryset.filter(id__in=relationships.values("news")).annotate(
130
- analysis=Subquery(relationships.filter(news=OuterRef("id")).values("analysis")[:1]),
131
- sentiment=Subquery(relationships.filter(news=OuterRef("id")).values("sentiment")[:1]),
132
- important=Subquery(relationships.filter(news=OuterRef("id")).values("important")[:1]),
133
- )
134
- return News.objects.none()
152
+ queryset = queryset.filter(object_id=self.object_id)
153
+ return queryset.select_related("news").annotate(
154
+ source=F("news__source"),
155
+ title=F("news__title"),
156
+ description=F("news__description"),
157
+ summary=F("news__summary"),
158
+ datetime=F("news__datetime"),
159
+ )
135
160
 
136
161
 
137
162
  class NewsSourceModelViewSet(NewsModelViewSet):
@@ -1,8 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbnews
3
- Version: 1.45.0
3
+ Version: 1.58.1
4
4
  Summary: A workbench module for managing news.
5
5
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
6
6
  Requires-Dist: feedparser==6.*
7
- Requires-Dist: langdetect==1.*
8
7
  Requires-Dist: wbcore
@@ -0,0 +1,65 @@
1
+ wbnews/.coveragerc,sha256=OOkT651L0NuoSVSXKZiLAbnQmHe9DRoLOzo1_S_buQc,383
2
+ wbnews/__init__.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
3
+ wbnews/admin.py,sha256=cn-PF0LclyQ0FFNfw0mdVoW7v3g0b9uotTiAFKmLVPQ,832
4
+ wbnews/apps.py,sha256=l4kfE3Pux84Fb34xNgKDxcxRHuPCp6odCGFE9Sa3Wzw,212
5
+ wbnews/factories.py,sha256=_EBIeMafeiyAjnSAG-xXxdqw7vVwAu8u-DfdLn8mtHk,1172
6
+ wbnews/serializers.py,sha256=KihExQ_GS1fNZnojryEcfU32xlTiPn-K2WGO0Zc84Cw,4732
7
+ wbnews/signals.py,sha256=eqipwffwJnDQWUZ9VTKr5Jp-OMXLmVSNwoIsawnCKvM,192
8
+ wbnews/tasks.py,sha256=ce9JbXKnJnf7La74h0LPwm3yrygHNe1BKZju_4m1itw,384
9
+ wbnews/urls.py,sha256=2Gs9RGU8x6tNOLJiuG17n_ik82QVb8jlw7bU07Lk_S4,1008
10
+ wbnews/utils.py,sha256=h4TdMbUL0qQ2h3o3jEpGuGwT90TWiryVRtBXc7avLW0,1955
11
+ wbnews/filters/__init__.py,sha256=FXJcPsLQePCU-fzjpIu44Dsdu9vCckLHr0Kr-8Z_-C4,59
12
+ wbnews/filters/news.py,sha256=glG45wx_Jxee57H43oqCCJIjQumrNUh8pVXiD0hBM6E,1662
13
+ wbnews/fixtures/wbnews.yaml,sha256=cDu1UWYwIFxz-hdivW7rxLYsNOweBm4GdN1GDsycN90,173164
14
+ wbnews/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ wbnews/import_export/backends/__init__.py,sha256=_2HnB9uCuGhQDNg-Z0V2uIvKn26LtRBXAxUBoNetBIo,30
16
+ wbnews/import_export/backends/news.py,sha256=QqMeAWYh4U3W4Sng0HlHx11RoR1LV_WZmRUr58dYrVg,1461
17
+ wbnews/import_export/handlers/__init__.py,sha256=zOeENt9cpEcSLG9ZaVb4otmbTnLAa0XdTPsUjD11dXs,36
18
+ wbnews/import_export/handlers/news.py,sha256=cdrtWIP3XOU8NMYZKF8VLYH5qHmPLboUm_GwNAvO2ew,2181
19
+ wbnews/import_export/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ wbnews/import_export/parsers/emails/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ wbnews/import_export/parsers/emails/news.py,sha256=8fSgjSPuSmdfGKV1IxLMWriqGhDAG-tiZUyAgWpjZ_M,1236
22
+ wbnews/import_export/parsers/emails/utils.py,sha256=k7R1HZx18FKXRq10COARFgHjjBadsWe1DY3AHCrwHRs,2207
23
+ wbnews/import_export/parsers/rss/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ wbnews/import_export/parsers/rss/news.py,sha256=H89avqOU_AUAyHiIXd_tfoMbcqy67GgDQ2-ucihDpks,2076
25
+ wbnews/locale/de/LC_MESSAGES/django.mo,sha256=M70N6el-I7EymxHLw9n773Bimbztf8s8equWa9SydBs,1283
26
+ wbnews/locale/de/LC_MESSAGES/django.po,sha256=furtxh-NgkodwE4dv0uXaRtWF2z3NxWtEw64tH9OMN4,3494
27
+ wbnews/locale/de/LC_MESSAGES/django.po.translated,sha256=ILRIDL_vON91Do5QhZr5N85Y4vsOAIHsaU8QX0FiEA4,3962
28
+ wbnews/locale/en/LC_MESSAGES/django.mo,sha256=UXCQbz2AxBvh-IQ7bGgjoBnijo8h9DfE9107A-2Mgkk,337
29
+ wbnews/locale/en/LC_MESSAGES/django.po,sha256=K7SPoXdLZHyOOAoIOEydgJwl1qdQMrK3uapd4EMrVIg,3125
30
+ wbnews/locale/fr/LC_MESSAGES/django.mo,sha256=t4lh3zX7kshbDAFzXa5HU_YGPXkPzKqODNXL2MeZ5KQ,429
31
+ wbnews/locale/fr/LC_MESSAGES/django.po,sha256=kRBjvETEy0GMPqX0H6EArGqrtzhYXwswjUW-JDajlbM,3232
32
+ wbnews/migrations/0001_initial_squashed_0005_alter_news_import_source.py,sha256=4qxqfpAYVeU16GsWaj7kUbtOk0ZLzuECTfzhUfmni2A,14596
33
+ wbnews/migrations/0006_alter_news_language.py,sha256=necqSWKi20sHLok-RO9He3vnmMlmmdx07AiN3lnZPBM,4638
34
+ wbnews/migrations/0007_auto_20240103_0955.py,sha256=YzkH_LSWH_8qdw_BrKaTN5vqLNCPnjMlJZxs03Xbbvw,1478
35
+ wbnews/migrations/0008_alter_news_language.py,sha256=4tbpcVSey9PJOdf8xWndl1R8GmhmflpVQtI8YTwcevw,4648
36
+ wbnews/migrations/0009_newsrelationship_analysis_newsrelationship_sentiment.py,sha256=ud_yO6skjVx2s32snxzai6Z4Uao1s-40v6UZaq4k64I,3432
37
+ wbnews/migrations/0010_newsrelationship_important.py,sha256=seK-bFIzXa6uzja0gPnRhwS4vNgY_sR3sMm_OmP8sZE,440
38
+ wbnews/migrations/0011_newsrelationship_content_object_repr.py,sha256=oJUhx__5WI6TjPGPqqEqBgb3yDluc02hhh05nXTjbHw,428
39
+ wbnews/migrations/0012_alter_news_unique_together_news_identifier_and_more.py,sha256=SLtQiREJYMwOytGGLqaCYr_9pSeD_XD5ax7lXSETT3w,3111
40
+ wbnews/migrations/0013_alter_news_datetime.py,sha256=q4Gbxo25jClsv9b1kfTqBLmpPNHAq7LxOgEZeLYYRk4,497
41
+ wbnews/migrations/0014_newsrelationship_unique_news_relationship.py,sha256=aZUHLMKRMaXHJrrbnV9O2ZJRDVjbpkb9NjVPB7VKVW0,1073
42
+ wbnews/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ wbnews/models/__init__.py,sha256=KKIcQbpCPCVNJUPJs2MtpN9Q2Wb34Qdk-C7w6AAOy7w,99
44
+ wbnews/models/news.py,sha256=yRbOpVG69yssvJPzv9bZJGMoFcb9n2uLaG2mz2j8oxM,5203
45
+ wbnews/models/relationships.py,sha256=bcQbRa-ObS9h67pIuIrodD63RnkzbaOaRT4L6ctBoI0,1841
46
+ wbnews/models/sources.py,sha256=N3-rBg4myeGG_stHvKiNnSoH0yS-LS_Zr_UeKPMBr5s,2629
47
+ wbnews/models/utils.py,sha256=1JQxV4WxmmFGl7MdVtJoEeao3vnqqVwCi7mhSToaUvM,600
48
+ wbnews/models/llm/cleaned_news.py,sha256=PA0McsgMmR0TOZUNWs55sBnsCXGbaC61VtVFbJ8vx28,2226
49
+ wbnews/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ wbnews/tests/conftest.py,sha256=UEZOYH5Av-Cqqq5t8WQCR7QJdNnajhthBPpF8AnwQjY,186
51
+ wbnews/tests/test_models.py,sha256=op79cYyz9f5dX1uRBztw-E0J4HYAY8K-7cz4kBCN0qk,3278
52
+ wbnews/tests/test_utils.py,sha256=PsyHH_F_y-Uy3mdVgDINH19bPEd1bmZT_UQ7yu87BNU,278
53
+ wbnews/tests/tests.py,sha256=OADY-vbKZBe0bjjVEO1KNzRYAP2JA9mWkO9pZuh1TSs,280
54
+ wbnews/tests/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ wbnews/tests/parsers/test_emails.py,sha256=dStdTPI7Ns1jSw5PDbDEc84FJaoNPnBHC4BskWDDMxY,1073
56
+ wbnews/viewsets/__init__.py,sha256=2OhRiJy0MVK9TdMpFmS9x9jl_gM-CjBxUoUHlZB3_8U,531
57
+ wbnews/viewsets/buttons.py,sha256=6m_IdRYCQgTH4mD51DUoOa8Vx1y1-2zPQydUdvL_nF4,1788
58
+ wbnews/viewsets/display.py,sha256=fwMZLlwxHcNHM4AppwYpYTOicLD_pXaQ4QeFeIl4whk,5315
59
+ wbnews/viewsets/endpoints.py,sha256=2slGDJin_SA2heWsIaMdNTUN46FqZJvusbY1jhAaeZM,1165
60
+ wbnews/viewsets/menu.py,sha256=XTShfTIykN9t7oclosPfFVb1r6o46QyglEEe1C7QCMk,979
61
+ wbnews/viewsets/titles.py,sha256=iMyiGBMBpzng8s2ySVLqEOwueHRnAoEuc75dt9nCPjc,1367
62
+ wbnews/viewsets/views.py,sha256=SMCDT6bJMQblyqX5cQ7X3qDe0zxTVWh1q7Aqj0fBo2Q,6795
63
+ wbnews-1.58.1.dist-info/METADATA,sha256=fcooyHVRuEH6JK057omSnAA1I-EzsLuJJuoX5Ruvovs,215
64
+ wbnews-1.58.1.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
65
+ wbnews-1.58.1.dist-info/RECORD,,
@@ -1,49 +0,0 @@
1
- wbnews/.coveragerc,sha256=OOkT651L0NuoSVSXKZiLAbnQmHe9DRoLOzo1_S_buQc,383
2
- wbnews/__init__.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
3
- wbnews/admin.py,sha256=-FksVPcu1L6PttiHJP9gIGguEd_G4wXNpM31bkkV0ik,732
4
- wbnews/apps.py,sha256=l4kfE3Pux84Fb34xNgKDxcxRHuPCp6odCGFE9Sa3Wzw,212
5
- wbnews/factories.py,sha256=zOCINW-3JqwSfFz-0_dV3TeYC1HbCvruFOcoXGCOmVc,1017
6
- wbnews/serializers.py,sha256=An-4CBSwFoJEnJFILtklms4fk1K3plha3KNu6SMBd3o,2862
7
- wbnews/signals.py,sha256=eqipwffwJnDQWUZ9VTKr5Jp-OMXLmVSNwoIsawnCKvM,192
8
- wbnews/urls.py,sha256=a1-aS9VoxqbEqYI-NwQMUw7l7UfIoN7p80b8sp6dlTQ,1215
9
- wbnews/filters/__init__.py,sha256=rYd0_Zne1BQrZbXQRHiifKF1cGwmI4CmQn6dGpJ-_Ak,32
10
- wbnews/filters/news.py,sha256=XTN12_yqjKV55xw2A2d7VfOQwYDJrULdYWpFKsh8sCc,269
11
- wbnews/fixtures/wbnews.yaml,sha256=cDu1UWYwIFxz-hdivW7rxLYsNOweBm4GdN1GDsycN90,173164
12
- wbnews/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- wbnews/import_export/backends/__init__.py,sha256=_2HnB9uCuGhQDNg-Z0V2uIvKn26LtRBXAxUBoNetBIo,30
14
- wbnews/import_export/backends/news.py,sha256=ZdI2dNHxszwH_YzbWUKVVit_L5u8JCLoutr0beIAt6o,1446
15
- wbnews/import_export/handlers/__init__.py,sha256=zOeENt9cpEcSLG9ZaVb4otmbTnLAa0XdTPsUjD11dXs,36
16
- wbnews/import_export/handlers/news.py,sha256=FqxS7oKVGYYzKbgNxnHZa4FTvGEXBfm6XcIx70BfFOY,1091
17
- wbnews/import_export/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- wbnews/import_export/parsers/emails/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- wbnews/import_export/parsers/emails/news.py,sha256=YbInbXJ5pk1IS7fEOutuW9LIU4KzZXBx0HZHZrKmeIc,1507
20
- wbnews/import_export/parsers/emails/utils.py,sha256=zvLBr1EvwBd2tBKgc7H7ZI-ifHYg1NvluOZlwvPI1v8,1946
21
- wbnews/import_export/parsers/rss/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- wbnews/import_export/parsers/rss/news.py,sha256=0zoEFR3Tu3smIOmUPCv3gjunnRLEb-i9yZkE3rFasWU,2310
23
- wbnews/locale/de/LC_MESSAGES/django.po,sha256=b5Mc0-cowNbFMo-5cbhGa2-B-KfRM6pw8EZxTg6uRx4,2662
24
- wbnews/migrations/0001_initial_squashed_0005_alter_news_import_source.py,sha256=4qxqfpAYVeU16GsWaj7kUbtOk0ZLzuECTfzhUfmni2A,14596
25
- wbnews/migrations/0006_alter_news_language.py,sha256=necqSWKi20sHLok-RO9He3vnmMlmmdx07AiN3lnZPBM,4638
26
- wbnews/migrations/0007_auto_20240103_0955.py,sha256=YzkH_LSWH_8qdw_BrKaTN5vqLNCPnjMlJZxs03Xbbvw,1478
27
- wbnews/migrations/0008_alter_news_language.py,sha256=4tbpcVSey9PJOdf8xWndl1R8GmhmflpVQtI8YTwcevw,4648
28
- wbnews/migrations/0009_newsrelationship_analysis_newsrelationship_sentiment.py,sha256=ud_yO6skjVx2s32snxzai6Z4Uao1s-40v6UZaq4k64I,3432
29
- wbnews/migrations/0010_newsrelationship_important.py,sha256=seK-bFIzXa6uzja0gPnRhwS4vNgY_sR3sMm_OmP8sZE,440
30
- wbnews/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- wbnews/models/__init__.py,sha256=KKIcQbpCPCVNJUPJs2MtpN9Q2Wb34Qdk-C7w6AAOy7w,99
32
- wbnews/models/news.py,sha256=CEgg70uaN4M4OJMUYVpktGTymf04XjsiYUaO6WhG9-0,4569
33
- wbnews/models/relationships.py,sha256=PenPJUhzd5axjFnJqhUPgd22lCt45Iqc59bInYWTBVc,891
34
- wbnews/models/sources.py,sha256=ekMBGzA12nqUD9yvLQeZgnXncsJP-OuOGJzpE1Hrz9w,1350
35
- wbnews/models/llm/cleaned_news.py,sha256=87T-qZjnTTJdCbbUWFCBc4cJr8Km9SmDP39fixVdo5o,2077
36
- wbnews/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- wbnews/tests/conftest.py,sha256=UEZOYH5Av-Cqqq5t8WQCR7QJdNnajhthBPpF8AnwQjY,186
38
- wbnews/tests/test_models.py,sha256=S1FElzu4MMMOHM_vZ39GZeOV3O0Z9Sx0b-8U2ffxaf4,407
39
- wbnews/tests/tests.py,sha256=OADY-vbKZBe0bjjVEO1KNzRYAP2JA9mWkO9pZuh1TSs,280
40
- wbnews/viewsets/__init__.py,sha256=SY6hiVZtArCvU5LpWn9U0J5DAQwv8wtlE7OTIJYcLvI,499
41
- wbnews/viewsets/buttons.py,sha256=K1_2K7B1Bn9bHhrss1WslECQ7BBusA56xnDNINfPeq4,1038
42
- wbnews/viewsets/display.py,sha256=M3P3HQzUBHAkRevW3fTxOH9forvahbv-k5Xxgbhmxdg,5269
43
- wbnews/viewsets/endpoints.py,sha256=QX4iMqU6XtRmGDkr5EQ5i_QwCkQvYDH_XBgoJkTgKp4,618
44
- wbnews/viewsets/menu.py,sha256=tdU6NUX7WXR4lRf3T1chp8tHbAubAk7EBhMDoa-IlHc,793
45
- wbnews/viewsets/titles.py,sha256=iezHoaCSFxALnO4Bvh-Sp2YSbkijaBm0u_shgAi6Fro,1244
46
- wbnews/viewsets/views.py,sha256=wevSXXflYJS9lqEbepLjuq_tRK8iNC2ksZjVFtY5wrA,5729
47
- wbnews-1.45.0.dist-info/METADATA,sha256=7f8xy8ecu2m7T7lWEwIUVgwlRJWofZtMy8DdoMlBQOI,246
48
- wbnews-1.45.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
49
- wbnews-1.45.0.dist-info/RECORD,,