kopia lustrzana https://github.com/bugout-dev/moonstream
Verify if requests exists before push new list
rodzic
135af1765c
commit
e700efff5b
|
@ -3,9 +3,9 @@ import json
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Set, Tuple
|
||||||
|
|
||||||
from sqlalchemy import func, or_, text
|
from sqlalchemy import func, or_, text, tuple_
|
||||||
from sqlalchemy.dialects.postgresql import insert
|
from sqlalchemy.dialects.postgresql import insert
|
||||||
from sqlalchemy.engine import Row
|
from sqlalchemy.engine import Row
|
||||||
from sqlalchemy.exc import IntegrityError, NoResultFound
|
from sqlalchemy.exc import IntegrityError, NoResultFound
|
||||||
|
@ -431,6 +431,18 @@ def create_request_calls(
|
||||||
return len(call_specs)
|
return len(call_specs)
|
||||||
|
|
||||||
|
|
||||||
|
def get_call_request_from_tuple(
|
||||||
|
db_session: Session, registered_contract_id, requests: Set[Tuple[str, str]]
|
||||||
|
) -> List[CallRequest]:
|
||||||
|
existing_requests = (
|
||||||
|
db_session.query(CallRequest)
|
||||||
|
.filter(CallRequest.registered_contract_id == registered_contract_id)
|
||||||
|
.filter(tuple_(CallRequest.caller, CallRequest.request_id).in_(requests))
|
||||||
|
.all()
|
||||||
|
)
|
||||||
|
return existing_requests
|
||||||
|
|
||||||
|
|
||||||
def get_call_request(
|
def get_call_request(
|
||||||
db_session: Session,
|
db_session: Session,
|
||||||
request_id: uuid.UUID,
|
request_id: uuid.UUID,
|
||||||
|
|
|
@ -5,8 +5,9 @@ Moonstream users can register contracts on Moonstream Engine. This allows them t
|
||||||
as part of their chain-adjacent activities (like performing signature-based token distributions on the
|
as part of their chain-adjacent activities (like performing signature-based token distributions on the
|
||||||
Dropper contract).
|
Dropper contract).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional, Set, Tuple
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from bugout.data import BugoutUser
|
from bugout.data import BugoutUser
|
||||||
|
@ -351,12 +352,30 @@ async def create_requests(
|
||||||
data: data.CreateCallRequestsAPIRequest = Body(...),
|
data: data.CreateCallRequestsAPIRequest = Body(...),
|
||||||
user: BugoutUser = Depends(request_user_auth),
|
user: BugoutUser = Depends(request_user_auth),
|
||||||
db_session: Session = Depends(db.yield_db_session),
|
db_session: Session = Depends(db.yield_db_session),
|
||||||
|
verify: bool = Query(False),
|
||||||
) -> int:
|
) -> int:
|
||||||
"""
|
"""
|
||||||
Allows API user to register call requests from given contract details, TTL, and call specifications.
|
Allows API user to register call requests from given contract details, TTL, and call specifications.
|
||||||
|
|
||||||
At least one of `contract_id` or `contract_address` must be provided in the request body.
|
At least one of `contract_id` or `contract_address` must be provided in the request body.
|
||||||
"""
|
"""
|
||||||
|
if verify is True:
|
||||||
|
requests: Set[Tuple[str, str]] = {
|
||||||
|
(r.caller, r.request_id) for r in data.specifications
|
||||||
|
}
|
||||||
|
existing_requests = contracts_actions.get_call_request_from_tuple(
|
||||||
|
db_session=db_session,
|
||||||
|
registered_contract_id=data.contract_id,
|
||||||
|
requests=requests,
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(existing_requests) != 0:
|
||||||
|
existing_request_ids = [str(r.request_id) for r in existing_requests]
|
||||||
|
raise EngineHTTPException(
|
||||||
|
status_code=409,
|
||||||
|
detail=f"Call request with request_id's: [{','.join(existing_request_ids)}] already registered",
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
num_requests = contracts_actions.create_request_calls(
|
num_requests = contracts_actions.create_request_calls(
|
||||||
db_session=db_session,
|
db_session=db_session,
|
||||||
|
|
Ładowanie…
Reference in New Issue