From 5c12af6878ff051398816b6792683edbf8b1216a Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Wed, 3 Mar 2021 20:00:44 +0300 Subject: [PATCH 1/3] Update readme and setup --- README.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.rst | 66 ------------------------------------------------------ setup.py | 9 ++++---- 3 files changed, 68 insertions(+), 71 deletions(-) create mode 100644 README.md delete mode 100644 README.rst diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe5f0ff --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +![PyPI - Django Version](https://img.shields.io/pypi/djversions/django-postgrespool2) +[![PyPI - License](https://img.shields.io/pypi/l/django-postgrespool2)](https://github.com/lcd1232/django-postgrespool2/blob/master/LICENSE) +[![PyPI](https://img.shields.io/pypi/v/django-postgrespool2)](https://pypi.org/project/django-postgrespool2/) + +# Django-PostgresPool2 +This is simple PostgreSQL connection pooling for Django. You can use it as an alternative for [PgBouncer](https://www.pgbouncer.org/). +This is a fork of the original [django-postgrespool](https://github.com/kennethreitz/django-postgrespool). + +## Installation + +Installing Django-PostgresPool2 is simple, with pip: +```bash +$ pip install django-postgrespool2 +``` + +## Usage + +Using Django-PostgresPool2 is simple, just set `django_postgrespool2` as your connection engine: +```python +DATABASES = { + "default": { + "ENGINE": "django_postgrespool2", + "NAME": "yourdb", + "USER": "user", + "PASSWORD": "some_password", + "HOST": "localhost", + } +} +``` +If you're using the [environ](https://github.com/joke2k/django-environ) module: +```python +import environ + +env = environ.Env() + +DATABASES = {"default": env.db("DATABASE_URL", engine="django_postgrespool2")} +``` +Everything should work as expected. + +Configuration +------------- + +Optionally, you can provide pool class to construct the pool (default `sqlalchemy.pool.QueuePool`) or additional options to pass to SQLAlchemy's pool creation. +List of possible values `DATABASE_POOL_CLASS` is [here](https://docs.sqlalchemy.org/en/14/core/pooling.html#api-documentation-available-pool-implementations) +```python +DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool' + +DATABASE_POOL_ARGS = { + 'max_overflow': 10, + 'pool_size': 5, + 'recycle': 300, +} +``` +Here's a basic explanation of two of these options: + +- **pool_size** – The *minimum* number of connections to maintain in the pool. +- **max_overflow** – The maximum *overflow* size of the pool. This is not the maximum size of the pool. +- **recycle** - Number of seconds between connection recycling, which means upon checkout, if this timeout is surpassed the connection will be closed and replaced with a newly opened connection. + +The total number of "sleeping" connections the pool will allow is `pool_size`. The total simultaneous connections the pool will allow is `pool_size + max_overflow`. + +As an example, databases in the [Heroku Postgres](https://www.heroku.com/postgres) starter tier have a maximum connection limit of 20. In that case your `pool_size` and `max_overflow`, when combined, should not exceed 20. + +Check out the official [SQLAlchemy Connection Pooling](http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.QueuePool.__init__) docs to learn more about the optoins that can be defined in `DATABASE_POOL_ARGS`. diff --git a/README.rst b/README.rst deleted file mode 100644 index 859206c..0000000 --- a/README.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. image:: https://badge.fury.io/py/django-postgrespool2.svg - :target: https://badge.fury.io/py/django-postgrespool2 - -Django-PostgresPool2 -==================== - -This is a fork of original `django-postgrespool `_. - - -Installation ------------- - -Installing Django-PostgresPool2 is simple, with pip:: - - $ pip install django-postgrespool2 - - -Usage ------ - -Using Django-PostgresPool2 is simple, just set ``django_postgrespool2`` as your connection engine: - -:: - - DATABASES = { - 'default': { - 'ENGINE': 'django_postgrespool2' - - -If you're using the `dj-database-url `_ module: - -:: - - import dj_database_url - - DATABASES = {'default': dj_database_url.config(engine='django_postgrespool2')} - - -Everything should work as expected. - -Configuration -------------- - -Optionally, you can provide pool class to construct the pool (default ``sqlalchemy.pool.QueuePool``) or additional options to pass to SQLAlchemy's pool creation. - -:: - - DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool' - - DATABASE_POOL_ARGS = { - 'max_overflow': 10, - 'pool_size': 5, - 'recycle': 300 - } - -Here's a basic explanation of two of these options: - -* **pool_size** – The *minimum* number of connections to maintain in the pool. -* **max_overflow** – The maximum *overflow* size of the pool. This is not the maximum size of the pool. - -The total number of "sleeping" connections the pool will allow is ``pool_size``. -The total simultaneous connections the pool will allow is ``pool_size + max_overflow``. - -As an example, databases in the `Heroku Postgres `_ starter tier have a maximum connection limit of 20. In that case your ``pool_size`` and ``max_overflow``, when combined, should not exceed 20. - -Check out the official `SQLAlchemy Connection Pooling `_ docs to learn more about the optoins that can be defined in ``DATABASE_POOL_ARGS``. diff --git a/setup.py b/setup.py index ef91e31..7b127b1 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,5 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- from setuptools import setup, find_packages from django_postgrespool2 import __version__, __author__ -import codecs required = [ "sqlalchemy>=1.1", @@ -12,8 +9,9 @@ setup( name="django-postgrespool2", version=__version__, - description="Postgres Connection Pooling for Django.", - long_description=codecs.open("README.rst", "r", "utf-8").read(), + description="PostgreSQL connection pooling for Django.", + long_description=open("README.md", encoding="utf-8").read(), + long_description_content_type="text/markdown", author=__author__, author_email="malexey1984@gmail.com", url="https://github.com/lcd1232/django-postgrespool2", @@ -38,4 +36,5 @@ "Framework :: Django :: 3.1", "Topic :: Database", ), + keywords=["postgresql", "django", "pool", "pgbouncer",] ) From daf18f80e9caf1bdbb9f939e90ffc6f4bbe6bf84 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Fri, 6 May 2022 19:11:56 +0400 Subject: [PATCH 2/3] More versions --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 415b474..05eae53 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,10 +31,12 @@ jobs: - "3.7" - "3.8" - "3.9" + - "3.10" django-version: - "2.2" - "3.0" - "3.1" + - "3.2" steps: - uses: actions/checkout@v1 From fee6d53006d9f01ae7120d23a70db0c1687d74b6 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Fri, 6 May 2022 19:17:16 +0400 Subject: [PATCH 3/3] Add new versions --- tox.ini | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tox.ini b/tox.ini index 7ab8d3f..ef99f3c 100644 --- a/tox.ini +++ b/tox.ini @@ -3,10 +3,11 @@ skipsdist = True usedevelop = True minversion = 1.8 envlist = - py{3.5,3.6,3.7,3.8,3.9}-dj2.2 - py{3.6,3.7,3.8,3.9}-dj3.0 - py{3.6,3.7,3.8,3.9}-dj3.1 - py{3.6,3.7,3.8,3.9}-djmaster + py{3.5,3.6,3.7,3.8,3.9,3.10}-dj2.2 + py{3.6,3.7,3.8,3.9,3.10}-dj3.0 + py{3.6,3.7,3.8,3.9,3.10}-dj3.1 + py{3.6,3.7,3.8,3.9,3.10}-dj3.2 + py{3.6,3.7,3.8,3.9,3.10}-djmaster [testenv] passenv = DJANGO_DB_HOST @@ -16,17 +17,19 @@ basepython = py3.7: python3 py3.8: python3 py3.9: python3 + py3.10: python3 pypy: pypy usedevelop = true setenv = PYTHONPATH = {toxinidir} DJANGO_SETTINGS_MODULE=tests.test_settings deps = - py{3.5,3.6,3.7,3.8,3.9,pypy}: coverage + py{3.5,3.6,3.7,3.8,3.9,3.10,pypy}: coverage psycopg2-binary dj2.2: https://github.com/django/django/archive/stable/2.2.x.tar.gz#egg=django dj3.0: https://github.com/django/django/archive/stable/3.0.x.tar.gz#egg=django dj3.1: https://github.com/django/django/archive/stable/3.1.x.tar.gz#egg=django + dj3.2: https://github.com/django/django/archive/stable/3.2.x.tar.gz#egg=django djmaster: https://github.com/django/django/archive/master.tar.gz#egg=django commands =