mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-27 20:11:14 +00:00
Merge branch 'main' into pr-template
This commit is contained in:
commit
e41b27e5f4
6 changed files with 84 additions and 23 deletions
2
.github/workflows/python.yml
vendored
2
.github/workflows/python.yml
vendored
|
@ -48,7 +48,7 @@ jobs:
|
|||
- name: Set up .env
|
||||
run: cp .env.example .env
|
||||
- name: Check migrations up-to-date
|
||||
run: python ./manage.py makemigrations --check
|
||||
run: python ./manage.py makemigrations --check -v 3
|
||||
- name: Run Tests
|
||||
run: pytest -n 3
|
||||
|
||||
|
|
51
bookwyrm/migrations/0207_sqlparse_update.py
Normal file
51
bookwyrm/migrations/0207_sqlparse_update.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Generated by Django 4.2.11 on 2024-07-27 18:18
|
||||
|
||||
from django.db import migrations, models
|
||||
import pgtrigger.compiler
|
||||
import pgtrigger.migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("bookwyrm", "0206_merge_20240415_1537"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
pgtrigger.migrations.RemoveTrigger(
|
||||
model_name="author",
|
||||
name="reset_book_search_vector_on_author_edit",
|
||||
),
|
||||
pgtrigger.migrations.RemoveTrigger(
|
||||
model_name="book",
|
||||
name="update_search_vector_on_book_edit",
|
||||
),
|
||||
pgtrigger.migrations.AddTrigger(
|
||||
model_name="author",
|
||||
trigger=pgtrigger.compiler.Trigger(
|
||||
name="reset_book_search_vector_on_author_edit",
|
||||
sql=pgtrigger.compiler.UpsertTriggerSql(
|
||||
func="WITH updated_books AS (SELECT book_id FROM bookwyrm_book_authors WHERE author_id = new.id) UPDATE bookwyrm_book SET search_vector = '' FROM updated_books WHERE id = updated_books.book_id;RETURN NEW;",
|
||||
hash="4eeb17d1c9c53f543615bcae1234bd0260adefcc",
|
||||
operation='UPDATE OF "name", "aliases"',
|
||||
pgid="pgtrigger_reset_book_search_vector_on_author_edit_a50c7",
|
||||
table="bookwyrm_author",
|
||||
when="AFTER",
|
||||
),
|
||||
),
|
||||
),
|
||||
pgtrigger.migrations.AddTrigger(
|
||||
model_name="book",
|
||||
trigger=pgtrigger.compiler.Trigger(
|
||||
name="update_search_vector_on_book_edit",
|
||||
sql=pgtrigger.compiler.UpsertTriggerSql(
|
||||
func="WITH author_names AS (SELECT array_to_string(bookwyrm_author.name || bookwyrm_author.aliases, ' ') AS name_and_aliases FROM bookwyrm_author LEFT JOIN bookwyrm_book_authors ON bookwyrm_author.id = bookwyrm_book_authors.author_id WHERE bookwyrm_book_authors.book_id = new.id) SELECT setweight(coalesce(nullif(to_tsvector('english', new.title), ''), to_tsvector('simple', new.title)), 'A') || setweight(to_tsvector('english', coalesce(new.subtitle, '')), 'B') || (SELECT setweight(to_tsvector('simple', coalesce(array_to_string(array_agg(name_and_aliases), ' '), '')), 'C') FROM author_names) || setweight(to_tsvector('english', coalesce(new.series, '')), 'D') INTO new.search_vector;RETURN NEW;",
|
||||
hash="676d929ce95beff671544b6add09cf9360b6f299",
|
||||
operation='INSERT OR UPDATE OF "title", "subtitle", "series", "search_vector"',
|
||||
pgid="pgtrigger_update_search_vector_on_book_edit_bec58",
|
||||
table="bookwyrm_book",
|
||||
when="BEFORE",
|
||||
),
|
||||
),
|
||||
),
|
||||
]
|
|
@ -7,7 +7,6 @@ from boto3.session import Session as BotoSession
|
|||
from s3_tar import S3Tar
|
||||
|
||||
from django.db.models import BooleanField, FileField, JSONField
|
||||
from django.db.models import Q
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.core.files.base import ContentFile
|
||||
from django.core.files.storage import storages
|
||||
|
@ -315,19 +314,28 @@ def export_book(user: User, edition: Edition):
|
|||
|
||||
|
||||
def get_books_for_user(user):
|
||||
"""Get all the books and editions related to a user"""
|
||||
"""
|
||||
Get all the books and editions related to a user.
|
||||
|
||||
editions = (
|
||||
Edition.objects.select_related("parent_work")
|
||||
.filter(
|
||||
Q(shelves__user=user)
|
||||
| Q(readthrough__user=user)
|
||||
| Q(review__user=user)
|
||||
| Q(list__user=user)
|
||||
| Q(comment__user=user)
|
||||
| Q(quotation__user=user)
|
||||
We use union() instead of Q objects because it creates
|
||||
multiple simple queries in stead of a much more complex DB query
|
||||
that can time out.
|
||||
|
||||
"""
|
||||
|
||||
shelf_eds = Edition.objects.select_related("parent_work").filter(shelves__user=user)
|
||||
rt_eds = Edition.objects.select_related("parent_work").filter(
|
||||
readthrough__user=user
|
||||
)
|
||||
.distinct()
|
||||
review_eds = Edition.objects.select_related("parent_work").filter(review__user=user)
|
||||
list_eds = Edition.objects.select_related("parent_work").filter(list__user=user)
|
||||
comment_eds = Edition.objects.select_related("parent_work").filter(
|
||||
comment__user=user
|
||||
)
|
||||
quote_eds = Edition.objects.select_related("parent_work").filter(
|
||||
quotation__user=user
|
||||
)
|
||||
|
||||
editions = shelf_eds.union(rt_eds, review_eds, list_eds, comment_eds, quote_eds)
|
||||
|
||||
return editions
|
||||
|
|
|
@ -404,6 +404,13 @@ if USE_S3:
|
|||
"default_acl": "public-read",
|
||||
},
|
||||
},
|
||||
"sass_processor": {
|
||||
"BACKEND": "storages.backends.s3.S3Storage",
|
||||
"OPTIONS": {
|
||||
"location": "static",
|
||||
"default_acl": "public-read",
|
||||
},
|
||||
},
|
||||
"exports": {
|
||||
"BACKEND": "storages.backends.s3.S3Storage",
|
||||
"OPTIONS": {
|
||||
|
|
|
@ -71,14 +71,8 @@ def get_landing_books():
|
|||
"""list of books for the landing page"""
|
||||
return list(
|
||||
set(
|
||||
models.Edition.objects.filter(
|
||||
review__published_date__isnull=False,
|
||||
review__deleted=False,
|
||||
review__user__local=True,
|
||||
review__privacy__in=["public", "unlisted"],
|
||||
)
|
||||
.exclude(cover__exact="")
|
||||
models.Edition.objects.exclude(cover__exact="")
|
||||
.distinct()
|
||||
.order_by("-review__published_date")[:6]
|
||||
.order_by("-updated_date")[:6]
|
||||
)
|
||||
)
|
||||
|
|
|
@ -4,7 +4,7 @@ boto3==1.34.74
|
|||
bw-file-resubmit==0.6.0rc2
|
||||
celery==5.3.6
|
||||
colorthief==0.2.1
|
||||
Django==4.2.11
|
||||
Django==4.2.14
|
||||
django-celery-beat==2.6.0
|
||||
django-compressor==4.4
|
||||
django-csp==3.8
|
||||
|
@ -37,6 +37,7 @@ redis==5.0.3
|
|||
requests==2.32.0
|
||||
responses==0.25.0
|
||||
s3-tar==0.1.13
|
||||
sqlparse==0.5.1
|
||||
|
||||
# Indirect dependencies with version constraints for security fixes
|
||||
grpcio>=1.57.0
|
||||
|
|
Loading…
Reference in a new issue