1- from itertools import chain
2- from logging import Logger
31import os .path
2+ import semver
43from typing import Any , Dict , List
4+ from pathlib import Path
55
6- from erdpy import errors , utils
6+ from erdpy import errors , utils , workstation
77
88ROOT_FOLDER_NAME = "elrondsdk"
99LOCAL_CONFIG_PATH = os .path .join (os .getcwd (), "erdpy.json" )
@@ -57,7 +57,8 @@ def get_dependency_url(key: str, tag: str, platform: str) -> str:
5757def get_value (name : str ) -> str :
5858 _guard_valid_name (name )
5959 data = get_active ()
60- value = data .get (name , get_defaults ()[name ])
60+ default_value = get_defaults ()[name ]
61+ value = data .get (name , default_value )
6162 assert isinstance (value , str )
6263 return value
6364
@@ -72,6 +73,16 @@ def set_value(name: str, value: Any):
7273 write_file (data )
7374
7475
76+ def delete_value (name : str ):
77+ _guard_valid_config_deletion (name )
78+ data = read_file ()
79+ active_config = data .get ("active" , "default" )
80+ data .setdefault ("configurations" , {})
81+ data ["configurations" ].setdefault (active_config , {})
82+ del data ["configurations" ][active_config ][name ]
83+ write_file (data )
84+
85+
7586def get_active ():
7687 data = read_file ()
7788 configs = data .get ("configurations" , {})
@@ -137,30 +148,32 @@ def get_defaults() -> Dict[str, Any]:
137148 "proxy" : "https://testnet-gateway.elrond.com" ,
138149 "chainID" : "T" ,
139150 "txVersion" : "1" ,
140- "dependencies.arwentools.tag" : "v1.1.2 " ,
141- "dependencies.elrond_wasm_rs.tag" : "v0.12.0 " ,
151+ "dependencies.arwentools.tag" : "latest " ,
152+ "dependencies.elrond_wasm_rs.tag" : "latest " ,
142153 "dependencies.arwentools.urlTemplate.linux" : "https://github.com/ElrondNetwork/arwen-wasm-vm/archive/{TAG}.tar.gz" ,
143154 "dependencies.arwentools.urlTemplate.osx" : "https://github.com/ElrondNetwork/arwen-wasm-vm/archive/{TAG}.tar.gz" ,
144155 "dependencies.llvm.tag" : "v9-19feb" ,
145156 "dependencies.llvm.urlTemplate.linux" : "https://ide.elrond.com/vendor-llvm/{TAG}/linux-amd64.tar.gz?t=19feb" ,
146157 "dependencies.llvm.urlTemplate.osx" : "https://ide.elrond.com/vendor-llvm/{TAG}/darwin-amd64.tar.gz?t=19feb" ,
147- "dependencies.rust.tag" : "" ,
158+ "dependencies.rust.tag" : "nightly " ,
148159 "dependencies.nodejs.tag" : "v12.18.3" ,
149160 "dependencies.nodejs.urlTemplate.linux" : "https://nodejs.org/dist/{TAG}/node-{TAG}-linux-x64.tar.gz" ,
150161 "dependencies.nodejs.urlTemplate.osx" : "https://nodejs.org/dist/{TAG}/node-{TAG}-darwin-x64.tar.gz" ,
151- "dependencies.elrond_go.tag" : "master " ,
162+ "dependencies.elrond_go.tag" : "latest " ,
152163 "dependencies.elrond_go.urlTemplate.linux" : "https://github.com/ElrondNetwork/elrond-go/archive/{TAG}.tar.gz" ,
153164 "dependencies.elrond_go.urlTemplate.osx" : "https://github.com/ElrondNetwork/elrond-go/archive/{TAG}.tar.gz" ,
154165 "dependencies.elrond_go.url" : "https://github.com/ElrondNetwork/elrond-go/archive/{TAG}.tar.gz" ,
155- "dependencies.elrond_proxy_go.tag" : "master " ,
166+ "dependencies.elrond_proxy_go.tag" : "latest " ,
156167 "dependencies.elrond_proxy_go.urlTemplate.linux" : "https://github.com/ElrondNetwork/elrond-proxy-go/archive/{TAG}.tar.gz" ,
157168 "dependencies.elrond_proxy_go.urlTemplate.osx" : "https://github.com/ElrondNetwork/elrond-proxy-go/archive/{TAG}.tar.gz" ,
158169 "dependencies.golang.tag" : "go1.15.2" ,
159170 "dependencies.golang.urlTemplate.linux" : "https://golang.org/dl/{TAG}.linux-amd64.tar.gz" ,
160171 "dependencies.golang.urlTemplate.osx" : "https://golang.org/dl/{TAG}.darwin-amd64.tar.gz" ,
161- "dependencies.mcl_signer.tag" : "v1.0.0 " ,
172+ "dependencies.mcl_signer.tag" : "latest " ,
162173 "dependencies.mcl_signer.urlTemplate.linux" : "https://github.com/ElrondNetwork/elrond-sdk-go-tools/releases/download/{TAG}/mcl_signer_{TAG}_ubuntu-latest.tar.gz" ,
163174 "dependencies.mcl_signer.urlTemplate.osx" : "https://github.com/ElrondNetwork/elrond-sdk-go-tools/releases/download/{TAG}/mcl_signer_{TAG}_macos-latest.tar.gz" ,
175+ "testnet.validate_expected_keys" : "false" ,
176+ "github_api_token" : "" ,
164177 }
165178
166179
@@ -227,3 +240,44 @@ def determine_final_args(argv: List[str], config_args: Dict[str, Any]) -> List[s
227240 pre_args = [verbose_flag ]
228241
229242 return pre_args + argv + extra_args
243+
244+
245+ def get_dependency_directory (key : str , tag : str ) -> Path :
246+ parent_directory = get_dependency_parent_directory (key )
247+ if tag == 'latest' :
248+ tag = get_latest_semver_from_directory (parent_directory )
249+
250+ return parent_directory / tag
251+
252+
253+ def get_dependency_parent_directory (key : str ) -> Path :
254+ tools_folder = Path (workstation .get_tools_folder ())
255+ return tools_folder / key
256+
257+
258+ def get_latest_semver_from_directory (directory : Path ) -> str :
259+ subdirs = [subdir .name for subdir in directory .iterdir ()]
260+ versions = parse_strings_to_semver (subdirs )
261+ if len (versions ) == 0 :
262+ raise Exception (f'no versions found in { directory } ' )
263+
264+ if len (versions ) == 1 :
265+ latest_version = versions [0 ]
266+ else :
267+ latest_version = sorted (versions ).pop ()
268+ return 'v' + str (latest_version )
269+
270+
271+ def parse_strings_to_semver (version_strings : List [str ]) -> List [semver .VersionInfo ]:
272+ versions = []
273+ for version_string in version_strings :
274+ try :
275+ # Omit the 'v' prefix of the version string
276+ version_string = version_string [1 :]
277+ version = semver .VersionInfo .parse (version_string )
278+ except ValueError :
279+ continue
280+
281+ versions .append (version )
282+
283+ return versions
0 commit comments