stoobly-agent 0.33.3__py3-none-any.whl → 0.33.4__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.
stoobly_agent/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
1
  COMMAND = 'stoobly-agent'
2
- VERSION = '0.33.3'
2
+ VERSION = '0.33.4'
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import pdb
3
+ import uuid
3
4
 
4
5
  from datetime import datetime
5
6
  from urllib.parse import urlparse
@@ -63,6 +64,7 @@ class RequestsController:
63
64
  request, status = request_model.create(**{
64
65
  **create_params,
65
66
  'scenario_id': scenario_id,
67
+ 'uuid': str(uuid.uuid4()),
66
68
  })
67
69
 
68
70
  if context.filter_response(request, status):
@@ -19,11 +19,14 @@ def build_request_columns(flow: MitmproxyHTTPFlow, joined_request: JoinedRequest
19
19
  'control': joined_request.request_string.control,
20
20
  'latency': joined_request.response_string.latency,
21
21
  'raw': joined_request.request_string.get(),
22
- 'status': flow.response.status_code,
23
- 'uuid': joined_request.request_string.request_id.strip(),
22
+ 'status': flow.response.status_code,
24
23
  }
25
24
 
26
- return { **request_columns, **params }
25
+ return {
26
+ **request_columns,
27
+ **params,
28
+ **{ 'uuid': params.get('uuid') or joined_request.request_string.request_id.strip() }
29
+ }
27
30
 
28
31
  def build_response_columns(flow: MitmproxyHTTPFlow, joined_request: JoinedRequest):
29
32
  response_columns: ResponseColumns = {
@@ -43,9 +43,11 @@ class LocalDBRequestAdapter(LocalDBAdapter):
43
43
  flow: MitmproxyHTTPFlow = params['flow']
44
44
  joined_request: JoinedRequest = params['joined_request']
45
45
  scenario_id = params.get('scenario_id')
46
+ uuid = params.get('uuid')
47
+
48
+ request_columns = build_request_columns(flow, joined_request, is_deleted=False, scenario_id=scenario_id, uuid=uuid)
46
49
 
47
50
  with ORM.instance().db.transaction():
48
- request_columns = build_request_columns(flow, joined_request, is_deleted=False, scenario_id=scenario_id)
49
51
  request_record = self.__request_orm.create(**request_columns)
50
52
 
51
53
  response_columns = {
@@ -53,10 +55,7 @@ class LocalDBRequestAdapter(LocalDBAdapter):
53
55
  **build_response_columns(flow, joined_request),
54
56
  }
55
57
 
56
- response_record = self.__response_orm.create(**response_columns)
57
- if not response_record:
58
- request_record.delete()
59
- return self.internal_error('Could not create requeset response')
58
+ self.__response_orm.create(**response_columns)
60
59
 
61
60
  return self.success({
62
61
  'list': [ORMToStooblyRequestTransformer(request_record, {}).transform()],
@@ -8,6 +8,7 @@ class RequestCreateParams(TypedDict):
8
8
  project_id: str
9
9
  joined_request: JoinedRequest
10
10
  scenario_id: str
11
+ uuid: str
11
12
 
12
13
  class RequestDestroyParams(TypedDict):
13
14
  force: bool
@@ -4,6 +4,7 @@ class ScenarioCreateParams(TypedDict):
4
4
  description: str
5
5
  name: str
6
6
  priority: int
7
+ uuid: str
7
8
 
8
9
  class ScenarioDestroyParams(TypedDict):
9
10
  force: bool
@@ -69,7 +69,7 @@ def __handle_mock_success(test_context: TestContext) -> None:
69
69
 
70
70
  request_id = test_context.mock_request_id
71
71
  if request_id:
72
- expected = test_context.cached_expected_response_content
72
+ expected = test_context.cached_rewritten_expected_response_content
73
73
  upload_test_data = {
74
74
  'expected_response': expected,
75
75
  'log': log,
@@ -54,11 +54,11 @@ class TestContext(TestContextABC):
54
54
  return self
55
55
 
56
56
  @property
57
- def cached_expected_response_content(self) -> Union[bytes, None, str]:
57
+ def cached_rewritten_expected_response_content(self) -> FuzzyContent:
58
58
  if not self.__cached_rewritten_expected_response_content:
59
- return encode_response(self.rewritten_expected_response_content, self.__expected_response.content_type)
59
+ return self.rewritten_expected_response_content
60
60
 
61
- return encode_response(self.__cached_rewritten_expected_response_content, self.__expected_response.content_type)
61
+ return self.__cached_rewritten_expected_response_content
62
62
 
63
63
  @property
64
64
  def endpoint(self) -> EndpointFacade:
@@ -21,7 +21,7 @@ class TestContextABC(abc.ABC):
21
21
 
22
22
  @property
23
23
  @abc.abstractmethod
24
- def cached_expected_response_content(self) -> Union[bytes, None, str]:
24
+ def cached_rewritten_expected_response_content(self) -> FuzzyContent:
25
25
  pass
26
26
 
27
27
  @property
@@ -13,7 +13,7 @@ class AddUuidColumnToRequests(Migration):
13
13
  Run the migrations.
14
14
  """
15
15
  with self.schema.table('requests') as table:
16
- table.string('uuid', 36).default('').index()
16
+ table.string('uuid', 36).default('').index().unique()
17
17
 
18
18
  for request in Request.all():
19
19
  control = RequestStringControl(request.control)
@@ -11,7 +11,7 @@ class AddUuidColumnToScenarios(Migration):
11
11
  Run the migrations.
12
12
  """
13
13
  with self.schema.table('scenarios') as table:
14
- table.string('uuid', 36).index().default('')
14
+ table.string('uuid', 36).default('').index().unique()
15
15
 
16
16
  for scenario in Scenario.all():
17
17
  scenario.update(uuid=str(uuid.uuid4()))
@@ -1 +1 @@
1
- 0.32.4
1
+ 0.33.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: stoobly-agent
3
- Version: 0.33.3
3
+ Version: 0.33.4
4
4
  Summary: Record, mock, and test HTTP(s) requests. CLI agent for Stoobly
5
5
  License: Apache-2.0
6
6
  Author: Matt Le
@@ -1,4 +1,4 @@
1
- stoobly_agent/__init__.py,sha256=x_HEHCpx9wW3dr7fEU4oPfXygOjERnDPJCaaAvl2eq8,45
1
+ stoobly_agent/__init__.py,sha256=Y5VZBgZQZWLQ0m_DInN_Fj7Gf_NSi2yUxceBK0KHO5U,45
2
2
  stoobly_agent/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  stoobly_agent/app/api/__init__.py,sha256=FFSlVoTgjPfUNlYPr_7u6-P5Y4WOKyaUfAHtUcB-Xio,810
4
4
  stoobly_agent/app/api/application_http_request_handler.py,sha256=jf4fkqjOiCeI2IM5Ro7ie0v_C6y0-7-5TIE_IKMPOfg,5513
@@ -9,7 +9,7 @@ stoobly_agent/app/api/proxy_controller.py,sha256=pelIy9CKS7-W1xsIEkes92uqfeHrthC
9
9
  stoobly_agent/app/api/query_params_controller.py,sha256=y7DMlJgPkACfRoAd2KeCge0Z8Vy9LKDDHj_RnMo28HQ,3640
10
10
  stoobly_agent/app/api/replayed_response_headers_controller.py,sha256=0rdNlw74L5KsQxKJyKUf_lfoxoh82xKkJ7m1Nmz_3sM,1768
11
11
  stoobly_agent/app/api/replayed_responses_controller.py,sha256=bPd8MmS1mT1uuWoJ6uhJQk_dafISDGhH8yIyEjCRCvw,3435
12
- stoobly_agent/app/api/requests_controller.py,sha256=LWR3NkBhVNHYp0JH_lllPiQjXKkNgFpUtVxmTn1jUJ0,9380
12
+ stoobly_agent/app/api/requests_controller.py,sha256=76KK0mPaQx4ETV5SeesJtD_HTR2IEORkLlRewgX5B28,9435
13
13
  stoobly_agent/app/api/response_headers_controller.py,sha256=FoZnU_HBKtiyprO1V6ra_I7bSRDRLQV1pun3PeLD7kY,3022
14
14
  stoobly_agent/app/api/responses_controller.py,sha256=C3eL9DGMJa-AVO5lMUxJj6UyCb2Rjy71CGEMHwBHTAA,3148
15
15
  stoobly_agent/app/api/routes.py,sha256=ObPHWPMKEH8kn93SDOrqsahahgS6WDIJk6c9hpM2gzw,5463
@@ -110,7 +110,7 @@ stoobly_agent/app/models/factories/resource/local_db/__init__.py,sha256=47DEQpj8
110
110
  stoobly_agent/app/models/factories/resource/local_db/body_adapter.py,sha256=lrnIX9vC8AGau4LgL6W3rQQsQxeSvDVsShZ-RLQQ_k4,1052
111
111
  stoobly_agent/app/models/factories/resource/local_db/header_adapter.py,sha256=gIhWeoSPCK7gjL6CQFi39zYqkd38Lb1fVKhzW5DJSeE,2640
112
112
  stoobly_agent/app/models/factories/resource/local_db/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
- stoobly_agent/app/models/factories/resource/local_db/helpers/create_request_columns_service.py,sha256=oIB9SgfABOfdelkRyOszilHJ_ryogGTWw1tbGNKexUM,1498
113
+ stoobly_agent/app/models/factories/resource/local_db/helpers/create_request_columns_service.py,sha256=HABMelW-cvhm2WXaywbQcd4PQhzSrz4vAbN7uOdetXM,1541
114
114
  stoobly_agent/app/models/factories/resource/local_db/helpers/log.py,sha256=BKIWS_UoRyZxbJ7Z3zU8gp-5Tvb1n3BLk-jprQje7uc,5252
115
115
  stoobly_agent/app/models/factories/resource/local_db/helpers/log_event.py,sha256=qRws34HK5fv3C_rEoIzpeIwZrSVhCG9sLz_jiuIbatY,3373
116
116
  stoobly_agent/app/models/factories/resource/local_db/helpers/request_builder.py,sha256=ZbYJ28LCpXNvNEy995-yZo9xfGRwekqtsGTSoN1gTPQ,3220
@@ -125,7 +125,7 @@ stoobly_agent/app/models/factories/resource/local_db/local_db_adapter.py,sha256=
125
125
  stoobly_agent/app/models/factories/resource/local_db/orm_request_builder.py,sha256=4UjFY26ln2Drlg71R4AKY5vUZYbQ28HYQolJv3SBDqE,1581
126
126
  stoobly_agent/app/models/factories/resource/local_db/query_param_adapter.py,sha256=fWtAGcaINMIM5pP0g19o8WUYa7xEMUguFesiqKJyn5A,3966
127
127
  stoobly_agent/app/models/factories/resource/local_db/replayed_response_adapter.py,sha256=vUN9ARmRVrxKHpyzWB5w-XX-quOBMFpWOKkyBxTn6mM,3634
128
- stoobly_agent/app/models/factories/resource/local_db/request_adapter.py,sha256=T27qm9v_8dpZOVDHCJAPnisCGCxGTMeHBmdJqlMn5c4,12489
128
+ stoobly_agent/app/models/factories/resource/local_db/request_adapter.py,sha256=1OPm_82fZ0XVEpfEGmI3Jov40Vlg6qfG7z7R8d72LHY,12376
129
129
  stoobly_agent/app/models/factories/resource/local_db/response_adapter.py,sha256=g2plyjBm5NUu1W6SVZavM2PgUYW_DuynFt_MREFhPVI,3228
130
130
  stoobly_agent/app/models/factories/resource/local_db/response_header_adapter.py,sha256=lSehvihNQgX6moFY0XLDyLkTeEweCRAwQ16QSdPsvEg,3070
131
131
  stoobly_agent/app/models/factories/resource/local_db/scenario_adapter.py,sha256=K6ITkYTUeEPNGL4_skL80K5G1kgqLtlM3IwpwXsleMw,3883
@@ -154,10 +154,10 @@ stoobly_agent/app/models/schemas/request.py,sha256=3LByUJw3rYjuVLUTWCUeYYat0Jsly
154
154
  stoobly_agent/app/models/types/__init__.py,sha256=TdT8MVvcJ1i4VJl-JN60FJBEQeYsKClyjuOFzIsGdgI,161
155
155
  stoobly_agent/app/models/types/endpoint.py,sha256=ByQzSjbQJ7_SRleT74qUkOTHG4sGPK5IUk8VW75px-c,157
156
156
  stoobly_agent/app/models/types/replayed_response.py,sha256=VbeX2yAPWACQBc7ePQ9PfU5Ot_Vq5aKFIGrPTvMQ8Xw,403
157
- stoobly_agent/app/models/types/request.py,sha256=94kNLYtP-PHVmCsallsU-z652Tv0eP8Iclhpq6K04tY,693
157
+ stoobly_agent/app/models/types/request.py,sha256=zA5VJ316yoMTfSoHu9ab1wbOMzS1h6G2DAhjHb80mWI,705
158
158
  stoobly_agent/app/models/types/request_components.py,sha256=6qEiadFnJWaTYfnxLblIOyRytLXx5FQ9yUzkWnHr0IM,471
159
159
  stoobly_agent/app/models/types/response.py,sha256=OQNvHnyLvRSJF3E4A1GaROlZekKvflzsuTZH6hDx1tY,107
160
- stoobly_agent/app/models/types/scenario.py,sha256=fcO2rhrFNNDsEd02Mt4TXlVrdAvtkF7I5tIpoR_dkN0,172
160
+ stoobly_agent/app/models/types/scenario.py,sha256=865pzF2vlhpslWf_77KTcb3XmF0lO8_LJy7qzJJNWmQ,184
161
161
  stoobly_agent/app/proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  stoobly_agent/app/proxy/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  stoobly_agent/app/proxy/constants/custom_response_codes.py,sha256=1CaApt_6W7GrxvN8_Ozbf_SEodVEQaNZRR2sMYpI0U8,40
@@ -165,7 +165,7 @@ stoobly_agent/app/proxy/context.py,sha256=XLteUEP8T8aT0hHI_jHDaL2382OaC7QyVwlni5
165
165
  stoobly_agent/app/proxy/handle_mock_service.py,sha256=vAT-ZA-4hMVscRGWPmuon6xLYoDMHM9llaE9AQSHGPI,6056
166
166
  stoobly_agent/app/proxy/handle_record_service.py,sha256=_6UT4vaLncPGp1XDlUVFTqyhlc6Tv70MDTSUwVw3y-U,3355
167
167
  stoobly_agent/app/proxy/handle_replay_service.py,sha256=zBsDnmibMZtYUoi9y6co6Ou5-JYHVrKiWnsJKHSkKtk,1795
168
- stoobly_agent/app/proxy/handle_test_service.py,sha256=dk7E3jyt_7O7C53Z9JJsXVPdX9RfM0rC95lIfvKPMuY,4831
168
+ stoobly_agent/app/proxy/handle_test_service.py,sha256=s1sm7ChCDzWIPjGr8I7xUSbw1U_hprZPqVM_erNa-wo,4841
169
169
  stoobly_agent/app/proxy/hot_reload.py,sha256=RM2xPMl9qHh5SgjnRE1mnz8GilreFSQf3wpiJ6ax0Mw,903
170
170
  stoobly_agent/app/proxy/intercept_handler.py,sha256=dnKYi9lkJSoa0yLcxOwZ4nH9gljbPPExnnfAKxEXpLU,4190
171
171
  stoobly_agent/app/proxy/intercept_settings.py,sha256=lniZHdq2RXVwJxWfAVpaXY5moyAtB_4fVH9y2L4mSxs,10047
@@ -209,8 +209,8 @@ stoobly_agent/app/proxy/run.py,sha256=y_qfwGGCVjH9i1zOTOdJxdpF5ehALRwhlxQGhcQn8O
209
209
  stoobly_agent/app/proxy/settings.py,sha256=R0LkSa9HrkUXvCd-nur4syJePjbQZdlnAnOPpGnCx38,2172
210
210
  stoobly_agent/app/proxy/simulate_intercept_service.py,sha256=R-L2dh2dfYFebttWXU0NwyxFI_jP6Ud36oKPC-T8HiI,1942
211
211
  stoobly_agent/app/proxy/test/__init__.py,sha256=sHytzLWcRZIQ4bHISGWMeSoreXaK6imDzyx3zUAaBZw,122
212
- stoobly_agent/app/proxy/test/context.py,sha256=Z4_MjKtsxl8oSkncX08pAghYmFHdAK21C9ryrGOTb9Q,6858
213
- stoobly_agent/app/proxy/test/context_abc.py,sha256=RWePqT_kBrs9VFe1q12yeJE-qrfEhCLg_IUo_IMOPsc,3095
212
+ stoobly_agent/app/proxy/test/context.py,sha256=08Wssj3gDMjp2YHlEUTrVZqGawf-9UNAMI6GTM4A2zU,6744
213
+ stoobly_agent/app/proxy/test/context_abc.py,sha256=jjsRYrEzGBdiGbY_0CzAHb07tYjSF8hxfrYaAh4SUc0,3094
214
214
  stoobly_agent/app/proxy/test/context_response.py,sha256=UJNGpW-Ageri42YBmpQ6vrIbFzggGf1Xndjca8MB6w4,1156
215
215
  stoobly_agent/app/proxy/test/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
216
  stoobly_agent/app/proxy/test/helpers/diff_service.py,sha256=dljKIYRtDWqXnMN0AirU0yNz1AAKCOCRwN-JQgnbNpQ,1379
@@ -299,8 +299,8 @@ stoobly_agent/db/migrations/2023_02_02_022229_create_replayed_responses.py,sha25
299
299
  stoobly_agent/db/migrations/2023_03_20_192909_add_http_version_column_to_requests.py,sha256=zgPRtjOCtAbRvKcVUrp4GStD20RBRFcWisSVBWEeP2I,515
300
300
  stoobly_agent/db/migrations/2023_03_20_220448_add_http_version_column_to_responses.py,sha256=AO9NkHbPZYdiAFKjCVpBfLXq71H75j0HaIvfb9TlThk,509
301
301
  stoobly_agent/db/migrations/2023_04_18_071327_align_requests.py,sha256=8ukE87FqHoMMQlAIqbx4j745OyduzQdldgqtp8oSgjw,1272
302
- stoobly_agent/db/migrations/2023_05_15_212505_add_uuid_column_to_requests.py,sha256=TihqmKNLcoDy0jUpNM5Ih3LCNk7LMAN1ioOCJEcl-f8,866
303
- stoobly_agent/db/migrations/2023_05_15_213119_add_uuid_column_to_scenarios.py,sha256=xA1hfHPbBg-GuN9juuPbnb6zvY1dIvyELeKQUE_BU5U,601
302
+ stoobly_agent/db/migrations/2023_05_15_212505_add_uuid_column_to_requests.py,sha256=4PLF70a7wxnWRs7uK_5S7I0jyUkXugY1L4abqdcLXFQ,875
303
+ stoobly_agent/db/migrations/2023_05_15_213119_add_uuid_column_to_scenarios.py,sha256=nfq2uOw9dIICq2gRYm4PlkgEUgcit01wEl1Hfajt7bk,610
304
304
  stoobly_agent/db/migrations/2023_05_29_053649_add_overwritable_column_to_scenarios.py,sha256=VkhUaHR6nVsV_DeXEpT16z89m2MsPHEYGQV2Y2vCUqs,459
305
305
  stoobly_agent/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
306
306
  stoobly_agent/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -538,7 +538,7 @@ stoobly_agent/test/app/models/factories/resource/local_db/helpers/log_test.py,sh
538
538
  stoobly_agent/test/app/models/factories/resource/local_db/helpers/tiebreak_scenario_request_test.py,sha256=Ft5POn1ZJqt3YOSdPOb0PwwCaIkBEpw3Jug9WAeAt-g,2863
539
539
  stoobly_agent/test/app/models/factories/resource/local_db/request_adapter_test.py,sha256=Pzq1cBPnP9oSWG-p0c-VoymoHxgp483QmNwmV1b78RA,8453
540
540
  stoobly_agent/test/app/models/factories/resource/local_db/response_adapter_test.py,sha256=9P95EKH5rZGOrmRkRIDlQZqtiLJHk9735og18Ffwpfw,2204
541
- stoobly_agent/test/app/models/schemas/.stoobly/db/VERSION,sha256=Zu3Vw9DdF9OvB35RT5UwWPv2j2EcGWtbzUW15aHKyCQ,6
541
+ stoobly_agent/test/app/models/schemas/.stoobly/db/VERSION,sha256=ipg2i9SefXLciwum0uirgobiDm-pkJ_Xj3olIpxq0cs,6
542
542
  stoobly_agent/test/app/models/schemas/.stoobly/db/stoobly_agent.sqlite3,sha256=ch8gNx6zIelLKQx65gwFx_LRNqUD3EC5xcHZ0ukIQiU,188416
543
543
  stoobly_agent/test/app/models/schemas/.stoobly/settings.yml,sha256=vLwMjweKOdod6tSLtIlyBefPQuNXq9wio4kBaODKtAU,726
544
544
  stoobly_agent/test/app/models/schemas/.stoobly/tmp/options.json,sha256=OTRzarwus48CTrItedXCrgQttJHSEZonEYc7R_knvYg,2212
@@ -569,8 +569,8 @@ stoobly_agent/test/mock_data/petstore.yaml,sha256=CCdliJky04Az4FIOkFA883uunwFDHL
569
569
  stoobly_agent/test/mock_data/request_show_response.py,sha256=K_a0fP0QT58T8sX9PaM6hqtX1A1depZsqg_GsNPf--k,707
570
570
  stoobly_agent/test/mock_data/uspto.yaml,sha256=6U5se7C3o-86J4m9xpOk9Npias399f5CbfWzR87WKwE,7835
571
571
  stoobly_agent/test/test_helper.py,sha256=m_oAI7tmRYCNZdKfNqISWhMv3e44tjeYViQ3nTUfnos,1007
572
- stoobly_agent-0.33.3.dist-info/LICENSE,sha256=8QKGyy45eN76Zk52h8gu1DKX2B_gbWgZ3nzDLofEbaE,548
573
- stoobly_agent-0.33.3.dist-info/METADATA,sha256=8tajVBOjKzLpsbVvkJYuJfAl6WYrJKVIWCz7G1AZq-s,3304
574
- stoobly_agent-0.33.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
575
- stoobly_agent-0.33.3.dist-info/entry_points.txt,sha256=aq5wix5oC8MDQtmyPGU0xaFrsjJg7WH28NmXh2sc3Z8,56
576
- stoobly_agent-0.33.3.dist-info/RECORD,,
572
+ stoobly_agent-0.33.4.dist-info/LICENSE,sha256=8QKGyy45eN76Zk52h8gu1DKX2B_gbWgZ3nzDLofEbaE,548
573
+ stoobly_agent-0.33.4.dist-info/METADATA,sha256=RmlDpnlgfth8HzssXYFQd72R-XsZvHtLgBmcObc538o,3304
574
+ stoobly_agent-0.33.4.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
575
+ stoobly_agent-0.33.4.dist-info/entry_points.txt,sha256=aq5wix5oC8MDQtmyPGU0xaFrsjJg7WH28NmXh2sc3Z8,56
576
+ stoobly_agent-0.33.4.dist-info/RECORD,,