Skip to content

Commit

Permalink
Use center V2 for assets (#243)
Browse files Browse the repository at this point in the history
* use center V2 for assets

* task: update GH workflow file (#244)

* task: change GH workflow trigger for widget index (#246)

* fix: GH workflow for updating widget index (#247)

* new preview image + nft images

* use center V2 for assets

* new preview image + nft images

* render images from center

* chcekuser

* imageUrl add

---------

Co-authored-by: Sagar Shah <[email protected]>
  • Loading branch information
brucedonovan and sgzsh269 authored Sep 18, 2023
1 parent e16cc4f commit 5181d49
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 17 deletions.
Empty file added integrations/__init__.py
Empty file.
54 changes: 38 additions & 16 deletions integrations/center.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
import requests
import web3

from fastapi.responses import Response

import env
import utils
import auth

from utils import ETH_MAINNET_CHAIN_ID, nft, FetchError, ExecError
import utils.timing as timing
Expand All @@ -26,8 +29,7 @@
#"polygon-mainnet",
]

API_URL = "https://api.center.dev/v1"
API_V2_URL = "https://api.center.dev/v2"
API_URL = "https://api.center.dev"

MAX_RESULTS = 12
PAGE_LIMIT = 12
Expand Down Expand Up @@ -126,6 +128,7 @@ class NFTAsset(ContainerMixin):
preview_image_url: str
description: str = ''
price: Optional[str] = None
attributes: Optional[ List ] = None

def container_name(self) -> str:
return 'display-nft-asset-container'
Expand Down Expand Up @@ -214,7 +217,7 @@ def fetch_nft_search(search_str: str) -> Generator[Union[NFTCollection, NFTAsset
))
count = 0
for network in NETWORKS:
url = f"{API_V2_URL}/{network}/search?{q}"
url = f"{API_URL}/v2/{network}/search?{q}"
timing.log('search_begin')
response = requests.get(url, headers=HEADERS)
try:
Expand Down Expand Up @@ -295,7 +298,7 @@ def fetch_nft_search_collection_by_trait(network: str, address: str, trait_name:
limit=limit,
offset=offset,
))
url = f"{API_URL}/{network}/{address}/assets/searchByTraits?{q}"
url = f"{API_URL}/v1/{network}/{address}/assets/searchByTraits?{q}"
response = requests.post(url, headers=headers, json=payload)
try:
response.raise_for_status()
Expand Down Expand Up @@ -337,15 +340,15 @@ def fetch_nft_search_collection_by_trait(network: str, address: str, trait_name:


def fetch_nft_collection(network: str, address: str) -> NFTCollection:
url = f"{API_V2_URL}/{network}/{address}/nft/metadata"
url = f"{API_URL}/v2/{network}/{address}/nft/metadata"
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
obj = response.json()
num_assets = obj['totalSupply']
if num_assets == 0: # seems to return 0 incorrectly
# use the asset endpoint with dummy token
token_id = 1
url = f"{API_V2_URL}/{network}/{address}/nft/{token_id}/metadata"
url = f"{API_URL}/v2/{network}/{address}/nft/{token_id}/metadata"
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
token_obj = response.json()
Expand Down Expand Up @@ -375,7 +378,7 @@ def fetch_nft_collection_assets(network: str, address: str) -> NFTCollectionAsse
{"Address": address, "TokenID": token_id}
for token_id in token_ids[offset: offset + limit]
]}
url = f"{API_URL}/{network}/assets"
url = f"{API_URL}/v1/{network}/assets"
response = requests.post(url, headers=HEADERS, json=payload)
try:
response.raise_for_status()
Expand All @@ -400,6 +403,7 @@ def fetch_nft_collection_assets(network: str, address: str) -> NFTCollectionAsse
name=item['name'],
preview_image_url=item['mediumPreviewImageUrl'],
price=price,

)
if not _is_valid_asset(asset):
continue
Expand Down Expand Up @@ -434,7 +438,7 @@ def fetch_nft_collection_assets_for_sale(network: str, address: str) -> Generato
{"Address": address, "TokenID": token_id}
for token_id in token_ids[offset: offset + limit]
]}
url = f"{API_URL}/{network}/assets"
url = f"{API_URL}/v1/{network}/assets"
response = requests.post(url, headers=HEADERS, json=payload)
try:
response.raise_for_status()
Expand Down Expand Up @@ -482,7 +486,7 @@ def fetch_nft_collection_traits(network: str, address: str) -> NFTCollectionTrai
limit=limit,
offset=offset,
))
url = f"{API_URL}/{network}/{address}/traits?{q}"
url = f"{API_URL}/v1/{network}/{address}/traits?{q}"
response = requests.get(url, headers=HEADERS)
try:
response.raise_for_status()
Expand Down Expand Up @@ -525,7 +529,7 @@ def fetch_nft_collection_trait_values(network: str, address: str, trait: str) ->
limit=limit,
offset=offset,
))
url = f"{API_URL}/{network}/{address}/traits/{trait}?{q}"
url = f"{API_URL}/v1/{network}/{address}/traits/{trait}?{q}"
response = requests.get(url, headers=HEADERS)
try:
response.raise_for_status()
Expand Down Expand Up @@ -557,24 +561,26 @@ def fetch_nft_collection_trait_values(network: str, address: str, trait: str) ->


def fetch_nft_asset(network: str, address: str, token_id: str) -> NFTAsset:
url = f"{API_URL}/{network}/{address}/{token_id}"
url = f"{API_URL}/v2/{network}/{address}/nft/{token_id}/metadata"
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
obj = response.json()
return NFTAsset(
network=network,
address=address,
token_id=token_id,
collection_name=obj['collectionName'],
name=obj['name'],
preview_image_url=obj['mediumPreviewImageUrl'],
collection_name=obj['collection']['name'],
name=obj['metadata']['name'],
preview_image_url=f"{API_URL}{obj['media']['small']}",
# image_url=f"{API_URL}{obj['media']['medium']}",
description=obj['metadata']['description'],
attributes=obj['metadata']['attributes'],
)


def fetch_nft_asset_traits(network: str, address: str, token_id: str) -> NFTAssetTraits:
price = _fetch_nft_asset_price_str(network, address, token_id)
url = f"{API_URL}/{network}/{address}/{token_id}"
url = f"{API_URL}/v1/{network}/{address}/{token_id}"
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
obj = response.json()
Expand Down Expand Up @@ -622,7 +628,7 @@ def fetch_nfts_owned_by_address_or_domain(network: str, address_or_domain: str)
limit=limit,
offset=offset,
))
url = f"{API_V2_URL}/{normalized_network}/{address_or_domain}/nfts-owned?{q}"
url = f"{API_URL}/v2/{normalized_network}/{address_or_domain}/nfts-owned?{q}"

try:
response = requests.get(url, headers=HEADERS)
Expand Down Expand Up @@ -691,3 +697,19 @@ def _fetch_nft_asset_price_str(network: str, address: str, token_id: str) -> Opt
else:
price = None
return price

@auth.authenticate_user_id()
def fetch_center_image(response, network: str, address: str, token_id: str, size: str, user_id:str=None):

url = f"{API_URL}/v2/{network}/{address}/nft/{token_id}/render/{size}"
resp = requests.get(url, headers=HEADERS)

# Check if user is authenticated
if not user_id: return None

# return response.content
if resp.status_code != 200:
# Handle error appropriately, return a message, or another status code
return Response(content="Could not retrieve image", status_code=resp.status_code)

return Response(content=resp.content)
7 changes: 6 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
from dataclasses import dataclass
from typing import Any, Dict, Optional, Set

from fastapi import FastAPI, Request, Response, Body, WebSocket, WebSocketDisconnect
from fastapi import FastAPI, Request, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from starlette.middleware.sessions import SessionMiddleware
from fastapi.responses import StreamingResponse

import server
import chat
Expand All @@ -15,6 +16,7 @@
from app import chat as app_chat
from app import share as app_share

from integrations import center

app = FastAPI()

Expand Down Expand Up @@ -80,6 +82,9 @@ class ClientState:
async def api_nonce(request: Request):
return auth.api_nonce(request)

@app.get("/center_image/{network}/{address}/{token_id}/{size}")
async def fetch_nft_image(request: Request, network: str, address: str, token_id: str, size: str):
return center.fetch_center_image(request, network, address, token_id, size)

@app.post("/login")
async def api_login(request: Request, data: auth.AcceptJSON):
Expand Down

0 comments on commit 5181d49

Please sign in to comment.