Skip to content

Commit e2cebe0

Browse files
committed
Drop Python 3.9, test on 3.14, uv/packaging updates
1 parent e2931c5 commit e2cebe0

File tree

10 files changed

+445
-261
lines changed

10 files changed

+445
-261
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ jobs:
66
checks:
77
runs-on: ubuntu-latest
88
steps:
9-
- uses: actions/checkout@v4
10-
- uses: chartboost/ruff-action@v1
9+
- uses: actions/checkout@v5
10+
- uses: astral-sh/ruff-action@v3
1111

1212
test:
1313
runs-on: ubuntu-latest
@@ -27,18 +27,11 @@ jobs:
2727
fail-fast: false
2828
matrix:
2929
django-version: ["4.2", "5.0", "5.1", "5.2"]
30-
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
31-
exclude:
32-
- python-version: "3.9"
33-
django-version: "5.0"
34-
- python-version: "3.9"
35-
django-version: "5.1"
36-
- python-version: "3.9"
37-
django-version: "5.2"
30+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
3831
steps:
39-
- uses: actions/checkout@v4
32+
- uses: actions/checkout@v5
4033
- name: Set up Python ${{ matrix.python-version }}
41-
uses: actions/setup-python@v5
34+
uses: actions/setup-python@v6
4235
with:
4336
python-version: ${{ matrix.python-version }}
4437
- name: Install Requirements

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog for django-pgcrypto
22

3+
## 3.1.0 (in development)
4+
5+
* Dropped support for Python 3.9, test on Python 3.14
6+
7+
38
## 3.0.3 (2025-02-04)
49

510
* Added `iexact` lookup (https://github.com/dcwatson/django-pgcrypto/pull/39)

pyproject.toml

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
[build-system]
2-
requires = ["hatchling"]
3-
build-backend = "hatchling.build"
4-
51
[project]
62
name = "django-pgcrypto"
3+
version = "3.1.0"
74
authors = [
85
{name = "Dan Watson", email = "[email protected]"},
96
]
@@ -20,19 +17,19 @@ classifiers = [
2017
dependencies = [
2118
"cryptography",
2219
]
23-
dynamic = ["version"]
2420

2521
[project.urls]
2622
Repository = "https://github.com/dcwatson/django-pgcrypto"
2723

28-
[tool.hatch.build.targets.wheel]
29-
packages = ["pgcrypto"]
30-
31-
[tool.hatch.version]
32-
path = "pgcrypto/base.py"
33-
34-
[tool.uv]
35-
dev-dependencies = [
24+
[dependency-groups]
25+
dev = [
3626
"django",
3727
"psycopg[binary]",
3828
]
29+
30+
[build-system]
31+
requires = ["uv_build>=0.9.2,<0.10.0"]
32+
build-backend = "uv_build"
33+
34+
[tool.uv.build-backend]
35+
module-name = "pgcrypto"
File renamed without changes.

pgcrypto/base.py renamed to src/pgcrypto/base.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
__version__ = "3.0.3"
2-
__version_info__ = (int(v) for v in __version__.split("."))
3-
41
import base64
2+
import importlib.metadata
53
import struct
64

5+
__version__ = importlib.metadata.version("django-pgcrypto")
6+
__version_info__ = tuple(
7+
int(num) if num.isdigit() else num for num in __version__.split(".")
8+
)
9+
710
CRC24_INIT = 0xB704CE
811
CRC24_POLY = 0x1864CFB
912

pgcrypto/fields.py renamed to src/pgcrypto/fields.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,12 @@ class EncryptedDateField(BaseEncryptedField):
190190
field_cast = "::date"
191191

192192
def __init__(
193-
self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs
193+
self,
194+
verbose_name=None,
195+
name=None,
196+
auto_now=False,
197+
auto_now_add=False,
198+
**kwargs,
194199
):
195200
self.auto_now, self.auto_now_add = auto_now, auto_now_add
196201
if auto_now or auto_now_add:
File renamed without changes.

testapp/fixtures/employees.json

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
[
2-
{
3-
"fields": {
4-
"name": "John Smith",
5-
"ssn": "999-05-6728",
6-
"salary": "52000.00",
7-
"date_hired": "1999-01-23"
8-
},
9-
"model": "testapp.employee",
10-
"pk": 1
11-
},
12-
{
13-
"fields": {
14-
"name": "Sally Johnson",
15-
"ssn": "666-27-9811",
16-
"salary": "75248.77",
17-
"date_hired": "1996-02-28",
18-
"email": "[email protected]"
19-
},
20-
"model": "testapp.employee",
21-
"pk": 2
22-
}
23-
]
1+
[
2+
{
3+
"fields": {
4+
"name": "John Smith",
5+
"ssn": "999-05-6728",
6+
"salary": "52000.00",
7+
"date_hired": "1999-01-23"
8+
},
9+
"model": "testapp.employee",
10+
"pk": 1
11+
},
12+
{
13+
"fields": {
14+
"name": "Sally Johnson",
15+
"ssn": "666-27-9811",
16+
"salary": "75248.77",
17+
"date_hired": "1996-02-28",
18+
"email": "[email protected]"
19+
},
20+
"model": "testapp.employee",
21+
"pk": 2
22+
}
23+
]

testapp/tests.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -263,33 +263,33 @@ def test_concat_decrypt(self):
263263
self.assertEqual(employee.value, "999-05-6728 - 42")
264264

265265
def test_exact(self):
266-
employee = Employee.objects.filter(email__exact="[email protected]").get()
266+
employee = Employee.objects.get(email__exact="[email protected]")
267267
self.assertEqual(employee.email, "[email protected]")
268268

269269
def test_iexact(self):
270-
employee = Employee.objects.filter(email__iexact="[email protected]").get()
270+
employee = Employee.objects.get(email__iexact="[email protected]")
271271
self.assertEqual(employee.email, "[email protected]")
272272

273273
def test_contains(self):
274-
employee = Employee.objects.filter(email__contains="sal").get()
274+
employee = Employee.objects.get(email__contains="sal")
275275
self.assertEqual(employee.email, "[email protected]")
276276

277277
def test_icontains(self):
278-
employee = Employee.objects.filter(email__icontains="SAL").get()
278+
employee = Employee.objects.get(email__icontains="SAL")
279279
self.assertEqual(employee.email, "[email protected]")
280280

281281
def test_startswith(self):
282-
employee = Employee.objects.filter(email__startswith="john").get()
282+
employee = Employee.objects.get(email__startswith="john")
283283
self.assertEqual(employee.email, "[email protected]")
284284

285285
def test_istartswith(self):
286-
employee = Employee.objects.filter(email__istartswith="JOHN").get()
286+
employee = Employee.objects.get(email__istartswith="JOHN")
287287
self.assertEqual(employee.email, "[email protected]")
288288

289289
def test_endswith(self):
290-
employee = Employee.objects.filter(email__endswith="com").get()
290+
employee = Employee.objects.get(email__endswith="com")
291291
self.assertEqual(employee.email, "[email protected]")
292292

293293
def test_iendswith(self):
294-
employee = Employee.objects.filter(email__iendswith="COM").get()
294+
employee = Employee.objects.get(email__iendswith="COM")
295295
self.assertEqual(employee.email, "[email protected]")

0 commit comments

Comments
 (0)