Compare commits
No commits in common. "16561eba6ffa55f6ea763d1bf06307128f6c3145" and "d70c1f01820bb0a91b25a026b2bd085cb27715ad" have entirely different histories.
16561eba6f
...
d70c1f0182
91
README.md
91
README.md
|
@ -1 +1,90 @@
|
||||||
This repository is now at https://git.suboptimal.solutions/hugh/ausglamr
|
# Aus GLAMR
|
||||||
|
|
||||||
|
A django app running on Docker. Replaces _Aus GLAM Blogs_.
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
* `cp .env.example .env` and enter env values for your app
|
||||||
|
* set up web server config (nginx example coming soon)
|
||||||
|
* `docker compose build`
|
||||||
|
* `./glamr-dev migrate`
|
||||||
|
* `./glamr-dev createsuperuser`
|
||||||
|
* `docker compose up -d`
|
||||||
|
* set up database backups (as cron jobs): `./glamr-dev backup`:
|
||||||
|
* set up cron jobs for management commands as below
|
||||||
|
|
||||||
|
## Admin
|
||||||
|
|
||||||
|
Don't forget to add some Content Warnings for use by the Mastodon bot, within `/admin`.
|
||||||
|
|
||||||
|
## CLI tool
|
||||||
|
|
||||||
|
Use `glamr-dev` to make your life easier (thanks to Mouse Reeve for the inspiration):
|
||||||
|
|
||||||
|
* announce
|
||||||
|
* backup
|
||||||
|
* check_feeds
|
||||||
|
* manage [django management command]
|
||||||
|
* makemigrations
|
||||||
|
* migrate
|
||||||
|
* queue_announcements
|
||||||
|
* send_weekly_email
|
||||||
|
|
||||||
|
And for dev work:
|
||||||
|
|
||||||
|
* black
|
||||||
|
* collectstatic
|
||||||
|
* createsuperuser
|
||||||
|
* pylint
|
||||||
|
* resetdb
|
||||||
|
* test
|
||||||
|
|
||||||
|
## Registration
|
||||||
|
|
||||||
|
- users can register a blog, group, event, newsletter, or Call for Papers.
|
||||||
|
- most of these ask for an "owner email" - this is optional but allows us to communicate with the person registering.
|
||||||
|
- all registrations should trigger an email to admin
|
||||||
|
- all must be approved before they are included
|
||||||
|
|
||||||
|
## Management commands
|
||||||
|
|
||||||
|
There are four commands:
|
||||||
|
|
||||||
|
- announce
|
||||||
|
- check_feeds
|
||||||
|
- queue_announcements
|
||||||
|
- send_weekly_email
|
||||||
|
|
||||||
|
These will not be triggered within the app - they should be called via cron jobs.
|
||||||
|
|
||||||
|
### announce
|
||||||
|
|
||||||
|
This announces the next queued announcement on Mastodon.
|
||||||
|
|
||||||
|
Run every 21 mins.
|
||||||
|
|
||||||
|
### check_feeds
|
||||||
|
|
||||||
|
This checks all blog feeds for any new posts, and adds them to the database as long as they don't have an exclusion tag and were not published during a time the blog was suspended.
|
||||||
|
|
||||||
|
Also checks newsletter articles if there is a feed.
|
||||||
|
|
||||||
|
Run every hour.
|
||||||
|
|
||||||
|
### queue_announcements
|
||||||
|
|
||||||
|
This queues announcements for events and CFPs. These are announced three times, evenly spaced between when they were added and when the event starts or the CFP closes.
|
||||||
|
|
||||||
|
Run daily.
|
||||||
|
|
||||||
|
### send_weekly_email
|
||||||
|
|
||||||
|
Does what you think. Creates a weekly email of the latest stuff, and send to everyone in Subscribers.
|
||||||
|
|
||||||
|
Run weekly.
|
||||||
|
|
||||||
|
### Backups
|
||||||
|
|
||||||
|
There is a `backup` command in `glamr-dev`. You can adjust the filepaths in your `.env` file.
|
||||||
|
|
||||||
|
Run daily
|
|
@ -131,7 +131,6 @@ class Blog(admin.ModelAdmin):
|
||||||
"active",
|
"active",
|
||||||
)
|
)
|
||||||
ordering = ["approved", "-suspended", "-failing"]
|
ordering = ["approved", "-suspended", "-failing"]
|
||||||
search_fields = ["title", "author_name", "url"]
|
|
||||||
actions = [approve, unapprove, suspend, unsuspend, activate, disable]
|
actions = [approve, unapprove, suspend, unsuspend, activate, disable]
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +140,6 @@ class Article(admin.ModelAdmin):
|
||||||
|
|
||||||
date_hierarchy = "pubdate"
|
date_hierarchy = "pubdate"
|
||||||
list_display = ("title", "blog_title", "pubdate")
|
list_display = ("title", "blog_title", "pubdate")
|
||||||
search_fields = ["title", "author_name", "blog_title", "url"]
|
|
||||||
|
|
||||||
def blog_title(self, obj): # pylint: disable=no-self-use
|
def blog_title(self, obj): # pylint: disable=no-self-use
|
||||||
"""get the title of the parent blog"""
|
"""get the title of the parent blog"""
|
||||||
|
@ -153,7 +151,7 @@ class Tag(admin.ModelAdmin):
|
||||||
"""display settings for tags"""
|
"""display settings for tags"""
|
||||||
|
|
||||||
list_display = ("name",)
|
list_display = ("name",)
|
||||||
search_fields = ["name"]
|
|
||||||
|
|
||||||
@admin.register(models.Event)
|
@admin.register(models.Event)
|
||||||
class Event(admin.ModelAdmin):
|
class Event(admin.ModelAdmin):
|
||||||
|
@ -168,7 +166,6 @@ class Event(admin.ModelAdmin):
|
||||||
"start_date",
|
"start_date",
|
||||||
)
|
)
|
||||||
ordering = ["approved", "announcements"]
|
ordering = ["approved", "announcements"]
|
||||||
search_fields = ["name", "description", "url"]
|
|
||||||
actions = [approve, unapprove]
|
actions = [approve, unapprove]
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,7 +176,6 @@ class CallForPapers(admin.ModelAdmin):
|
||||||
list_display = ("name", "event", "approved", "closing_date")
|
list_display = ("name", "event", "approved", "closing_date")
|
||||||
list_select_related = ("event",)
|
list_select_related = ("event",)
|
||||||
ordering = ["approved", "closing_date"]
|
ordering = ["approved", "closing_date"]
|
||||||
search_fields = ["event__name", "event__url", "details"]
|
|
||||||
actions = [approve, unapprove]
|
actions = [approve, unapprove]
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,7 +185,6 @@ class Group(admin.ModelAdmin):
|
||||||
|
|
||||||
list_display = ("name", "approved", "category", "description")
|
list_display = ("name", "approved", "category", "description")
|
||||||
ordering = ["approved", "name"]
|
ordering = ["approved", "name"]
|
||||||
search_fields = ["name", "description", "url"]
|
|
||||||
actions = [approve, unapprove]
|
actions = [approve, unapprove]
|
||||||
|
|
||||||
|
|
||||||
|
@ -205,7 +200,6 @@ class Newsletter(admin.ModelAdmin):
|
||||||
"active",
|
"active",
|
||||||
)
|
)
|
||||||
ordering = ["approved", "-failing"]
|
ordering = ["approved", "-failing"]
|
||||||
search_fields = ["name", "description", "url", "author_name"]
|
|
||||||
actions = [approve, unapprove, suspend, activate, disable]
|
actions = [approve, unapprove, suspend, activate, disable]
|
||||||
|
|
||||||
|
|
||||||
|
@ -215,7 +209,6 @@ class Edition(admin.ModelAdmin):
|
||||||
|
|
||||||
date_hierarchy = "pubdate"
|
date_hierarchy = "pubdate"
|
||||||
list_display = ("title", "newsletter_name", "pubdate")
|
list_display = ("title", "newsletter_name", "pubdate")
|
||||||
search_fields = ["title", "description", "url", "newsletter__name", "author_name"]
|
|
||||||
|
|
||||||
def newsletter_name(self, obj): # pylint: disable=no-self-use
|
def newsletter_name(self, obj): # pylint: disable=no-self-use
|
||||||
"""get the title of the parent newsletter"""
|
"""get the title of the parent newsletter"""
|
||||||
|
|
Loading…
Reference in a new issue