diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 00575537..78afbc0b 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -8,7 +8,7 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] services: postgres: image: debezium/postgres:17 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3dbf3df0..130ef5bc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: - repo: https://github.com/psf/black - rev: 24.8.0 + rev: 24.10.0 hooks: - id: black diff --git a/README.md b/README.md index d0ed200c..e72d145e 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ the search capabilities of [Elasticsearch](https://www.elastic.co/products/elast #### How it works -PGSync is written in Python (supporting version 3.8 onwards) and the stack is composed of: [Redis](https://redis.io), [Elasticsearch](https://www.elastic.co/products/elastic-stack)/[OpenSearch](https://opensearch.org/), [Postgres](https://www.postgresql.org), and [SQlAlchemy](https://www.sqlalchemy.org). +PGSync is written in Python (supporting version 3.9 onwards) and the stack is composed of: [Redis](https://redis.io), [Elasticsearch](https://www.elastic.co/products/elastic-stack)/[OpenSearch](https://opensearch.org/), [Postgres](https://www.postgresql.org), and [SQlAlchemy](https://www.sqlalchemy.org). PGSync leverages the [logical decoding](https://www.postgresql.org/docs/current/logicaldecoding.html) feature of [Postgres](https://www.postgresql.org) (introduced in PostgreSQL 9.4) to capture a continuous stream of change events. This feature needs to be enabled in your [Postgres](https://www.postgresql.org) configuration file by setting in the postgresql.conf file: @@ -152,7 +152,7 @@ Key features of PGSync are: #### Requirements -- [Python](https://www.python.org) 3.8+ +- [Python](https://www.python.org) 3.9+ - [Postgres](https://www.postgresql.org) 9.6+ - [Redis](https://redis.io) 3.1.0+ - [Elasticsearch](https://www.elastic.co/products/elastic-stack) 6.3.1+ or [OpenSearch](https://opensearch.org/) 1.3.7+ diff --git a/README.rst b/README.rst index 35a07b9a..175b0059 100644 --- a/README.rst +++ b/README.rst @@ -8,7 +8,7 @@ expose structured denormalized documents in [Elasticsearch](https://www.elastic. ### Requirements -- [Python](https://www.python.org) 3.8+ +- [Python](https://www.python.org) 3.9+ - [Postgres](https://www.postgresql.org) 9.6+ - [Redis](https://redis.io) 3.1.0+ - [Elasticsearch](https://www.elastic.co/products/elastic-stack) 6.3.1+ or [OpenSearch](https://opensearch.org/) 1.3.7+ diff --git a/docker/Dockerfile b/docker/Dockerfile index e64f7e20..03986c22 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,3 +1,3 @@ -FROM postgres: debezium/postgres:16 +FROM postgres: debezium/postgres:17 COPY conf.sql /docker-entrypoint-initdb.d/ RUN chmod a+r /docker-entrypoint-initdb.d/conf.sql diff --git a/pgsync/__init__.py b/pgsync/__init__.py index 71ec9838..f7422cbe 100644 --- a/pgsync/__init__.py +++ b/pgsync/__init__.py @@ -2,4 +2,4 @@ __author__ = "Tolu Aina" __email__ = "tolu@pgsync.com" -__version__ = "3.2.1" +__version__ = "3.3.0" diff --git a/pyproject.toml b/pyproject.toml index 4e1b996b..347ad29a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,3 @@ [tool.black] line-length = 79 -target-version = ['py38', 'py39', 'py310', 'py311', 'py312', 'py313'] \ No newline at end of file +target-version = ['py39', 'py310', 'py311', 'py312', 'py313'] \ No newline at end of file diff --git a/requirements/base.txt b/requirements/base.txt index 4180e47a..7faf0788 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,14 +1,14 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.9 # by the following command: # # pip-compile --output-file=requirements/base.txt requirements/base.in # -async-timeout==4.0.3 +async-timeout==5.0.0 # via redis -boto3==1.35.44 +boto3==1.35.54 # via -r requirements/base.in -botocore==1.35.44 +botocore==1.35.54 # via # boto3 # s3transfer @@ -41,7 +41,7 @@ jmespath==1.0.1 # via # boto3 # botocore -marshmallow==3.22.0 +marshmallow==3.23.1 # via environs opensearch-dsl==2.1.0 # via -r requirements/base.in @@ -61,7 +61,7 @@ python-dotenv==1.0.1 # via # -r requirements/base.in # environs -redis==5.1.1 +redis==5.2.0 # via -r requirements/base.in requests==2.32.3 # via diff --git a/requirements/dev.in b/requirements/dev.in index c35238d4..18036c99 100644 --- a/requirements/dev.in +++ b/requirements/dev.in @@ -7,8 +7,7 @@ flake8 freezegun isort mock -# pinned to 3.5.0 because of python 3.8 support -pre-commit==3.5.0 +pre-commit pytest pytest-cov pytest-mock diff --git a/requirements/dev.txt b/requirements/dev.txt index 79419cf2..d9bc362d 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,16 +1,16 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.9 # by the following command: # # pip-compile --output-file=requirements/dev.txt requirements/dev.in # -async-timeout==4.0.3 +async-timeout==5.0.0 # via redis -black==24.8.0 +black==24.10.0 # via -r requirements/dev.in -boto3==1.35.44 +boto3==1.35.54 # via -r requirements/base.in -botocore==1.35.44 +botocore==1.35.54 # via # boto3 # s3transfer @@ -27,7 +27,7 @@ click==8.1.7 # via # -r requirements/base.in # black -coverage[toml]==7.6.1 +coverage[toml]==7.6.4 # via # -r requirements/dev.in # pytest-cov @@ -47,7 +47,7 @@ events==0.5 # via opensearch-py exceptiongroup==1.2.2 # via pytest -faker==30.6.0 +faker==30.8.2 # via -r requirements/dev.in filelock==3.16.1 # via virtualenv @@ -69,7 +69,7 @@ jmespath==1.0.1 # via # boto3 # botocore -marshmallow==3.22.0 +marshmallow==3.23.1 # via environs mccabe==0.7.0 # via flake8 @@ -96,7 +96,7 @@ platformdirs==4.3.6 # virtualenv pluggy==1.5.0 # via pytest -pre-commit==3.5.0 +pre-commit==4.0.1 # via -r requirements/dev.in psycopg2-binary==2.9.10 # via -r requirements/base.in @@ -109,7 +109,7 @@ pytest==8.3.3 # -r requirements/dev.in # pytest-cov # pytest-mock -pytest-cov==5.0.0 +pytest-cov==6.0.0 # via -r requirements/dev.in pytest-mock==3.14.0 # via -r requirements/dev.in @@ -127,7 +127,7 @@ python-dotenv==1.0.1 # environs pyyaml==6.0.2 # via pre-commit -redis==5.1.1 +redis==5.2.0 # via -r requirements/base.in requests==2.32.3 # via @@ -162,5 +162,5 @@ urllib3==1.26.20 # elastic-transport # opensearch-py # requests -virtualenv==20.27.0 +virtualenv==20.27.1 # via pre-commit diff --git a/setup.py b/setup.py index f3a4a79c..8ffa826a 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ def get_version() -> str: URL = "https://github.com/toluaina/pgsync" AUTHOR = MAINTAINER = "Tolu Aina" AUTHOR_EMAIL = MAINTAINER_EMAIL = "tolu@pgsync.com" -PYTHON_REQUIRES = ">=3.8.0" +PYTHON_REQUIRES = ">=3.9.0" VERSION = get_version() INSTALL_REQUIRES = [] KEYWORDS = [ @@ -39,7 +39,6 @@ def get_version() -> str: "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11",