Add mock implementations for Solana dependencies

- Add graceful handling of missing Solana dependencies
- Create mock implementations for Solana classes
- Added all required __init__.py files to make modules importable
- Update requirements.txt with missing dependencies
This commit is contained in:
Automated Action 2025-06-05 19:38:01 +00:00
parent 73b706f0eb
commit 572a7c0dd0
9 changed files with 60 additions and 7 deletions

0
app/__init__.py Normal file
View File

0
app/api/__init__.py Normal file
View File

View File

View File

0
app/models/__init__.py Normal file
View File

0
app/schemas/__init__.py Normal file
View File

View File

@ -3,15 +3,59 @@ import logging
from typing import Dict, List, Optional, Any, Tuple
import base64
import base58
logger = logging.getLogger(__name__)
# Try to import Solana packages, otherwise use mock implementations
try:
from solana.rpc.api import Client
from solana.publickey import PublicKey
from solana.keypair import Keypair
from solana.transaction import Transaction
from solana.rpc.types import TxOpts
SOLANA_AVAILABLE = True
except ImportError:
logger.warning("Solana package not available. Using mock implementations.")
SOLANA_AVAILABLE = False
# Mock classes for when solana package is not available
class Client:
def __init__(self, endpoint):
self.endpoint = endpoint
def get_balance(self, *args, **kwargs):
return {"result": {"value": 0}}
def get_token_accounts_by_owner(self, *args, **kwargs):
return {"result": {"value": []}}
def get_token_supply(self, *args, **kwargs):
return {"result": {"value": {"decimals": 9}}}
def send_transaction(self, *args, **kwargs):
return {"error": {"message": "Solana package not available"}}
class PublicKey:
def __init__(self, key):
self.key = key
class Keypair:
@classmethod
def from_secret_key(cls, *args, **kwargs):
return cls()
@property
def public_key(self):
return PublicKey("mock")
class Transaction:
def sign(self, *args, **kwargs):
pass
class TxOpts:
pass
from app.core.config import settings
logger = logging.getLogger(__name__)
# Initialize Solana client
solana_client = Client(settings.SOLANA_RPC_URL)
@ -57,6 +101,10 @@ def load_wallet_keypair() -> Optional[Keypair]:
def get_wallet_balance() -> Dict[str, float]:
"""Get SOL and USDC balance for the configured wallet"""
if not SOLANA_AVAILABLE:
logger.warning("Solana package not available. Returning mock balances.")
return {"SOL": 0.0, "USDC": 0.0}
keypair = load_wallet_keypair()
if not keypair:
return {"SOL": 0.0, "USDC": 0.0}
@ -160,6 +208,10 @@ def send_transaction(transaction: Transaction, signers: List[Keypair], opts: Opt
Returns:
Tuple of (success, signature, error_message)
"""
if not SOLANA_AVAILABLE:
logger.warning("Solana package not available. Cannot send transaction.")
return False, "", "Solana package not available"
try:
# Sign the transaction
transaction.sign(*signers)

0
app/utils/__init__.py Normal file
View File

View File

@ -12,3 +12,4 @@ python-dotenv>=1.0.0
ruff>=0.0.292
httpx>=0.25.0
pytest>=7.4.2
base58>=2.1.1