Spaces:
Running
on
Zero
Running
on
Zero
import configparser | |
from pathlib import Path | |
from typing import Optional | |
import typer | |
from rich.prompt import Confirm | |
def get_config(path: Optional[Path] = None): | |
p = path or Path.cwd().resolve() / ".codecarbon.config" | |
if p.exists(): | |
config = configparser.ConfigParser() | |
config.read(str(p)) | |
if "codecarbon" in config.sections(): | |
d = dict(config["codecarbon"]) | |
return d | |
else: | |
raise FileNotFoundError( | |
"No .codecarbon.config file found in the current directory." | |
) | |
def get_api_endpoint(path: Optional[Path] = None): | |
p = path or Path.cwd().resolve() / ".codecarbon.config" | |
if p.exists(): | |
config = configparser.ConfigParser() | |
config.read(str(p)) | |
if "codecarbon" in config.sections(): | |
d = dict(config["codecarbon"]) | |
if "api_endpoint" in d: | |
return d["api_endpoint"] | |
else: | |
with p.open("a") as f: | |
f.write("api_endpoint=https://api.codecarbon.io\n") | |
return "https://api.codecarbon.io" | |
def get_existing_local_exp_id(path: Optional[Path] = None): | |
p = path or Path.cwd().resolve() / ".codecarbon.config" | |
if p.exists(): | |
existing_path = p | |
else: | |
existing_path = Path("~/.codecarbon.config").expanduser() | |
return _get_local_exp_id(existing_path) | |
def _get_local_exp_id(p: Optional[Path] = None): | |
config = configparser.ConfigParser() | |
config.read(str(p)) | |
if "codecarbon" in config.sections(): | |
d = dict(config["codecarbon"]) | |
if "experiment_id" in d: | |
return d["experiment_id"] | |
def write_local_exp_id(exp_id, path: Optional[Path] = None): | |
p = path or Path.cwd().resolve() / ".codecarbon.config" | |
config = configparser.ConfigParser() | |
if p.exists(): | |
config.read(str(p)) | |
if "codecarbon" not in config.sections(): | |
config.add_section("codecarbon") | |
config["codecarbon"]["experiment_id"] = exp_id | |
with p.open("w") as f: | |
config.write(f) | |
def overwrite_local_config(config_name, value, path: Optional[Path] = None): | |
p = path or Path.cwd().resolve() / ".codecarbon.config" | |
config = configparser.ConfigParser() | |
if p.exists(): | |
config.read(str(p)) | |
if "codecarbon" not in config.sections(): | |
config.add_section("codecarbon") | |
config["codecarbon"][config_name] = value | |
with p.open("w") as f: | |
config.write(f) | |
def create_new_config_file(): | |
typer.echo("Creating new config file") | |
file_path = typer.prompt( | |
"Where do you want to put your config file ?", | |
type=str, | |
default="~/.codecarbon.config", | |
) | |
if file_path[0] == "~": | |
file_path = Path.home() / file_path[2:] | |
else: | |
file_path = Path(file_path) | |
if not file_path.parent.exists(): | |
create = Confirm.ask( | |
"Parent folder does not exist do you want to create it (and parents) ?" | |
) | |
if create: | |
file_path.parent.mkdir(parents=True, exist_ok=True) | |
file_path.touch() | |
with open(file_path, "w") as f: | |
f.write("[codecarbon]\n") | |
typer.echo(f"Config file created at {file_path}") | |
return file_path | |