ey-commerce-lib 1.0.17__py3-none-any.whl → 1.0.19__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.

Potentially problematic release.


This version of ey-commerce-lib might be problematic. Click here for more details.

@@ -6,17 +6,19 @@ from httpx import AsyncClient, Timeout
6
6
  from playwright.async_api import async_playwright
7
7
 
8
8
  from ey_commerce_lib.dxm.constant.order import DxmOrderRuleType
9
- from ey_commerce_lib.dxm.parser.common import get_page_info, get_purchase_pagination_info
9
+ from ey_commerce_lib.dxm.parser.common import get_page_info, get_purchase_pagination_info, get_tracking_page_info
10
10
  from ey_commerce_lib.dxm.parser.count import parse_count
11
11
  from ey_commerce_lib.dxm.parser.order import list_order_base_by_html, list_order_rule, get_rule_detail, \
12
12
  get_order_detail_by_html
13
13
  from ey_commerce_lib.dxm.parser.purchase import list_purchasing_all, list_1688_purchase_order_number, \
14
14
  list_wait_pay_page_purchase_order_number
15
+ from ey_commerce_lib.dxm.parser.tracking import parse_tracking_page
15
16
  from ey_commerce_lib.dxm.parser.warehouse import list_warehouse_product
16
17
  from ey_commerce_lib.dxm.schemas.common import Page
17
18
  from ey_commerce_lib.dxm.schemas.dxm_commodity_product import ViewDxmCommodityProductResponse
18
19
  from ey_commerce_lib.dxm.schemas.ebay_product import DxmEbayProductModel
19
20
  from ey_commerce_lib.dxm.schemas.order import DxmOrderSearchForm, DxmJsonResponse, DxmCheckProcessResponse, DxmOrderRule
21
+ from ey_commerce_lib.dxm.schemas.tracking import TrackingPageListQuery, TrackingPageListItem
20
22
  from ey_commerce_lib.dxm.schemas.warehouse import WarehouseProduct, WarehouseProductQuery, PurchasingAllQuery
21
23
 
22
24
 
@@ -710,10 +712,12 @@ class DxmClient:
710
712
  try:
711
713
  async with async_playwright() as p:
712
714
  browser = await p.chromium.launch(
713
- headless=False,
715
+ headless=True,
714
716
  args=[
715
717
  '--start-maximized',
716
718
  '--disable-blink-features=AutomationControlled',
719
+ '--no-sandbox',
720
+ '--disable-dev-shm-usage'
717
721
  ]
718
722
  )
719
723
  context = await browser.new_context()
@@ -729,21 +733,119 @@ class DxmClient:
729
733
  ])
730
734
  page = await context.new_page()
731
735
  # 访问
732
- await page.goto(f'{self.__base_url}/dxmCommodityProduct/openEditModal.htm?id={proid}&editOrCopy=0')
736
+ await page.goto(f'{self.__base_url}/dxmCommodityProduct/openEditModal.htm?id={proid}&editOrCopy=0',
737
+ timeout=60000)
733
738
  # 关闭模态框
734
- await page.locator('#theNewestModalLabel > div.modal-dialog > div > div.modal-header > button').click()
739
+ try:
740
+ await page.locator(
741
+ '#theNewestModalLabel > div.modal-dialog > div > div.modal-header > button').click()
742
+ except:
743
+ pass
735
744
  # 输入sku
736
745
  await page.locator('input.variationValue.ui-autocomplete-input').fill(front_sku)
737
746
  # 失去焦点
738
747
  await page.locator('input.variationValue.ui-autocomplete-input').press('Tab')
739
- # 休眠两秒
740
- await asyncio.sleep(2)
741
- # 点击保存
742
- await page.locator('.button.btn-orange.m-left10').first.click()
743
- # 获取保存成功文本
744
- await page.wait_for_selector('.alert-successGreen')
748
+ try:
749
+ # 休眠两秒
750
+ error_text = await page.text_content(selector='div.alert-dangerRed span', timeout=2000)
751
+ return {
752
+ 'code': 500,
753
+ 'msg': error_text
754
+ }
755
+ except Exception as e:
756
+ # 创建监听任务
757
+ async def wait_for_api1():
758
+ async with page.expect_response(
759
+ f"{self.__base_url}/dxmCommodityProduct/editCommodityProduct.json") as response_info:
760
+ pass
761
+ return await response_info.value
762
+
763
+ async def wait_for_api2():
764
+ async with page.expect_response(
765
+ f"{self.__base_url}/dxmCommodityProduct/editCommodityProductGroup.json") as response_info:
766
+ pass
767
+ return await response_info.value
768
+
769
+ # 创建并发任务
770
+ task1 = asyncio.create_task(wait_for_api1())
771
+ task2 = asyncio.create_task(wait_for_api2())
772
+ # 点击保存按钮
773
+ await page.locator('.button.btn-orange.m-left10').first.click()
774
+ # 等待任何一个请求完成
775
+ done, pending = await asyncio.wait(
776
+ [task1, task2],
777
+ return_when=asyncio.FIRST_COMPLETED
778
+ )
779
+ # 取消其他未完成的任务
780
+ for task in pending:
781
+ task.cancel()
782
+ # 获取完成的请求结果
783
+ completed_task = list(done)[0]
784
+ response = await completed_task
785
+ return await response.json()
745
786
  except Exception as e:
746
- raise Exception(f'更新店小秘 仓库-商品详情中的平台sku失败-失败原因:{traceback.format_exc()}')
787
+ return {
788
+ 'code': 500,
789
+ 'msg': traceback.format_exc()
790
+ }
791
+
792
+ async def tracking_page_list(self, query: TrackingPageListQuery) -> Page[TrackingPageListItem]:
793
+ """
794
+ 分页查询物流追踪页表
795
+ :param query:
796
+ :return:
797
+ """
798
+ async with self.__sem:
799
+ tracking_page_list_response = await self.__async_client.post('/tracking/pageList.htm',
800
+ data=query.model_dump(by_alias=True))
801
+ tracking_page_list_html = tracking_page_list_response.text
802
+ page = get_tracking_page_info(tracking_page_list_html)
803
+ page.records = parse_tracking_page(tracking_page_list_html)
804
+ return page
805
+
806
+ async def tracking_list(self, query: TrackingPageListQuery) -> list[TrackingPageListItem]:
807
+ async with self.__sem:
808
+ query.page_no = '1'
809
+ tracking_page_list_response = await self.__async_client.post('/tracking/pageList.htm',
810
+ data=query.model_dump(by_alias=True))
811
+ tracking_page_list_html = tracking_page_list_response.text
812
+ # 获取分页数据
813
+ page = get_tracking_page_info(tracking_page_list_html)
814
+ # 获取总页数
815
+ total_page = page.total_page
816
+ # 最终记录
817
+ result = parse_tracking_page(tracking_page_list_html)
818
+ for page_num in range(2, total_page + 1):
819
+ query.page_no = str(page_num)
820
+ # 获取分页数据
821
+ page_data = await self.tracking_page_list(query)
822
+ result.extend(page_data.records)
823
+ return result
824
+
825
+ async def tracking_show_detail(self, tracking_number: str, carrier_code: str):
826
+ """
827
+ 物流追踪详情信息
828
+ """
829
+ async with self.__sem:
830
+ tracking_show_detail_response = await self.__async_client.post('/tracking/showDetail.json', data={
831
+ "trackingNumber": tracking_number,
832
+ "carrierCode": carrier_code
833
+ })
834
+ return tracking_show_detail_response.json()
835
+
836
+ async def order_prior_or_ban_ship(self, package_id: str, type_value: str):
837
+ """
838
+ 禁运或优先发货
839
+ :param package_id:
840
+ :param type_value:
841
+ :return:
842
+ """
843
+ async with self.__sem:
844
+ order_prior_or_ban_ship_response = await self.__async_client.post('/order/orderPriorOrBanShip.json', data={
845
+ 'packageId': package_id,
846
+ 'type': type_value,
847
+ })
848
+ return order_prior_or_ban_ship_response.json()
747
849
 
748
850
  async def __aenter__(self):
749
851
  return self
@@ -4,6 +4,7 @@ from typing import TypedDict
4
4
  from lxml import html
5
5
 
6
6
  from ey_commerce_lib.dxm.exception.common import PageInfoNotFoundException
7
+ from ey_commerce_lib.model import Page
7
8
 
8
9
 
9
10
  class PageInfo(TypedDict):
@@ -92,3 +93,19 @@ def get_purchasing_page_info(html_str: str):
92
93
  'total_size': total_size,
93
94
  'page_number': page_number
94
95
  }
96
+
97
+
98
+ def get_tracking_page_info(html_str: str):
99
+ tree = html.fromstring(html_str)
100
+ total = int(tree.xpath('//input[@id="totalSizeOrder"]/@value')[0])
101
+ page_size = int(tree.xpath('//input[@id="pageSizeOrder"]/@value')[0])
102
+ page_number = int(tree.xpath('//input[@id="pageNoOrder"]/@value')[0])
103
+ total_page = int(tree.xpath('//input[@id="totalPageOrder"]/@value')[0])
104
+ return Page(
105
+ total=total,
106
+ page_size=page_size,
107
+ page_number=page_number,
108
+ total_page=total_page,
109
+ records=[]
110
+ )
111
+
@@ -37,13 +37,13 @@ def get_single_order_item_list(order_element: html.HtmlElement):
37
37
  source_presentation_element_list = [source_presentation_element.strip().split(':')[1]
38
38
  for source_presentation_element in source_presentation_element_list]
39
39
  try:
40
- float(price.replace(',', ''))
41
- except:
42
- raise Exception(f'价格格式错误, sku是{sku}--价格是{price}')
40
+ price = float(price.replace(',', ''))
41
+ except Exception:
42
+ price = None
43
43
  sku_list.append({
44
44
  'sku': sku,
45
45
  'quantity': int(quantity),
46
- 'price': float(price.replace(',', '')),
46
+ 'price': price,
47
47
  'currency': currency,
48
48
  'img': img,
49
49
  'variants': variant_list,
@@ -319,21 +319,23 @@ def get_order_detail_by_html(html_str: str):
319
319
  pair_info_sku = pair_info_element.xpath('.//span[@class="pairProInfoSku"]/text()')[0].split(' x')[0].strip()
320
320
  pair_info_sku_quantity = int(pair_info_element.xpath('.//span[@class="pairProInfoSku"]/span/text()')[0].strip())
321
321
  proid = get_str_list_first_not_blank_or_none(pair_info_element.xpath('.//input[@proid]/@proid'))
322
- # warehouse_sku, warehouse_sku_quantity = pair_info_element.xpath(
323
- # './/div[contains(@class, "normalDiv")]/p[1]/text()')[0].split(' x ')
324
322
  warehouse_sku_info_list = pair_info_element.xpath('.//div[contains(@class, "normalDiv")]/p[1]/text()')
325
323
  warehouse_sku, warehouse_sku_quantity = None, None
326
324
  if len(warehouse_sku_info_list) > 0:
327
325
  warehouse_sku_info = warehouse_sku_info_list[0]
328
326
  warehouse_sku, warehouse_sku_quantity = warehouse_sku_info.split(' x ')
329
327
 
328
+ # 获取可用库存
330
329
  warehouse_available_quantity_element_list = pair_info_element.xpath(
331
330
  './/div[contains(@class, "normalDiv")]/p[2]/span[2]/text()')
332
- warehouse_available_quantity_str = warehouse_available_quantity_element_list[0].strip()
333
- if warehouse_available_quantity_str.endswith('+'):
334
- warehouse_available_quantity_str = warehouse_available_quantity_str[:-1]
335
- warehouse_available_quantity = int(warehouse_available_quantity_str) if len(
336
- warehouse_available_quantity_element_list) > 0 else None
331
+ warehouse_available_quantity_str = get_str_list_first_not_blank_or_none(warehouse_available_quantity_element_list)
332
+ # 获取到可用库存节点
333
+ if warehouse_available_quantity_str is not None:
334
+ if warehouse_available_quantity_str.endswith('+'):
335
+ warehouse_available_quantity_str = warehouse_available_quantity_str[:-1]
336
+ warehouse_available_quantity = int(warehouse_available_quantity_str)
337
+ else:
338
+ warehouse_available_quantity = None
337
339
  pair_info_list.append({
338
340
  'pair_info_sku': pair_info_sku,
339
341
  'pair_info_sku_quantity': pair_info_sku_quantity,
@@ -0,0 +1,56 @@
1
+ from lxml import html
2
+
3
+ from ey_commerce_lib.dxm.schemas.tracking import TrackingPageListItem
4
+ from ey_commerce_lib.utils.list_util import get_str_list_first_not_blank_or_none
5
+
6
+
7
+ def parse_tracking_page(html_content: str):
8
+ tree = html.fromstring(html_content)
9
+ # 物流追踪节点列表
10
+ tracking_element_list = tree.xpath('//tbody[@id="dhSysMsg"]/tr[@class="content"]')
11
+ tracking_list = []
12
+ for tracking_element in tracking_element_list:
13
+ # 获取包裹号
14
+ package_number = tracking_element.xpath('@data-tracknum')[0].strip()
15
+ # 获取订单id
16
+ order_id = tracking_element.xpath('@data-orderid')[0].strip()
17
+ # 获取收件人姓名
18
+ receiver_name = tracking_element.xpath('./td[3]/text()')[0].strip()
19
+ # 获取国家
20
+ country = get_str_list_first_not_blank_or_none(tracking_element.xpath('./td[3]/span/text()'))
21
+ # 获取物流方式
22
+ logistics_method = tracking_element.xpath('./td[4]/text()')[0].strip()
23
+ # 物流状态
24
+ logistics_status = tracking_element.xpath('./td[4]/span/@title')[0].replace('「', '').replace('」', '')
25
+ # 物流单号
26
+ logistics_number = tracking_element.xpath('./td[4]//span[@class="limingcentUrlpic"]/text()')[0].strip()
27
+ # carrierCode
28
+ carrier_code = get_str_list_first_not_blank_or_none(tracking_element.xpath('./td[5]/a/@data-carriercode'))
29
+ # 最新消息
30
+ latest_message = get_str_list_first_not_blank_or_none(tracking_element.xpath('./td[5]/text()'))
31
+ # 运输信息
32
+ transport_info = tracking_element.xpath('./td[6]/text()')[0].strip()
33
+ # 平台和店铺
34
+ platform, shop = tracking_element.xpath('./td[7]')[0].text_content().split(':')
35
+ time_list = []
36
+ # 获取时间
37
+ for time in tracking_element.xpath('./td[8]')[0].text_content().strip().split('\n'):
38
+ time_list.append(time.strip())
39
+ platform = platform.strip()
40
+ shop = shop.strip()
41
+ tracking_list.append(TrackingPageListItem(
42
+ package_number=package_number,
43
+ order_id=order_id,
44
+ receiver_name=receiver_name,
45
+ country=country,
46
+ logistics_method=logistics_method,
47
+ logistics_status=logistics_status,
48
+ logistics_number=logistics_number,
49
+ latest_message=latest_message,
50
+ transport_info=transport_info,
51
+ platform=platform,
52
+ shop=shop,
53
+ time_list=time_list,
54
+ carrier_code=carrier_code
55
+ ))
56
+ return tracking_list
@@ -0,0 +1,45 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field, ConfigDict
4
+
5
+
6
+ class TrackingPageListQuery(BaseModel):
7
+ page_no: str = Field('1', alias='pageNo', description='页码')
8
+ state_type: str = Field('all', alias='stateType', description='状态类型,默认 all(全部)')
9
+ platform: str = Field('', alias='platform', description='平台渠道')
10
+ shop_id: str = Field('-1', alias="shopId", description='店铺 ID')
11
+ country: str = Field('', alias="country", description="国家")
12
+ auth_id: str = Field('-1', alias="authId", description="物流方式")
13
+ ship_start_time: str = Field('', alias="shipStartTime", description="发货开始时间")
14
+ ship_end_time: str = Field('', alias="shipEndTime", description="发货结束时间")
15
+ track_start_time: str = Field('-1', alias='trackStartTime', description='运输天数')
16
+ track_end_time: str = Field('-1', alias='trackEndTime', description='运输天数')
17
+ is_comm: str = Field('', alias='isComm', description='备注')
18
+ order_field: str = Field('shipped_time', alias='orderField', description='排序方式')
19
+ is_desc: str = Field('1', alias='isDesc', description='排序方式')
20
+ search_type: str = Field('orderId', alias='searchType', description='搜索类型 orderId(订单id)')
21
+ search_value: str = Field('', alias="searchValue", description="搜索关键字")
22
+ is_del: str = Field('0', alias="isDel", description="是否删除,0 否 1 是")
23
+ history: str = Field('', alias="history", description="历史记录标志")
24
+ is_stop: str = Field('0', alias='isStop', description='是否暂停,0 正常追踪 1 暂停追踪')
25
+ no_update_days: str = Field('0', alias="noUpdateDays", description="异常类型 无更新天数")
26
+
27
+ model_config = ConfigDict(populate_by_name=True)
28
+
29
+
30
+ class TrackingPageListItem(BaseModel):
31
+ package_number: str = Field(..., alias='packageNumber', description='包裹号')
32
+ order_id: str = Field(..., alias='orderId', description='订单号')
33
+ receiver_name: str = Field(..., alias='receiverName', description='收件人姓名')
34
+ country: Optional[str] = Field(..., alias='country', description='国家')
35
+ logistics_method: str = Field(..., alias='logisticsMethod', description='物流方式')
36
+ logistics_status: str = Field(..., alias='logisticsStatus', description='物流状态')
37
+ logistics_number: str = Field(..., alias='logisticsNumber', description='物流单号')
38
+ carrier_code: Optional[str] = Field(..., alias='carrierCode', description='物流公司编码')
39
+ latest_message: Optional[str] = Field(..., alias='latestMessage', description='最新物流信息')
40
+ transport_info: str = Field(..., alias='transportInfo', description='运输信息')
41
+ platform: str = Field(..., alias='platform', description='平台渠道')
42
+ shop: str = Field(..., alias='shop', description='店铺')
43
+ time_list: list[str] = Field([], alias='timeList', description='时间列表')
44
+
45
+ model_config = ConfigDict(populate_by_name=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ey-commerce-lib
3
- Version: 1.0.17
3
+ Version: 1.0.19
4
4
  Summary: eeyoung电商客户端调用封装
5
5
  Author-email: 饶奇奇 <1124393197@qq.com>
6
6
  Requires-Python: >=3.10
@@ -2,24 +2,26 @@ ey_commerce_lib/__init__.py,sha256=QTYqXqSTHFRkM9TEgpDFcHvwLbvqHDqvqfQ9EiXkcAM,2
2
2
  ey_commerce_lib/model.py,sha256=0ZCE68502blzRDsQ38AIswc8kPk7H34Am5x8IiDi2DU,232
3
3
  ey_commerce_lib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  ey_commerce_lib/dxm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- ey_commerce_lib/dxm/main.py,sha256=eSeZNRW5yyjYxPpubPBZxYWznk8NLHP6yizUDy2til8,29335
5
+ ey_commerce_lib/dxm/main.py,sha256=bSOdWpdeZ4CKglp5KWk-BbUHwdsAwhqXeUkXnjugf0Y,34029
6
6
  ey_commerce_lib/dxm/order.py,sha256=hMdNm9X5h9tbvMWFnyE5hcSF4butzn7m-akGqLQUD0k,35
7
7
  ey_commerce_lib/dxm/constant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  ey_commerce_lib/dxm/constant/order.py,sha256=U-2NYnkIcqukzMtOFpfqvzIktu_t7jYEms_n9LgKMlY,2213
9
9
  ey_commerce_lib/dxm/exception/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  ey_commerce_lib/dxm/exception/common.py,sha256=DM5vItHdZCGK2Piqp2S5TFxPm3pioMzzlV-1RTxty00,159
11
11
  ey_commerce_lib/dxm/parser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- ey_commerce_lib/dxm/parser/common.py,sha256=-xfnaYhMStuvR-XEJTWAgTN2H88xflGtWXIrxDqbq0Q,3037
12
+ ey_commerce_lib/dxm/parser/common.py,sha256=srzjwl7CviDgv0vizDC3RO2cbkQG9Pl-JpQpGAO5U14,3627
13
13
  ey_commerce_lib/dxm/parser/count.py,sha256=WOrGeA6DP6_IBtiF1TEZhW528f8kHxlT2cpmg_7FKPM,1561
14
14
  ey_commerce_lib/dxm/parser/ebay_product.py,sha256=Ub6of2YhFnXQwZiFBvZa6wnTIsGbsedAKHW92dbBHIY,589
15
- ey_commerce_lib/dxm/parser/order.py,sha256=vnu5jqea8IoTGk_kFlDcUnrZF5NKuBIQUGAYaxQVSg4,17972
15
+ ey_commerce_lib/dxm/parser/order.py,sha256=ApFa02xFovrrJ4JHPL9NEJisKQO5v8NV485TpfmKgYA,17901
16
16
  ey_commerce_lib/dxm/parser/purchase.py,sha256=lmcC41HtdUqCgGamFASPnzHatUziLFaenTJmazsiMm0,5750
17
+ ey_commerce_lib/dxm/parser/tracking.py,sha256=ND7Xo31lMycmRLXIYtPAXqOh2W-tmeFE8t-f-sNDLLI,2629
17
18
  ey_commerce_lib/dxm/parser/warehouse.py,sha256=oQVojPX8VKHUphdV1KY5ZK1PCFtOY2zwkyLNUeJ3JT0,3310
18
19
  ey_commerce_lib/dxm/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
20
  ey_commerce_lib/dxm/schemas/common.py,sha256=ihCeYrh4K_-m9_4rVzHm-o8rFNqzcD5XkO0JQd2023g,234
20
21
  ey_commerce_lib/dxm/schemas/dxm_commodity_product.py,sha256=9CiMTkRFk2McFL5jiHI35furvuxhJlqBr4AWOC3hlXw,30871
21
22
  ey_commerce_lib/dxm/schemas/ebay_product.py,sha256=k8LqBCz657vYRcLRjjyPJjQYjQOSwSGBivvp2LPWuYc,3696
22
23
  ey_commerce_lib/dxm/schemas/order.py,sha256=6ps9aXFcEiRASLv1CH5uW7wnplaWzD_vTfyzvi5eLE0,7881
24
+ ey_commerce_lib/dxm/schemas/tracking.py,sha256=ZysvY6zbgfwmeNCS-s21XugrKG5d0OPHMFTZfLYBDAc,3059
23
25
  ey_commerce_lib/dxm/schemas/warehouse.py,sha256=BT9r92DgkGKRI-HPqHPt5FKPdPJr2h-rxjfh25STR2E,5094
24
26
  ey_commerce_lib/dxm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
27
  ey_commerce_lib/dxm/utils/dxm_commodity_product.py,sha256=OkL9Ve0lnSA2l-3DMWXF2fSj-A0uV4ucrhfEWNL2Z-Y,5398
@@ -53,6 +55,6 @@ ey_commerce_lib/utils/dxm.py,sha256=jVNltK_Pm_yMzXReD0Aw5VW6kzIZ5Bn23RucS0DKBI0,
53
55
  ey_commerce_lib/utils/float.py,sha256=PiOMf9pRApc1DskKkhKx0LAWHAYTpAPT_G4QRZRd8ZU,905
54
56
  ey_commerce_lib/utils/list_util.py,sha256=R1w7B1m3sEXr38zSHWp-15C3xAs5ykYCCpvwmnRW4xs,545
55
57
  ey_commerce_lib/utils/str.py,sha256=939xE0y8U7KEWjwbEezMlaWJNBsfb2BSb-dBpYbOD8Q,138
56
- ey_commerce_lib-1.0.17.dist-info/METADATA,sha256=eBuSrosk2QW4clVeMWFVSs7KGrAuClEpMYz77F7hEzw,391
57
- ey_commerce_lib-1.0.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
58
- ey_commerce_lib-1.0.17.dist-info/RECORD,,
58
+ ey_commerce_lib-1.0.19.dist-info/METADATA,sha256=7jzqPSilBEag4mOkYasADvKEZd3i3PsxjuszRyxmWso,391
59
+ ey_commerce_lib-1.0.19.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
60
+ ey_commerce_lib-1.0.19.dist-info/RECORD,,