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.
Files changed (111) hide show
  1. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.devcontainer/devcontainer.json +1 -1
  2. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/workflows/lint.yml +2 -2
  3. django_redshift_backend-5.0.1.dev1/.github/workflows/release.yml +88 -0
  4. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/workflows/test-examples-proj1.yml +3 -3
  5. django_redshift_backend-5.0.1.dev1/.github/workflows/test.yml +55 -0
  6. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.gitignore +2 -0
  7. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/CHANGES.rst +38 -0
  8. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/CODE_OF_CONDUCT.md +17 -12
  9. django_redshift_backend-5.0.1.dev1/CONTRIBUTING.rst +15 -0
  10. django_redshift_backend-5.0.1.dev1/PKG-INFO +103 -0
  11. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/README.rst +6 -10
  12. django_redshift_backend-5.0.1.dev1/SECURITY.md +13 -0
  13. django_redshift_backend-5.0.1.dev1/checklist.rst +10 -0
  14. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/base.py +27 -46
  15. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/meta.py +1 -1
  16. django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/PKG-INFO +103 -0
  17. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/SOURCES.txt +3 -1
  18. django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/scm_file_list.json +99 -0
  19. django_redshift_backend-5.0.1.dev1/django_redshift_backend.egg-info/scm_version.json +8 -0
  20. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/CODE_OF_CONDUCT.rst +17 -12
  21. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/conf.py +2 -2
  22. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/dev.rst +5 -5
  23. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/index.rst +8 -12
  24. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/pyproject.toml +22 -26
  25. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tox.ini +6 -14
  26. django_redshift_backend-4.2.0/.github/workflows/release.yml +0 -38
  27. django_redshift_backend-4.2.0/.github/workflows/test.yml +0 -69
  28. django_redshift_backend-4.2.0/CONTRIBUTING.rst +0 -10
  29. django_redshift_backend-4.2.0/PKG-INFO +0 -312
  30. django_redshift_backend-4.2.0/checklist.rst +0 -12
  31. django_redshift_backend-4.2.0/django_redshift_backend.egg-info/PKG-INFO +0 -312
  32. django_redshift_backend-4.2.0/uv.lock +0 -996
  33. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.coveragerc +0 -0
  34. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.devcontainer/on_create_command.sh +0 -0
  35. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/ISSUE_TEMPLATE.md +0 -0
  36. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  37. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.github/dependabot.yml +0 -0
  38. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/.readthedocs.yml +0 -0
  39. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/AUTHORS.rst +0 -0
  40. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/LICENSE +0 -0
  41. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/__init__.py +0 -0
  42. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/__init__.py +0 -0
  43. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/__init__.py +0 -0
  44. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/__init__.py +0 -0
  45. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/__init__.py +0 -0
  46. {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
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/_vendor/django40/db/backends/utils.py +0 -0
  65. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/distkey.py +0 -0
  66. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend/psycopg2adapter.py +0 -0
  67. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/dependency_links.txt +0 -0
  68. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/requires.txt +0 -0
  69. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/django_redshift_backend.egg-info/top_level.txt +0 -0
  70. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/Makefile +0 -0
  71. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/authors.rst +0 -0
  72. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/basic.rst +0 -0
  73. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/changes.rst +0 -0
  74. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/design.rst +0 -0
  75. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/make.bat +0 -0
  76. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/refs.rst +0 -0
  77. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/doc/requirements.txt +0 -0
  78. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/.env.sample +0 -0
  79. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/__init__.py +0 -0
  80. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/asgi.py +0 -0
  81. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/settings.py +0 -0
  82. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/urls.py +0 -0
  83. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/config/wsgi.py +0 -0
  84. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/manage.py +0 -0
  85. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/requirements.txt +0 -0
  86. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/testapp/__init__.py +0 -0
  87. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/dj-sql-explorer/testapp/models.py +0 -0
  88. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/.env.psql +0 -0
  89. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/.env.sample +0 -0
  90. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/__init__.py +0 -0
  91. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/asgi.py +0 -0
  92. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/settings.py +0 -0
  93. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/urls.py +0 -0
  94. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/config/wsgi.py +0 -0
  95. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/docker-compose.yml +0 -0
  96. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/manage.py +0 -0
  97. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/requirements.txt +0 -0
  98. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/testapp/__init__.py +0 -0
  99. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/examples/proj1/testapp/models.py +0 -0
  100. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/setup.cfg +0 -0
  101. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/conftest.py +0 -0
  102. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/docker-compose.yml +0 -0
  103. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/settings.py +0 -0
  104. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_base.py +0 -0
  105. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_inspectdb.py +0 -0
  106. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_migrations.py +0 -0
  107. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/test_redshift_backend.py +0 -0
  108. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/__init__.py +0 -0
  109. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/migrations/0001_initial.py +0 -0
  110. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/migrations/__init__.py +0 -0
  111. {django_redshift_backend-4.2.0 → django_redshift_backend-5.0.1.dev1}/tests/testapp/models.py +0 -0
@@ -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:2": {},
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": {}
@@ -14,9 +14,9 @@ jobs:
14
14
  - check
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v7
18
18
 
19
- - uses: actions/setup-python@v5
19
+ - uses: actions/setup-python@v7
20
20
  with:
21
21
  python-version: "3.10"
22
22
 
@@ -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: ['3.2', '4.0', '4.2', '5.0', '5.1']
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@v4
30
+ - uses: actions/checkout@v7
31
31
 
32
32
  - name: Set up Python ${{ matrix.python-version }}
33
- uses: actions/setup-python@v5
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
@@ -13,3 +13,5 @@ coverage.xml
13
13
  **/.env
14
14
  examples/**/migrations/*
15
15
  .idea/
16
+ uv.lock
17
+ Pipfile
@@ -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 the Jazzband projects, and in the interest 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 the Jazzband a harassment-free experience
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 Jazzband roadies have the right and responsibility to remove, edit, or reject
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 roadies commit themselves to fairly and
29
- consistently applying these principles to every aspect of managing the jazzband
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
- Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by
37
- contacting the roadies at `roadies@jazzband.co`. All complaints will be reviewed and
38
- investigated and will result in a response that is deemed necessary and appropriate to
39
- the circumstances. Roadies are obligated to maintain confidentiality with regard to the
40
- reporter of an incident.
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/jazzband/django-redshift-backend.svg
23
+ .. image:: https://img.shields.io/github/license/shimizukawa/django-redshift-backend.svg
28
24
  :alt: License
29
- :target: https://github.com/jazzband/django-redshift-backend/blob/master/LICENSE
25
+ :target: https://github.com/shimizukawa/django-redshift-backend/blob/master/LICENSE
30
26
 
31
- .. image:: https://github.com/jazzband/django-redshift-backend/workflows/Test/badge.svg
32
- :target: https://github.com/jazzband/django-redshift-backend/actions
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/jazzband/django-redshift-backend.svg?style=social&label=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/jazzband/django-redshift-backend
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.
@@ -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(DatabaseOperations, self).get_db_converters(expression)
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(DatabaseOperations, self).distinct_sql(fields, *args)
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
- else: # for >= dj42
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
- def insert_statement(self, on_conflict=None):
159
- return "INSERT INTO"
145
+ def insert_statement(self, on_conflict=None):
146
+ return "INSERT INTO"
160
147
 
161
- def on_conflict_suffix_sql(
162
- self, fields, on_conflict, update_fields, unique_fields
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({0})".format(
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.".format(model.__name__)
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 " "one field.".format(
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({})".format(normalized_field))
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
- if django.VERSION >= (4, 2):
1361
-
1362
- def get_primary_key_column(self, cursor, table_name):
1363
- """
1364
- Return the name of the primary key column for the given table.
1365
- """
1366
- columns = self.get_primary_key_columns(cursor, table_name)
1367
- return columns[0] if columns else None
1368
-
1369
- def get_primary_key_columns(self, cursor, table_name):
1370
- """Return a list of primary key columns for the given table."""
1371
- for constraint in self.get_constraints(cursor, table_name).values():
1372
- if constraint["primary_key"]:
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(DatabaseWrapper, self).__init__(*args, **kwargs)
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)
@@ -37,7 +37,7 @@ class SortKey(str):
37
37
  return hash(str(self))
38
38
 
39
39
  def deconstruct(self):
40
- path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__)
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