ZHIWEI666 commited on
Commit
b2717b9
·
verified ·
1 Parent(s): 75c356f

Upload 2 files

Browse files
Files changed (2) hide show
  1. router_tasks.py +9 -1
  2. task_read.py +22 -4
router_tasks.py CHANGED
@@ -212,7 +212,15 @@ def _read_task_pages(db_session, task_id=None):
212
  }
213
  message = error.args[0] if len(error.args) == 1 and type(error.args[0]) is str else None
214
  reason = message.replace(' ', '_') if type(error) is ValueError and message in reasons else 'unexpected_read_error'
215
- run_tip_effect(lambda: logger.error("TASK_READ_FAILED | error_type=%s | reason=%s", type(error).__name__, reason))
 
 
 
 
 
 
 
 
216
  raise HTTPException(status_code=503, detail="任务状态暂时无法核实,请稍后核对")
217
  finally:
218
  db_session.rollback()
 
212
  }
213
  message = error.args[0] if len(error.args) == 1 and type(error.args[0]) is str else None
214
  reason = message.replace(' ', '_') if type(error) is ValueError and message in reasons else 'unexpected_read_error'
215
+ detail = 'none'
216
+ if type(error) is ValueError and message == 'task deposit mismatch':
217
+ candidate = getattr(error, 'validation_detail', None)
218
+ if type(candidate) is str and candidate in {
219
+ 'ledger_count', 'deposit_type', 'funding_missing', 'deposit_range',
220
+ 'ledger_publisher', 'ledger_assignee', 'ledger_amount_type', 'ledger_amount'}:
221
+ detail = candidate
222
+ run_tip_effect(lambda: logger.error("TASK_READ_FAILED | error_type=%s | check=%s | reason=%s",
223
+ type(error).__name__, detail, reason))
224
  raise HTTPException(status_code=503, detail="任务状态暂时无法核实,请稍后核对")
225
  finally:
226
  db_session.rollback()
task_read.py CHANGED
@@ -25,6 +25,12 @@ def ledger(rows, identifier, kind, account, related, amount):
25
  raise ValueError('task closing ledger mismatch')
26
 
27
 
 
 
 
 
 
 
28
  def merged_task(current, records, funds):
29
  publication, revision, assignment, delivery, dispute, response, settlement, resolution = records
30
  if current is None and publication is None:
@@ -73,10 +79,22 @@ def merged_task(current, records, funds):
73
  deposit = result.get('deposit_amount')
74
  if type(deposit) is float and deposit.is_integer() and 0 <= deposit <= 2147483647:
75
  deposit = int(deposit)
76
- if (len(deposits) != 1 or type(deposit) is not int or amount is None or not 0 <= deposit <= amount
77
- or deposits[0].account != publisher or deposits[0].related_account != assignee
78
- or type(deposits[0].amount) is not int or deposits[0].amount != -deposit):
79
- raise ValueError('task deposit mismatch')
 
 
 
 
 
 
 
 
 
 
 
 
80
  result.update(assignee=assignee, deposit_amount=deposit, deposit_paid=deposit)
81
  if assignment is not None:
82
  if type(assignment.deposit) is not int or assignment.deposit != deposit or type(assignment.assigned_at) is not int:
 
25
  raise ValueError('task closing ledger mismatch')
26
 
27
 
28
+ def _reject_deposit(detail):
29
+ error = ValueError('task deposit mismatch')
30
+ error.validation_detail = detail
31
+ raise error
32
+
33
+
34
  def merged_task(current, records, funds):
35
  publication, revision, assignment, delivery, dispute, response, settlement, resolution = records
36
  if current is None and publication is None:
 
79
  deposit = result.get('deposit_amount')
80
  if type(deposit) is float and deposit.is_integer() and 0 <= deposit <= 2147483647:
81
  deposit = int(deposit)
82
+ if len(deposits) != 1:
83
+ _reject_deposit('ledger_count')
84
+ if type(deposit) is not int:
85
+ _reject_deposit('deposit_type')
86
+ if amount is None:
87
+ _reject_deposit('funding_missing')
88
+ if not 0 <= deposit <= amount:
89
+ _reject_deposit('deposit_range')
90
+ if deposits[0].account != publisher:
91
+ _reject_deposit('ledger_publisher')
92
+ if deposits[0].related_account != assignee:
93
+ _reject_deposit('ledger_assignee')
94
+ if type(deposits[0].amount) is not int:
95
+ _reject_deposit('ledger_amount_type')
96
+ if deposits[0].amount != -deposit:
97
+ _reject_deposit('ledger_amount')
98
  result.update(assignee=assignee, deposit_amount=deposit, deposit_paid=deposit)
99
  if assignment is not None:
100
  if type(assignment.deposit) is not int or assignment.deposit != deposit or type(assignment.assigned_at) is not int: