fiddler-client 3.8.1__tar.gz → 3.8.3__tar.gz

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 (119) hide show
  1. {fiddler-client-3.8.1/fiddler_client.egg-info → fiddler-client-3.8.3}/PKG-INFO +1 -1
  2. fiddler-client-3.8.3/fiddler/VERSION +1 -0
  3. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/libs/http_client.py +3 -3
  4. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/webhook.py +1 -1
  5. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_webhook.py +19 -15
  6. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/constants.py +2 -1
  7. {fiddler-client-3.8.1 → fiddler-client-3.8.3/fiddler_client.egg-info}/PKG-INFO +1 -1
  8. fiddler-client-3.8.1/fiddler/VERSION +0 -1
  9. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/LICENSE.txt +0 -0
  10. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/MANIFEST.in +0 -0
  11. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/PUBLIC.md +0 -0
  12. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/README.md +0 -0
  13. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/__init__.py +0 -0
  14. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/configs.py +0 -0
  15. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/connection.py +0 -0
  16. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/__init__.py +0 -0
  17. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/alert_rule.py +0 -0
  18. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/baseline.py +0 -0
  19. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/common.py +0 -0
  20. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/dataset.py +0 -0
  21. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/events.py +0 -0
  22. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/job.py +0 -0
  23. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/model.py +0 -0
  24. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/model_deployment.py +0 -0
  25. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/constants/xai.py +0 -0
  26. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/decorators.py +0 -0
  27. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/__init__.py +0 -0
  28. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/alert_record.py +0 -0
  29. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/alert_rule.py +0 -0
  30. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/base.py +0 -0
  31. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/baseline.py +0 -0
  32. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/custom_expression.py +0 -0
  33. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/dataset.py +0 -0
  34. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/events.py +0 -0
  35. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/file.py +0 -0
  36. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/job.py +0 -0
  37. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/model.py +0 -0
  38. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/model_artifact.py +0 -0
  39. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/model_deployment.py +0 -0
  40. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/organization.py +0 -0
  41. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/project.py +0 -0
  42. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/surrogate.py +0 -0
  43. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/user.py +0 -0
  44. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/webhook.py +0 -0
  45. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/entities/xai.py +0 -0
  46. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/exceptions.py +0 -0
  47. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/libs/__init__.py +0 -0
  48. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/libs/aws.py +0 -0
  49. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/libs/json_encoder.py +0 -0
  50. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/libs/semver.py +0 -0
  51. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/packtools/__init__.py +0 -0
  52. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/packtools/gem.py +0 -0
  53. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/packtools/keras_ig_helpers.py +0 -0
  54. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/packtools/project_attributions_helpers.py +0 -0
  55. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/packtools/template_model.py +0 -0
  56. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/__init__.py +0 -0
  57. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/alert_record.py +0 -0
  58. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/alert_rule.py +0 -0
  59. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/base.py +0 -0
  60. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/baseline.py +0 -0
  61. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/custom_expression.py +0 -0
  62. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/custom_features.py +0 -0
  63. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/dataset.py +0 -0
  64. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/events.py +0 -0
  65. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/file.py +0 -0
  66. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/filter_query.py +0 -0
  67. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/job.py +0 -0
  68. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/model.py +0 -0
  69. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/model_deployment.py +0 -0
  70. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/model_schema.py +0 -0
  71. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/model_spec.py +0 -0
  72. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/model_task_params.py +0 -0
  73. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/organization.py +0 -0
  74. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/project.py +0 -0
  75. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/response.py +0 -0
  76. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/server_info.py +0 -0
  77. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/user.py +0 -0
  78. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/xai.py +0 -0
  79. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/schemas/xai_params.py +0 -0
  80. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/__init__.py +0 -0
  81. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/__init__.py +0 -0
  82. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_alert_record.py +0 -0
  83. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_alert_rule.py +0 -0
  84. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_baseline.py +0 -0
  85. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_custom_metric.py +0 -0
  86. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_dataset.py +0 -0
  87. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_events.py +0 -0
  88. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_files.py +0 -0
  89. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_generate_model.py +0 -0
  90. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_job.py +0 -0
  91. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_mixin.py +0 -0
  92. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_model.py +0 -0
  93. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_model_artifact.py +0 -0
  94. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_model_deployment.py +0 -0
  95. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_model_surrogate.py +0 -0
  96. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_project.py +0 -0
  97. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_segment.py +0 -0
  98. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/apis/test_xai.py +0 -0
  99. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/conftest.py +0 -0
  100. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/test_connection.py +0 -0
  101. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/test_json_encoder.py +0 -0
  102. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/test_logger.py +0 -0
  103. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/test_sagemaker_auth.py +0 -0
  104. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/test_utils.py +0 -0
  105. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/tests/utils.py +0 -0
  106. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/__init__.py +0 -0
  107. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/decorators.py +0 -0
  108. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/helpers.py +0 -0
  109. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/logger.py +0 -0
  110. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/model_generator.py +0 -0
  111. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/validations.py +0 -0
  112. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/utils/version.py +0 -0
  113. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler/version.py +0 -0
  114. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler_client.egg-info/SOURCES.txt +0 -0
  115. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler_client.egg-info/dependency_links.txt +0 -0
  116. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler_client.egg-info/requires.txt +0 -0
  117. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/fiddler_client.egg-info/top_level.txt +0 -0
  118. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/setup.cfg +0 -0
  119. {fiddler-client-3.8.1 → fiddler-client-3.8.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 3.8.1
3
+ Version: 3.8.3
4
4
  Summary: Python client for Fiddler Platform
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -0,0 +1 @@
1
+ 3.8.3
@@ -268,7 +268,7 @@ class RequestClient:
268
268
  # message as part of the new exception message.
269
269
  raise BaseError(
270
270
  f'{method} {url}: giving up after {cycle} attempt(s) / {timer() - t0:.2f} s'
271
- + f', last error: {last_exception}'
271
+ + f', last error: {last_exception}. Timeout can be increased by setting it in fdl.init()'
272
272
  ) from last_exception
273
273
 
274
274
  def _make_request_retry_guts(
@@ -375,7 +375,7 @@ class RequestClient:
375
375
  resp = self.session.send(req, **kwargs)
376
376
  except requests.exceptions.RequestException as exc:
377
377
  if retry_strategy == 'off':
378
- log.info('%s error after %.1f s: %s', logpfx, timer() - t0, exc)
378
+ log.info('%s error after %.1f s: %s . Timeout can be increased by setting it in fdl.init()', logpfx, timer() - t0, exc)
379
379
  # Do not retry, let the caller deal with this exception.
380
380
  raise
381
381
 
@@ -401,7 +401,7 @@ class RequestClient:
401
401
 
402
402
  # Convention: returning the exception tells the caller to retry.
403
403
  log.info(
404
- '%s retryable error after %.1f s: %s',
404
+ '%s retryable error after %.1f s: %s . Timeout can be increased by setting it in fdl.init()',
405
405
  logpfx,
406
406
  timer() - t0,
407
407
  exc,
@@ -2,7 +2,7 @@ import enum
2
2
  from datetime import datetime
3
3
  from uuid import UUID
4
4
 
5
- from pydantic.fields import Field
5
+ from pydantic.v1 import Field
6
6
 
7
7
  from fiddler.schemas.base import BaseModel
8
8
 
@@ -13,6 +13,7 @@ from fiddler.tests.constants import (
13
13
  ORG_NAME,
14
14
  URL,
15
15
  WEBHOOK_ID,
16
+ WEBHOOK_UUID,
16
17
  WEBHOOK_NAME,
17
18
  WEBHOOK_PROVIDER,
18
19
  WEBHOOK_URL,
@@ -21,6 +22,7 @@ from fiddler.tests.constants import (
21
22
  API_RESPONSE_200 = {
22
23
  'data': {
23
24
  'id': WEBHOOK_ID,
25
+ 'uuid': WEBHOOK_UUID,
24
26
  'name': WEBHOOK_NAME,
25
27
  'url': WEBHOOK_URL,
26
28
  'provider': WEBHOOK_PROVIDER,
@@ -62,6 +64,7 @@ API_RESPONSE_FROM_NAME = {
62
64
  # and `id` is of type UUID. Should we allow for additional
63
65
  # properties?
64
66
  'id': WEBHOOK_ID,
67
+ 'uuid': WEBHOOK_UUID,
65
68
  'name': WEBHOOK_NAME,
66
69
  'url': WEBHOOK_URL,
67
70
  'provider': WEBHOOK_PROVIDER,
@@ -85,6 +88,7 @@ LIST_API_RESPONSE = {
85
88
  API_RESPONSE_200['data'],
86
89
  {
87
90
  'id': WEBHOOK_ID,
91
+ 'uuid': WEBHOOK_UUID,
88
92
  'name': 'test_webhook_config_name2',
89
93
  'url': WEBHOOK_URL,
90
94
  'provider': WEBHOOK_PROVIDER,
@@ -128,10 +132,10 @@ API_RESPONSE_409 = {
128
132
  @responses.activate
129
133
  def test_get_webhook_success() -> None:
130
134
  responses.get(
131
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
135
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
132
136
  json=API_RESPONSE_200,
133
137
  )
134
- webhook = Webhook.get(id_=WEBHOOK_ID)
138
+ webhook = Webhook.get(id_=WEBHOOK_UUID)
135
139
  assert isinstance(webhook, Webhook)
136
140
 
137
141
 
@@ -213,7 +217,7 @@ def test_add_webhook_success() -> None:
213
217
  name=WEBHOOK_NAME, url=WEBHOOK_URL, provider=WEBHOOK_PROVIDER
214
218
  ).create()
215
219
  assert isinstance(webhook, Webhook)
216
- assert webhook.id == UUID(WEBHOOK_ID)
220
+ assert webhook.id == UUID(WEBHOOK_UUID)
217
221
  assert webhook.name == WEBHOOK_NAME
218
222
  assert webhook.created_at == datetime.fromisoformat(
219
223
  API_RESPONSE_200['data']['created_at']
@@ -246,14 +250,14 @@ def test_add_webhook_conflict() -> None:
246
250
  @responses.activate
247
251
  def test_update_webhook_success(mocker) -> None:
248
252
  responses.get(
249
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
253
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
250
254
  json=API_RESPONSE_200,
251
255
  )
252
- webhook = Webhook.get(id_=WEBHOOK_ID)
256
+ webhook = Webhook.get(id_=WEBHOOK_UUID)
253
257
 
254
258
  mocker.patch.dict(API_RESPONSE_200['data'], {'name': 'test1'})
255
259
  responses.patch(
256
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
260
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
257
261
  json=API_RESPONSE_200,
258
262
  )
259
263
  webhook.name = 'test1'
@@ -266,31 +270,31 @@ def test_update_webhook_success(mocker) -> None:
266
270
  @responses.activate
267
271
  def test_update_webhook_not_found() -> None:
268
272
  responses.get(
269
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
273
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
270
274
  json=API_RESPONSE_200,
271
275
  )
272
276
 
273
277
  responses.patch(
274
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
278
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
275
279
  json=API_RESPONSE_404,
276
280
  status=HTTPStatus.NOT_FOUND,
277
281
  )
278
282
 
279
283
  with pytest.raises(NotFound):
280
- webhook = Webhook.get(id_=WEBHOOK_ID)
284
+ webhook = Webhook.get(id_=WEBHOOK_UUID)
281
285
  webhook.update()
282
286
 
283
287
 
284
288
  @responses.activate
285
289
  def test_delete_webhook() -> None:
286
290
  responses.get(
287
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
291
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
288
292
  json=API_RESPONSE_200,
289
293
  )
290
- webhook = Webhook.get(id_=WEBHOOK_ID)
294
+ webhook = Webhook.get(id_=WEBHOOK_UUID)
291
295
 
292
296
  responses.delete(
293
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
297
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
294
298
  json={},
295
299
  )
296
300
  response = webhook.delete()
@@ -300,13 +304,13 @@ def test_delete_webhook() -> None:
300
304
  @responses.activate
301
305
  def test_delete_webhook_not_found() -> None:
302
306
  responses.get(
303
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
307
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
304
308
  json=API_RESPONSE_200,
305
309
  )
306
- webhook = Webhook.get(id_=WEBHOOK_ID)
310
+ webhook = Webhook.get(id_=WEBHOOK_UUID)
307
311
 
308
312
  responses.delete(
309
- url=f'{URL}/v2/webhooks/{WEBHOOK_ID}',
313
+ url=f'{URL}/v2/webhooks/{WEBHOOK_UUID}',
310
314
  json=API_RESPONSE_404,
311
315
  status=HTTPStatus.NOT_FOUND,
312
316
  )
@@ -30,7 +30,8 @@ TEST_WEBHOOKS = [
30
30
  ]
31
31
  BASELINE_NAME = 'test_baseline'
32
32
  MODEL_DEPLOYMENT_ID = 'fc07562a-1a27-4f66-9154-732d3b14b98a'
33
- WEBHOOK_ID = 'a5b654eb-15c8-43c8-9d50-9ba6eea9a0ff'
33
+ WEBHOOK_UUID: str = 'a5b654eb-15c8-43c8-9d50-9ba6eea9a0ff'
34
+ WEBHOOK_ID: int = 1
34
35
  WEBHOOK_NAME = 'test_webhook_config_name'
35
36
  WEBHOOK_URL = 'https://www.slack.com'
36
37
  WEBHOOK_PROVIDER = 'SLACK'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 3.8.1
3
+ Version: 3.8.3
4
4
  Summary: Python client for Fiddler Platform
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -1 +0,0 @@
1
- 3.8.1
File without changes
File without changes
File without changes
File without changes