aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Leon Sandøy <[email protected]>2020-11-14 22:56:36 +0100
committerGravatar GitHub <[email protected]>2020-11-14 22:56:36 +0100
commit4ed015aae21045876761284902c337da724b81eb (patch)
tree9bcc70435c2554c96de0c48376fae3af6b9816a7
parentFix typo in GitHub workflow (diff)
parentRemove make_persistent import from bot extensions (diff)
Merge pull request #515 from python-discord/feature/non-persistence
Remove persistence requirements from Seasonalbot
-rw-r--r--bot/exts/evergreen/branding.py29
-rw-r--r--bot/exts/halloween/candy_collection.py5
-rw-r--r--bot/exts/halloween/hacktoberstats.py5
-rw-r--r--bot/exts/halloween/monstersurvey.py1
-rw-r--r--bot/utils/persist.py69
5 files changed, 19 insertions, 90 deletions
diff --git a/bot/exts/evergreen/branding.py b/bot/exts/evergreen/branding.py
index 7e531011..b55c9b14 100644
--- a/bot/exts/evergreen/branding.py
+++ b/bot/exts/evergreen/branding.py
@@ -18,7 +18,8 @@ from bot.seasons import SeasonBase, get_all_seasons, get_current_season, get_sea
from bot.utils import human_months
from bot.utils.decorators import with_role
from bot.utils.exceptions import BrandingError
-from bot.utils.persist import make_persistent
+# TODO: Implement substitute for current volume persistence requirements
+# from bot.utils.persist import make_persistent
log = logging.getLogger(__name__)
@@ -156,13 +157,14 @@ class BrandingManager(commands.Cog):
self.days_since_cycle = itertools.cycle([None])
- self.config_file = make_persistent(Path("bot", "resources", "evergreen", "branding.json"))
- should_run = self._read_config()["daemon_active"]
+ # self.config_file = make_persistent(Path("bot", "resources", "evergreen", "branding.json"))
- if should_run:
- self.daemon = self.bot.loop.create_task(self._daemon_func())
- else:
- self.daemon = None
+ # should_run = self._read_config()["daemon_active"]
+
+ # if should_run:
+ # self.daemon = self.bot.loop.create_task(self._daemon_func())
+ # else:
+ self.daemon = None
@property
def _daemon_running(self) -> bool:
@@ -171,16 +173,11 @@ class BrandingManager(commands.Cog):
def _read_config(self) -> t.Dict[str, bool]:
"""Read and return persistent config file."""
- with self.config_file.open("r", encoding="utf8") as persistent_file:
- return json.load(persistent_file)
+ raise NotImplementedError("read_config functionality requires mounting a persistent volume.")
def _write_config(self, key: str, value: bool) -> None:
"""Write a `key`, `value` pair to persistent config file."""
- current_config = self._read_config()
- current_config[key] = value
-
- with self.config_file.open("w", encoding="utf8") as persistent_file:
- json.dump(current_config, persistent_file)
+ raise NotImplementedError("write_config functionality requires mounting a persistent volume.")
async def _daemon_func(self) -> None:
"""
@@ -513,7 +510,7 @@ class BrandingManager(commands.Cog):
await ctx.send(embed=response)
- @daemon_group.command(name="start")
+ @daemon_group.command(name="start", enabled=False)
async def daemon_start(self, ctx: commands.Context) -> None:
"""If the daemon isn't running, start it."""
if self._daemon_running:
@@ -525,7 +522,7 @@ class BrandingManager(commands.Cog):
response = discord.Embed(description=f"Daemon started {Emojis.ok_hand}", colour=Colours.soft_green)
await ctx.send(embed=response)
- @daemon_group.command(name="stop")
+ @daemon_group.command(name="stop", enabled=False)
async def daemon_stop(self, ctx: commands.Context) -> None:
"""If the daemon is running, stop it."""
if not self._daemon_running:
diff --git a/bot/exts/halloween/candy_collection.py b/bot/exts/halloween/candy_collection.py
index a862e1af..7bdc6ef0 100644
--- a/bot/exts/halloween/candy_collection.py
+++ b/bot/exts/halloween/candy_collection.py
@@ -9,7 +9,9 @@ from discord.ext import commands
from bot.constants import Channels, Month
from bot.utils.decorators import in_month
-from bot.utils.persist import make_persistent
+
+# TODO: Implement substitutes for volume-persistent methods.
+# from bot.utils.persist import make_persistent
log = logging.getLogger(__name__)
@@ -197,4 +199,3 @@ class CandyCollection(commands.Cog):
def setup(bot: commands.Bot) -> None:
"""Candy Collection game Cog load."""
- bot.add_cog(CandyCollection(bot))
diff --git a/bot/exts/halloween/hacktoberstats.py b/bot/exts/halloween/hacktoberstats.py
index d2762513..beff86e3 100644
--- a/bot/exts/halloween/hacktoberstats.py
+++ b/bot/exts/halloween/hacktoberstats.py
@@ -12,7 +12,9 @@ from discord.ext import commands
from bot.constants import Channels, Month, Tokens, WHITELISTED_CHANNELS
from bot.utils.decorators import in_month, override_in_channel
-from bot.utils.persist import make_persistent
+
+# TODO: Implement substitutes for volume-persistent methods.
+# from bot.utils.persist import make_persistent
log = logging.getLogger(__name__)
@@ -489,4 +491,3 @@ class HacktoberStats(commands.Cog):
def setup(bot: commands.Bot) -> None:
"""Hacktoberstats Cog load."""
- bot.add_cog(HacktoberStats(bot))
diff --git a/bot/exts/halloween/monstersurvey.py b/bot/exts/halloween/monstersurvey.py
index 7b1a1e84..80196825 100644
--- a/bot/exts/halloween/monstersurvey.py
+++ b/bot/exts/halloween/monstersurvey.py
@@ -202,4 +202,3 @@ class MonsterSurvey(Cog):
def setup(bot: Bot) -> None:
"""Monster survey Cog load."""
- bot.add_cog(MonsterSurvey(bot))
diff --git a/bot/utils/persist.py b/bot/utils/persist.py
deleted file mode 100644
index 1e178569..00000000
--- a/bot/utils/persist.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import sqlite3
-from pathlib import Path
-from shutil import copyfile
-
-from bot.exts import get_package_names
-
-DIRECTORY = Path("data") # directory that has a persistent volume mapped to it
-
-
-def make_persistent(file_path: Path) -> Path:
- """
- Copy datafile at the provided file_path to the persistent data directory.
-
- A persistent data file is needed by some features in order to not lose data
- after bot rebuilds.
-
- This function will ensure that a clean data file with default schema,
- structure or data is copied over to the persistent volume before returning
- the path to this new persistent version of the file.
-
- If the persistent file already exists, it won't be overwritten with the
- clean default file, just returning the Path instead to the existing file.
-
- Note: Avoid using the same file name as other features in the same seasons
- as otherwise only one datafile can be persistent and will be returned for
- both cases.
-
- Ensure that all open files are using explicit appropriate encoding to avoid
- encoding errors from diffent OS systems.
-
- Example Usage:
- >>> import json
- >>> template_datafile = Path("bot", "resources", "evergreen", "myfile.json")
- >>> path_to_persistent_file = make_persistent(template_datafile)
- >>> print(path_to_persistent_file)
- data/evergreen/myfile.json
- >>> with path_to_persistent_file.open("w+", encoding="utf8") as f:
- >>> data = json.load(f)
- """
- # ensure the persistent data directory exists
- DIRECTORY.mkdir(exist_ok=True)
-
- if not file_path.is_file():
- raise OSError(f"File not found at {file_path}.")
-
- # detect season in datafile path for assigning to subdirectory
- season = next((s for s in get_package_names() if s in file_path.parts), None)
-
- if season:
- # make sure subdirectory exists first
- subdirectory = Path(DIRECTORY, season)
- subdirectory.mkdir(exist_ok=True)
-
- persistent_path = Path(subdirectory, file_path.name)
-
- else:
- persistent_path = Path(DIRECTORY, file_path.name)
-
- # copy base/template datafile to persistent directory
- if not persistent_path.exists():
- copyfile(file_path, persistent_path)
-
- return persistent_path
-
-
-def sqlite(db_path: Path) -> sqlite3.Connection:
- """Copy sqlite file to the persistent data directory and return an open connection."""
- persistent_path = make_persistent(db_path)
- return sqlite3.connect(persistent_path)