Merge dev/koko into master preserving master conflict behavior
Conflict resolution kept master-side changes for non-patrol-delete files as requested. No app/amazon/patrol_delete.py conflict was present. Existing dev/koko assets were retained so /assets resources required by new_web_source pages resolve in the Flask app. Constraint: User requested authentication-requiring git operations be reported as commands only Rejected: Rework non-conflicting dev/koko changes during merge | scope was conflict resolution, not feature review Confidence: high Scope-risk: moderate Tested: uv run python -c Flask test client returned 200 for /new_web_source/patrol-delete.html, /assets/patrol-delete.js, /assets/pywebview-C66x_2Dh.js Tested: uv run python -m py_compile amazon\\patrol_delete.py amazon\\detail_spider.py amazon\\price_match.py main.py Tested: uv run --group dev pytest tests\\test_patrol_delete.py tests\\test_amazon_base.py Not-tested: authenticated Git push/pull; Java backend build
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -625,7 +625,7 @@ class AmzonePriceMatch(AmamzonBase):
|
||||
if len(page_pamel) > 0:
|
||||
current_page = page_pamel[0].sr('xpath:.//ul[@class="pages"]//li[@aria-current="true"]').text
|
||||
#测试=====
|
||||
# if int(current_page) > 3:
|
||||
# if int(current_page) > 3:c
|
||||
# break
|
||||
# 测试===========
|
||||
|
||||
@@ -790,7 +790,7 @@ class AmzonePriceMatch(AmamzonBase):
|
||||
"cartShopName" : cartShopName,
|
||||
"shippingFee" : f"{shipping_fee}",
|
||||
"priceChangeStatus" : f"{adjust_prices}",
|
||||
"modifyCount" : "1",
|
||||
"priceChangeStatus" : "改价成功",
|
||||
})
|
||||
else:
|
||||
recommendedPrice = recommend_price + shipping_fee
|
||||
@@ -808,8 +808,7 @@ class AmzonePriceMatch(AmamzonBase):
|
||||
"secondPlace": price_2,
|
||||
"cartShopName": cartShopName,
|
||||
"shippingFee": f"{shipping_fee}",
|
||||
"priceChangeStatus": "",
|
||||
"modifyCount": "0",
|
||||
"priceChangeStatus": "跳过,无需改价",
|
||||
})
|
||||
|
||||
already_asin.add(asin)
|
||||
@@ -1333,13 +1332,15 @@ class PriceTask:
|
||||
"""
|
||||
|
||||
url = f"{DELETE_BRAND_API_BASE}/api/price-track/tasks/{task_id}/result"
|
||||
|
||||
country_aliases = {name: code for code, name in self.country_info.items()}
|
||||
country_key = country_aliases.get(str(country_code).strip(), str(country_code).strip())
|
||||
|
||||
countries = {}
|
||||
if asin or status:
|
||||
countries[country_key] = [
|
||||
payload = {
|
||||
"shops": [
|
||||
{
|
||||
"shopName": shop_name,
|
||||
"countries": {
|
||||
country_key : [
|
||||
{
|
||||
"shopMallName": shopMallName,
|
||||
"asin": asin,
|
||||
@@ -1349,20 +1350,16 @@ class PriceTask:
|
||||
"firstPlace": status.get("firstPlace") if status.get("firstPlace") else "",
|
||||
"secondPlace": status.get("secondPlace") if status.get("secondPlace") else "",
|
||||
"cartShopName": status.get("cartShopName") if status.get("cartShopName") else "",
|
||||
"priceChangeStatus": status.get("priceChangeStatus") if status.get("priceChangeStatus") else "",
|
||||
"priceChangeStatus": "UPDATED",
|
||||
"deleteSkipAsin": status.get("deleteSkipAsin",False),
|
||||
"removeAsin": status.get("removeAsin") if status.get("removeAsin") else "",
|
||||
"modifyCount": status.get("modifyCount") if status.get("modifyCount") else "",
|
||||
"modifyCount": "1",
|
||||
"shippingFee" : status.get("shippingFee") if status.get("shippingFee") else "",
|
||||
"status": status.get("statu")
|
||||
"status": status.get("statu"),
|
||||
"priceChangeStatus" : status.get("priceChangeStatus") if status.get("priceChangeStatus") else "",
|
||||
}
|
||||
]
|
||||
|
||||
payload = {
|
||||
"shops": [
|
||||
{
|
||||
"shopName": shop_name,
|
||||
"countries": countries,
|
||||
},
|
||||
"error": ""
|
||||
}
|
||||
]
|
||||
|
||||
15
app/main.py
15
app/main.py
@@ -21,6 +21,9 @@ import requests
|
||||
import subprocess
|
||||
|
||||
from amazon.del_brand import kill_process
|
||||
|
||||
|
||||
|
||||
with open("version.txt","w",encoding="utf-8") as file:
|
||||
file.write(json.dumps({"version":version}))
|
||||
|
||||
@@ -50,8 +53,8 @@ class WindowAPI:
|
||||
def __init__(self, window):
|
||||
self._window = window
|
||||
self._is_maximized = False
|
||||
window.events.maximized += lambda *args: setattr(self, '_is_maximized', True)
|
||||
window.events.restored += lambda *args: setattr(self, '_is_maximized', False)
|
||||
window.events.maximized += lambda _: setattr(self, '_is_maximized', True)
|
||||
window.events.restored += lambda _: setattr(self, '_is_maximized', False)
|
||||
|
||||
def close(self):
|
||||
"""关闭窗口,异步执行清理逻辑"""
|
||||
@@ -334,10 +337,14 @@ class WindowAPI:
|
||||
# if payload.get("type") == "delete-brand-run" and payload.get("data").get("taskId") in runing_task:
|
||||
# return {'success': False, 'error': '已存在正在执行的删除品牌任务'}
|
||||
# 判断当前店铺是否正在运行中
|
||||
if payload.get("data",{}).get("shop_name"):
|
||||
shop_name = payload.get("data",{}).get("shop_name")
|
||||
if shop_name in runing_shop:
|
||||
return {'success': False, 'error': f'当前店铺 {shop_name} 正在执行中,请等待店铺完成之后重试'}
|
||||
if payload.get("data").get("items"):
|
||||
shop_name = payload["data"]["items"][0]["shopName"]
|
||||
if shop_name in runing_shop:
|
||||
return {'success': False, 'error': '当前店铺正在执行中,请等待店铺完成之后重试'}
|
||||
return {'success': False, 'error': f'当前店铺 {shop_name} 正在执行中,请等待店铺完成之后重试'}
|
||||
JSON_TASK_QUEUE.put(payload)
|
||||
return {'success': True, 'queue_size': JSON_TASK_QUEUE.qsize()}
|
||||
except Exception as e:
|
||||
@@ -431,7 +438,7 @@ def main():
|
||||
window.expose(api.close, api.minimize, api.maximize, api.toggle_maximize, generate_images, api.save_image, api.save_image_to_folder, api.select_folder, api.select_brand_xlsx_files, api.select_brand_folder,
|
||||
api.save_file_from_url, api.save_template_xlsx,api.save_template_zip,api.upload_file_to_java,api.open_external_url,api.enqueue_json,api.get_detail_del,api.save_file_from_url_new)
|
||||
webview.start(
|
||||
debug=True,
|
||||
debug=False,
|
||||
storage_path=cache_path,
|
||||
private_mode=False
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user