Spaces:
Sleeping
Sleeping
| 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 | |