localcosmos-server 0.24.10__py3-none-any.whl → 0.24.11__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.
@@ -206,6 +206,16 @@ class ContactUserSerializer(serializers.Serializer):
206
206
  subject = serializers.CharField()
207
207
  message = serializers.CharField(min_length=10)
208
208
 
209
+
210
+ class ContactStaffSerializer(serializers.Serializer):
211
+
212
+ name = serializers.CharField()
213
+ email = serializers.EmailField()
214
+ subject = serializers.CharField(required=False, allow_blank=True)
215
+ message = serializers.CharField(min_length=10)
216
+ page = serializers.CharField(required=False)
217
+ website = serializers.CharField(required=False, allow_blank=True) # honeypot field
218
+
209
219
 
210
220
  #################################################################################################
211
221
  #
@@ -15,6 +15,9 @@ urlpatterns = [
15
15
  # contact user
16
16
  path('<uuid:app_uuid>/contact-user/<uuid:user_uuid>/', views.ContactUser.as_view(),
17
17
  name='api_contact_user'),
18
+ # contact staff
19
+ path('<uuid:app_uuid>/contact-staff/', views.ContactStaff.as_view(),
20
+ name='api_contact_staff'),
18
21
  # JSON WebToken
19
22
  path('<uuid:app_uuid>/token/', views.TokenObtainPairViewWithClientID.as_view(), name='token_obtain_pair'),
20
23
  path('<uuid:app_uuid>/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
@@ -34,11 +34,12 @@ from localcosmos_server.taxonomy.lazy import LazyAppTaxon
34
34
  from .serializers import (LocalcosmosUserSerializer, RegistrationSerializer, PasswordResetSerializer,
35
35
  TokenObtainPairSerializerWithClientID, ServerContentImageSerializer,
36
36
  LocalcosmosPublicUserSerializer, ContactUserSerializer, TaxonProfileSerializer,
37
- TaxonProfileMinimalSerializer)
37
+ TaxonProfileMinimalSerializer, ContactStaffSerializer)
38
38
 
39
39
  from .permissions import OwnerOnly, AppMustExist, ServerContentImageOwnerOrReadOnly
40
40
 
41
- from localcosmos_server.mails import (send_registration_confirmation_email, send_user_contact_email)
41
+ from localcosmos_server.mails import (send_registration_confirmation_email, send_user_contact_email,
42
+ send_staff_email)
42
43
 
43
44
  from localcosmos_server.datasets.models import Dataset
44
45
  from localcosmos_server.models import UserClients
@@ -435,6 +436,35 @@ class ContactUser(APIView):
435
436
  return Response(serializer.data, status=status.HTTP_200_OK)
436
437
 
437
438
  return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
439
+
440
+
441
+ class ContactStaff(APIView):
442
+ '''
443
+ Contact Localcosmos Staff
444
+ - [POST] delivers an email to the staff
445
+ '''
446
+
447
+ permission_classes = ()
448
+ parser_classes = (CamelCaseJSONParser,)
449
+ renderer_classes = (CamelCaseJSONRenderer,)
450
+ serializer_class = ContactStaffSerializer
451
+
452
+ def post(self, request, *args, **kwargs):
453
+
454
+ serializer = self.serializer_class(data=request.data)
455
+
456
+ if serializer.is_valid():
457
+
458
+ if serializer.data.get('website', '') != '':
459
+ # honeypot field filled
460
+ return Response('', status=status.HTTP_200_OK)
461
+
462
+ # send mail
463
+ send_staff_email(kwargs['app_uuid'], serializer.data['name'], serializer.data['email'],
464
+ serializer.data.get('subject', ''), serializer.data['message'],)
465
+ return Response(serializer.data, status=status.HTTP_200_OK)
466
+
467
+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
438
468
 
439
469
  ##################################################################################################################
440
470
  #
@@ -7,7 +7,7 @@ from django.utils.translation import gettext as _
7
7
 
8
8
  FROM_EMAIL = settings.DEFAULT_FROM_EMAIL
9
9
 
10
- from localcosmos_server.models import App
10
+ from localcosmos_server.models import App, LocalcosmosUser
11
11
 
12
12
  import re
13
13
 
@@ -101,4 +101,53 @@ def send_user_contact_email(app_uuid, sender, receiver, subject, message):
101
101
  msg = EmailMultiAlternatives(subject, text_message, from_email=from_email, to=[to], headers=headers)
102
102
  msg.attach_alternative(html_message, 'text/html')
103
103
 
104
- msg.send()
104
+ msg.send()
105
+
106
+
107
+ def send_staff_email(app_uuid, sender_name, sender_email, subject, message):
108
+
109
+ app = App.objects.get(uuid=app_uuid)
110
+ frontend = app.get_frontend()
111
+
112
+ staff_users = LocalcosmosUser.objects.filter(is_staff=True, is_active=True)
113
+ receivers = [u.email for u in staff_users]
114
+
115
+ support_email = None
116
+ if frontend and 'configuration' in frontend['userContent'] and 'supportEmail' in frontend['userContent']['configuration']:
117
+ support_email = frontend['userContent']['configuration']['supportEmail']
118
+
119
+ headers = {
120
+ 'Reply-To': sender_email
121
+ }
122
+
123
+ legal_notice_url = reverse('legal_notice', kwargs={'app_uid':app.uid}, urlconf='localcosmos_server.urls')
124
+ privacy_statement_url = reverse('privacy_statement', kwargs={'app_uid':app.uid},
125
+ urlconf='localcosmos_server.urls')
126
+
127
+
128
+ ctx = {
129
+ 'sender_name' : sender_name,
130
+ 'sender_email' : sender_email,
131
+ 'receiver' : receivers,
132
+ 'app' : app,
133
+ 'site' : Site.objects.get_current(),
134
+ 'subject': subject,
135
+ 'message': message,
136
+ 'legal_notice_url' : legal_notice_url,
137
+ 'privacy_statement_url' : privacy_statement_url,
138
+ 'support_email': support_email,
139
+ }
140
+
141
+ from_email = FROM_EMAIL
142
+ to = receivers
143
+
144
+ text_message = render_to_string('email/contact_staff.txt', ctx)
145
+ html_message = get_template('email/contact_staff.html').render(ctx)
146
+
147
+ subject = '[{0}] {1}'.format(app.name, subject)
148
+
149
+ msg = EmailMultiAlternatives(subject, text_message, from_email=from_email, to=to, headers=headers)
150
+ msg.attach_alternative(html_message, 'text/html')
151
+
152
+ msg.send()
153
+
@@ -0,0 +1,358 @@
1
+ {% load i18n static countries %}
2
+
3
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml">
5
+ <head>
6
+ <meta name="viewport" content="width=device-width" />
7
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8
+ <title>{% trans 'Registration confirmation' %}</title>
9
+ <style>
10
+ * {
11
+ margin: 0;
12
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
13
+ box-sizing: border-box;
14
+ font-size: 14px;
15
+ }
16
+
17
+ img {
18
+ max-width: 100%;
19
+ }
20
+
21
+ body {
22
+ -webkit-font-smoothing: antialiased;
23
+ -webkit-text-size-adjust: none;
24
+ width: 100% !important;
25
+ height: 100%;
26
+ line-height: 1.6em;
27
+ /* 1.6em * 14px = 22.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
28
+ /*line-height: 22px;*/
29
+ }
30
+
31
+ /* Let's make sure all tables have defaults */
32
+ table td {
33
+ vertical-align: top;
34
+ }
35
+
36
+
37
+ body {
38
+ background-color: #f6f6f6;
39
+ }
40
+
41
+ .body-wrap {
42
+ background-color: #f6f6f6;
43
+ width: 100%;
44
+ }
45
+
46
+ .container {
47
+ display: block !important;
48
+ max-width: 600px !important;
49
+ margin: 0 auto !important;
50
+ /* makes it centered */
51
+ clear: both !important;
52
+ }
53
+
54
+ .content {
55
+ max-width: 600px;
56
+ margin: 0 auto;
57
+ display: block;
58
+ padding: 20px;
59
+ }
60
+
61
+ /* -------------------------------------
62
+ HEADER, FOOTER, MAIN
63
+ ------------------------------------- */
64
+ .main {
65
+ background-color: #fff;
66
+ border: 1px solid #e9e9e9;
67
+ border-radius: 3px;
68
+ }
69
+
70
+ .content-wrap {
71
+ padding: 20px;
72
+ }
73
+
74
+ .content-block {
75
+ padding: 0 0 20px;
76
+ }
77
+
78
+ .header {
79
+ width: 100%;
80
+ margin-bottom: 20px;
81
+ }
82
+
83
+ .footer {
84
+ width: 100%;
85
+ clear: both;
86
+ color: #999;
87
+ padding: 20px;
88
+ }
89
+ .footer p, .footer a, .footer td {
90
+ color: #999;
91
+ font-size: 12px;
92
+ }
93
+
94
+ /* -------------------------------------
95
+ TYPOGRAPHY
96
+ ------------------------------------- */
97
+ h1, h2, h3 {
98
+ font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
99
+ color: #000;
100
+ margin: 20px 0 0;
101
+ line-height: 1.2em;
102
+ font-weight: 400;
103
+ }
104
+
105
+ h1 {
106
+ font-size: 32px;
107
+ font-weight: 500;
108
+ /* 1.2em * 32px = 38.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
109
+ /*line-height: 38px;*/
110
+ }
111
+
112
+ h2 {
113
+ font-size: 24px;
114
+ /* 1.2em * 24px = 28.8px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
115
+ /*line-height: 29px;*/
116
+ }
117
+
118
+ h3 {
119
+ font-size: 18px;
120
+ /* 1.2em * 18px = 21.6px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
121
+ /*line-height: 22px;*/
122
+ }
123
+
124
+ h4 {
125
+ font-size: 14px;
126
+ font-weight: 600;
127
+ }
128
+
129
+ p, ul, ol {
130
+ margin-bottom: 10px;
131
+ font-weight: normal;
132
+ }
133
+ p li, ul li, ol li {
134
+ margin-left: 5px;
135
+ list-style-position: inside;
136
+ }
137
+
138
+ /* -------------------------------------
139
+ LINKS & BUTTONS
140
+ ------------------------------------- */
141
+ a {
142
+ color: #348eda;
143
+ text-decoration: underline;
144
+ }
145
+
146
+ .btn-primary {
147
+ text-decoration: none;
148
+ color: #FFF;
149
+ background-color: #348eda;
150
+ border: solid #348eda;
151
+ border-width: 10px 20px;
152
+ line-height: 2em;
153
+ /* 2em * 14px = 28px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
154
+ /*line-height: 28px;*/
155
+ font-weight: bold;
156
+ text-align: center;
157
+ cursor: pointer;
158
+ display: inline-block;
159
+ border-radius: 5px;
160
+ text-transform: capitalize;
161
+ }
162
+
163
+ /* -------------------------------------
164
+ OTHER STYLES THAT MIGHT BE USEFUL
165
+ ------------------------------------- */
166
+ .last {
167
+ margin-bottom: 0;
168
+ }
169
+
170
+ .first {
171
+ margin-top: 0;
172
+ }
173
+
174
+ .aligncenter {
175
+ text-align: center;
176
+ }
177
+
178
+ .alignright {
179
+ text-align: right;
180
+ }
181
+
182
+ .alignleft {
183
+ text-align: left;
184
+ }
185
+
186
+ .clear {
187
+ clear: both;
188
+ }
189
+
190
+ /* -------------------------------------
191
+ ALERTS
192
+ Change the class depending on warning email, good email or bad email
193
+ ------------------------------------- */
194
+ .alert {
195
+ font-size: 16px;
196
+ color: #fff;
197
+ font-weight: 500;
198
+ padding: 20px;
199
+ text-align: center;
200
+ border-radius: 3px 3px 0 0;
201
+ }
202
+ .alert a {
203
+ color: #fff;
204
+ text-decoration: none;
205
+ font-weight: 500;
206
+ font-size: 16px;
207
+ }
208
+ .alert.alert-warning {
209
+ background-color: #FF9F00;
210
+ }
211
+ .alert.alert-bad {
212
+ background-color: #D0021B;
213
+ }
214
+ .alert.alert-good {
215
+ background-color: #68B90F;
216
+ }
217
+
218
+ /* -------------------------------------
219
+ INVOICE
220
+ Styles for the billing table
221
+ ------------------------------------- */
222
+ .invoice {
223
+ margin: 40px auto;
224
+ text-align: left;
225
+ width: 80%;
226
+ }
227
+ .invoice td {
228
+ padding: 5px 0;
229
+ }
230
+ .invoice .invoice-items {
231
+ width: 100%;
232
+ }
233
+ .invoice .invoice-items td {
234
+ border-top: #eee 1px solid;
235
+ }
236
+ .invoice .invoice-items .total td {
237
+ border-top: 2px solid #333;
238
+ border-bottom: 2px solid #333;
239
+ font-weight: 700;
240
+ }
241
+
242
+ /* -------------------------------------
243
+ RESPONSIVE AND MOBILE FRIENDLY STYLES
244
+ ------------------------------------- */
245
+ @media only screen and (max-width: 640px) {
246
+ body {
247
+ padding: 0 !important;
248
+ }
249
+
250
+ h1, h2, h3, h4 {
251
+ font-weight: 800 !important;
252
+ margin: 20px 0 5px !important;
253
+ }
254
+
255
+ h1 {
256
+ font-size: 22px !important;
257
+ }
258
+
259
+ h2 {
260
+ font-size: 18px !important;
261
+ }
262
+
263
+ h3 {
264
+ font-size: 16px !important;
265
+ }
266
+
267
+ .container {
268
+ padding: 0 !important;
269
+ width: 100% !important;
270
+ }
271
+
272
+ .content {
273
+ padding: 0 !important;
274
+ }
275
+
276
+ .content-wrap {
277
+ padding: 10px !important;
278
+ }
279
+
280
+ .invoice {
281
+ width: 100% !important;
282
+ }
283
+ }
284
+ </style>
285
+
286
+ </head>
287
+
288
+ <body itemscope itemtype="http://schema.org/EmailMessage">
289
+
290
+ <table class="body-wrap">
291
+ <tr>
292
+ <td></td>
293
+ <td class="container" width="600">
294
+ <div class="content">
295
+ <table class="main" width="100%" cellpadding="0" cellspacing="0">
296
+ <tr>
297
+ <td class="content-wrap aligncenter">
298
+ <table width="100%" cellpadding="0" cellspacing="0">
299
+ <tr>
300
+ <td>
301
+ <table width="100%">
302
+ <tr>
303
+ <td width="70%" class="alignleft" style="vertical-align:middle;">
304
+ &nbsp;
305
+ </td>
306
+ <td width="30%" class="alignright">
307
+ <img src="http://{{ site.domain }}{% static 'images/local_cosmos_logo_40.png' %}" height="40" />
308
+ </td>
309
+ </tr>
310
+ </table>
311
+ </td>
312
+ </tr>
313
+ <tr>
314
+ <td class="aligncenter">
315
+ <h2>{% blocktrans with username=sender_name %}Message from {{ username }}{% endblocktrans %}</h2>
316
+ </td>
317
+ </tr>
318
+ <tr>
319
+ <td class="content-block">
320
+ <br>
321
+ <h3>{{ subject }}</h3>
322
+ <br><br>
323
+
324
+ {{ message }}<br><br>
325
+
326
+ <p>
327
+ {% blocktrans with username=sender_name email=sender_email %}Reply to {{ username }}: {{ email }}{% endblocktrans %}
328
+ </p>
329
+ </td>
330
+ </tr>
331
+ </table>
332
+ </td>
333
+ </tr>
334
+ </table>
335
+ <div class="footer">
336
+ <table width="100%">
337
+ {% if support_email %}
338
+ <tr>
339
+ <td class="aligncenter content-block">
340
+ {% trans 'Questions?' %} E-Mail <a href="mailto:{{ support_email }}">{{ support_email }}</a>
341
+ </td>
342
+ </tr>
343
+ {% endif %}
344
+ <tr>
345
+ <td class="aligncenter content-block">
346
+ <a href="https://{{ site.domain }}{{ legal_notice_url }}" target="_blank">{% trans 'Legal notice' %}</a> &nbsp; &nbsp;
347
+ <a href="https://{{ site.domain }}{{ privacy_statement_url }}" target="_blank">{% trans 'Privacy statement' %}</a>
348
+ </td>
349
+ </tr>
350
+ </table>
351
+ </div></div>
352
+ </td>
353
+ <td></td>
354
+ </tr>
355
+ </table>
356
+
357
+ </body>
358
+ </html>
@@ -0,0 +1,21 @@
1
+ {% load i18n %}
2
+ {% load i18n %}
3
+ {{ app.name }}
4
+
5
+ {% blocktrans with username=sender_name %}Message from {{ username }}{% endblocktrans %}
6
+
7
+ {{ subject }}
8
+
9
+ ---------------------------------------------------------------------------=
10
+ ------------
11
+ {{ message }}
12
+
13
+ ---------------------------------------------------------------------------=
14
+ ------------
15
+ {% blocktrans with username=sender_name email=sender_email %}Reply to {{ username }}: {{ email }}{% endblocktrans %}
16
+
17
+
18
+ ---------------------------------------------------------------------------=
19
+ ---------------------------
20
+ {% trans 'Legal notice' %}: https://{{ site.domain }}{{ legal_notice_url }}
21
+ {% trans 'Privacy statement' %}: https://{{ site.domain }}{{ privacy_statement_url }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: localcosmos_server
3
- Version: 0.24.10
3
+ Version: 0.24.11
4
4
  Summary: LocalCosmos Private Server. Run your own server for localcosmos.org apps.
5
5
  Home-page: https://github.com/SiSol-Systems/localcosmos-server
6
6
  Author: Thomas Uher
@@ -7,7 +7,7 @@ localcosmos_server/fields.py,sha256=w_3cPm7kV_DBVlzPO2cDogMWAs-tf9MqwjHh8glpMrc,
7
7
  localcosmos_server/forms.py,sha256=pKEsEzhBuQkN8AFl0cuMb7SuZIGRYgM7fH4vEXVphxQ,13103
8
8
  localcosmos_server/generic_views.py,sha256=OCsah0mRc58rAb55f_hrFXSZoGrOaB1IlJs-VOP7gAg,9565
9
9
  localcosmos_server/global_urls.py,sha256=Us4i_tc3I1PlGxB37EBh2I8n7-7mbJu9DaGEd4kKET0,3673
10
- localcosmos_server/mails.py,sha256=EK5MwQSfQmsz55PDtlwJ6ZlMLUqFJ-TTDBvu1SP6tAA,3653
10
+ localcosmos_server/mails.py,sha256=erHQrBtGPBCf3M3thY-w1diL-w8-Scvm9nS0EpKrGRQ,5369
11
11
  localcosmos_server/middleware.py,sha256=2U-e_za1kC0YRD8XyHyh21OrcbEnD4shx0Zj2qNeMyU,931
12
12
  localcosmos_server/models.py,sha256=TcWLO3rxc7Xj2Pj8KHBS9XH9aaLOTdGD8MQ2VKUwG-A,40726
13
13
  localcosmos_server/permission_rules.py,sha256=Xww9bG2HD_lmXiMCBraxJbaJwPOon8tqtcdvk0xokiw,1833
@@ -37,9 +37,9 @@ localcosmos_server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
37
37
  localcosmos_server/api/anycluster_schema_urls.py,sha256=nVa9-1pf6a1F-LNYaN3im9xy9LkebIxp0eaJs-Bwvok,1219
38
38
  localcosmos_server/api/examples.py,sha256=o9MyhwcsOKUI1YstEKQ7bFHM5nrVjy873WQcH_OTL-s,309
39
39
  localcosmos_server/api/permissions.py,sha256=HLToMDOGIMYWsRbM1asgw5NUGz7ukABrqGLSJxZEaXI,1303
40
- localcosmos_server/api/serializers.py,sha256=C7yZgyIBrJ9ZaVI2MSx-JpbrYVI5uL0NPdkuH2ty_cg,22487
41
- localcosmos_server/api/urls.py,sha256=YwGSsvIofYWMPuO1e69VEo2W6oOM6TWU4vrv_Z9DuRk,2282
42
- localcosmos_server/api/views.py,sha256=1RSz7r5fGs0VC1fmu0VAk6N6BZ3wncv3fxkOVmY3MOM,26686
40
+ localcosmos_server/api/serializers.py,sha256=dHUfORehvYnE00MJRHpaAwTRuTjVu63ImFTOjgL_5iQ,22885
41
+ localcosmos_server/api/urls.py,sha256=hmqZpCHL4JDS5bn3SoIydPuJq3Bcc-ci3FfVm1mDRc4,2411
42
+ localcosmos_server/api/views.py,sha256=kQmy9rZxbh88ijujGVgS9J-8Y7zJnoCq8_iomtnLjWI,27790
43
43
  localcosmos_server/api/example_files/taxon_profile.json,sha256=SeWCnsAHQejKZoKxBVEelcETd3emYYkuDXjkvJFSUlU,4861
44
44
  localcosmos_server/app_admin/__init__.py,sha256=lMCpmLuBfqI0C1-T9gs-O3BPnl0Kg4L2hPlHDI-uPGs,73
45
45
  localcosmos_server/app_admin/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
@@ -2717,6 +2717,8 @@ localcosmos_server/templates/el_pagination/page_link.html,sha256=bGnXzdHoWF39B5g
2717
2717
  localcosmos_server/templates/el_pagination/previous_link.html,sha256=dpHGyKEKdKozmuVy5JWYD4iuYrNt3iLsEL-JPk1KuKo,187
2718
2718
  localcosmos_server/templates/el_pagination/show_more.html,sha256=vP2Cyf8bErEGgAiXvKaOaonKT7UUobVi1nuxMk8mcaI,429
2719
2719
  localcosmos_server/templates/el_pagination/show_pages.html,sha256=yP_GhLW0YqOHDV3tXwR9MYQtzuEElxiX04YAZLJHzbg,267
2720
+ localcosmos_server/templates/email/contact_staff.html,sha256=GZsmVbuY3ls4tMOGHJdlSyTOc2GM2i1cQbmRL6KBhW8,7605
2721
+ localcosmos_server/templates/email/contact_staff.txt,sha256=c3_q16FXb8ceVcIgB00BffeJKMcZhW38LyL9LI_hqZY,734
2720
2722
  localcosmos_server/templates/email/contact_user.html,sha256=L1woPKmvOrMcBGBcAvPulH7sWKn8BkpDF5dUmDNTU4A,7613
2721
2723
  localcosmos_server/templates/email/contact_user.txt,sha256=VzKH9-nm0ofYg2fp9eOgXgSwLcGOvmv2W0ZITnm0ibY,726
2722
2724
  localcosmos_server/templates/email/registration_confirmation.html,sha256=ALF2M-mmdMXy-kJJmaLyUrjLoZUeI0ShMewUTLFV50s,7657
@@ -2777,8 +2779,8 @@ localcosmos_server/tests/mixins.py,sha256=2k-zCrqndwQLABNULDWRftROij3kwhW_bTiV6r
2777
2779
  localcosmos_server/tests/test_forms.py,sha256=axF1v-T0NGR16St3hueQAuREb2sbWzajdNFQDpFeYqI,9767
2778
2780
  localcosmos_server/tests/test_models.py,sha256=h4d70Ps0hLbcgL6rL1OV_6zxJ_ewDfHgvzJTJDw1m6E,33000
2779
2781
  localcosmos_server/tests/test_views.py,sha256=SaEuAFAfapsSJi1_R6WEgp41MB03sPruCIy_hJ_oGwc,4308
2780
- localcosmos_server-0.24.10.dist-info/licenses/LICENCE,sha256=VnxALPSxXoU59rlNeRdJtwS_nU79IFpVWsZZCQUM4Mw,1086
2781
- localcosmos_server-0.24.10.dist-info/METADATA,sha256=FZb4xNyPq7Nl8thNctVuFRJlj8FlMGs6SHzCc4wr-1w,1687
2782
- localcosmos_server-0.24.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
2783
- localcosmos_server-0.24.10.dist-info/top_level.txt,sha256=hNVjlPGCtXvUF5CJY5HOFA_Dh5fYivfqVSyFMUDkqPY,19
2784
- localcosmos_server-0.24.10.dist-info/RECORD,,
2782
+ localcosmos_server-0.24.11.dist-info/licenses/LICENCE,sha256=VnxALPSxXoU59rlNeRdJtwS_nU79IFpVWsZZCQUM4Mw,1086
2783
+ localcosmos_server-0.24.11.dist-info/METADATA,sha256=Ju41rDZ2U_S490bvvj7PRxs9a_xgCDmq754UQAkiKK8,1687
2784
+ localcosmos_server-0.24.11.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
2785
+ localcosmos_server-0.24.11.dist-info/top_level.txt,sha256=hNVjlPGCtXvUF5CJY5HOFA_Dh5fYivfqVSyFMUDkqPY,19
2786
+ localcosmos_server-0.24.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5