Spaces:
Running
Running
Upload 2 files
Browse files- router_tasks.py +9 -1
- 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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:
|