django-redshift-backend 4.2.0__tar.gz → 5.0.1.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.devcontainer/devcontainer.json +1 -1
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/workflows/lint.yml +2 -2
- django_redshift_backend-5.0.1.dev1/.github/workflows/release.yml +88 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/workflows/test-examples-proj1.yml +3 -3
- django_redshift_backend-5.0.1.dev1/.github/workflows/test.yml +55 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.gitignore +2 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/CHANGES.rst +38 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/CODE_OF_CONDUCT.md +17 -12
- django_redshift_backend-5.0.1.dev1/CONTRIBUTING.rst +15 -0
- django_redshift_backend-5.0.1.dev1/PKG-INFO +103 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/README.rst +6 -10
- django_redshift_backend-5.0.1.dev1/SECURITY.md +13 -0
- django_redshift_backend-5.0.1.dev1/checklist.rst +10 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/base.py +27 -46
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/meta.py +1 -1
- django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/PKG-INFO +103 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/SOURCES.txt +3 -1
- django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/scm_file_list.json +99 -0
- django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/scm_version.json +8 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/CODE_OF_CONDUCT.rst +17 -12
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/conf.py +2 -2
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/dev.rst +5 -5
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/index.rst +8 -12
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/pyproject.toml +22 -26
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tox.ini +6 -14
- django_redshift_backend-4.2.0/.github/workflows/release.yml +0 -38
- django_redshift_backend-4.2.0/.github/workflows/test.yml +0 -69
- django_redshift_backend-4.2.0/CONTRIBUTING.rst +0 -10
- django_redshift_backend-4.2.0/PKG-INFO +0 -312
- django_redshift_backend-4.2.0/checklist.rst +0 -12
- django_redshift_backend-4.2.0/django_redshift_backend.egg-info/PKG-INFO +0 -312
- django_redshift_backend-4.2.0/uv.lock +0 -996
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.coveragerc +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.devcontainer/on_create_command.sh +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/ISSUE_TEMPLATE.md +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/dependabot.yml +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.readthedocs.yml +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/AUTHORS.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/LICENSE +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/base.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/client.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/creation.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/features.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/introspection.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/operations.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/schema.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/base/validation.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/ddl_references.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/base.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/client.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/creation.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/features.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/introspection.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/operations.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/postgresql/schema.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/utils.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/distkey.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/psycopg2adapter.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/dependency_links.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/requires.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/top_level.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/Makefile +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/authors.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/basic.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/changes.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/design.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/make.bat +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/refs.rst +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/requirements.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/.env.sample +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/asgi.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/settings.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/urls.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/wsgi.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/manage.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/requirements.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/testapp/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/testapp/models.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/.env.psql +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/.env.sample +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/asgi.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/settings.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/urls.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/wsgi.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/docker-compose.yml +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/manage.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/requirements.txt +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/testapp/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/testapp/models.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/setup.cfg +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/conftest.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/docker-compose.yml +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/settings.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_base.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_inspectdb.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_migrations.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_redshift_backend.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/migrations/0001_initial.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/migrations/__init__.py +0 -0
- {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/models.py +0 -0
{django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.devcontainer/devcontainer.json
RENAMED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"name": "Python 3",
|
|
5
5
|
"image": "mcr.microsoft.com/devcontainers/python:1-3.10-bookworm",
|
|
6
6
|
"features": {
|
|
7
|
-
"ghcr.io/devcontainers/features/docker-in-docker:
|
|
7
|
+
"ghcr.io/devcontainers/features/docker-in-docker:4": {},
|
|
8
8
|
"ghcr.io/devcontainers/features/git:1": {},
|
|
9
9
|
"ghcr.io/devcontainers/features/github-cli:1": {},
|
|
10
10
|
"ghcr.io/devcontainers-contrib/features/act:1": {}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- '*'
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
if: github.repository == 'shimizukawa/django-redshift-backend'
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v7
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v7
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.10"
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: |
|
|
29
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
30
|
+
|
|
31
|
+
- name: Build package
|
|
32
|
+
run: |
|
|
33
|
+
uv build
|
|
34
|
+
uvx twine check dist/*
|
|
35
|
+
|
|
36
|
+
- name: Upload distributions
|
|
37
|
+
uses: actions/upload-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: release-dists
|
|
40
|
+
path: dist/
|
|
41
|
+
if-no-files-found: error
|
|
42
|
+
|
|
43
|
+
publish:
|
|
44
|
+
if: github.repository == 'shimizukawa/django-redshift-backend' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
45
|
+
needs: build
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
environment:
|
|
48
|
+
name: pypi
|
|
49
|
+
url: https://pypi.org/p/django-redshift-backend
|
|
50
|
+
permissions:
|
|
51
|
+
id-token: write
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- name: Download distributions
|
|
55
|
+
uses: actions/download-artifact@v4
|
|
56
|
+
with:
|
|
57
|
+
name: release-dists
|
|
58
|
+
path: dist/
|
|
59
|
+
|
|
60
|
+
- name: Publish distributions to PyPI
|
|
61
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
62
|
+
with:
|
|
63
|
+
packages-dir: dist/
|
|
64
|
+
attestations: true
|
|
65
|
+
|
|
66
|
+
publish-testpypi:
|
|
67
|
+
if: github.repository == 'shimizukawa/django-redshift-backend' && github.event_name == 'workflow_dispatch'
|
|
68
|
+
needs: build
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
environment:
|
|
71
|
+
name: testpypi
|
|
72
|
+
url: https://test.pypi.org/p/django-redshift-backend
|
|
73
|
+
permissions:
|
|
74
|
+
id-token: write
|
|
75
|
+
|
|
76
|
+
steps:
|
|
77
|
+
- name: Download distributions
|
|
78
|
+
uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: release-dists
|
|
81
|
+
path: dist/
|
|
82
|
+
|
|
83
|
+
- name: Publish distributions to TestPyPI
|
|
84
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
85
|
+
with:
|
|
86
|
+
repository-url: https://test.pypi.org/legacy/
|
|
87
|
+
packages-dir: dist/
|
|
88
|
+
attestations: true
|
|
@@ -11,7 +11,7 @@ jobs:
|
|
|
11
11
|
max-parallel: 5
|
|
12
12
|
matrix:
|
|
13
13
|
python-version: ['3.10']
|
|
14
|
-
django-version: ['
|
|
14
|
+
django-version: ['4.2', '5.0', '5.1']
|
|
15
15
|
include:
|
|
16
16
|
- django-version: 'main'
|
|
17
17
|
python-version: '3.10'
|
|
@@ -27,10 +27,10 @@ jobs:
|
|
|
27
27
|
- 5432:5432
|
|
28
28
|
|
|
29
29
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
31
|
|
|
32
32
|
- name: Set up Python ${{ matrix.python-version }}
|
|
33
|
-
uses: actions/setup-python@
|
|
33
|
+
uses: actions/setup-python@v7
|
|
34
34
|
with:
|
|
35
35
|
python-version: ${{ matrix.python-version }}
|
|
36
36
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
name: build (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
max-parallel: 5
|
|
12
|
+
matrix:
|
|
13
|
+
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
14
|
+
django-version: ['4.2', '5.0', '5.1']
|
|
15
|
+
exclude:
|
|
16
|
+
- django-version: '5.0'
|
|
17
|
+
python-version: '3.9'
|
|
18
|
+
- django-version: '5.1'
|
|
19
|
+
python-version: '3.9'
|
|
20
|
+
- django-version: 'main'
|
|
21
|
+
python-version: '3.9'
|
|
22
|
+
- django-version: '4.2'
|
|
23
|
+
python-version: '3.13'
|
|
24
|
+
- django-version: '5.0'
|
|
25
|
+
python-version: '3.13'
|
|
26
|
+
|
|
27
|
+
services:
|
|
28
|
+
postgres:
|
|
29
|
+
image: postgres:9.6-alpine
|
|
30
|
+
env:
|
|
31
|
+
POSTGRES_USER: user
|
|
32
|
+
POSTGRES_PASSWORD: password
|
|
33
|
+
POSTGRES_DB: testing
|
|
34
|
+
ports:
|
|
35
|
+
- 5439:5432
|
|
36
|
+
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v7
|
|
39
|
+
|
|
40
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
41
|
+
uses: astral-sh/setup-uv@v7
|
|
42
|
+
with:
|
|
43
|
+
cache-dependency-glob: "pyproject.toml"
|
|
44
|
+
cache-suffix: ${{ matrix.python-version }}
|
|
45
|
+
|
|
46
|
+
- name: Install Python
|
|
47
|
+
run: uv python install ${{ matrix.python-version }}
|
|
48
|
+
env:
|
|
49
|
+
UV_PYTHON_PREFERENCE: only-managed
|
|
50
|
+
|
|
51
|
+
- name: Tox tests
|
|
52
|
+
run: uv run --only-dev tox -v
|
|
53
|
+
env:
|
|
54
|
+
DJANGO: ${{ matrix.django-version }}
|
|
55
|
+
TEST_WITH_POSTGRES: 1
|
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
5.1.0 (unreleased)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
General:
|
|
8
|
+
|
|
9
|
+
Features:
|
|
10
|
+
|
|
11
|
+
Bug Fixes:
|
|
12
|
+
|
|
13
|
+
5.0.1.dev1 (2026/10/26)
|
|
14
|
+
-----------------------
|
|
15
|
+
|
|
16
|
+
This development release verifies publishing after the repository transfer.
|
|
17
|
+
Known functional problems remain unresolved; this release does not indicate
|
|
18
|
+
that the backend has been repaired or verified for production use.
|
|
19
|
+
|
|
20
|
+
General:
|
|
21
|
+
|
|
22
|
+
* Move maintenance from Jazzband to shimizukawa, preserving the project's history.
|
|
23
|
+
* Publish directly to PyPI using Trusted Publishing (OIDC) and PEP 740 attestations.
|
|
24
|
+
* Add manual TestPyPI publishing for verification.
|
|
25
|
+
* Update current project links, contribution and reporting guidance, and release
|
|
26
|
+
instructions for the new repository owner.
|
|
27
|
+
* Existing Ruff lint findings are outside the scope of this release.
|
|
28
|
+
|
|
29
|
+
5.0.0 (2024/11/28)
|
|
30
|
+
------------------
|
|
31
|
+
|
|
32
|
+
General:
|
|
33
|
+
|
|
34
|
+
Features:
|
|
35
|
+
|
|
36
|
+
* #144 Add Python-3.13 support.
|
|
37
|
+
* #141 Drop Django-3.2, 4.0 support.
|
|
38
|
+
* #142 Drop Python-3.8 support.
|
|
39
|
+
|
|
40
|
+
Bug Fixes:
|
|
41
|
+
|
|
4
42
|
4.2.0 (2024/10/30)
|
|
5
43
|
------------------
|
|
6
44
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Code of Conduct
|
|
2
2
|
|
|
3
|
-
As contributors and maintainers of
|
|
3
|
+
As contributors and maintainers of django-redshift-backend, and in the interest of
|
|
4
4
|
fostering an open and welcoming community, we pledge to respect all people who
|
|
5
5
|
contribute through reporting issues, posting feature requests, updating documentation,
|
|
6
6
|
submitting pull requests or patches, and other activities.
|
|
7
7
|
|
|
8
|
-
We are committed to making participation in
|
|
8
|
+
We are committed to making participation in this project a harassment-free experience
|
|
9
9
|
for everyone, regardless of the level of experience, gender, gender identity and
|
|
10
10
|
expression, sexual orientation, disability, personal appearance, body size, race,
|
|
11
11
|
ethnicity, age, religion, or nationality.
|
|
@@ -20,24 +20,29 @@ Examples of unacceptable behavior by participants include:
|
|
|
20
20
|
without explicit permission
|
|
21
21
|
- Other unethical or unprofessional conduct
|
|
22
22
|
|
|
23
|
-
The
|
|
23
|
+
The project maintainers have the right and responsibility to remove, edit, or reject
|
|
24
24
|
comments, commits, code, wiki edits, issues, and other contributions that are not
|
|
25
25
|
aligned to this Code of Conduct, or to ban temporarily or permanently any contributor
|
|
26
26
|
for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
|
27
27
|
|
|
28
|
-
By adopting this Code of Conduct, the
|
|
29
|
-
consistently applying these principles to
|
|
30
|
-
projects. Roadies who do not follow or enforce the Code of Conduct may be permanently
|
|
31
|
-
removed from the Jazzband roadies.
|
|
28
|
+
By adopting this Code of Conduct, the maintainers commit themselves to fairly and
|
|
29
|
+
consistently applying these principles to the project, including their own conduct.
|
|
32
30
|
|
|
33
31
|
This code of conduct applies both within project spaces and in public spaces when an
|
|
34
32
|
individual is representing the project or its community.
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
To report abusive, harassing, or otherwise unacceptable content on GitHub, use
|
|
35
|
+
the "Report content" option on the relevant issue, pull request, or comment.
|
|
36
|
+
If "Report to repository admins" is available, you may report it to the
|
|
37
|
+
maintainers; otherwise, use "Report abuse to GitHub Support". Do not post
|
|
38
|
+
sensitive personal information in a public issue. Maintainers will treat reports
|
|
39
|
+
they receive confidentially and respond as appropriate to the circumstances.
|
|
40
|
+
|
|
41
|
+
For GitHub's reporting instructions, see:
|
|
42
|
+
https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam
|
|
43
|
+
|
|
44
|
+
GitHub's private vulnerability reporting is for software security vulnerabilities;
|
|
45
|
+
it is not a general private contact channel for conduct reports.
|
|
41
46
|
|
|
42
47
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version
|
|
43
48
|
1.3.0, available at [https://contributor-covenant.org/version/1/3/0/][version]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Contributing
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
django-redshift-backend is maintained at
|
|
5
|
+
https://github.com/shimizukawa/django-redshift-backend.
|
|
6
|
+
|
|
7
|
+
Bug reports and pull requests are welcome. See the `development guide`_ for
|
|
8
|
+
setup and testing instructions. By contributing, you agree to follow the
|
|
9
|
+
`Code of Conduct`_.
|
|
10
|
+
|
|
11
|
+
Report security vulnerabilities privately using the procedure in SECURITY.md,
|
|
12
|
+
not in a public issue.
|
|
13
|
+
|
|
14
|
+
.. _development guide: https://django-redshift-backend.readthedocs.io/en/master/dev.html
|
|
15
|
+
.. _Code of Conduct: https://github.com/shimizukawa/django-redshift-backend/blob/master/CODE_OF_CONDUCT.md
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: django-redshift-backend
|
|
3
|
+
Version: 5.0.1.dev1
|
|
4
|
+
Summary: Redshift database backend for Django
|
|
5
|
+
Author-email: shimizukawa <shimizukawa@gmail.com>
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Documentation, https://django-redshift-backend.readthedocs.io/
|
|
8
|
+
Project-URL: Homepage, https://github.com/shimizukawa/django-redshift-backend
|
|
9
|
+
Project-URL: Release notes, https://django-redshift-backend.readthedocs.io/en/master/changes.html
|
|
10
|
+
Project-URL: Source, https://github.com/shimizukawa/django-redshift-backend
|
|
11
|
+
Project-URL: Tracker, https://github.com/shimizukawa/django-redshift-backend/issues
|
|
12
|
+
Keywords: django,redshift
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Plugins
|
|
15
|
+
Classifier: Framework :: Django
|
|
16
|
+
Classifier: Framework :: Django :: 4.2
|
|
17
|
+
Classifier: Framework :: Django :: 5.0
|
|
18
|
+
Classifier: Framework :: Django :: 5.1
|
|
19
|
+
Classifier: Intended Audience :: Developers
|
|
20
|
+
Classifier: Programming Language :: Python
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
|
+
Requires-Python: <4,>=3.9
|
|
29
|
+
Description-Content-Type: text/x-rst
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: django<5.2
|
|
32
|
+
Requires-Dist: backports.zoneinfo; python_version < "3.9"
|
|
33
|
+
Provides-Extra: psycopg2
|
|
34
|
+
Requires-Dist: psycopg2; extra == "psycopg2"
|
|
35
|
+
Provides-Extra: psycopg2-binary
|
|
36
|
+
Requires-Dist: psycopg2-binary; extra == "psycopg2-binary"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
====================================
|
|
40
|
+
Redshift database backend for Django
|
|
41
|
+
====================================
|
|
42
|
+
|
|
43
|
+
This is a `Amazon Redshift`_ database backend for Django_.
|
|
44
|
+
|
|
45
|
+
.. image:: https://img.shields.io/readthedocs/django-redshift-backend/master.svg
|
|
46
|
+
:alt: Read the Docs (master)
|
|
47
|
+
:target: https://django-redshift-backend.rtfd.io/
|
|
48
|
+
|
|
49
|
+
.. image:: https://img.shields.io/pypi/v/django-redshift-backend.svg
|
|
50
|
+
:alt: PyPI
|
|
51
|
+
:target: https://pypi.org/project/django-redshift-backend/
|
|
52
|
+
|
|
53
|
+
.. image:: https://img.shields.io/pypi/pyversions/django-redshift-backend.svg
|
|
54
|
+
:alt: PyPI - Python Version
|
|
55
|
+
:target: https://pypi.org/project/django-redshift-backend/
|
|
56
|
+
|
|
57
|
+
.. image:: https://img.shields.io/pypi/djversions/django-redshift-backend.svg
|
|
58
|
+
:alt: PyPI - Django Version
|
|
59
|
+
:target: https://pypi.org/project/django-redshift-backend/
|
|
60
|
+
|
|
61
|
+
.. image:: https://img.shields.io/github/license/shimizukawa/django-redshift-backend.svg
|
|
62
|
+
:alt: License
|
|
63
|
+
:target: https://github.com/shimizukawa/django-redshift-backend/blob/master/LICENSE
|
|
64
|
+
|
|
65
|
+
.. image:: https://github.com/shimizukawa/django-redshift-backend/actions/workflows/test.yml/badge.svg?branch=master
|
|
66
|
+
:target: https://github.com/shimizukawa/django-redshift-backend/actions
|
|
67
|
+
:alt: GitHub Actions
|
|
68
|
+
|
|
69
|
+
.. image:: https://img.shields.io/github/stars/shimizukawa/django-redshift-backend.svg?style=social&label=Stars
|
|
70
|
+
:alt: GitHub stars
|
|
71
|
+
:target: https://github.com/shimizukawa/django-redshift-backend
|
|
72
|
+
|
|
73
|
+
.. _Amazon Redshift: https://aws.amazon.com/jp/redshift/
|
|
74
|
+
.. _Django: https://www.djangoproject.com/
|
|
75
|
+
|
|
76
|
+
Documentation
|
|
77
|
+
=============
|
|
78
|
+
|
|
79
|
+
- https://django-redshift-backend.rtfd.io/
|
|
80
|
+
|
|
81
|
+
Django settings
|
|
82
|
+
===============
|
|
83
|
+
|
|
84
|
+
ENGINE for DATABASES is 'django_redshift_backend'. You can set the name in your settings.py as::
|
|
85
|
+
|
|
86
|
+
DATABASES = {
|
|
87
|
+
'default': {
|
|
88
|
+
'ENGINE': 'django_redshift_backend',
|
|
89
|
+
'NAME': '<your database name>',
|
|
90
|
+
'USER': '<your database username>',
|
|
91
|
+
'PASSWORD': '<your database password>',
|
|
92
|
+
'HOST': '<your database hostname>',
|
|
93
|
+
'PORT': '5439',
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
For more information, please refer: Documentation_
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
LICENSE
|
|
101
|
+
=======
|
|
102
|
+
Apache Software License
|
|
103
|
+
|
|
@@ -4,10 +4,6 @@ Redshift database backend for Django
|
|
|
4
4
|
|
|
5
5
|
This is a `Amazon Redshift`_ database backend for Django_.
|
|
6
6
|
|
|
7
|
-
.. image:: https://jazzband.co/static/img/badge.svg
|
|
8
|
-
:target: https://jazzband.co/
|
|
9
|
-
:alt: Jazzband
|
|
10
|
-
|
|
11
7
|
.. image:: https://img.shields.io/readthedocs/django-redshift-backend/master.svg
|
|
12
8
|
:alt: Read the Docs (master)
|
|
13
9
|
:target: https://django-redshift-backend.rtfd.io/
|
|
@@ -24,17 +20,17 @@ This is a `Amazon Redshift`_ database backend for Django_.
|
|
|
24
20
|
:alt: PyPI - Django Version
|
|
25
21
|
:target: https://pypi.org/project/django-redshift-backend/
|
|
26
22
|
|
|
27
|
-
.. image:: https://img.shields.io/github/license/
|
|
23
|
+
.. image:: https://img.shields.io/github/license/shimizukawa/django-redshift-backend.svg
|
|
28
24
|
:alt: License
|
|
29
|
-
:target: https://github.com/
|
|
25
|
+
:target: https://github.com/shimizukawa/django-redshift-backend/blob/master/LICENSE
|
|
30
26
|
|
|
31
|
-
.. image:: https://github.com/
|
|
32
|
-
:target: https://github.com/
|
|
27
|
+
.. image:: https://github.com/shimizukawa/django-redshift-backend/actions/workflows/test.yml/badge.svg?branch=master
|
|
28
|
+
:target: https://github.com/shimizukawa/django-redshift-backend/actions
|
|
33
29
|
:alt: GitHub Actions
|
|
34
30
|
|
|
35
|
-
.. image:: https://img.shields.io/github/stars/
|
|
31
|
+
.. image:: https://img.shields.io/github/stars/shimizukawa/django-redshift-backend.svg?style=social&label=Stars
|
|
36
32
|
:alt: GitHub stars
|
|
37
|
-
:target: https://github.com/
|
|
33
|
+
:target: https://github.com/shimizukawa/django-redshift-backend
|
|
38
34
|
|
|
39
35
|
.. _Amazon Redshift: https://aws.amazon.com/jp/redshift/
|
|
40
36
|
.. _Django: https://www.djangoproject.com/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Reporting a vulnerability
|
|
4
|
+
|
|
5
|
+
Please report software security vulnerabilities through GitHub's
|
|
6
|
+
[private vulnerability reporting](https://github.com/shimizukawa/django-redshift-backend/security/advisories/new).
|
|
7
|
+
Reports are private to the reporter and people with access to the advisory.
|
|
8
|
+
Include the affected version, reproduction steps, and potential impact.
|
|
9
|
+
Do not disclose vulnerability details in a public issue.
|
|
10
|
+
|
|
11
|
+
For ordinary bugs and questions, use
|
|
12
|
+
[GitHub Issues](https://github.com/shimizukawa/django-redshift-backend/issues).
|
|
13
|
+
For unacceptable behavior, follow [the Code of Conduct](CODE_OF_CONDUCT.md).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
.. release checklist
|
|
2
|
+
|
|
3
|
+
- [ ] Review CI results and known failures.
|
|
4
|
+
- [ ] Update ``CHANGES.rst`` and ``version = release`` in ``doc/conf.py``.
|
|
5
|
+
- [ ] Run ``uv build`` and ``uvx twine check dist/*``; check versions and project URLs.
|
|
6
|
+
- [ ] Confirm Trusted Publishing and environment settings (``pypi``; ``testpypi`` for testing).
|
|
7
|
+
- [ ] If needed, manually run the ``Release`` workflow to publish to TestPyPI.
|
|
8
|
+
- [ ] Create the version tag, verify the tagged build's version, then push the tag to publish to PyPI.
|
|
9
|
+
- [ ] Approve the deployment if required; check PyPI files, attestations, and installation.
|
|
10
|
+
- [ ] If creating a GitHub Release for a development version, mark it as a pre-release.
|
{django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/base.py
RENAMED
|
@@ -4,15 +4,12 @@ Redshift database backend for Django based upon django PostgreSQL backend.
|
|
|
4
4
|
Requires psycopg 2: http://initd.org/projects/psycopg2
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from __future__ import absolute_import
|
|
8
|
-
|
|
9
7
|
from copy import deepcopy
|
|
10
8
|
import re
|
|
11
9
|
import uuid
|
|
12
10
|
import logging
|
|
13
11
|
import json
|
|
14
12
|
|
|
15
|
-
import django
|
|
16
13
|
from django.utils import timezone
|
|
17
14
|
from django.conf import settings
|
|
18
15
|
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
|
|
@@ -122,7 +119,7 @@ class DatabaseOperations(BasePGDatabaseOperations):
|
|
|
122
119
|
return []
|
|
123
120
|
|
|
124
121
|
def get_db_converters(self, expression):
|
|
125
|
-
converters = super(
|
|
122
|
+
converters = super().get_db_converters(expression)
|
|
126
123
|
internal_type = expression.output_field.get_internal_type()
|
|
127
124
|
if internal_type == "UUIDField":
|
|
128
125
|
converters.append(self.convert_uuidfield_value)
|
|
@@ -140,28 +137,16 @@ class DatabaseOperations(BasePGDatabaseOperations):
|
|
|
140
137
|
raise NotSupportedError(
|
|
141
138
|
"DISTINCT ON fields is not supported by this database backend"
|
|
142
139
|
)
|
|
143
|
-
return super(
|
|
144
|
-
|
|
145
|
-
if django.VERSION < (4, 2):
|
|
146
|
-
|
|
147
|
-
def insert_statement(self, ignore_conflicts=False):
|
|
148
|
-
return "INSERT INTO"
|
|
149
|
-
|
|
150
|
-
def ignore_conflicts_suffix_sql(self, ignore_conflicts=None):
|
|
151
|
-
return ""
|
|
140
|
+
return super().distinct_sql(fields, *args)
|
|
152
141
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
def adapt_integerfield_value(self, value, internal_type):
|
|
156
|
-
return value
|
|
142
|
+
def adapt_integerfield_value(self, value, internal_type):
|
|
143
|
+
return value
|
|
157
144
|
|
|
158
|
-
|
|
159
|
-
|
|
145
|
+
def insert_statement(self, on_conflict=None):
|
|
146
|
+
return "INSERT INTO"
|
|
160
147
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
):
|
|
164
|
-
return ""
|
|
148
|
+
def on_conflict_suffix_sql(self, fields, on_conflict, update_fields, unique_fields):
|
|
149
|
+
return ""
|
|
165
150
|
|
|
166
151
|
# copy from djang 5.0 postgresql/operations.py
|
|
167
152
|
def prepare_join_on_clause(self, lhs_table, lhs_field, rhs_table, rhs_field):
|
|
@@ -291,7 +276,7 @@ class DatabaseSchemaEditor(BasePGDatabaseSchemaEditor):
|
|
|
291
276
|
if m:
|
|
292
277
|
definition = re.sub(
|
|
293
278
|
r"varchar\((\d+?)\)",
|
|
294
|
-
"varchar({
|
|
279
|
+
"varchar({})".format(
|
|
295
280
|
str(int(m.group(1)) * self.multiply_varchar_length)
|
|
296
281
|
),
|
|
297
282
|
definition,
|
|
@@ -1071,7 +1056,7 @@ class DatabaseSchemaEditor(BasePGDatabaseSchemaEditor):
|
|
|
1071
1056
|
if isinstance(idx, DistKey):
|
|
1072
1057
|
if distkey:
|
|
1073
1058
|
raise ValueError(
|
|
1074
|
-
"Model {} has more than one DistKey."
|
|
1059
|
+
f"Model {model.__name__} has more than one DistKey."
|
|
1075
1060
|
)
|
|
1076
1061
|
distkey = idx
|
|
1077
1062
|
if distkey:
|
|
@@ -1080,12 +1065,12 @@ class DatabaseSchemaEditor(BasePGDatabaseSchemaEditor):
|
|
|
1080
1065
|
# with migrations, so we validate here instead.
|
|
1081
1066
|
if len(distkey.fields) != 1:
|
|
1082
1067
|
raise ValueError(
|
|
1083
|
-
"DistKey on model {} must have exactly
|
|
1068
|
+
"DistKey on model {} must have exactly one field.".format(
|
|
1084
1069
|
model.__name__
|
|
1085
1070
|
)
|
|
1086
1071
|
)
|
|
1087
1072
|
normalized_field = quoted_column_name(distkey.fields[0])
|
|
1088
|
-
create_options.append("DISTKEY({})"
|
|
1073
|
+
create_options.append(f"DISTKEY({normalized_field})")
|
|
1089
1074
|
# TODO: Support DISTSTYLE ALL.
|
|
1090
1075
|
|
|
1091
1076
|
sortkeys = [
|
|
@@ -1357,21 +1342,19 @@ class DatabaseIntrospection(BasePGDatabaseIntrospection):
|
|
|
1357
1342
|
if row[0] not in self.ignored_tables
|
|
1358
1343
|
]
|
|
1359
1344
|
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
return constraint["columns"]
|
|
1374
|
-
return None
|
|
1345
|
+
def get_primary_key_column(self, cursor, table_name):
|
|
1346
|
+
"""
|
|
1347
|
+
Return the name of the primary key column for the given table.
|
|
1348
|
+
"""
|
|
1349
|
+
columns = self.get_primary_key_columns(cursor, table_name)
|
|
1350
|
+
return columns[0] if columns else None
|
|
1351
|
+
|
|
1352
|
+
def get_primary_key_columns(self, cursor, table_name):
|
|
1353
|
+
"""Return a list of primary key columns for the given table."""
|
|
1354
|
+
for constraint in self.get_constraints(cursor, table_name).values():
|
|
1355
|
+
if constraint["primary_key"]:
|
|
1356
|
+
return constraint["columns"]
|
|
1357
|
+
return None
|
|
1375
1358
|
|
|
1376
1359
|
|
|
1377
1360
|
class DatabaseWrapper(BasePGDatabaseWrapper):
|
|
@@ -1383,11 +1366,9 @@ class DatabaseWrapper(BasePGDatabaseWrapper):
|
|
|
1383
1366
|
data_types.update(redshift_data_types)
|
|
1384
1367
|
|
|
1385
1368
|
def __init__(self, *args, **kwargs):
|
|
1386
|
-
super(
|
|
1387
|
-
|
|
1388
|
-
if django.VERSION >= (4, 2):
|
|
1389
|
-
self.atomic_blocks = []
|
|
1369
|
+
super().__init__(*args, **kwargs)
|
|
1390
1370
|
|
|
1371
|
+
self.atomic_blocks = []
|
|
1391
1372
|
self.features = DatabaseFeatures(self)
|
|
1392
1373
|
self.ops = DatabaseOperations(self)
|
|
1393
1374
|
self.client = DatabaseClient(self)
|
{django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/meta.py
RENAMED
|
@@ -37,7 +37,7 @@ class SortKey(str):
|
|
|
37
37
|
return hash(str(self))
|
|
38
38
|
|
|
39
39
|
def deconstruct(self):
|
|
40
|
-
path = "
|
|
40
|
+
path = "{}.{}".format(self.__class__.__module__, self.__class__.__name__)
|
|
41
41
|
path = path.replace("django_redshift_backend.meta", "django_redshift_backend")
|
|
42
42
|
return (path, [str(self)], {})
|
|
43
43
|
|