aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/constants.py14
-rw-r--r--tests/bot/test_constants.py17
2 files changed, 19 insertions, 12 deletions
diff --git a/bot/constants.py b/bot/constants.py
index 75d394b6a..145ae54db 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -15,7 +15,7 @@ import os
from collections.abc import Mapping
from enum import Enum
from pathlib import Path
-from typing import Dict, List
+from typing import Dict, List, Optional
import yaml
@@ -198,7 +198,7 @@ class Bot(metaclass=YAMLGetter):
prefix: str
token: str
- sentry_dsn: str
+ sentry_dsn: Optional[str]
class Redis(metaclass=YAMLGetter):
@@ -207,7 +207,7 @@ class Redis(metaclass=YAMLGetter):
host: str
port: int
- password: str
+ password: Optional[str]
use_fakeredis: bool # If this is True, Bot will use fakeredis.aioredis
@@ -459,7 +459,7 @@ class Guild(metaclass=YAMLGetter):
class Keys(metaclass=YAMLGetter):
section = "keys"
- site_api: str
+ site_api: Optional[str]
class URLs(metaclass=YAMLGetter):
@@ -502,8 +502,8 @@ class Reddit(metaclass=YAMLGetter):
section = "reddit"
subreddits: list
- client_id: str
- secret: str
+ client_id: Optional[str]
+ secret: Optional[str]
class Wolfram(metaclass=YAMLGetter):
@@ -511,7 +511,7 @@ class Wolfram(metaclass=YAMLGetter):
user_limit_day: int
guild_limit_day: int
- key: str
+ key: Optional[str]
class AntiSpam(metaclass=YAMLGetter):
diff --git a/tests/bot/test_constants.py b/tests/bot/test_constants.py
index dae7c066c..db9a9bcb0 100644
--- a/tests/bot/test_constants.py
+++ b/tests/bot/test_constants.py
@@ -1,4 +1,5 @@
import inspect
+import typing
import unittest
from bot import constants
@@ -8,7 +9,7 @@ class ConstantsTests(unittest.TestCase):
"""Tests for our constants."""
def test_section_configuration_matches_type_specification(self):
- """The section annotations should match the actual types of the sections."""
+ """"The section annotations should match the actual types of the sections."""
sections = (
cls
@@ -19,8 +20,14 @@ class ConstantsTests(unittest.TestCase):
for name, annotation in section.__annotations__.items():
with self.subTest(section=section, name=name, annotation=annotation):
value = getattr(section, name)
+ annotation_args = typing.get_args(annotation)
- if getattr(annotation, '_name', None) in ('Dict', 'List'):
- self.skipTest("Cannot validate containers yet.")
-
- self.assertIsInstance(value, annotation)
+ if not annotation_args:
+ self.assertIsInstance(value, annotation)
+ else:
+ origin = typing.get_origin(annotation)
+ if origin is typing.Union:
+ is_instance = any(isinstance(value, arg) for arg in annotation_args)
+ self.assertTrue(is_instance)
+ else:
+ self.skipTest(f"Validating type {annotation} is unsupported.")