mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
* PostgreSQL driver and general drivers cleanup Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Make tests pass Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Add black --target-version flag in make.bat Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Rewrite postgres driver Most of the logic is now in PL/pgSQL. This completely avoids the use of Python f-strings to format identifiers into queries. Although an SQL-injection attack would have been impossible anyway (only the owner would have ever had the ability to do that), using PostgreSQL's format() is more reliable for unusual identifiers. Performance-wise, I'm not sure whether this is an improvement, but I highly doubt that it's worse. Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Reformat Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Fix PostgresDriver.delete_all_data() Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Clean up PL/pgSQL code Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * More PL/pgSQL cleanup Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * PL/pgSQL function optimisations Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Ensure compatibility with PostgreSQL 10 and below Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * More/better docstrings for PG functions Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Fix typo in docstring Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Return correct value on toggle() Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Use composite type for PG function parameters Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Fix JSON driver's Config.clear_all() Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Correct description for Mongo tox recipe Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Fix linting errors Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Update dep specification after merging bumpdeps Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Add towncrier entries Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Update from merge Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Mention [postgres] extra in install docs Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Support more connection options and use better defaults Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Actually pass PG env vars in tox Signed-off-by: Toby Harradine <tobyharradine@gmail.com> * Replace event trigger with manual DELETE queries Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import asyncio
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from redbot.core import drivers, data_manager
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def event_loop(request):
|
|
"""Create an instance of the default event loop for entire session."""
|
|
loop = asyncio.get_event_loop_policy().new_event_loop()
|
|
yield loop
|
|
loop.close()
|
|
|
|
|
|
def _get_backend_type():
|
|
if os.getenv("RED_STORAGE_TYPE") == "postgres":
|
|
return drivers.BackendType.POSTGRES
|
|
elif os.getenv("RED_STORAGE_TYPE") == "mongo":
|
|
return drivers.BackendType.MONGO
|
|
else:
|
|
return drivers.BackendType.JSON
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
async def _setup_driver():
|
|
backend_type = _get_backend_type()
|
|
if backend_type == drivers.BackendType.MONGO:
|
|
storage_details = {
|
|
"URI": os.getenv("RED_MONGO_URI", "mongodb"),
|
|
"HOST": os.getenv("RED_MONGO_HOST", "localhost"),
|
|
"PORT": int(os.getenv("RED_MONGO_PORT", "27017")),
|
|
"USERNAME": os.getenv("RED_MONGO_USER", "red"),
|
|
"PASSWORD": os.getenv("RED_MONGO_PASSWORD", "red"),
|
|
"DB_NAME": os.getenv("RED_MONGO_DATABASE", "red_db"),
|
|
}
|
|
else:
|
|
storage_details = {}
|
|
data_manager.storage_type = lambda: backend_type.value
|
|
data_manager.storage_details = lambda: storage_details
|
|
driver_cls = drivers.get_driver_class(backend_type)
|
|
await driver_cls.initialize(**storage_details)
|
|
yield
|
|
await driver_cls.teardown()
|