kopia lustrzana https://github.com/bugout-dev/moonstream
Add fixes to subscriptions.
rodzic
ae4d04a61c
commit
a7b47bf281
|
|
@ -28,6 +28,7 @@ class SubscriptionTypesListResponse(BaseModel):
|
|||
class SubscriptionResourceData(BaseModel):
|
||||
id: str
|
||||
address: str
|
||||
abi: Optional[str]
|
||||
color: Optional[str]
|
||||
label: Optional[str]
|
||||
user_id: str
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ The Moonstream subscriptions HTTP API
|
|||
import logging
|
||||
from typing import List, Optional
|
||||
|
||||
import boto3
|
||||
from bugout.data import BugoutResource, BugoutResources
|
||||
from bugout.exceptions import BugoutResponseException
|
||||
from fastapi import APIRouter, Request, Form
|
||||
|
|
@ -15,6 +16,8 @@ from ..reporter import reporter
|
|||
from ..settings import (
|
||||
MOONSTREAM_APPLICATION_ID,
|
||||
bugout_client as bc,
|
||||
SMARTCONTRACTS_ABI_BUCKET,
|
||||
BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -33,6 +36,7 @@ async def add_subscription_handler(
|
|||
color: str = Form(...),
|
||||
label: str = Form(...),
|
||||
subscription_type_id: str = Form(...),
|
||||
abi: Optional[str] = Form(None),
|
||||
) -> data.SubscriptionResourceData:
|
||||
"""
|
||||
Add subscription to blockchain stream data for user.
|
||||
|
|
@ -63,6 +67,7 @@ async def add_subscription_handler(
|
|||
"address": address,
|
||||
"color": color,
|
||||
"label": label,
|
||||
"abi": None,
|
||||
}
|
||||
|
||||
try:
|
||||
|
|
@ -77,12 +82,43 @@ async def add_subscription_handler(
|
|||
logger.error(f"Error creating subscription resource: {str(e)}")
|
||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||
|
||||
if abi:
|
||||
|
||||
s3_client = boto3.client("s3")
|
||||
|
||||
bucket = SMARTCONTRACTS_ABI_BUCKET
|
||||
|
||||
result_bytes = abi.encode("utf-8")
|
||||
result_key = f"/v1/{address}/{resource.id}/abi.json"
|
||||
|
||||
s3_client.put_object(
|
||||
Body=result_bytes,
|
||||
Bucket=bucket,
|
||||
Key=result_key,
|
||||
ContentType="application/json",
|
||||
Metadata={"Moonstream": "Abi data"},
|
||||
)
|
||||
|
||||
try:
|
||||
resource: BugoutResource = bc.update_resource(
|
||||
resource_id=resource.id,
|
||||
token=token,
|
||||
resource_data={"update": {"abi": False}},
|
||||
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||
)
|
||||
except BugoutResponseException as e:
|
||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||
except Exception as e:
|
||||
logger.error(f"Error creating subscription resource: {str(e)}")
|
||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||
|
||||
return data.SubscriptionResourceData(
|
||||
id=str(resource.id),
|
||||
user_id=resource.resource_data["user_id"],
|
||||
address=resource.resource_data["address"],
|
||||
color=resource.resource_data["color"],
|
||||
label=resource.resource_data["label"],
|
||||
abi=resource.resource_data["abi"],
|
||||
subscription_type_id=resource.resource_data["subscription_type_id"],
|
||||
updated_at=resource.updated_at,
|
||||
created_at=resource.created_at,
|
||||
|
|
@ -113,6 +149,7 @@ async def delete_subscription_handler(request: Request, subscription_id: str):
|
|||
address=deleted_resource.resource_data["address"],
|
||||
color=deleted_resource.resource_data["color"],
|
||||
label=deleted_resource.resource_data["label"],
|
||||
abi=deleted_resource.resource_data["abi"],
|
||||
subscription_type_id=deleted_resource.resource_data["subscription_type_id"],
|
||||
updated_at=deleted_resource.updated_at,
|
||||
created_at=deleted_resource.created_at,
|
||||
|
|
@ -148,6 +185,7 @@ async def get_subscriptions_handler(request: Request) -> data.SubscriptionsListR
|
|||
address=resource.resource_data["address"],
|
||||
color=resource.resource_data["color"],
|
||||
label=resource.resource_data["label"],
|
||||
abi=resource.resource_data["abi"],
|
||||
subscription_type_id=resource.resource_data["subscription_type_id"],
|
||||
updated_at=resource.updated_at,
|
||||
created_at=resource.created_at,
|
||||
|
|
@ -167,6 +205,7 @@ async def update_subscriptions_handler(
|
|||
subscription_id: str,
|
||||
color: Optional[str] = Form(None),
|
||||
label: Optional[str] = Form(None),
|
||||
abi: Optional[str] = Form(None),
|
||||
) -> data.SubscriptionResourceData:
|
||||
"""
|
||||
Get user's subscriptions.
|
||||
|
|
@ -181,6 +220,39 @@ async def update_subscriptions_handler(
|
|||
if label:
|
||||
update["label"] = label
|
||||
|
||||
if abi:
|
||||
|
||||
try:
|
||||
existing_resources: BugoutResources = bc.list_resources(
|
||||
token=token,
|
||||
params={"type": BUGOUT_RESOURCE_TYPE_SUBSCRIPTION, "id": id},
|
||||
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||
)
|
||||
except BugoutResponseException as e:
|
||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting user subscriptions: {str(e)}")
|
||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||
|
||||
if existing_resources.resources:
|
||||
|
||||
s3_client = boto3.client("s3")
|
||||
|
||||
bucket = SMARTCONTRACTS_ABI_BUCKET
|
||||
|
||||
result_bytes = abi.encode("utf-8")
|
||||
result_key = f"/v1/{existing_resources.resources[0].resource_data['address']}/{subscription_id}/abi.json"
|
||||
|
||||
s3_client.put_object(
|
||||
Body=result_bytes,
|
||||
Bucket=bucket,
|
||||
Key=result_key,
|
||||
ContentType="application/json",
|
||||
Metadata={"Moonstream": "Abi data"},
|
||||
)
|
||||
|
||||
update["abi"] = True
|
||||
|
||||
try:
|
||||
resource: BugoutResource = bc.update_resource(
|
||||
token=token,
|
||||
|
|
@ -201,6 +273,7 @@ async def update_subscriptions_handler(
|
|||
address=resource.resource_data["address"],
|
||||
color=resource.resource_data["color"],
|
||||
label=resource.resource_data["label"],
|
||||
abi=resource.resource_data["abi"],
|
||||
subscription_type_id=resource.resource_data["subscription_type_id"],
|
||||
updated_at=resource.updated_at,
|
||||
created_at=resource.created_at,
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue