summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-09-12 22:48:45 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2022-09-12 22:48:45 +0300
commit49344e6954559259beb336436a45698d62eed5b4 (patch)
tree8c0e42e95f9846b9bf1c854f1bd94e10de35f9e9
parent9b72c6171741fc9492c0a468d40829c8118e61b0 (diff)
downloadapscheduler-49344e6954559259beb336436a45698d62eed5b4.tar.gz
Fixed schema parameter in SQLAlchemyJobStore not being used
Fixes #664.
-rw-r--r--docs/versionhistory.rst4
-rw-r--r--src/apscheduler/datastores/sqlalchemy.py13
-rw-r--r--tests/test_datastores.py2
3 files changed, 12 insertions, 7 deletions
diff --git a/docs/versionhistory.rst b/docs/versionhistory.rst
index 1e0c332..efe69fd 100644
--- a/docs/versionhistory.rst
+++ b/docs/versionhistory.rst
@@ -4,6 +4,10 @@ Version history
To find out how to migrate your application from a previous version of
APScheduler, see the :doc:`migration section <migration>`.
+**UNRELEASED**
+
+- Fixed the ``schema`` parameter in ``SQLAlchemyDataStore`` not being applied
+
**4.0.0a2**
- **BREAKING** Changed the scheduler API to always require a call to either
diff --git a/src/apscheduler/datastores/sqlalchemy.py b/src/apscheduler/datastores/sqlalchemy.py
index 9c7c905..ebb076f 100644
--- a/src/apscheduler/datastores/sqlalchemy.py
+++ b/src/apscheduler/datastores/sqlalchemy.py
@@ -100,12 +100,13 @@ class _BaseSQLAlchemyDataStore:
def __attrs_post_init__(self) -> None:
# Generate the table definitions
+ prefix = f"{self.schema}." if self.schema else ""
self._metadata = self.get_table_definitions()
- self.t_metadata = self._metadata.tables["metadata"]
- self.t_tasks = self._metadata.tables["tasks"]
- self.t_schedules = self._metadata.tables["schedules"]
- self.t_jobs = self._metadata.tables["jobs"]
- self.t_job_results = self._metadata.tables["job_results"]
+ self.t_metadata = self._metadata.tables[prefix + "metadata"]
+ self.t_tasks = self._metadata.tables[prefix + "tasks"]
+ self.t_schedules = self._metadata.tables[prefix + "schedules"]
+ self.t_jobs = self._metadata.tables[prefix + "jobs"]
+ self.t_job_results = self._metadata.tables[prefix + "job_results"]
# Find out if the dialect supports UPDATE...RETURNING
update = self.t_jobs.update().returning(self.t_jobs.c.id)
@@ -137,7 +138,7 @@ class _BaseSQLAlchemyDataStore:
interval_type = EmulatedInterval
tags_type = JSON
- metadata = MetaData()
+ metadata = MetaData(schema=self.schema)
Table("metadata", metadata, Column("schema_version", Integer, nullable=False))
Table(
"tasks",
diff --git a/tests/test_datastores.py b/tests/test_datastores.py
index 658a0f3..9c9a0cf 100644
--- a/tests/test_datastores.py
+++ b/tests/test_datastores.py
@@ -81,7 +81,7 @@ def psycopg2_store() -> DataStore:
engine = create_engine("postgresql+psycopg2://postgres:secret@localhost/testdb")
try:
- yield SQLAlchemyDataStore(engine, start_from_scratch=True)
+ yield SQLAlchemyDataStore(engine, schema="alter", start_from_scratch=True)
finally:
engine.dispose()