1+ import pathlib
2+
13from pydantic import model_validator , HttpUrl , BaseModel
24from pydantic_settings import BaseSettings , SettingsConfigDict
35from stellar_sdk import Keypair , Network
46
5- __all__ = ["Identity" ]
7+ __all__ = ["Identity" , "NetworkConfig" ]
68
79
810class Identity (BaseSettings ):
@@ -23,6 +25,23 @@ def load_keys(self) -> "Identity":
2325 self .public_key = self .keypair .public_key
2426 return self
2527
28+ @classmethod
29+ def from_source_account (
30+ cls , account : Keypair | str | pathlib .Path | None = None
31+ ) -> "Identity" :
32+ if account is None :
33+ identity = Identity ()
34+ elif isinstance (account , (str , pathlib .Path )):
35+ fname = (
36+ account
37+ if pathlib .Path (account ).is_file ()
38+ else pathlib .Path (".soroban/identity" ) / account / ".toml"
39+ )
40+ identity = Identity (_env_file = fname )
41+ else :
42+ identity = Identity (keypair = account )
43+ return identity
44+
2645
2746class NetworkConfig (BaseSettings ):
2847 soroban_rpc_url : HttpUrl = HttpUrl ("https://soroban-testnet.stellar.org:443" )
@@ -33,4 +52,4 @@ class NetworkConfig(BaseSettings):
3352
3453class SorobanConfig (BaseModel ):
3554 network : NetworkConfig = NetworkConfig ()
36- keys : list [Identity ] = [ Identity ()]
55+ keys : list [Identity ] = None
0 commit comments