Easier sharing of Wagtail drafts
Project description
wagtail-sharing
Easier sharing of Wagtail drafts.
Wagtail Sharing makes it easier to share Wagtail draft content for review by users who don’t have access to the Wagtail admin site. It allows you to define an alternate hostname and/or port on which to expose the latest revision of all of your Wagtail pages.
For example, let’s say your Wagtail site is running on http://mysite.com. You’ve created a draft page at slug /path/to/draft, but haven’t yet published it. Wagtail Sharing lets you expose that draft page at some other domain, for example http://sharing.mysite.com/path/to/draft.
In another use case, you might have a published page at http://mysite.com/already/published/page, and you’ve made some draft changes. Wagtail Sharing lets you expose those draft changes at http://sharing.mysite.com/already/published/page while still keeping the same published content at your regular domain.
These examples obviously work best when you have some method of restricting access to http://sharing.mysite.com, for example by only exposing that subdomain on a private network.
Wagtail Sharing lets you create separate sharing sites for each Wagtail Site you have defined. It also supports a configurable visual banner on shared pages to remind reviewers that content may differ from your published site.
This new logic only applies to GET requests. Other HTTP methods like POST defer to standard Wagtail handling.
Routing configuration
Wagtail Sharing supports different routing strategies for determining how draft pages are shared.
Database-based routing (default)
The default routing strategy uses sharing sites stored in the database, using a new wagtailsharing.SharingSite model. This approach allows for configuration of different sharing domains for different Wagtail sites.
WAGTAILSHARING_ROUTER = "wagtailsharing.routers.db.DatabaseHostRouter"
With database-based routing, Wagtail adds a new admin section under Settings -> Sharing Sites that allows users to define how they would like to expose latest page revisions.
No sharing sites exist by default. A sharing site must be manually created for each Wagtail Site to make its latest revisions shareable. Each sharing site is defined by a unique hostname and port number.
In the above configuration, drafts will be viewable at http://sharing.mysite.com:8000/.
Settings-based routing
Sharing can also be configured via Django settings. This approach avoids the need to configure sharing via the database, but only works for the default Wagtail site.
WAGTAILSHARING_ROUTER = "wagtailsharing.routers.settings.SettingsHostRouter"
WAGTAILSHARING_HOST = "http://sharing.mysite.com:8000"
With this configuration, draft pages will also be viewable at http://sharing.mysite.com:8000/.
Custom routing
A custom router can be used for alternative routing strategies. For example, you might want to route based on authentication tokens, query parameters, or other criteria beyond hostname matching.
To create a custom router, inherit from wagtailsharing.routers.base.RouterBase and implement the required methods:
from wagtailsharing.routers.base import RouterBase
class CustomRouter(RouterBase):
def route(self, request, path):
# Returns (Site, path) tuple or (None, path) if no match.
...
def get_sharing_url(self, page):
# Returns the sharing URL for a given page.
...
Then configure it in your settings:
WAGTAILSHARING_ROUTER = "myapp.routers.CustomRouter"
Setup
Install the package using pip:
$ pip install wagtail-sharing
Add wagtailsharing as an installed app in your Django settings:
# in settings.py
INSTALLED_APPS = (
...
"wagtailsharing",
...
)
Replace use of Wagtail’s catch-all URL pattern:
# in urls.py
-from wagtail import urls as wagtail_urls
+from wagtailsharing import urls as wagtailsharing_urls
...
-urlpatterns.append(url(r"", include(wagtail_urls)))
+urlpatterns.append(url(r"", include(wagtailsharing_urls)))
Database-based routing
If you’re using the default database-based routing, you’ll also need to add wagtail.snippets to your installed apps:
# in settings.py
INSTALLED_APPS = (
...
"wagtail.snippets",
"wagtailsharing",
...
)
You’ll also need to run migrations to create the required database tables:
$ python manage.py migrate wagtailsharing
Settings-based routing
If you’re using settings-based routing, you only need to add the router configuration to your settings:
WAGTAILSHARING_ROUTER = "wagtailsharing.routers.settings.SettingsHostRouter"
WAGTAILSHARING_HOST = "http://sharing.mysite.com:8000"
Hooks
As with normal page serving, the serving of shared pages continues to respect Wagtail’s built-in before_serve_page hook.
This project adds these additional hooks:
before_route_page
Called when routing, before a page’s route() method is called. This hook is passed the request and the page that will have route() called on it. If the callable returns an HttpResponse, that response will be returned immediately to the user.
This hook allows for any necessary customization of Wagtail’s built-in routing behavior, for example to support ShareableRoutablePageMixin.
Mixins
Wagtail’s RoutablePageMixin is not compatible with Wagtail Sharing, instead you need to use ShareableRoutablePageMixin in order to view shared draft content fields on routable pages.
ShareableRoutablePageMixin is used exactly the same way as RoutablePageMixin:
from wagtail.fields import RichTextField
from wagtail.models import Page
from wagtail.contrib.routable_page.models import route
from wagtailsharing.models import ShareableRoutablePageMixin
class EventIndexPage(ShareableRoutablePageMixin, Page):
intro = RichTextField()
@route(r"^$")
def current_events(self, request):
# …
@route(r"^past/$")
def past_events(self, request):
# …
Compatibility
This project has been tested for compatibility with:
Python 3.8+
Django 3.2+
Wagtail 5.1+ (see past releases for older Wagtail support)
It should be compatible with all intermediate versions, as well. If you find that it is not, please file an issue.
Testing
Running project unit tests requires tox:
$ tox
To run the test app interactively, run:
$ tox -e interactive
Now you can visit http://localhost:8000/admin/ in a browser and log in with admin / changeme.
Open source licensing info
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file wagtail_sharing-2.13.tar.gz
.
File metadata
- Download URL: wagtail_sharing-2.13.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
2f655fb6f1fc5a936cd9ed9d1e3a59e8d82299a4b9541a32cfacd2b925a14a72
|
|
MD5 |
272696af8cca3550c1effb524213e2bb
|
|
BLAKE2b-256 |
c59a1f9df852dcdc2da0e017874ff04405f092d6f5568848b0f0e429fbedde19
|
Provenance
The following attestation bundles were made for wagtail_sharing-2.13.tar.gz
:
Publisher:
release.yml
on cfpb/wagtail-sharing
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
wagtail_sharing-2.13.tar.gz
-
Subject digest:
2f655fb6f1fc5a936cd9ed9d1e3a59e8d82299a4b9541a32cfacd2b925a14a72
- Sigstore transparency entry: 339645689
- Sigstore integration time:
-
Permalink:
cfpb/wagtail-sharing@b7a4bac6a438965fba1beca5a53c757e74ead03e
-
Branch / Tag:
refs/tags/2.13
- Owner: https://github.com/cfpb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
release.yml@b7a4bac6a438965fba1beca5a53c757e74ead03e
-
Trigger Event:
release
-
Statement type:
File details
Details for the file wagtail_sharing-2.13-py3-none-any.whl
.
File metadata
- Download URL: wagtail_sharing-2.13-py3-none-any.whl
- Upload date:
- Size: 30.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
5a6f74d8465be8e391004b8ed053cc380fa1aa66f4a5b837bdc32178f5c00380
|
|
MD5 |
951db071a25cbd616de6d50c8b0fb08e
|
|
BLAKE2b-256 |
987e608529339f31969410ecd45ae1752c366234bb0f66e7370903d893b6687f
|
Provenance
The following attestation bundles were made for wagtail_sharing-2.13-py3-none-any.whl
:
Publisher:
release.yml
on cfpb/wagtail-sharing
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1
-
Predicate type:
https://docs.pypi.org/attestations/publish/v1
-
Subject name:
wagtail_sharing-2.13-py3-none-any.whl
-
Subject digest:
5a6f74d8465be8e391004b8ed053cc380fa1aa66f4a5b837bdc32178f5c00380
- Sigstore transparency entry: 339645696
- Sigstore integration time:
-
Permalink:
cfpb/wagtail-sharing@b7a4bac6a438965fba1beca5a53c757e74ead03e
-
Branch / Tag:
refs/tags/2.13
- Owner: https://github.com/cfpb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com
-
Runner Environment:
github-hosted
-
Publication workflow:
release.yml@b7a4bac6a438965fba1beca5a53c757e74ead03e
-
Trigger Event:
release
-
Statement type: