kopia lustrzana https://github.com/bugout-dev/moonstream
Merge branch 'main' into leaderboard-metadata-sm
commit
06d8f63931
|
@ -5,7 +5,13 @@ from typing import List, Any, Optional, Dict, Union, Tuple, cast
|
||||||
import uuid
|
import uuid
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from bugout.data import BugoutResource, BugoutSearchResult
|
from bugout.data import (
|
||||||
|
BugoutResource,
|
||||||
|
BugoutSearchResult,
|
||||||
|
ResourcePermissions,
|
||||||
|
HolderType,
|
||||||
|
BugoutResourceHolder,
|
||||||
|
)
|
||||||
from eth_typing import Address
|
from eth_typing import Address
|
||||||
from hexbytes import HexBytes
|
from hexbytes import HexBytes
|
||||||
import requests # type: ignore
|
import requests # type: ignore
|
||||||
|
@ -103,6 +109,10 @@ class LeaderboardVersionNotFound(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class LeaderboardAssignResourceError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
BATCH_SIGNATURE_PAGE_SIZE = 500
|
BATCH_SIGNATURE_PAGE_SIZE = 500
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -1515,19 +1525,20 @@ def create_leaderboard(
|
||||||
db_session.add(leaderboard)
|
db_session.add(leaderboard)
|
||||||
db_session.commit()
|
db_session.commit()
|
||||||
|
|
||||||
|
user = None
|
||||||
|
if token is not None:
|
||||||
|
user = bc.get_user(token=token)
|
||||||
|
|
||||||
resource = create_leaderboard_resource(
|
resource = create_leaderboard_resource(
|
||||||
leaderboard_id=str(leaderboard.id),
|
leaderboard_id=str(leaderboard.id),
|
||||||
token=token,
|
user_id=str(user.id) if user is not None else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
leaderboard.resource_id = resource.id
|
leaderboard.resource_id = resource.id
|
||||||
|
|
||||||
db_session.commit()
|
db_session.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
db_session.rollback()
|
db_session.rollback()
|
||||||
logger.error(f"Error creating leaderboard: {e}")
|
logger.error(f"Error creating leaderboard: {e}")
|
||||||
raise LeaderboardCreateError(f"Error creating leaderboard: {e}")
|
raise LeaderboardCreateError(f"Error creating leaderboard: {e}")
|
||||||
|
|
||||||
return leaderboard
|
return leaderboard
|
||||||
|
|
||||||
|
|
||||||
|
@ -1701,38 +1712,62 @@ def add_scores(
|
||||||
# leaderboard access actions
|
# leaderboard access actions
|
||||||
|
|
||||||
|
|
||||||
def create_leaderboard_resource(
|
def create_leaderboard_resource(leaderboard_id: str, user_id: Optional[str] = None):
|
||||||
leaderboard_id: str, token: Union[Optional[uuid.UUID], str] = None
|
|
||||||
) -> BugoutResource:
|
|
||||||
resource_data: Dict[str, Any] = {
|
resource_data: Dict[str, Any] = {
|
||||||
"type": LEADERBOARD_RESOURCE_TYPE,
|
"type": LEADERBOARD_RESOURCE_TYPE,
|
||||||
"leaderboard_id": leaderboard_id,
|
"leaderboard_id": leaderboard_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
if token is None:
|
|
||||||
token = MOONSTREAM_ADMIN_ACCESS_TOKEN
|
|
||||||
try:
|
try:
|
||||||
resource = bc.create_resource(
|
resource = bc.create_resource(
|
||||||
token=token,
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
application_id=MOONSTREAM_APPLICATION_ID,
|
application_id=MOONSTREAM_APPLICATION_ID,
|
||||||
resource_data=resource_data,
|
resource_data=resource_data,
|
||||||
timeout=10,
|
timeout=10,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise LeaderboardCreateError(f"Error creating leaderboard resource: {e}")
|
raise LeaderboardCreateError(f"Error creating leaderboard resource: {e}")
|
||||||
|
|
||||||
|
if user_id is not None:
|
||||||
|
try:
|
||||||
|
bc.add_resource_holder_permissions(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
resource_id=resource.id,
|
||||||
|
holder_permissions=BugoutResourceHolder(
|
||||||
|
holder_type=HolderType.user,
|
||||||
|
holder_id=user_id,
|
||||||
|
permissions=[
|
||||||
|
ResourcePermissions.ADMIN,
|
||||||
|
ResourcePermissions.READ,
|
||||||
|
ResourcePermissions.UPDATE,
|
||||||
|
ResourcePermissions.DELETE,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
raise LeaderboardCreateError(
|
||||||
|
f"Error adding resource holder permissions: {e}"
|
||||||
|
)
|
||||||
|
|
||||||
return resource
|
return resource
|
||||||
|
|
||||||
|
|
||||||
def assign_resource(
|
def assign_resource(
|
||||||
db_session: Session,
|
db_session: Session,
|
||||||
leaderboard_id: uuid.UUID,
|
leaderboard_id: uuid.UUID,
|
||||||
user_token: Union[uuid.UUID, str],
|
user_token: Optional[Union[uuid.UUID, str]] = None,
|
||||||
resource_id: Optional[uuid.UUID] = None,
|
resource_id: Optional[uuid.UUID] = None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Assign a resource handler to a leaderboard
|
Assign a resource handler to a leaderboard
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
### get user_name from token
|
||||||
|
|
||||||
|
user = None
|
||||||
|
if user_token is not None:
|
||||||
|
user = bc.get_user(token=user_token)
|
||||||
|
|
||||||
leaderboard = (
|
leaderboard = (
|
||||||
db_session.query(Leaderboard).filter(Leaderboard.id == leaderboard_id).one() # type: ignore
|
db_session.query(Leaderboard).filter(Leaderboard.id == leaderboard_id).one() # type: ignore
|
||||||
)
|
)
|
||||||
|
@ -1740,11 +1775,9 @@ def assign_resource(
|
||||||
if resource_id is not None:
|
if resource_id is not None:
|
||||||
leaderboard.resource_id = resource_id
|
leaderboard.resource_id = resource_id
|
||||||
else:
|
else:
|
||||||
# Create resource via admin token
|
|
||||||
|
|
||||||
resource = create_leaderboard_resource(
|
resource = create_leaderboard_resource(
|
||||||
leaderboard_id=str(leaderboard_id),
|
leaderboard_id=str(leaderboard_id),
|
||||||
token=user_token,
|
user_id=user.id if user is not None else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
leaderboard.resource_id = resource.id
|
leaderboard.resource_id = resource.id
|
||||||
|
|
|
@ -7,7 +7,7 @@ base58==2.1.1
|
||||||
bitarray==2.7.6
|
bitarray==2.7.6
|
||||||
boto3==1.27.0
|
boto3==1.27.0
|
||||||
botocore==1.30.0
|
botocore==1.30.0
|
||||||
bugout==0.2.14
|
bugout==0.2.15
|
||||||
certifi==2023.5.7
|
certifi==2023.5.7
|
||||||
charset-normalizer==3.1.0
|
charset-normalizer==3.1.0
|
||||||
click==8.1.3
|
click==8.1.3
|
||||||
|
|
|
@ -13,7 +13,7 @@ setup(
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"boto3",
|
"boto3",
|
||||||
"bugout>=0.2.14",
|
"bugout>=0.2.15",
|
||||||
"eip712==0.1.0",
|
"eip712==0.1.0",
|
||||||
"eth-typing>=2.3.0",
|
"eth-typing>=2.3.0",
|
||||||
"fastapi",
|
"fastapi",
|
||||||
|
|
|
@ -15,6 +15,9 @@ from bugout.data import (
|
||||||
BugoutResources,
|
BugoutResources,
|
||||||
BugoutSearchResult,
|
BugoutSearchResult,
|
||||||
BugoutSearchResults,
|
BugoutSearchResults,
|
||||||
|
BugoutResourceHolder,
|
||||||
|
HolderType,
|
||||||
|
ResourcePermissions,
|
||||||
)
|
)
|
||||||
from bugout.exceptions import BugoutResponseException
|
from bugout.exceptions import BugoutResponseException
|
||||||
from bugout.journal import SearchOrder
|
from bugout.journal import SearchOrder
|
||||||
|
@ -711,11 +714,7 @@ def generate_journal_for_user(
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
bc.create_resource(
|
create_resource_for_user(user_id=user_id, resource_data=resource_data)
|
||||||
token=token,
|
|
||||||
application_id=MOONSTREAM_APPLICATION_ID,
|
|
||||||
resource_data=resource_data,
|
|
||||||
)
|
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -851,6 +850,8 @@ def get_list_of_support_interfaces(
|
||||||
Returns list of interfaces supported by given address
|
Returns list of interfaces supported by given address
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
result = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_, _, is_contract = check_if_smart_contract(
|
_, _, is_contract = check_if_smart_contract(
|
||||||
blockchain_type=blockchain_type, address=address, user_token=user_token
|
blockchain_type=blockchain_type, address=address, user_token=user_token
|
||||||
|
@ -866,8 +867,6 @@ def get_list_of_support_interfaces(
|
||||||
abi=supportsInterface_abi,
|
abi=supportsInterface_abi,
|
||||||
)
|
)
|
||||||
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
if blockchain_type in multicall_contracts:
|
if blockchain_type in multicall_contracts:
|
||||||
calls = []
|
calls = []
|
||||||
|
|
||||||
|
@ -952,3 +951,57 @@ def check_if_smart_contract(
|
||||||
is_contract = True
|
is_contract = True
|
||||||
|
|
||||||
return blockchain_type, address, is_contract
|
return blockchain_type, address, is_contract
|
||||||
|
|
||||||
|
|
||||||
|
def create_resource_for_user(
|
||||||
|
user_id: uuid.UUID,
|
||||||
|
resource_data: Dict[str, Any],
|
||||||
|
) -> BugoutResource:
|
||||||
|
"""
|
||||||
|
Create resource for user
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
resource = bc.create_resource(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
application_id=MOONSTREAM_APPLICATION_ID,
|
||||||
|
resource_data=resource_data,
|
||||||
|
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 resource: {str(e)}")
|
||||||
|
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||||
|
|
||||||
|
try:
|
||||||
|
bc.add_resource_holder_permissions(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
resource_id=resource.id,
|
||||||
|
holder_permissions=BugoutResourceHolder(
|
||||||
|
holder_type=HolderType.user,
|
||||||
|
holder_id=user_id,
|
||||||
|
permissions=[
|
||||||
|
ResourcePermissions.ADMIN,
|
||||||
|
ResourcePermissions.READ,
|
||||||
|
ResourcePermissions.UPDATE,
|
||||||
|
ResourcePermissions.DELETE,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||||
|
)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
logger.error(
|
||||||
|
f"Error adding resource holder permissions to resource resource {str(resource.id)} {str(e)}"
|
||||||
|
)
|
||||||
|
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
bc.delete_resource(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
resource_id=resource.id,
|
||||||
|
)
|
||||||
|
logger.error(
|
||||||
|
f"Error adding resource holder permissions to resource {str(resource.id)} {str(e)}"
|
||||||
|
)
|
||||||
|
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||||
|
|
||||||
|
return resource
|
||||||
|
|
|
@ -25,11 +25,11 @@ from ..actions import (
|
||||||
get_query_by_name,
|
get_query_by_name,
|
||||||
name_normalization,
|
name_normalization,
|
||||||
query_parameter_hash,
|
query_parameter_hash,
|
||||||
|
create_resource_for_user,
|
||||||
)
|
)
|
||||||
from ..middleware import MoonstreamHTTPException
|
from ..middleware import MoonstreamHTTPException
|
||||||
from ..settings import (
|
from ..settings import (
|
||||||
MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
MOONSTREAM_APPLICATION_ID,
|
|
||||||
MOONSTREAM_CRAWLERS_SERVER_PORT,
|
MOONSTREAM_CRAWLERS_SERVER_PORT,
|
||||||
MOONSTREAM_CRAWLERS_SERVER_URL,
|
MOONSTREAM_CRAWLERS_SERVER_URL,
|
||||||
MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS,
|
MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS,
|
||||||
|
@ -130,11 +130,8 @@ async def create_query_handler(
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||||
|
|
||||||
try:
|
create_resource_for_user(
|
||||||
# create resource query_name_resolver
|
user_id=user.id,
|
||||||
bc.create_resource(
|
|
||||||
token=token,
|
|
||||||
application_id=MOONSTREAM_APPLICATION_ID,
|
|
||||||
resource_data={
|
resource_data={
|
||||||
"type": data.BUGOUT_RESOURCE_QUERY_RESOLVER,
|
"type": data.BUGOUT_RESOURCE_QUERY_RESOLVER,
|
||||||
"user_id": str(user.id),
|
"user_id": str(user.id),
|
||||||
|
@ -143,11 +140,6 @@ async def create_query_handler(
|
||||||
"entry_id": str(entry.id),
|
"entry_id": str(entry.id),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
except BugoutResponseException as e:
|
|
||||||
logger.error(f"Error creating name resolving resource: {str(e)}")
|
|
||||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
|
||||||
except Exception as e:
|
|
||||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
bc.update_tags(
|
bc.update_tags(
|
||||||
|
@ -355,7 +347,7 @@ async def update_query_handler(
|
||||||
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
journal_id=MOONSTREAM_QUERIES_JOURNAL_ID,
|
journal_id=MOONSTREAM_QUERIES_JOURNAL_ID,
|
||||||
entry_id=query_id,
|
entry_id=query_id,
|
||||||
title=query_name,
|
title=f"Query:{query_name}",
|
||||||
content=request_update.query,
|
content=request_update.query,
|
||||||
tags=["preapprove"],
|
tags=["preapprove"],
|
||||||
)
|
)
|
||||||
|
@ -620,7 +612,9 @@ async def remove_query_handler(
|
||||||
raise MoonstreamHTTPException(status_code=404, detail="Query does not exists")
|
raise MoonstreamHTTPException(status_code=404, detail="Query does not exists")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
bc.delete_resource(token=token, resource_id=query_ids[query_name][0])
|
bc.delete_resource(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, resource_id=query_ids[query_name][0]
|
||||||
|
)
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
@ -9,7 +9,7 @@ base58==2.1.1
|
||||||
bitarray==2.6.0
|
bitarray==2.6.0
|
||||||
boto3==1.26.5
|
boto3==1.26.5
|
||||||
botocore==1.29.5
|
botocore==1.29.5
|
||||||
bugout>=0.2.13
|
bugout>=0.2.15
|
||||||
certifi==2022.9.24
|
certifi==2022.9.24
|
||||||
charset-normalizer==2.1.1
|
charset-normalizer==2.1.1
|
||||||
click==8.1.3
|
click==8.1.3
|
||||||
|
|
|
@ -13,7 +13,7 @@ setup(
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"appdirs",
|
"appdirs",
|
||||||
"boto3",
|
"boto3",
|
||||||
"bugout>=0.2.13",
|
"bugout>=0.2.15",
|
||||||
"fastapi",
|
"fastapi",
|
||||||
"moonstreamdb>=0.3.5",
|
"moonstreamdb>=0.3.5",
|
||||||
"humbug",
|
"humbug",
|
||||||
|
|
Ładowanie…
Reference in New Issue