plain.redirection 0.35.0__tar.gz → 0.35.1__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.
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/PKG-INFO +4 -4
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/CHANGELOG.md +12 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/README.md +2 -2
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/migrations/0001_initial.py +3 -32
- plain_redirection-0.35.1/plain/redirection/migrations/0002_rename_plainredire_created_d5f0c7_idx_plainredirection_notfoundlog_created_at_idx_and_more.py +11 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/migrations/0003_redirectlog_plainredirection_redirectlog_redirect_id_idx.py +0 -7
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/models.py +17 -3
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/pyproject.toml +2 -2
- plain_redirection-0.35.0/plain/redirection/migrations/0002_rename_plainredire_created_d5f0c7_idx_plainredirection_notfoundlog_created_at_idx_and_more.py +0 -32
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/.gitignore +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/LICENSE +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/README.md +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/__init__.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/admin.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/chores.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/config.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/default_settings.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/middleware.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/migrations/__init__.py +0 -0
- {plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/templates/admin/plainredirection/redirect_form.html +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plain.redirection
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.1
|
|
4
4
|
Summary: A flexible URL redirection system with admin interface and logging.
|
|
5
5
|
Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Requires-Python: >=3.13
|
|
9
|
-
Requires-Dist: plain-postgres<1.0.0,>=0.
|
|
9
|
+
Requires-Dist: plain-postgres<1.0.0,>=0.91.0
|
|
10
10
|
Requires-Dist: plain<1.0.0,>=0.123.0
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
|
|
@@ -204,10 +204,10 @@ MIDDLEWARE = [
|
|
|
204
204
|
]
|
|
205
205
|
```
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
Sync the database to create the tables:
|
|
208
208
|
|
|
209
209
|
```console
|
|
210
|
-
plain
|
|
210
|
+
plain postgres sync
|
|
211
211
|
```
|
|
212
212
|
|
|
213
213
|
You can now create redirects through the admin interface or programmatically using the `Redirect` model.
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# plain-redirection changelog
|
|
2
2
|
|
|
3
|
+
## [0.35.1](https://github.com/dropseed/plain/releases/plain-redirection@0.35.1) (2026-03-29)
|
|
4
|
+
|
|
5
|
+
### What's changed
|
|
6
|
+
|
|
7
|
+
- Removed `AddIndex`, `AddConstraint`, and `RemoveConstraint` operations from migrations — indexes and constraints are now managed by convergence. ([c58b4ba1fec9](https://github.com/dropseed/plain/commit/c58b4ba1fec9), [1f15538b008f](https://github.com/dropseed/plain/commit/1f15538b008f))
|
|
8
|
+
- Replaced `PositiveIntegerField` with `IntegerField` in model and migrations. ([738a1efbca59](https://github.com/dropseed/plain/commit/738a1efbca59))
|
|
9
|
+
- Updated docs to reference `plain postgres sync` instead of `plain migrate`. ([b026895edc4c](https://github.com/dropseed/plain/commit/b026895edc4c))
|
|
10
|
+
|
|
11
|
+
### Upgrade instructions
|
|
12
|
+
|
|
13
|
+
- Requires `plain-postgres>=0.91.0`.
|
|
14
|
+
|
|
3
15
|
## [0.35.0](https://github.com/dropseed/plain/releases/plain-redirection@0.35.0) (2026-03-28)
|
|
4
16
|
|
|
5
17
|
### What's changed
|
|
@@ -192,10 +192,10 @@ MIDDLEWARE = [
|
|
|
192
192
|
]
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
Sync the database to create the tables:
|
|
196
196
|
|
|
197
197
|
```console
|
|
198
|
-
plain
|
|
198
|
+
plain postgres sync
|
|
199
199
|
```
|
|
200
200
|
|
|
201
201
|
You can now create redirects through the admin interface or programmatically using the `Redirect` model.
|
{plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/migrations/0001_initial.py
RENAMED
|
@@ -17,10 +17,10 @@ class Migration(migrations.Migration):
|
|
|
17
17
|
("id", postgres.PrimaryKeyField()),
|
|
18
18
|
("from_pattern", postgres.TextField(max_length=255)),
|
|
19
19
|
("to_pattern", postgres.TextField(max_length=255)),
|
|
20
|
-
("http_status", postgres.
|
|
20
|
+
("http_status", postgres.SmallIntegerField(default=301)),
|
|
21
21
|
("created_at", postgres.DateTimeField(auto_now_add=True)),
|
|
22
22
|
("updated_at", postgres.DateTimeField(auto_now=True)),
|
|
23
|
-
("order", postgres.
|
|
23
|
+
("order", postgres.SmallIntegerField(default=0)),
|
|
24
24
|
("enabled", postgres.BooleanField(default=True)),
|
|
25
25
|
("is_regex", postgres.BooleanField(default=False)),
|
|
26
26
|
],
|
|
@@ -34,7 +34,7 @@ class Migration(migrations.Migration):
|
|
|
34
34
|
("id", postgres.PrimaryKeyField()),
|
|
35
35
|
("from_url", postgres.URLField(max_length=512)),
|
|
36
36
|
("to_url", postgres.URLField(max_length=512)),
|
|
37
|
-
("http_status", postgres.
|
|
37
|
+
("http_status", postgres.SmallIntegerField(default=301)),
|
|
38
38
|
("ip_address", postgres.GenericIPAddressField()),
|
|
39
39
|
("user_agent", postgres.TextField(max_length=512, required=False)),
|
|
40
40
|
("referrer", postgres.TextField(max_length=512, required=False)),
|
|
@@ -58,23 +58,6 @@ class Migration(migrations.Migration):
|
|
|
58
58
|
"ordering": ["-created_at"],
|
|
59
59
|
},
|
|
60
60
|
),
|
|
61
|
-
migrations.AddIndex(
|
|
62
|
-
model_name="redirect",
|
|
63
|
-
index=postgres.Index(fields=["order"], name="plainredire_order_44dde0_idx"),
|
|
64
|
-
),
|
|
65
|
-
migrations.AddIndex(
|
|
66
|
-
model_name="redirect",
|
|
67
|
-
index=postgres.Index(
|
|
68
|
-
fields=["created_at"], name="plainredire_created_18c288_idx"
|
|
69
|
-
),
|
|
70
|
-
),
|
|
71
|
-
migrations.AddConstraint(
|
|
72
|
-
model_name="redirect",
|
|
73
|
-
constraint=postgres.UniqueConstraint(
|
|
74
|
-
fields=("from_pattern",),
|
|
75
|
-
name="plainredirects_redirect_unique_from_pattern",
|
|
76
|
-
),
|
|
77
|
-
),
|
|
78
61
|
migrations.AddField(
|
|
79
62
|
model_name="redirectlog",
|
|
80
63
|
name="redirect",
|
|
@@ -83,16 +66,4 @@ class Migration(migrations.Migration):
|
|
|
83
66
|
to="plainredirection.redirect",
|
|
84
67
|
),
|
|
85
68
|
),
|
|
86
|
-
migrations.AddIndex(
|
|
87
|
-
model_name="notfoundlog",
|
|
88
|
-
index=postgres.Index(
|
|
89
|
-
fields=["created_at"], name="plainredire_created_d5f0c7_idx"
|
|
90
|
-
),
|
|
91
|
-
),
|
|
92
|
-
migrations.AddIndex(
|
|
93
|
-
model_name="redirectlog",
|
|
94
|
-
index=postgres.Index(
|
|
95
|
-
fields=["created_at"], name="plainredire_created_5d75f4_idx"
|
|
96
|
-
),
|
|
97
|
-
),
|
|
98
69
|
]
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# Generated by Plain 0.127.2 on 2026-03-25 22:04
|
|
2
2
|
|
|
3
|
-
from plain import postgres
|
|
4
3
|
from plain.postgres import migrations
|
|
5
4
|
|
|
6
5
|
|
|
@@ -17,10 +16,4 @@ class Migration(migrations.Migration):
|
|
|
17
16
|
migrations.RunSQL(
|
|
18
17
|
'DROP INDEX IF EXISTS "plainredirection_redirectlog_redirect_id_72c2ae26"'
|
|
19
18
|
),
|
|
20
|
-
migrations.AddIndex(
|
|
21
|
-
model_name="redirectlog",
|
|
22
|
-
index=postgres.Index(
|
|
23
|
-
fields=["redirect"], name="plainredirection_redirectlog_redirect_id_idx"
|
|
24
|
-
),
|
|
25
|
-
),
|
|
26
19
|
]
|
|
@@ -17,12 +17,12 @@ __all__ = ["NotFoundLog", "Redirect", "RedirectLog"]
|
|
|
17
17
|
class Redirect(postgres.Model):
|
|
18
18
|
from_pattern: str = types.TextField(max_length=255)
|
|
19
19
|
to_pattern: str = types.TextField(max_length=255)
|
|
20
|
-
http_status: int = types.
|
|
20
|
+
http_status: int = types.SmallIntegerField(
|
|
21
21
|
default=301
|
|
22
22
|
) # Default to permanent - could be choices?
|
|
23
23
|
created_at: datetime = types.DateTimeField(auto_now_add=True)
|
|
24
24
|
updated_at: datetime = types.DateTimeField(auto_now=True)
|
|
25
|
-
order: int = types.
|
|
25
|
+
order: int = types.SmallIntegerField(default=0)
|
|
26
26
|
enabled: bool = types.BooleanField(default=True)
|
|
27
27
|
is_regex: bool = types.BooleanField(default=False)
|
|
28
28
|
|
|
@@ -47,6 +47,14 @@ class Redirect(postgres.Model):
|
|
|
47
47
|
fields=["from_pattern"],
|
|
48
48
|
name="plainredirects_redirect_unique_from_pattern",
|
|
49
49
|
),
|
|
50
|
+
postgres.CheckConstraint(
|
|
51
|
+
check=postgres.Q(http_status__gte=0),
|
|
52
|
+
name="plainredirection_redirect_http_status_check",
|
|
53
|
+
),
|
|
54
|
+
postgres.CheckConstraint(
|
|
55
|
+
check=postgres.Q(order__gte=0),
|
|
56
|
+
name="plainredirection_redirect_order_check",
|
|
57
|
+
),
|
|
50
58
|
],
|
|
51
59
|
)
|
|
52
60
|
|
|
@@ -91,7 +99,7 @@ class RedirectLog(postgres.Model):
|
|
|
91
99
|
# The actuals that were used to redirect
|
|
92
100
|
from_url: str = types.URLField(max_length=512)
|
|
93
101
|
to_url: str = types.URLField(max_length=512)
|
|
94
|
-
http_status: int = types.
|
|
102
|
+
http_status: int = types.SmallIntegerField(default=301)
|
|
95
103
|
|
|
96
104
|
# Request metadata
|
|
97
105
|
ip_address: str = types.GenericIPAddressField()
|
|
@@ -114,6 +122,12 @@ class RedirectLog(postgres.Model):
|
|
|
114
122
|
fields=["redirect"],
|
|
115
123
|
),
|
|
116
124
|
],
|
|
125
|
+
constraints=[
|
|
126
|
+
postgres.CheckConstraint(
|
|
127
|
+
check=postgres.Q(http_status__gte=0),
|
|
128
|
+
name="plainredirection_redirectlog_http_status_check",
|
|
129
|
+
),
|
|
130
|
+
],
|
|
117
131
|
)
|
|
118
132
|
|
|
119
133
|
@classmethod
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "plain.redirection"
|
|
3
|
-
version = "0.35.
|
|
3
|
+
version = "0.35.1"
|
|
4
4
|
description = "A flexible URL redirection system with admin interface and logging."
|
|
5
5
|
authors = [{ name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev" }]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "BSD-3-Clause"
|
|
8
8
|
requires-python = ">=3.13"
|
|
9
|
-
dependencies = ["plain>=0.123.0,<1.0.0", "plain.postgres>=0.
|
|
9
|
+
dependencies = ["plain>=0.123.0,<1.0.0", "plain.postgres>=0.91.0,<1.0.0"]
|
|
10
10
|
|
|
11
11
|
[tool.hatch.build.targets.wheel]
|
|
12
12
|
packages = ["plain"]
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Generated by Plain 0.127.2 on 2026-03-25 20:19
|
|
2
|
-
|
|
3
|
-
from plain.postgres import migrations
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
dependencies = [
|
|
8
|
-
("plainredirection", "0001_initial"),
|
|
9
|
-
]
|
|
10
|
-
|
|
11
|
-
operations = [
|
|
12
|
-
migrations.RenameIndex(
|
|
13
|
-
model_name="notfoundlog",
|
|
14
|
-
new_name="plainredirection_notfoundlog_created_at_idx",
|
|
15
|
-
old_name="plainredire_created_d5f0c7_idx",
|
|
16
|
-
),
|
|
17
|
-
migrations.RenameIndex(
|
|
18
|
-
model_name="redirect",
|
|
19
|
-
new_name="plainredirection_redirect_order_idx",
|
|
20
|
-
old_name="plainredire_order_44dde0_idx",
|
|
21
|
-
),
|
|
22
|
-
migrations.RenameIndex(
|
|
23
|
-
model_name="redirect",
|
|
24
|
-
new_name="plainredirection_redirect_created_at_idx",
|
|
25
|
-
old_name="plainredire_created_18c288_idx",
|
|
26
|
-
),
|
|
27
|
-
migrations.RenameIndex(
|
|
28
|
-
model_name="redirectlog",
|
|
29
|
-
new_name="plainredirection_redirectlog_created_at_idx",
|
|
30
|
-
old_name="plainredire_created_5d75f4_idx",
|
|
31
|
-
),
|
|
32
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plain_redirection-0.35.0 → plain_redirection-0.35.1}/plain/redirection/migrations/__init__.py
RENAMED
|
File without changes
|