From c96a3bb2b0c2fb2314c3c18d499dfc53a6d84aed Mon Sep 17 00:00:00 2001 From: Nathan Ollerenshaw Date: Wed, 10 Jan 2024 20:25:04 -0800 Subject: [PATCH] initial sqlalchemy-2.0 support --- .python-version | 1 + Makefile | 10 ++-------- docker-compose.yml | 6 ++++-- requirements.txt | 6 +++--- setup.py | 6 ++++-- src/savage/models/__init__.py | 2 +- tests/conftest.py | 4 ++-- tests/models.py | 2 +- 8 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 .python-version diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..43077b2 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.9.18 diff --git a/Makefile b/Makefile index bbad7e8..7e95b59 100644 --- a/Makefile +++ b/Makefile @@ -11,13 +11,7 @@ default: install lint tests venv: # Create a local virtual environment in `venv/` -ifdef CI - # Don't pin Python version in CI; instead, defer to Travis - virtualenv --no-site-packages $(VENV_DIR) -else - # Use Python 3.7 for local development - virtualenv --no-site-packages --python=python3.7 $(VENV_DIR) -endif + python -mvenv $(VENV_DIR) install: venv # Install Python dev dependencies into local venv @@ -51,7 +45,7 @@ endif tests: # Run pytest with coverage - @$(VENV_RUN)pytest --cov=. tests + @SQLALCHEMY_WARN_20=1 $(VENV_RUN)pytest --cov=. tests .PHONY: lint tests diff --git a/docker-compose.yml b/docker-compose.yml index ea8746b..87460ea 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,14 @@ -version: '3' +version: "3" volumes: pg_data: services: postgres: - image: postgres:9.6.3 + image: postgres:latest ports: - 5543:5432 volumes: - pg_data:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: postgres diff --git a/requirements.txt b/requirements.txt index da9e61e..dd40735 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -psycopg2==2.8.3 -six==1.12.0 -sqlalchemy==1.3.7 +psycopg2==2.9.9 +six==1.16.0 +sqlalchemy==1.4.51 diff --git a/setup.py b/setup.py index e4a5814..081f2a8 100644 --- a/setup.py +++ b/setup.py @@ -2,11 +2,11 @@ from setuptools import find_packages, setup -install_requires = ["psycopg2>=2.7", "six>=1.12.0", "SQLAlchemy>=1.0"] +install_requires = ["psycopg2>=2.7", "six>=1.12.0", "SQLAlchemy>=1.4"] test_requires = ["pytest", "pytest-cov", "pytest-mock"] dev_requires = test_requires + [ "autopep8>=1.4.4", - 'black>=18.0.b0,<19;python_version>="3.6"', + "black>=23", "flake8", "ipython", "isort>=4.3.21", @@ -30,6 +30,8 @@ Programming Language :: Python :: 3 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 +Programming Language :: Python :: 3.8 +Programming Language :: Python :: 3.9 Programming Language :: SQL Topic :: Database Topic :: Database :: Front-Ends diff --git a/src/savage/models/__init__.py b/src/savage/models/__init__.py index 2c6daae..8468c54 100644 --- a/src/savage/models/__init__.py +++ b/src/savage/models/__init__.py @@ -16,7 +16,7 @@ text, ) from sqlalchemy.dialects import postgresql -from sqlalchemy.ext.declarative import declared_attr +from sqlalchemy.orm import declared_attr from sqlalchemy.orm.attributes import InstrumentedAttribute from savage import utils diff --git a/tests/conftest.py b/tests/conftest.py index 40250ba..5f3724f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ from __future__ import absolute_import import pytest -from sqlalchemy import create_engine +from sqlalchemy import create_engine, text import savage from savage.utils import savage_json_serializer @@ -41,7 +41,7 @@ def session(engine): # Clean up _session.close() for tablename in Base.metadata.tables.keys(): - connection.execute("DELETE FROM {}".format(tablename)) + connection.execute(text("DELETE FROM {}".format(tablename))) connection.close() diff --git a/tests/models.py b/tests/models.py index 3769d3b..59b9313 100644 --- a/tests/models.py +++ b/tests/models.py @@ -14,7 +14,7 @@ UniqueConstraint, ) from sqlalchemy.dialects import postgresql -from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import declarative_base from savage.models import SavageLogMixin, SavageModelMixin