# What this PR does Follow up PR for https://github.com/grafana/oncall/pull/5004 Tests haven’t caught a bug, so the method and the tests are fixed ## Which issue(s) this PR closes Related to [issue link here] <!-- *Note*: If you want the issue to be auto-closed once the PR is merged, change "Related to" to "Closes" in the line above. If you have more than one GitHub issue that this PR closes, be sure to preface each issue link with a [closing keyword](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests#linking-a-pull-request-to-an-issue). This ensures that the issue(s) are auto-closed once the PR has been merged. --> ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [ ] Documentation added (or `pr:no public docs` PR label added if not required) - [ ] Added the relevant release notes label (see labels prefixed w/ `release:`). These labels dictate how your PR will show up in the autogenerated release notes.
27 lines
832 B
Python
27 lines
832 B
Python
import json
|
|
import os
|
|
import typing
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class CustomRateLimit:
|
|
integration: str
|
|
organization: str
|
|
public_api: str
|
|
|
|
|
|
def getenv_custom_ratelimit(variable_name: str, default: dict) -> typing.Dict[str, CustomRateLimit]:
|
|
custom_ratelimits_str = os.environ.get(variable_name)
|
|
if custom_ratelimits_str is None:
|
|
return default
|
|
value = load_custom_ratelimits(custom_ratelimits_str)
|
|
return value
|
|
|
|
|
|
def load_custom_ratelimits(custom_ratelimits_str: str) -> typing.Dict[str, CustomRateLimit]:
|
|
custom_ratelimits_dict = json.loads(custom_ratelimits_str)
|
|
# Convert the parsed JSON into a dictionary of RateLimit dataclasses
|
|
custom_ratelimits = {key: CustomRateLimit(**value) for key, value in custom_ratelimits_dict.items()}
|
|
|
|
return custom_ratelimits
|