File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -45,6 +45,8 @@ classifiers = [
4545
4646dependencies = [
4747 " stellar-sdk" ,
48+ " pydantic" ,
49+ " pydantic-settings" ,
4850]
4951
5052[project .optional-dependencies ]
Original file line number Diff line number Diff line change 1+ from soroban .models import *
Original file line number Diff line number Diff line change 1+ from pydantic import model_validator
2+ from pydantic_settings import BaseSettings , SettingsConfigDict
3+ from stellar_sdk import Keypair
4+
5+ __all__ = ["Identity" ]
6+
7+
8+ class Identity (BaseSettings ):
9+ secret_key : str | None = None
10+ public_key : str | None = None
11+ keypair : Keypair | None = None
12+
13+ model_config = SettingsConfigDict (env_file = "identity.toml" )
14+
15+ @model_validator (mode = 'after' )
16+ def load_keys (self ) -> 'UserModel' :
17+ if self .keypair is None and self .secret_key is None :
18+ raise ValueError ("Either provide a secret key or a Keypair object." )
19+ if self .keypair is not None :
20+ self .secret_key = self .keypair .secret
21+ else :
22+ self .keypair = Keypair .from_secret (self .secret_key )
23+ self .public_key = self .keypair .public_key
24+ return self
Original file line number Diff line number Diff line change 1+ secret_key = " SDTZV5HD6WBU2LZKVUGFCUUR3JTOJHDHEXO2TSYVITMSH6RCY433HEYB"
Original file line number Diff line number Diff line change 1+ import pathlib
2+
3+ import pytest
4+ import soroban
5+ from stellar_sdk import Keypair
6+
7+
8+ class TestIdentity :
9+
10+ def test_file (self ):
11+ alice_fname = pathlib .Path (__file__ ).parent
12+ soroban .Identity (_env_file = alice_fname / "alice.toml" )
13+
14+ def test_from_pk (self ):
15+ keypair = Keypair .random ()
16+ soroban .Identity (secret_key = keypair .secret )
17+ soroban .Identity (keypair = keypair )
18+
19+ def test_raises (self ):
20+ with pytest .raises (ValueError , match = "provide a secret key or a Keypair" ):
21+ soroban .Identity ()
22+
23+ keypair = Keypair .random ()
24+ with pytest .raises (ValueError , match = "provide a secret key or a Keypair" ):
25+ soroban .Identity (public_key = keypair .public_key )
You can’t perform that action at this time.
0 commit comments