wbcore 1.56.5__py2.py3-none-any.whl → 1.56.7__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.
@@ -27,6 +27,7 @@ from wbcore.contrib.directory.models.contacts import (
27
27
  BankingContact,
28
28
  ContactLocationChoices,
29
29
  EmailContact,
30
+ SocialMediaContact,
30
31
  TelephoneContact,
31
32
  WebsiteContact,
32
33
  )
@@ -245,10 +246,6 @@ class EntryDefaultQueryset(models.QuerySet):
245
246
  EmailContact.objects.filter(primary=True, entry__id=OuterRef("pk")).values("address")[:1],
246
247
  output_field=CharField(),
247
248
  ),
248
- secondary_email=Subquery(
249
- EmailContact.objects.filter(primary=False, entry__id=OuterRef("pk")).values("address")[:1],
250
- output_field=CharField(),
251
- ),
252
249
  primary_telephone=Subquery(
253
250
  TelephoneContact.objects.filter(primary=True, entry__id=OuterRef("pk")).values("number")[:1],
254
251
  output_field=CharField(),
@@ -263,6 +260,14 @@ class EntryDefaultQueryset(models.QuerySet):
263
260
  .values("primary_address")[:1],
264
261
  output_field=CharField(),
265
262
  ),
263
+ primary_website=Subquery(
264
+ WebsiteContact.objects.filter(primary=True, entry__id=OuterRef("pk")).values("url")[:1],
265
+ output_field=CharField(),
266
+ ),
267
+ primary_social=Subquery(
268
+ SocialMediaContact.objects.filter(primary=True, entry__id=OuterRef("pk")).values("url")[:1],
269
+ output_field=CharField(),
270
+ ),
266
271
  last_event=Subquery(
267
272
  CalendarItem.objects.filter(
268
273
  period__endswith__lte=timezone.now(),
@@ -26,10 +26,8 @@ class CompanyModelSerializer(EntryModelSerializer):
26
26
  many=True,
27
27
  )
28
28
  _employees = PersonRepresentationSerializer(source="employees", many=True)
29
- is_primary_employer = wb_serializers.BooleanField(default=False, read_only=True)
30
- tier = wb_serializers.CharField(
31
- help_text=settings.DEFAULT_TIERING_HELP_TEXT, required=False, read_only=True, label=_("Tier")
32
- )
29
+ is_primary_employer = wb_serializers.BooleanField(read_only=True)
30
+ tier = wb_serializers.CharField(help_text=settings.DEFAULT_TIERING_HELP_TEXT, label=_("Tier"), required=False)
33
31
  _type = CompanyTypeRepresentationSerializer(source="type")
34
32
 
35
33
  @wb_serializers.register_resource()
@@ -63,6 +61,8 @@ class CompanyModelSerializer(EntryModelSerializer):
63
61
  "primary_email",
64
62
  "primary_manager_repr",
65
63
  "primary_telephone",
64
+ "primary_website",
65
+ "primary_social",
66
66
  "profile_image",
67
67
  "salutation",
68
68
  "signature",
@@ -77,7 +77,7 @@ class CompanyModelSerializer(EntryModelSerializer):
77
77
 
78
78
  class CompanyModelListSerializer(CompanyModelSerializer):
79
79
  eer_id = wb_serializers.CharField(default="", required=False, read_only=True)
80
- is_primary_employer = wb_serializers.BooleanField(default=False, read_only=True)
80
+ is_primary_employer = wb_serializers.BooleanField(read_only=True)
81
81
 
82
82
  @wb_serializers.register_resource()
83
83
  def delete(self, instance, request, user):
@@ -127,7 +127,12 @@ class CompanyModelListSerializer(CompanyModelSerializer):
127
127
  "_customer_status",
128
128
  "eer_id",
129
129
  "is_primary_employer",
130
+ "primary_address",
131
+ "primary_email",
130
132
  "primary_manager_repr",
133
+ "primary_telephone",
134
+ "primary_website",
135
+ "primary_social",
131
136
  "last_event",
132
137
  "last_event_period_endswith",
133
138
  "tier",
@@ -138,10 +143,12 @@ class CompanyModelListSerializer(CompanyModelSerializer):
138
143
 
139
144
 
140
145
  class BankModelSerializer(wb_serializers.ModelSerializer):
141
- primary_address = wb_serializers.CharField(allow_null=True, default="", label=_("Primary Address"), read_only=True)
142
- primary_email = wb_serializers.CharField(allow_null=True, default="", label=_("Primary Email"), read_only=True)
146
+ primary_address = wb_serializers.CharField(
147
+ allow_null=True, label=_("Primary Address"), read_only=True, required=False
148
+ )
149
+ primary_email = wb_serializers.CharField(allow_null=True, label=_("Primary Email"), required=False, read_only=True)
143
150
  primary_telephone = wb_serializers.TelephoneField(
144
- allow_null=True, default="", label=_("Primary Telephone"), read_only=True
151
+ allow_null=True, label=_("Primary Telephone"), read_only=True, required=False
145
152
  )
146
153
  _relationship_managers = PersonRepresentationSerializer(many=True, source="relationship_managers")
147
154
 
@@ -181,7 +181,7 @@ class EntryModelSerializer(wb_serializers.ModelSerializer):
181
181
  read_only=True,
182
182
  required=False,
183
183
  )
184
- is_primary_employer = wb_serializers.BooleanField(default=False, read_only=True)
184
+ is_primary_employer = wb_serializers.BooleanField(read_only=True)
185
185
  position_in_company = wb_serializers.CharField(
186
186
  allow_null=True,
187
187
  default="",
@@ -192,19 +192,26 @@ class EntryModelSerializer(wb_serializers.ModelSerializer):
192
192
  read_only=True,
193
193
  required=False,
194
194
  )
195
- primary_address = wb_serializers.CharField(default="", label=_("Primary Address"), read_only=True)
196
- primary_email = wb_serializers.CharField(allow_null=True, default="", label=_("Primary Email"), read_only=False)
197
- primary_manager_repr = wb_serializers.CharField(label=_("Primary Manager"), read_only=True)
198
- primary_telephone = wb_serializers.TelephoneField(allow_null=True, default="", label=_("Primary Telephone"))
195
+ primary_address = wb_serializers.CharField(
196
+ allow_null=True, read_only=True, required=False, label=_("Primary Address")
197
+ )
198
+ primary_email = wb_serializers.CharField(
199
+ allow_null=True, required=False, read_only=False, label=_("Primary Email")
200
+ )
201
+ primary_manager_repr = wb_serializers.CharField(
202
+ allow_null=True, read_only=True, required=False, label=_("Primary Manager")
203
+ )
204
+ primary_telephone = wb_serializers.TelephoneField(
205
+ allow_null=True,
206
+ required=False,
207
+ label=_("Primary Telephone"),
208
+ )
209
+ primary_website = wb_serializers.URLField(allow_null=True, required=False, label=_("Primary Website"))
210
+ primary_social = wb_serializers.URLField(allow_null=True, required=False, label=_("Primary Social"))
199
211
  profile_image = wb_serializers.ImageField(allow_null=True, required=False, label=_("Profile Image"))
200
212
  _relationship_managers = PersonRepresentationSerializer(many=True, source="relationship_managers")
201
213
  _social_media = SocialMediaContactRepresentationSerializer(many=True, read_only=True, source="social_media")
202
- primary_manager = wb_serializers.PrimaryKeyRelatedField(
203
- queryset=lambda: Person.objects.filter_only_internal(),
204
- default=wb_serializers.CurrentUserDefault("profile"),
205
- label=_("Primary Manager"),
206
- required=False,
207
- )
214
+ primary_manager = wb_serializers.PrimaryKeyRelatedField(label=_("Primary Manager"), required=False, read_only=True)
208
215
  _primary_manager = InternalUserProfileRepresentationSerializer(source="primary_manager")
209
216
 
210
217
  @wb_serializers.register_resource()
@@ -333,6 +340,8 @@ class EntryModelSerializer(wb_serializers.ModelSerializer):
333
340
  "primary_email",
334
341
  "primary_manager_repr",
335
342
  "primary_telephone",
343
+ "primary_website",
344
+ "primary_social",
336
345
  "profile_image",
337
346
  "relationship_managers",
338
347
  "_relationship_managers",
@@ -9,8 +9,10 @@ from ..models import Entry
9
9
  class EntryRepresentationSerializer(wb_serializers.RepresentationSerializer):
10
10
  _detail = wb_serializers.SerializerMethodField()
11
11
  _detail_preview = wb_serializers.HyperlinkField(reverse_name="wbcore:directory:entry-detail")
12
- primary_email = wb_serializers.CharField(default="", label=_("Primary Email"), allow_null=True)
13
- primary_telephone = wb_serializers.TelephoneField(default="", label=_("Primary Telephone"), allow_null=True)
12
+ primary_email = wb_serializers.CharField(read_only=True, required=False, label=_("Primary Email"), allow_null=True)
13
+ primary_telephone = wb_serializers.TelephoneField(
14
+ read_only=True, required=False, label=_("Primary Telephone"), allow_null=True
15
+ )
14
16
 
15
17
  def get__detail(self, obj):
16
18
  if obj.is_company:
@@ -15,13 +15,10 @@ from .relationships import PositionRepresentationSerializer
15
15
 
16
16
 
17
17
  class PersonModelSerializer(ModelTranslateSerializerMixin, EntryModelSerializer):
18
- activites_count = wb_serializers.IntegerField(default=0, read_only=True)
19
-
20
18
  primary_employer_repr = wb_serializers.CharField(read_only=True, required=False, label=_("Primary Employer"))
21
19
  has_user_account = wb_serializers.CharField(read_only=True, label=_("User Account"))
22
20
  name = wb_serializers.CharField(read_only=True)
23
21
  last_connection = wb_serializers.DateTimeField(read_only=True, default=None, label=_("Last Connection"))
24
- secondary_email = wb_serializers.CharField(default="", label=_("Secondary Email"), allow_null=True, read_only=True)
25
22
  personality_profile_red = wb_serializers.RangeSelectField(
26
23
  color=WBColor.RED_LIGHT.value, required=False, label=_("Personality Profile Red")
27
24
  )
@@ -32,7 +29,7 @@ class PersonModelSerializer(ModelTranslateSerializerMixin, EntryModelSerializer)
32
29
  color=WBColor.BLUE_LIGHT.value, required=False, label=_("Personality Profile Blue")
33
30
  )
34
31
  _specializations = SpecializationRepresentationSerializer(source="specializations", many=True)
35
- tier = wb_serializers.CharField(read_only=True, help_text=_("Tier of the primary employer"), label=_("Tier"))
32
+ tier = wb_serializers.CharField(help_text=_("Tier of the primary employer"), label=_("Tier"), required=False)
36
33
 
37
34
  def get_user_account_email(self, obj):
38
35
  if hasattr(obj, "user_account"):
@@ -82,7 +79,6 @@ class PersonModelSerializer(ModelTranslateSerializerMixin, EntryModelSerializer)
82
79
  "name",
83
80
  "computed_str",
84
81
  "active_employee",
85
- "activites_count",
86
82
  "activity_heat",
87
83
  "addresses",
88
84
  "cities",
@@ -104,9 +100,10 @@ class PersonModelSerializer(ModelTranslateSerializerMixin, EntryModelSerializer)
104
100
  "primary_manager_repr",
105
101
  "primary_employer_repr",
106
102
  "primary_telephone",
103
+ "primary_website",
104
+ "primary_social",
107
105
  "profile_image",
108
106
  "salutation",
109
- "secondary_email",
110
107
  "specializations",
111
108
  "_specializations",
112
109
  "tier",
@@ -204,12 +201,14 @@ class PersonModelListSerializer(PersonModelSerializer):
204
201
  "_cities",
205
202
  "customer_status",
206
203
  "primary_employer_repr",
204
+ "primary_address",
205
+ "primary_email",
207
206
  "primary_manager_repr",
207
+ "primary_website",
208
+ "primary_social",
209
+ "primary_telephone",
208
210
  "last_event",
209
211
  "position_in_company",
210
- "primary_email",
211
- "primary_telephone",
212
- "primary_telephone",
213
212
  "tier",
214
213
  "_additional_resources",
215
214
  )
@@ -285,13 +285,23 @@ class PersonModelDisplay(EntryModelDisplay):
285
285
  return dp.ListDisplay(
286
286
  fields=[
287
287
  dp.Field(key="name", label=_("Name")),
288
- dp.Field(key="primary_employer_repr", label=_("Primary Employer")),
289
288
  dp.Field(key="customer_status", label=_("Status")),
290
289
  dp.Field(key="position_in_company", label=_("Position")),
291
290
  dp.Field(key="cities", label=_("City")),
292
- dp.Field(key="primary_telephone", label=_("Primary Phone Number")),
293
291
  dp.Field(key="tier", label=_("Tier")),
294
- dp.Field(key="primary_manager_repr", label=_("Primary Relationship Manager")),
292
+ dp.Field(
293
+ key=None,
294
+ label=_("Primary Contacts"),
295
+ children=[
296
+ dp.Field(key="primary_employer_repr", label=_("Primary Employer")),
297
+ dp.Field(key="primary_manager_repr", label=_("Relationship Manager")),
298
+ dp.Field(key="primary_telephone", label=_("Telephone")),
299
+ dp.Field(key="primary_email", label=_("Email")),
300
+ dp.Field(key="primary_address", label=_("Address"), show="open"),
301
+ dp.Field(key="primary_website", label=_("Website"), show="open"),
302
+ dp.Field(key="primary_social", label=_("Social"), show="open"),
303
+ ],
304
+ ),
295
305
  dp.Field(
296
306
  key=None,
297
307
  label=_("Last Event"),
@@ -468,7 +478,18 @@ class CompanyModelDisplay(EntryModelDisplay):
468
478
  dp.Field(key="type", label=_("Type")),
469
479
  dp.Field(key="tier", label=_("Tier")),
470
480
  dp.Field(key="customer_status", label=_("Status")),
471
- dp.Field(key="primary_manager_repr", label=_("Primary Relationship Manager")),
481
+ dp.Field(
482
+ key=None,
483
+ label=_("Primary Contacts"),
484
+ children=[
485
+ dp.Field(key="primary_manager_repr", label=_("Relationship Manager")),
486
+ dp.Field(key="primary_telephone", label=_("Telephone")),
487
+ dp.Field(key="primary_email", label=_("Email")),
488
+ dp.Field(key="primary_address", label=_("Address"), show="open"),
489
+ dp.Field(key="primary_website", label=_("Website"), show="open"),
490
+ dp.Field(key="primary_social", label=_("Social"), show="open"),
491
+ ],
492
+ ),
472
493
  dp.Field(
473
494
  key=None,
474
495
  label=_("Last Event"),
@@ -150,11 +150,10 @@ class PersonModelViewSet(ModelTranslateMixin, EntryModelViewSet):
150
150
  return super().get_serializer_class()
151
151
 
152
152
  def get_queryset(self):
153
- return (
154
- super()
155
- .get_queryset()
156
- .annotate(last_connection=Coalesce(UserActivity.get_latest_login_datetime_subquery(), None))
157
- )
153
+ qs = super().get_queryset()
154
+ if "pk" in self.kwargs:
155
+ qs = qs.annotate(last_connection=Coalesce(UserActivity.get_latest_login_datetime_subquery(), None))
156
+ return qs
158
157
 
159
158
 
160
159
  class CompanyModelViewSet(EntryModelViewSet):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbcore
3
- Version: 1.56.5
3
+ Version: 1.56.7
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  Requires-Dist: boto3==1.35.*
6
6
  Requires-Dist: celery[redis]==5.*
@@ -318,17 +318,17 @@ wbcore/contrib/directory/migrations/0013_alter_clientmanagerrelationship_options
318
318
  wbcore/contrib/directory/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
319
319
  wbcore/contrib/directory/models/__init__.py,sha256=XtnmU5YUr3SGig6PsSfGsWUaiBaX6kaHShBv3sbxZ14,526
320
320
  wbcore/contrib/directory/models/contacts.py,sha256=8KVCmzNARTzeQgRtXe78QKhJr0SvEJ-aZcsRuYaMIbE,18322
321
- wbcore/contrib/directory/models/entries.py,sha256=Zu4xt3q05tKk6t4Q2BwAMXPsqNdNbRB77in63yoVIUc,31664
321
+ wbcore/contrib/directory/models/entries.py,sha256=S53zghpS18sqZGquAEirMGVuenHhq2Yhdh8ijTScPCw,31904
322
322
  wbcore/contrib/directory/models/relationships.py,sha256=7SZFo1tA7NRzS7_gv_fKwMsPPhawu90eWSrEvij_0rk,22108
323
323
  wbcore/contrib/directory/release_notes/1_0_0.md,sha256=Twbl9RMLO6dbbm5dVoKorw8BecRqAYsKeobcNmDWHu8,165
324
324
  wbcore/contrib/directory/release_notes/1_0_1.md,sha256=yHolV-HwBmIavaPn9pg0ABRgxQ-eKIuiAs-phKb_ix0,285
325
325
  wbcore/contrib/directory/release_notes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
326
326
  wbcore/contrib/directory/serializers/__init__.py,sha256=36WcX6aHrBuZXVWR0JSCeCCvJin_jOEaiwuSYBSs5eo,2131
327
- wbcore/contrib/directory/serializers/companies.py,sha256=lJpBsdjyh9t-Xgyp-xeirJdvdWWnQDAzW60icHiVuFE,5566
327
+ wbcore/contrib/directory/serializers/companies.py,sha256=Bvxex_tq5lyR3k9Ox_Z2AnRQVyhPM0l1bdClJAjeEdo,5747
328
328
  wbcore/contrib/directory/serializers/contacts.py,sha256=Q-3lmivmS4ci9XP-65lO1d06Gm6cQMgPH3YA8FY71ZE,15205
329
- wbcore/contrib/directory/serializers/entries.py,sha256=cDU9RLcdC9mNh9cgMUwQFQI5PSubvz9OSfrzKvsghZA,13324
330
- wbcore/contrib/directory/serializers/entry_representations.py,sha256=az0qn45ur3dRt8HhEOpt67iu3dWiclW0zragtho6F5E,1343
331
- wbcore/contrib/directory/serializers/persons.py,sha256=NE_nc038TmovJOjaxhxi4OW-Fb7U5jXVPDF71qaB12M,7781
329
+ wbcore/contrib/directory/serializers/entries.py,sha256=QV_hlstwFWvhp-uiVPn3xMt0bES_6gKJs4rf_CVHIn0,13584
330
+ wbcore/contrib/directory/serializers/entry_representations.py,sha256=Pj8j4HYDINvXlLZ7onBypF2ZOK_GGzFZevd-yzESqoU,1397
331
+ wbcore/contrib/directory/serializers/persons.py,sha256=YtUgKKeijvV87JLtgeQtxmyk21COLQjSrb5klBw_EXQ,7641
332
332
  wbcore/contrib/directory/serializers/relationships.py,sha256=jGrjy8M8kaxNRHHJ0HiDMdD_-wZFwioRJabCpCwHZ4U,12390
333
333
  wbcore/contrib/directory/static/directory/markdown/documentation/address.md,sha256=gfUVi2PZh5uQ5sWkLG-AxYV9ULWeswRp3E2Me4fEs88,1865
334
334
  wbcore/contrib/directory/static/directory/markdown/documentation/banking.md,sha256=5jgF1tqTGdr4fRaXCtobtpFEx0xcSmVYkKvzVALp4L8,28387
@@ -365,7 +365,7 @@ wbcore/contrib/directory/tests/e2e/__init__.py,sha256=9KFYfXVP_0BwaYFvKQS4P_UMIA
365
365
  wbcore/contrib/directory/tests/e2e/e2e_directory_utility.py,sha256=zX71WsMmxQNW9ZLI-TMuxHmiY8PEZoBLt1ztqFSUDSE,7252
366
366
  wbcore/contrib/directory/viewsets/__init__.py,sha256=U6f6zuZCtv0ohtLkVYqNNqKl2vk7cugXXoxlPKULA9k,1878
367
367
  wbcore/contrib/directory/viewsets/contacts.py,sha256=LmQ_jK-SYG7u0A7DqBrNBTvRasvKtksE9JUVWLPW2OY,14428
368
- wbcore/contrib/directory/viewsets/entries.py,sha256=vZI0I-t4cYkPfIDeBl0Z19RfFTwNt2MFJu6UC2ag3w8,6762
368
+ wbcore/contrib/directory/viewsets/entries.py,sha256=U56N4abi7Eu4VbH2RAKpB-4fY7gZywmyxmY2s1bshVQ,6780
369
369
  wbcore/contrib/directory/viewsets/mixins.py,sha256=8QI6mBpPxykVCvqABDZeQ0n7diHYoMafNH4ZMdCtC4c,353
370
370
  wbcore/contrib/directory/viewsets/relationships.py,sha256=jy73aCven25PbLoy3-KTjnAxdItyYZdfkVoClz5ogc4,10045
371
371
  wbcore/contrib/directory/viewsets/utils.py,sha256=2i7rIT8qMCD-ajT-uNN7Re4uMRwijrzvblokedJnwOw,3400
@@ -375,7 +375,7 @@ wbcore/contrib/directory/viewsets/buttons/entries.py,sha256=X7tH209qPojFNlBiE8hU
375
375
  wbcore/contrib/directory/viewsets/buttons/relationships.py,sha256=Q1vLLA9ZGt-s29Of8dj24IlMQzDzW_sMPU7n_F00DuY,2786
376
376
  wbcore/contrib/directory/viewsets/display/__init__.py,sha256=NiC0d1-RjPIYEzkGAQzThNFQeYv5UAW3aKL9j_lFV38,945
377
377
  wbcore/contrib/directory/viewsets/display/contacts.py,sha256=2PBSxVmbq_26LyhSTWrpjNv9cxKz7w086BqoVX7SDs4,13449
378
- wbcore/contrib/directory/viewsets/display/entries.py,sha256=ZWtDnKYxfjUPxoQ1O_7tOv5XhzdWRD-zZsI_miAHOjk,23171
378
+ wbcore/contrib/directory/viewsets/display/entries.py,sha256=tMqdgklK_YjqQ6at2c4aBBf_yvx5PoxvPjWpIqVZw_Q,24295
379
379
  wbcore/contrib/directory/viewsets/display/relationships.py,sha256=-s3ABMIGmbvmAOe8CRJqVv8RpKaMw7xeoy0HSvo0kRQ,11587
380
380
  wbcore/contrib/directory/viewsets/display/utils.py,sha256=5sMFdEXUfanKp60IvTyO4YLqFlEUz9fGMldoqTYTnwU,830
381
381
  wbcore/contrib/directory/viewsets/endpoints/__init__.py,sha256=0z1LYIrLQvIcs2qZEfD2SYB6tqycmSQjlJ4NwZgd0JY,647
@@ -1229,6 +1229,6 @@ wbcore/viewsets/generics.py,sha256=lKDq9UY_Tyc56u1bqaIEvHGgoaXwXxpZ1c3fLVteptI,1
1229
1229
  wbcore/viewsets/mixins.py,sha256=IdHd_uixOv3ExKoHxTgL5Bt8OELIwfYwhBZm0nsvZfc,12054
1230
1230
  wbcore/viewsets/utils.py,sha256=4520Ij3ASM8lOa8QZkCqbBfOexVRiZu688eW-PGqMOA,882
1231
1231
  wbcore/viewsets/viewsets.py,sha256=FPPESunEjlunDr5VFsjTfsquTS3iDSQkw0H6QjMKPqk,6574
1232
- wbcore-1.56.5.dist-info/METADATA,sha256=lITdRxKpfiRBHBDXsNkiri2OD7p4wnfHcCrzkwMFODE,2332
1233
- wbcore-1.56.5.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
1234
- wbcore-1.56.5.dist-info/RECORD,,
1232
+ wbcore-1.56.7.dist-info/METADATA,sha256=wUZw8P3Rfudayh6ulfJYieR4lWeV-w62wavr1ocxJDk,2332
1233
+ wbcore-1.56.7.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
1234
+ wbcore-1.56.7.dist-info/RECORD,,