|
63 | 63 | ibm = None |
64 | 64 | aws = None |
65 | 65 | qlm = None |
| 66 | +__active_profile: str = "" |
| 67 | + |
| 68 | + |
| 69 | +class ConfigError(ValueError): |
| 70 | + """Raised any time an error occurs at configuration level.""" |
66 | 71 |
|
67 | 72 |
|
68 | 73 | def load(configFile: str | None = None): |
@@ -100,4 +105,84 @@ def load(configFile: str | None = None): |
100 | 105 | qlm = data['QLM'] if 'QLM' in data.keys() else None |
101 | 106 |
|
102 | 107 |
|
103 | | -use_profile = None |
| 108 | +def is_loaded(provider: str | None = None): |
| 109 | + return (data != None) and ( |
| 110 | + (provider.upper() in data.keys()) if (provider != None) else True |
| 111 | + ) |
| 112 | + |
| 113 | + |
| 114 | +def get_active_profile() -> str: |
| 115 | + return __active_profile |
| 116 | + |
| 117 | + |
| 118 | +def unset_active_profile(): |
| 119 | + __active_profile = "" |
| 120 | + |
| 121 | + |
| 122 | +def is_set_active_profile(provider: str | None = None): |
| 123 | + if is_loaded(provider) and __active_profile: |
| 124 | + if provider != None: |
| 125 | + if provider.upper() != __active_profile.split("|")[0]: |
| 126 | + raise ConfigError( |
| 127 | + "Active profile \"%s\" is not valid for given provider \"%s\"" |
| 128 | + % (__active_profile, provider.upper()) |
| 129 | + ) |
| 130 | + else: |
| 131 | + return True |
| 132 | + else: |
| 133 | + return True |
| 134 | + else: |
| 135 | + return False |
| 136 | + |
| 137 | + |
| 138 | +def set_active_profile(profile_name: str, provider: str | None = None) -> None: |
| 139 | + global __active_profile |
| 140 | + |
| 141 | + if not is_loaded(provider): |
| 142 | + raise ConfigError( |
| 143 | + "No configuration file loaded. Try \"config.load()\" at first." |
| 144 | + ) |
| 145 | + |
| 146 | + if provider is not None: |
| 147 | + if ( |
| 148 | + provider.upper() |
| 149 | + not in data.keys() # pyright: ignore[reportOptionalMemberAccess] |
| 150 | + ): |
| 151 | + raise ConfigError("Unknown provider \"%s\"" % provider) |
| 152 | + else: |
| 153 | + if profile_name not in data[provider.upper()]["profile"]: |
| 154 | + raise ConfigError( |
| 155 | + "Unknown profile name \"%s\" for provider \"%s\"" |
| 156 | + % (profile_name, provider) |
| 157 | + ) |
| 158 | + else: |
| 159 | + __active_profile = provider.upper() + "|" + profile_name |
| 160 | + else: |
| 161 | + # If names of profiles are unique across all providers, |
| 162 | + # it is enough to give only the profile name. |
| 163 | + __active_profile = "" |
| 164 | + |
| 165 | + for key_provider in data.keys(): # pyright: ignore[reportOptionalMemberAccess] |
| 166 | + if profile_name in data[key_provider]["profile"].keys(): |
| 167 | + __active_profile = key_provider + "|" + profile_name |
| 168 | + break |
| 169 | + |
| 170 | + if not __active_profile: |
| 171 | + raise ConfigError( |
| 172 | + "Could not find profile name \"%s\" across all providers \"%s\"" |
| 173 | + % ( |
| 174 | + profile_name, |
| 175 | + str(data.keys()), # pyright: ignore[reportOptionalMemberAccess] |
| 176 | + ) |
| 177 | + ) |
| 178 | + __logger.info("Active profile set to \"%s\"" % __active_profile) |
| 179 | + |
| 180 | + |
| 181 | +def get_active_profile_data(): |
| 182 | + """Warning : This function does not perform any check. You are supposed to perform |
| 183 | + these checks before : configuration loaded, existing profile and profile |
| 184 | + corresponding to desired provider |
| 185 | +
|
| 186 | + """ |
| 187 | + provider, profile_name = __active_profile.split("|") |
| 188 | + return data[provider]["profile"][profile_name] |
0 commit comments