ey-commerce-lib 1.0.8__py3-none-any.whl → 1.0.10__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.
- ey_commerce_lib/dxm/main.py +83 -2
- ey_commerce_lib/dxm/parser/order.py +10 -1
- ey_commerce_lib/dxm/utils/__init__.py +0 -0
- ey_commerce_lib/dxm/utils/mark.py +109 -0
- ey_commerce_lib/kogan/main.py +7 -2
- {ey_commerce_lib-1.0.8.dist-info → ey_commerce_lib-1.0.10.dist-info}/METADATA +1 -1
- {ey_commerce_lib-1.0.8.dist-info → ey_commerce_lib-1.0.10.dist-info}/RECORD +8 -6
- {ey_commerce_lib-1.0.8.dist-info → ey_commerce_lib-1.0.10.dist-info}/WHEEL +0 -0
ey_commerce_lib/dxm/main.py
CHANGED
|
@@ -10,7 +10,7 @@ from ey_commerce_lib.dxm.parser.warehouse import list_warehouse_product
|
|
|
10
10
|
from ey_commerce_lib.dxm.schemas.common import Page
|
|
11
11
|
from ey_commerce_lib.dxm.schemas.order import DxmOrderSearchForm, DxmJsonResponse, DxmCheckProcessResponse, DxmOrderRule
|
|
12
12
|
from ey_commerce_lib.dxm.schemas.warehouse import WarehouseProduct, WarehouseProductQuery, PurchasingAllQuery
|
|
13
|
-
from httpx import AsyncClient
|
|
13
|
+
from httpx import AsyncClient, Timeout
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class DxmClient:
|
|
@@ -19,7 +19,9 @@ class DxmClient:
|
|
|
19
19
|
self.__cookies = cookies
|
|
20
20
|
self.__headers = headers
|
|
21
21
|
self.__sem = asyncio.Semaphore(sem)
|
|
22
|
-
|
|
22
|
+
timeout = Timeout(connect=5.0, read=20.0, write=10.0, pool=10.0)
|
|
23
|
+
self.__async_client = AsyncClient(base_url="https://www.dianxiaomi.com", cookies=cookies, headers=headers,
|
|
24
|
+
timeout=timeout)
|
|
23
25
|
|
|
24
26
|
async def page_order_base_async(self, query: DxmOrderSearchForm):
|
|
25
27
|
"""
|
|
@@ -549,6 +551,85 @@ class DxmClient:
|
|
|
549
551
|
})
|
|
550
552
|
return submit_audit_res.json()
|
|
551
553
|
|
|
554
|
+
async def get_order_mark_content(self):
|
|
555
|
+
"""
|
|
556
|
+
获取订单标记内容列表
|
|
557
|
+
:return: 订单标记内容列表
|
|
558
|
+
"""
|
|
559
|
+
async with self.__sem:
|
|
560
|
+
get_order_mark_content_res = await self.__async_client.get('/package/getOrderMarkContent.json')
|
|
561
|
+
get_order_mark_content_data = get_order_mark_content_res.json()
|
|
562
|
+
if get_order_mark_content_data.get('code') != 0:
|
|
563
|
+
raise Exception(f'获取订单标记数据失败错误原因{get_order_mark_content_data.get('msg')}')
|
|
564
|
+
data = get_order_mark_content_data.get('data', {})
|
|
565
|
+
result = []
|
|
566
|
+
for key in data.keys():
|
|
567
|
+
val = data.get(key)
|
|
568
|
+
val['key'] = key
|
|
569
|
+
result.append(val)
|
|
570
|
+
return result
|
|
571
|
+
|
|
572
|
+
async def add_or_update_user_comment(self, data):
|
|
573
|
+
"""
|
|
574
|
+
添加或修改订单自定义标记
|
|
575
|
+
:param data:
|
|
576
|
+
:return:
|
|
577
|
+
"""
|
|
578
|
+
async with self.__sem:
|
|
579
|
+
add_or_update_user_comment_res = await self.__async_client.post('/package/addOrUpdateUserComment.json',
|
|
580
|
+
data=data)
|
|
581
|
+
return add_or_update_user_comment_res.json()
|
|
582
|
+
|
|
583
|
+
async def get_picking_comment_by_pack_id(self, package_id: str):
|
|
584
|
+
"""
|
|
585
|
+
获取订单备注(只有拣货说明)
|
|
586
|
+
:param package_id:
|
|
587
|
+
:return: 没有返回None 有返回字典数据
|
|
588
|
+
"""
|
|
589
|
+
async with self.__sem:
|
|
590
|
+
data = {
|
|
591
|
+
'packageId': package_id,
|
|
592
|
+
}
|
|
593
|
+
get_comment_by_pack_id_res = await self.__async_client.post('/dxmPackageComment/getByPackId.json',
|
|
594
|
+
data=data)
|
|
595
|
+
data = get_comment_by_pack_id_res.json()
|
|
596
|
+
if data.get('code') != 0:
|
|
597
|
+
raise Exception(f'获取订单标记数据失败错误原因{data.get("msg")}')
|
|
598
|
+
return data.get('dxmPackageComment')
|
|
599
|
+
|
|
600
|
+
async def add_comment(self, pacakge_id: str, comment_type: str, content: str, color: str, comment_id: str = '',
|
|
601
|
+
history: str = ''):
|
|
602
|
+
"""
|
|
603
|
+
添加订单标记
|
|
604
|
+
:param pacakge_id:
|
|
605
|
+
:param comment_type: 备注类型 sys_picking(拣货备注) sys_service(客服v备注)
|
|
606
|
+
:param content: 备注内容
|
|
607
|
+
:param color: 颜色值
|
|
608
|
+
:param comment_id: 备注id(只有)
|
|
609
|
+
:param history:
|
|
610
|
+
:return:
|
|
611
|
+
"""
|
|
612
|
+
if comment_type not in ['sys_picking', 'sys_service']:
|
|
613
|
+
raise Exception(f'备注类型只能是拣货说明和客服备注,当前是{comment_type}')
|
|
614
|
+
data = {
|
|
615
|
+
'packageId': pacakge_id,
|
|
616
|
+
'commentType': comment_type,
|
|
617
|
+
'content': content,
|
|
618
|
+
'color': color,
|
|
619
|
+
'history': history
|
|
620
|
+
}
|
|
621
|
+
if comment_type == 'sys_service':
|
|
622
|
+
if str(comment_id).strip() == '':
|
|
623
|
+
raise Exception(f'客服备注必须指定备注id')
|
|
624
|
+
# 修改客服备注要指定备注id
|
|
625
|
+
data['commentId'] = comment_id
|
|
626
|
+
async with self.__sem:
|
|
627
|
+
add_comment_res = await self.__async_client.post('/dxmPackageComment/add.json', data=data)
|
|
628
|
+
data = add_comment_res.json()
|
|
629
|
+
if data.get('code') != 0:
|
|
630
|
+
raise Exception(f'添加订单标记数据失败错误原因{add_comment_res.json().get("msg")}')
|
|
631
|
+
return data
|
|
632
|
+
|
|
552
633
|
async def __aenter__(self):
|
|
553
634
|
return self
|
|
554
635
|
|
|
@@ -30,13 +30,19 @@ def get_single_order_item_list(order_element: html.HtmlElement):
|
|
|
30
30
|
'name': variant.split(':')[0].strip(),
|
|
31
31
|
'value': variant.split(':')[1].strip()
|
|
32
32
|
})
|
|
33
|
+
# 获取来源数据
|
|
34
|
+
source_presentation_element_list = (sku_element.
|
|
35
|
+
xpath('.//ul[@id="dropSourceUrl"]/li[@role="presentation"]/a/text()'))
|
|
36
|
+
source_presentation_element_list = [source_presentation_element.strip().split(':')[1]
|
|
37
|
+
for source_presentation_element in source_presentation_element_list]
|
|
33
38
|
sku_list.append({
|
|
34
39
|
'sku': sku,
|
|
35
40
|
'quantity': int(quantity),
|
|
36
41
|
'price': float(price.replace(',', '')),
|
|
37
42
|
'currency': currency,
|
|
38
43
|
'img': img,
|
|
39
|
-
'variants': variant_list
|
|
44
|
+
'variants': variant_list,
|
|
45
|
+
'source_list': source_presentation_element_list
|
|
40
46
|
})
|
|
41
47
|
# 订单金额
|
|
42
48
|
currency, price = order_element.xpath('./td[2]/text()')[0].strip().split(' ')
|
|
@@ -142,6 +148,8 @@ def list_order_base_by_html(html_str: str) -> list[dict]:
|
|
|
142
148
|
package_id = good_element.xpath('.//input[@class="input1"]/@value')[0]
|
|
143
149
|
# authid 物流方式的id
|
|
144
150
|
auth_id = good_element.xpath(f'.//input[@id="dxmAuthId{package_id}"]/@value')[0]
|
|
151
|
+
# data-custom-mark标记
|
|
152
|
+
data_custom_mark = get_str_list_first_not_blank_or_none(good_element.xpath('@data-custom-mark'))
|
|
145
153
|
buyer_select_provider = get_order_buyer_select_provider(good_element)
|
|
146
154
|
order_form_source = good_element.xpath('.//span[contains(@class, "order-form-source")]/text()')[0]
|
|
147
155
|
platform, shop = order_form_source.replace('「', '').replace('」', '').split(':')
|
|
@@ -179,6 +187,7 @@ def list_order_base_by_html(html_str: str) -> list[dict]:
|
|
|
179
187
|
'package_id': package_id,
|
|
180
188
|
'auth_id': auth_id,
|
|
181
189
|
'package_number': package_number,
|
|
190
|
+
'data_custom_mark': data_custom_mark,
|
|
182
191
|
'buyer_select_provider': buyer_select_provider,
|
|
183
192
|
'platform': platform,
|
|
184
193
|
'shop': shop,
|
|
File without changes
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
def get_power_indices(n: int) -> list:
|
|
2
|
+
"""
|
|
3
|
+
输入一个整数 n,返回一个列表,列表中的每个数字代表 n 的二进制表示中对应为1的位的幂次(从0开始计数)
|
|
4
|
+
|
|
5
|
+
例如:
|
|
6
|
+
- n = 5(二进制 101),返回 [0, 2]
|
|
7
|
+
- n = 32(二进制 100000),返回 [5]
|
|
8
|
+
"""
|
|
9
|
+
result = []
|
|
10
|
+
power = 0
|
|
11
|
+
while n:
|
|
12
|
+
# 判断当前最低位是否为1
|
|
13
|
+
if n & 1:
|
|
14
|
+
result.append(power)
|
|
15
|
+
n >>= 1 # 右移一位,相当于除以2
|
|
16
|
+
power += 1
|
|
17
|
+
return result
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 定义店小秘的标记颜色
|
|
21
|
+
CUSTOMER_ORDER_MARK_COLORS = ['isGreen', 'isYellow', 'isOrange', 'isRed', 'isViolet', 'isBlue', 'cornflowerBlue',
|
|
22
|
+
'pink', 'teal', 'turquoise']
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_custom_mark_content_list_by_data_custom_mark(data_custom_mark: str, custom_mark_config: list):
|
|
26
|
+
"""
|
|
27
|
+
根据店小秘订单标记数据,返回一个列表,列表中的每个元素代表一个标记的内容
|
|
28
|
+
:param custom_mark_config: 标记配置
|
|
29
|
+
:param data_custom_mark: 店小秘订单标记数据,html中data_custom_mark的值
|
|
30
|
+
:return:
|
|
31
|
+
"""
|
|
32
|
+
mark_content_list = []
|
|
33
|
+
for index, mkv in enumerate(data_custom_mark.split(',')):
|
|
34
|
+
color_value = int(mkv)
|
|
35
|
+
# 根据CUSTOMER_ORDER_MARK_COLORS的位置一一判断
|
|
36
|
+
for color_number in get_power_indices(color_value):
|
|
37
|
+
# 拿到运算后颜色序号值 列入isGreen_1 的序号值
|
|
38
|
+
# 自定义标记的key
|
|
39
|
+
mark_key = f'{CUSTOMER_ORDER_MARK_COLORS[index]}_{color_number}'
|
|
40
|
+
for config in custom_mark_config:
|
|
41
|
+
if config['key'] == mark_key:
|
|
42
|
+
mark_content_list.append(config['content'])
|
|
43
|
+
break
|
|
44
|
+
return mark_content_list
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def lowercase_first_letter(s):
|
|
48
|
+
if not s:
|
|
49
|
+
return s
|
|
50
|
+
return s[0].lower() + s[1:]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def generate_add_or_update_user_comment_data_by_content_list(package_id: str, content_list: list,
|
|
54
|
+
custom_mark_config: list,
|
|
55
|
+
history: str = ''
|
|
56
|
+
):
|
|
57
|
+
"""
|
|
58
|
+
根据内容列表生成店小秘新增或者修改自定义标志的接口数据
|
|
59
|
+
:param history: 是否为历史订单 默认值不是
|
|
60
|
+
:param package_id: 店小秘包裹id
|
|
61
|
+
:param custom_mark_config: 自定义标注配置
|
|
62
|
+
:param content_list: 标注内容列表
|
|
63
|
+
:return:
|
|
64
|
+
"""
|
|
65
|
+
data = {}
|
|
66
|
+
# 先对content_list去重,防止生成重复标记
|
|
67
|
+
content_list = list(set(content_list))
|
|
68
|
+
#============================================================
|
|
69
|
+
# 计算标记颜色值start
|
|
70
|
+
#============================================================
|
|
71
|
+
# 准备计算标记的颜色值字典
|
|
72
|
+
ready_calc_color_dict = {}
|
|
73
|
+
# 在根据内容列表去计算颜色值
|
|
74
|
+
for content in content_list:
|
|
75
|
+
for config in custom_mark_config:
|
|
76
|
+
# 内容匹配上并且颜色是要带生成最终计算数值的二进制索引的key
|
|
77
|
+
mark_key_list = config['key'].split('_')
|
|
78
|
+
# 设置标注的内容匹配上了,并且是带有计算二进制位数的
|
|
79
|
+
if config['content'] == content and len(mark_key_list) == 2:
|
|
80
|
+
color = config['color']
|
|
81
|
+
if ready_calc_color_dict.get(color) is None:
|
|
82
|
+
ready_calc_color_dict[color] = []
|
|
83
|
+
# 添加颜色对应的索引值
|
|
84
|
+
ready_calc_color_dict[color].append(int(mark_key_list[1]))
|
|
85
|
+
break
|
|
86
|
+
# 计算颜色值
|
|
87
|
+
for index, color in enumerate(CUSTOMER_ORDER_MARK_COLORS):
|
|
88
|
+
color_keys = ready_calc_color_dict.keys()
|
|
89
|
+
if color in color_keys:
|
|
90
|
+
# 计算索引位置的二进制值
|
|
91
|
+
data[color] = sum([2 ** i for i in ready_calc_color_dict[color]])
|
|
92
|
+
else:
|
|
93
|
+
# 没有设置颜色值取0
|
|
94
|
+
data[color] = 0
|
|
95
|
+
# ============================================================
|
|
96
|
+
# 计算标记颜色值end
|
|
97
|
+
# ============================================================
|
|
98
|
+
|
|
99
|
+
#生成颜色对应内容
|
|
100
|
+
for color in CUSTOMER_ORDER_MARK_COLORS:
|
|
101
|
+
for config in custom_mark_config:
|
|
102
|
+
# 如果标记值和颜色常量匹配上
|
|
103
|
+
if config['key'] == color:
|
|
104
|
+
color_content_key = f"{lowercase_first_letter(color.replace('is', ''))}Content"
|
|
105
|
+
data[color_content_key] = config['content']
|
|
106
|
+
break
|
|
107
|
+
data['history'] = history
|
|
108
|
+
data['orderId'] = package_id
|
|
109
|
+
return data
|
ey_commerce_lib/kogan/main.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from httpx import AsyncClient
|
|
1
|
+
from httpx import AsyncClient, Timeout
|
|
2
2
|
|
|
3
3
|
from ey_commerce_lib.kogan.schemas.query.order import KoganOrderQuery
|
|
4
4
|
from ey_commerce_lib.kogan.schemas.query.product import KoganProductQuery
|
|
@@ -11,13 +11,17 @@ class KoganClient:
|
|
|
11
11
|
def __init__(self, seller_id: str, seller_token: str):
|
|
12
12
|
self.seller_id = seller_id
|
|
13
13
|
self.seller_token = seller_token
|
|
14
|
+
timeout = Timeout(connect=5.0, read=20.0, write=10.0, pool=10.0)
|
|
15
|
+
|
|
14
16
|
# 异步客户端
|
|
15
17
|
self.__async_client = AsyncClient(base_url="https://nimda.kogan.com",
|
|
16
18
|
headers={
|
|
17
19
|
'Accept': 'application/json',
|
|
18
20
|
'SellerId': self.seller_id,
|
|
19
21
|
'SellerToken': self.seller_token
|
|
20
|
-
}
|
|
22
|
+
},
|
|
23
|
+
timeout=timeout
|
|
24
|
+
)
|
|
21
25
|
|
|
22
26
|
async def orders(self, query_params: KoganOrderQuery):
|
|
23
27
|
# 设置查询参数
|
|
@@ -31,6 +35,7 @@ class KoganClient:
|
|
|
31
35
|
params=query_params.model_dump(by_alias=True,
|
|
32
36
|
exclude_none=True
|
|
33
37
|
))
|
|
38
|
+
|
|
34
39
|
return ProductResponse(**products_res.json())
|
|
35
40
|
|
|
36
41
|
async def __aenter__(self):
|
|
@@ -2,7 +2,7 @@ ey_commerce_lib/__init__.py,sha256=QTYqXqSTHFRkM9TEgpDFcHvwLbvqHDqvqfQ9EiXkcAM,2
|
|
|
2
2
|
ey_commerce_lib/model.py,sha256=uL_xo6Zi2B4t44UB0HALv8On3NIV9cgHay00F_Gkecs,230
|
|
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=
|
|
5
|
+
ey_commerce_lib/dxm/main.py,sha256=aNYkE3HA3OrhnfN-RLq24Sha7fm-9d2uytRM_6wSLqI,24726
|
|
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
|
|
@@ -10,13 +10,15 @@ ey_commerce_lib/dxm/exception/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
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
12
|
ey_commerce_lib/dxm/parser/common.py,sha256=-3OwoGsuHpugFS96OAzimZTXLkH7qZqmNvP-kvVSndM,3035
|
|
13
|
-
ey_commerce_lib/dxm/parser/order.py,sha256=
|
|
13
|
+
ey_commerce_lib/dxm/parser/order.py,sha256=_MIkdXkgi8clZuGoc8BJe3qMh2kmfCKLLG20zyoC1vU,17248
|
|
14
14
|
ey_commerce_lib/dxm/parser/purchase.py,sha256=7ULQHAIqUuUcpvWM1ut7uqCQhwE-DcQ7K3qftsfNlK8,5768
|
|
15
15
|
ey_commerce_lib/dxm/parser/warehouse.py,sha256=LfmqVixV5IcnPvr6Ma4XYoWUdXixQ16xzPP07bJrWb0,3192
|
|
16
16
|
ey_commerce_lib/dxm/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
ey_commerce_lib/dxm/schemas/common.py,sha256=ihCeYrh4K_-m9_4rVzHm-o8rFNqzcD5XkO0JQd2023g,234
|
|
18
18
|
ey_commerce_lib/dxm/schemas/order.py,sha256=uzhSgW0d7Z3L1yYb0meZ2AEF1OosnVM408W2-wZVriE,7802
|
|
19
19
|
ey_commerce_lib/dxm/schemas/warehouse.py,sha256=kHxNMgkVHCILfAWuDhLN0Q5pDtb3Nd5qexnJowCSnrI,5082
|
|
20
|
+
ey_commerce_lib/dxm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
ey_commerce_lib/dxm/utils/mark.py,sha256=rAmofi3JmdI8gdl3s-U0ZEKcA-cn6vtS3lsXDrVXRLc,4716
|
|
20
22
|
ey_commerce_lib/four_seller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
23
|
ey_commerce_lib/four_seller/main.py,sha256=Mz_Z0Vs-v0UmegOU_lo8eIpXmrWcL7_paRgBrm1s9_o,13131
|
|
22
24
|
ey_commerce_lib/four_seller/constant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -29,7 +31,7 @@ ey_commerce_lib/four_seller/schemas/query/order.py,sha256=XV7by4RT9NWvei4C__cQsL
|
|
|
29
31
|
ey_commerce_lib/four_seller/schemas/vo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
32
|
ey_commerce_lib/four_seller/schemas/vo/order.py,sha256=aNpnXSaXeUVbBz_7JtP8p6mWIWgUwejUhtYoa3gf4Po,12133
|
|
31
33
|
ey_commerce_lib/kogan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
ey_commerce_lib/kogan/main.py,sha256=
|
|
34
|
+
ey_commerce_lib/kogan/main.py,sha256=fROFOUd80qtsnggz5XR3vyoSAcb6PqFD1_rqSbAtYhE,2216
|
|
33
35
|
ey_commerce_lib/kogan/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
36
|
ey_commerce_lib/kogan/schemas/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
37
|
ey_commerce_lib/kogan/schemas/query/order.py,sha256=ajqO992fiorUDg3-YPPpK2Dgmdy2LoHfz4IatBz1Mro,574
|
|
@@ -42,6 +44,6 @@ ey_commerce_lib/utils/close.py,sha256=-De_H1I-gryytKYhLMsC3HfW67W852XkP1ckK2gLsF
|
|
|
42
44
|
ey_commerce_lib/utils/dxm.py,sha256=jVNltK_Pm_yMzXReD0Aw5VW6kzIZ5Bn23RucS0DKBI0,1196
|
|
43
45
|
ey_commerce_lib/utils/list_util.py,sha256=R1w7B1m3sEXr38zSHWp-15C3xAs5ykYCCpvwmnRW4xs,545
|
|
44
46
|
ey_commerce_lib/utils/str.py,sha256=939xE0y8U7KEWjwbEezMlaWJNBsfb2BSb-dBpYbOD8Q,138
|
|
45
|
-
ey_commerce_lib-1.0.
|
|
46
|
-
ey_commerce_lib-1.0.
|
|
47
|
-
ey_commerce_lib-1.0.
|
|
47
|
+
ey_commerce_lib-1.0.10.dist-info/METADATA,sha256=fLcVW4n7xGfi1eKRTmNZQH29q8J0KCc0gTo-mYOSfHc,391
|
|
48
|
+
ey_commerce_lib-1.0.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
49
|
+
ey_commerce_lib-1.0.10.dist-info/RECORD,,
|
|
File without changes
|