Joel Bradshaw
48147883ce
Merge branch 'main' into progress_update
2021-01-13 19:53:26 -08:00
Joel Bradshaw
0b703a252b
Make get_rank() a regular method
...
It doesn't act like a property, and we have edition_rank as a proper
property anyway
2021-01-13 18:47:43 -08:00
Mouse Reeve
a6eb444a68
Don't error out user page
2021-01-11 14:05:08 -08:00
Mouse Reeve
5b7f7aa0e3
sort edition list by rank
2021-01-11 11:16:10 -08:00
Mouse Reeve
fe67f65307
Set default edition on bookwyrm import
2021-01-11 10:25:34 -08:00
Mouse Reeve
83852e29eb
Update edition ranks when work is saved
2021-01-11 10:02:49 -08:00
Mouse Reeve
6db64e33e4
set rank on editions
2021-01-11 09:29:23 -08:00
Mouse Reeve
b44b42be7e
Adds rank field to edition model
2021-01-11 09:18:40 -08:00
Mouse Reeve
6eb7872598
Fixes queryset for shelf page json
2021-01-10 07:54:58 -08:00
Mouse Reeve
d04271af75
Adds field on import job to check if job completed
...
the task isn't a reliable indicator, unfortunately.
2021-01-07 08:08:12 -08:00
Mouse Reeve
c8d53ee0df
Adds site invite created date
2021-01-05 11:38:03 -08:00
Mouse Reeve
a73f51ad78
Merge branch 'main' into review-rate
2021-01-04 13:42:39 -08:00
Mouse Reeve
0f4a30324e
Makes more about instance text customizable
2021-01-04 12:58:31 -08:00
Mouse Reeve
0c0e9bebdf
Use uploaded logos in templates
2021-01-04 12:47:10 -08:00
Mouse Reeve
7cc2dfe517
Merge branch 'main' into logo-default
2021-01-04 12:18:40 -08:00
Mouse Reeve
3fe7b95786
Fixes setting remote user username on update
2021-01-04 10:42:31 -08:00
Mouse Reeve
50f61f5d19
Merge branch 'main' into validate-username
2021-01-04 09:41:17 -08:00
Mouse Reeve
34e9847da3
Still need to remove validator arg in username field
2021-01-04 09:40:23 -08:00
Mouse Reeve
d8eb3454d6
Fixes null value in status attachment array
2021-01-03 20:03:35 -08:00
Mouse Reeve
d828b0ead9
Remove books manager at long last
2021-01-02 08:14:28 -08:00
Mouse Reeve
385ec4d70a
Adds ReviewRating model
...
I can't just calling Rating because that would clash with the rating
field
2021-01-01 11:51:52 -08:00
Mouse Reeve
521934b4f3
Moves models that don't inherit Status to their own files
2021-01-01 10:46:15 -08:00
Mouse Reeve
87b8e5f39d
Merge pull request #451 from mouse-reeve/views-tests
...
Views tests
2020-12-31 14:03:34 -08:00
Mouse Reeve
2f9123c206
Add sort order to followers/following ordered collection querysets
2020-12-31 13:47:26 -08:00
Mouse Reeve
a444c5f6fc
Fixes model deduplication from data
2020-12-31 12:22:00 -08:00
Mouse Reeve
69af2f4cd3
Fixes untag
2020-12-31 08:42:09 -08:00
Mouse Reeve
29ee027f6d
Tests tag page and orders tag collection json
2020-12-31 08:05:24 -08:00
Mouse Reeve
7bcf0a1d53
Fixes missing code for editions list json
2020-12-31 07:46:35 -08:00
Mouse Reeve
dc68fdd53e
User generated local paths
2020-12-30 17:36:35 -08:00
Mouse Reeve
45c13bd76c
Only get reviews when loading user data
2020-12-30 13:16:09 -08:00
Mouse Reeve
c1243b5c21
Makes outbox filter-able
2020-12-30 13:14:16 -08:00
Mouse Reeve
babc604397
Fixes outbox privacy
2020-12-30 12:41:19 -08:00
Mouse Reeve
74a25f205b
Validator for username field
2020-12-28 14:14:22 -08:00
Mouse Reeve
26c0880fe4
Merge pull request #425 from mouse-reeve/import-error
...
Fixes goodreads import failing on every book
2020-12-27 14:45:31 -08:00
Mouse Reeve
ac261d7b1a
Send connector with search result
...
also fix typo in get_work_from_edition_data function
2020-12-27 14:33:34 -08:00
Anton Strömkvist
97a5364b70
Fix docstring for to_reject_activity
2020-12-27 23:31:14 +01:00
Mouse Reeve
e89bfdc572
Makes registration user/localname fields more sensible
2020-12-24 11:39:57 -08:00
Mouse Reeve
a3df0847e1
Fixes celery tasks expanding data not setting many to many fields
2020-12-23 12:45:40 -08:00
Mouse Reeve
e7e90360b3
Adds model import
2020-12-22 10:28:04 -08:00
Mouse Reeve
cfa1a1b42c
Remove sync fields and share fields between book and author
2020-12-21 12:17:18 -08:00
Mouse Reeve
aac264c998
Generate author_text field dynamically
2020-12-21 12:10:42 -08:00
Mouse Reeve
c4b9b82000
Use author name as a deduplication field
...
I feel iffy about this but openlibrary has hella duplicates
2020-12-20 13:31:11 -08:00
Mouse Reeve
79973687d5
Updates tests
2020-12-20 12:50:35 -08:00
Mouse Reeve
3597ca460c
Don't let author and book remote ids get overridden
2020-12-20 12:40:20 -08:00
Mouse Reeve
23cbeab4c1
cleans up remote version of quote status
2020-12-20 12:31:39 -08:00
Mouse Reeve
60738011a2
user's name and bio field are optional
...
get it together, mouse
2020-12-20 12:09:19 -08:00
Mouse Reeve
a6efd51bb2
Only parse mardown on outgoing activities
2020-12-20 11:38:13 -08:00
Mouse Reeve
ef696782ab
Allow markdown in html fields
2020-12-19 18:54:56 -08:00
Mouse Reeve
0c6049b81c
Discard remote boosts
2020-12-18 12:38:27 -08:00
Mouse Reeve
606e93fb12
Hacky fix for serializing boost
2020-12-18 11:34:21 -08:00
Mouse Reeve
80de6079fa
User p tags for pure status serializer
2020-12-18 11:00:30 -08:00
Mouse Reeve
40c4f4f5de
Disable boosting private statuses
2020-12-18 09:30:08 -08:00
Mouse Reeve
6149f36c7f
Fixes bug in alt text breaing serializing work
2020-12-17 13:55:31 -08:00
Mouse Reeve
d109ac0626
Merge pull request #402 from mouse-reeve/alt-text
...
Federate cover alt text
2020-12-17 13:22:09 -08:00
Mouse Reeve
530198adea
Serialize alt text of images
2020-12-17 12:54:04 -08:00
Mouse Reeve
39dc0501a5
Make alt text a model property
2020-12-17 12:30:49 -08:00
Mouse Reeve
04ba5abf45
Fixes infinite recursion when loading books
...
Also fixes bug in serializing page nubmers
2020-12-17 12:02:59 -08:00
Mouse Reeve
b796686483
Adds cw field
2020-12-16 19:20:15 -08:00
Mouse Reeve
33c2f6c3b2
Merge branch 'main' into content-warnings
2020-12-16 19:14:34 -08:00
Mouse Reeve
a3c7d324d6
Sanitize incoming html
2020-12-16 16:47:23 -08:00
Mouse Reeve
d79a756813
Fixes pure status serializer
2020-12-16 15:59:42 -08:00
Mouse Reeve
ef92e562fd
Merge pull request #382 from mouse-reeve/switch-edition
...
Adds shelf info to book page
2020-12-16 14:58:36 -08:00
Mouse Reeve
5dbacb3524
Merge branch 'main' into switch-edition
2020-12-16 09:22:04 -08:00
Mouse Reeve
da05b99bb8
Fixes incoming shelve activity
2020-12-15 18:57:17 -08:00
Mouse Reeve
948e938040
Handles outdated Add with Book type
...
should be edition.
2020-12-15 18:16:33 -08:00
Mouse Reeve
710fbc949b
Better username validator and remove trailing whitespace
2020-12-15 15:52:22 -08:00
Mouse Reeve
ee2121095c
Separate update editon and work functions
2020-12-15 12:39:09 -08:00
Mouse Reeve
2ef4df41b4
Fixes boosts
2020-12-15 11:54:57 -08:00
Mouse Reeve
b36eaef172
Merge branch 'main' into switch-edition
2020-12-13 21:10:37 -08:00
Mouse Reeve
5c7ac46116
Fixes foreign key field setting wrong value on activity
2020-12-13 14:53:25 -08:00
Mouse Reeve
44cbf7c07f
Fixes checking privacy when serializing status
2020-12-13 14:35:56 -08:00
Mouse Reeve
b6907f39e9
Creates Privacy field that handles setting to/cc
2020-12-13 13:03:17 -08:00
Mouse Reeve
c470aeb3ce
Create helper function on field for settings values
2020-12-13 12:02:26 -08:00
Mouse Reeve
b67aea22fc
Aggregates (de)serializable model fields
2020-12-13 11:40:46 -08:00
Mouse Reeve
957f0889aa
Clean up models
...
removes unused function and sorts replies correctly
2020-12-13 11:15:42 -08:00
Mouse Reeve
ae435a3165
Removes sqlite support 😢
...
RIP, things have gotten too complicated for this I think
2020-12-12 20:11:23 -08:00
Mouse Reeve
1e01e76ac2
removes unneeded imports
2020-12-12 18:06:48 -08:00
Mouse Reeve
aacf5b7ba4
fields for content warnings
2020-12-12 18:00:39 -08:00
Mouse Reeve
ae07bbffb7
Merge branch 'main' into logo-default
2020-12-12 16:03:23 -08:00
Mouse Reeve
49979fabef
More user serialization tests
2020-12-12 15:00:20 -08:00
Mouse Reeve
7c43fa1f7c
Adds deduplication fields
2020-12-12 13:39:55 -08:00
Mouse Reeve
31a407d74a
Use name field only for author name
...
It feels janky to remove a more granular name designation, but all these
first/last name fields were algorithmically populated by a dubious
process of splitting the name by a space character. If it makes sense to
have first/last name fields, it should be re-added with some
consideration.
2020-12-12 09:53:21 -08:00
Mouse Reeve
801b6c3a77
Merge branch 'main' into follow-remote-ids
2020-12-12 09:34:54 -08:00
Mouse Reeve
716068474e
Merge branch 'main' into switch-edition
2020-12-11 16:59:59 -08:00
Mouse Reeve
2d7f8ada61
Functional switch editions button
2020-12-11 16:57:38 -08:00
Mouse Reeve
117d243577
Expand site settings and add footer
2020-12-11 12:31:02 -08:00
Mouse Reeve
7204068d2a
Removes unnecessary override of field_from_activity on foreign key
2020-12-09 13:35:36 -08:00
Mouse Reeve
ef2a07884f
Throws validation error when remote_id is None
2020-12-09 11:57:29 -08:00
Mouse Reeve
cc42e9d149
Asyncronously set related fields
2020-12-08 09:43:12 -08:00
Mouse Reeve
4d4ee8b8c3
Starts getting reverse fields working for deserialization
...
also fixes the fields on the image model and runs a long overdue
migration
2020-12-07 18:28:42 -08:00
Mouse Reeve
d0c1a68df6
Patches celery call in field tests and fixes tag field
2020-12-07 13:39:05 -08:00
Mouse Reeve
0a576c325c
Fixes deserializing tags of varied types
2020-12-07 13:16:42 -08:00
Mouse Reeve
4599df752d
Adds tests for many to many field deserialization
2020-12-07 09:31:12 -08:00
Mouse Reeve
69bb3f2751
Fixes validation error in many to many field deserializer
2020-12-07 09:14:30 -08:00
Mouse Reeve
7a90aa8f6c
Start moving serializing from to_model to fields
2020-12-05 21:33:48 -08:00
Mouse Reeve
8a900689d3
Generalizes link format in many to many field
2020-12-04 17:57:14 -08:00
Mouse Reeve
800ddf2a6b
fixes inconsistency in to_undo activity helper
2020-12-04 11:53:50 -08:00
Mouse Reeve
39307ce1cd
Fixes remote_id on Update activities
2020-12-04 11:48:34 -08:00
Mouse Reeve
2e4aff90a3
Fixes signing Create activities
...
and some tests for the base_model
2020-12-04 11:29:38 -08:00
Mouse Reeve
ae8d0e1974
Adds sort order for outbox
2020-12-04 08:07:47 -08:00
Mouse Reeve
d92fb53333
Handle absent remote ids
...
it oughtent get to this state, but...
2020-12-03 17:23:08 -08:00
Mouse Reeve
de7e64932a
Fixes name of book field on status
2020-12-03 13:15:05 -08:00
Mouse Reeve
3a75127301
Removes half-baked field serializers
2020-12-03 13:00:04 -08:00
Mouse Reeve
77a1fc26f1
Save key pair when creating new User
2020-12-03 12:45:01 -08:00
Mouse Reeve
a85043b351
Updates to_model to use fields
2020-12-03 12:35:57 -08:00
Mouse Reeve
fee5846aa8
Fixes generating new key paris for user
...
and the broadcast test
2020-11-30 19:33:50 -08:00
Mouse Reeve
eb6206252d
cleans up ordered collection mixin
2020-11-30 19:24:31 -08:00
Mouse Reeve
1ec2f20486
avoid naming clash is to_activity for field vs model
2020-11-30 14:54:45 -08:00
Mouse Reeve
77aead722d
serialize book and author models
2020-11-30 14:40:26 -08:00
Mouse Reeve
3966c84e08
Updates status model and serializer
2020-11-30 14:24:31 -08:00
Mouse Reeve
8bc0a57bd4
Remove outdated user fields
2020-11-30 11:40:04 -08:00
Mouse Reeve
74a58e5267
Use custom model fields in user model
2020-11-30 10:32:29 -08:00
Mouse Reeve
205fa0d465
set user's remote server in a celery task
2020-11-29 10:08:19 -08:00
Mouse Reeve
34e8fb3e5c
style fix and removing stray print statement
2020-11-28 18:28:09 -08:00
Mouse Reeve
dfd730757d
handle unset default editions
2020-11-28 17:42:09 -08:00
Mouse Reeve
72c7829bab
Preserve remote_id syntax for authors and books
2020-11-28 17:29:03 -08:00
Mouse Reeve
7ed2e310c0
User origin ids for books and authors
2020-11-28 13:40:09 -08:00
Mouse Reeve
0a8ef98854
use localized remote_ids for books
2020-11-28 13:14:18 -08:00
Mouse Reeve
421a13fda0
automatically load authors and editions
2020-11-28 13:00:04 -08:00
Mouse Reeve
b0202eb8e8
Remove special remote user handling code
...
also fixes date parsing
2020-11-28 11:48:17 -08:00
Joel Bradshaw
7fadbeeb55
Merge branch 'main' into progress_update
2020-11-28 11:06:01 -08:00
Mouse Reeve
fd7e476c9b
refactors tag model to fit ordered collection structure
2020-11-28 11:04:54 -08:00
Mouse Reeve
a93b5cf5bc
Use remote_id resolver to load books, user
2020-11-28 10:18:24 -08:00
Joel Bradshaw
500f05266a
Add option for progress percentage
...
And rework display on book page as well
2020-11-28 00:07:04 -08:00
Mouse Reeve
ebb82287c2
First pass at recursively resolving foreign keys
2020-11-27 22:10:38 -08:00
Mouse Reeve
86cbb3edbd
Merge branch 'main' into activitypub-cleanup
2020-11-27 20:13:32 -08:00
Mouse Reeve
4626d94ab9
handle image attachments recursively
2020-11-27 20:11:46 -08:00
Mouse Reeve
2480690378
Automatically handle image fields in model serializer
2020-11-27 18:26:07 -08:00
Joel Bradshaw
9ed7d23000
Test updating a progress
...
Also remove spurious whitespace change
2020-11-27 18:19:12 -08:00
Mouse Reeve
624ff71a11
Makes attachment Images a serializable class
2020-11-27 17:20:01 -08:00
Joel Bradshaw
3cb28273c4
Merge branch 'main' into progress_update
2020-11-27 17:05:54 -08:00
Joel Bradshaw
d8b2afff3d
Replace naive datetimes with aware ones
2020-11-27 16:35:03 -08:00
Joel Bradshaw
85026b837c
Merge branch 'main' into progress_update
2020-11-27 15:52:55 -08:00
Mouse Reeve
69a6644011
Corrects activitypub fields to camelcase in Book
2020-11-27 15:34:47 -08:00
Mouse Reeve
7b6035898b
Serialize activitypub authors from data in connector
2020-11-27 14:54:08 -08:00
Joel Bradshaw
692aa08364
Remove unneeded class, wrap line
2020-11-25 23:11:30 -08:00
Joel Bradshaw
64fb88cc10
ProgressUpdate doesn't need its own date field
...
Just use the base model's created_date
2020-11-25 23:03:32 -08:00
Joel Bradshaw
090cf2aea7
Make inline progress form actually work
2020-11-25 23:03:27 -08:00
Mouse Reeve
0ec40ae748
Merge branch 'main' into refactor-bookwyrm-connector
2020-11-25 11:21:13 -08:00
Mouse Reeve
aed360d07e
Fixes serializer handling default dataclass fields
2020-11-25 11:16:01 -08:00
Mouse Reeve
847014720e
Refactors bookwyrm connector to use activitypub serializer
2020-11-24 16:05:00 -08:00
Mouse Reeve
3dc0fc7e8f
Merge branch 'main' into edit-books-erros
2020-11-24 13:40:53 -08:00
Mouse Reeve
9bbedc5d9a
Fixes field causing form invalidation when editing books
2020-11-24 13:25:58 -08:00
Mouse Reeve
ff5a0f7bc2
Adds alt text to status images
2020-11-24 11:44:13 -08:00
Mouse Reeve
ad7ce6595b
Receive and save incoming images
2020-11-24 11:25:07 -08:00
Mouse Reeve
88e4705717
Use attachment database table
2020-11-23 20:42:05 -08:00
Mouse Reeve
e2debd855c
Convert activitypub Image into model ImageField
2020-11-23 13:43:46 -08:00
Mouse Reeve
5526b4773e
Formatter for converting model images to AP Images
...
Replaces reduntant properties on user and book models
2020-11-23 13:07:26 -08:00
Mouse Reeve
dab0aeffb2
Adds image attachment field to status model
2020-11-23 12:48:41 -08:00
Mouse Reeve
72b4c150f6
(De)serializers for tag fields
2020-11-20 09:28:54 -08:00
Mouse Reeve
73e41d568e
Serialize model user and book tags to activitypub
2020-11-20 08:14:16 -08:00
Joel Bradshaw
00b8608a50
Make ProgressUpdate attached to a readthrough
2020-11-16 23:53:17 -08:00
Joel Bradshaw
13229ea937
Add progress updates as their own table
2020-11-16 23:29:32 -08:00
Joel Bradshaw
7ffc3114a6
Add display and form for existing pages_read
...
Commented out the new update type because it was breaking and I don't
need it quite yet
2020-11-16 22:47:55 -08:00
Joel Bradshaw
3beebe4727
Add initial draft of progress update
2020-11-16 22:33:04 -08:00
Mouse Reeve
28e1c9525c
tweaks search rankings for better results
2020-11-13 11:03:39 -08:00
Mouse Reeve
86504989b4
fixes import matching with local books
2020-11-13 09:59:57 -08:00
Mouse Reeve
e3a803b907
Allow import retry
2020-11-13 09:02:41 -08:00
Mouse Reeve
0e13616e73
lowercase shelf identifier
2020-11-10 14:56:53 -08:00
Mouse Reeve
408ca6609c
Let users create shelves
2020-11-10 14:52:04 -08:00
Mouse Reeve
ab0f9230c7
Adds privacy setting to shelves
2020-11-10 13:39:58 -08:00
Mouse Reeve
20395ff2ec
Corrects serialization of Add activity
2020-11-07 16:11:12 -08:00
Mouse Reeve
1ffa21b67d
Fixes suggested books and serialize covers in status
2020-11-07 10:56:24 -08:00
Mouse Reeve
ce4c02936d
Merge pull request #293 from mouse-reeve/tagging
...
fixes tagging
2020-11-06 15:46:45 -08:00
Mouse Reeve
d320ba1ff9
Don't put deleted statuses in outbox
2020-11-06 14:53:27 -08:00
Mouse Reeve
ad25e75282
fixes tagging
2020-11-06 14:25:48 -08:00
Mouse Reeve
152343d251
Boost and unboost federation fixes
2020-11-04 16:28:32 -08:00
Mouse Reeve
21c0a0163a
Deduplicate incoming Create notes
2020-11-04 15:23:52 -08:00
Mouse Reeve
722f44ac9f
actual fix for status deserialization
2020-11-04 14:19:06 -08:00
Mouse Reeve
4bde389d6b
Fixes matching activities to models
2020-11-04 14:13:34 -08:00
Mouse Reeve
61ac7b1426
Removes stray paren from quoation pure serializer
2020-11-04 14:01:28 -08:00
Mouse Reeve
19a9136ebb
Correctly serialize edition ids in work page
2020-11-04 13:31:44 -08:00
Mouse Reeve
53a358f2fd
Activitypub serializable edition list
2020-11-04 12:55:00 -08:00
Mouse Reeve
ff96835c2a
Migrate default edition field to work model
...
Fixes #281
2020-11-04 11:27:49 -08:00
Mouse Reeve
0c73a1f42e
updates test data and serialization
2020-11-02 16:24:56 -08:00
Mouse Reeve
5501318f95
Incoming shelve activities
2020-11-02 15:10:41 -08:00
Mouse Reeve
4cfded3d19
Fixes activitypub serializer local ids
2020-11-02 15:01:28 -08:00
Mouse Reeve
c5a215b11d
Fixes serialization of parent work remote_id
2020-11-02 14:13:24 -08:00
Mouse Reeve
917c97daba
Merge pull request #273 from mouse-reeve/follow-reqest-dupe
...
Prevent creating follow requests when there's already a follow
2020-11-02 11:52:36 -08:00
Mouse Reeve
ad3d492fcc
Prevent creating follow requests when there's already a follow
...
Fixes #90
2020-11-01 13:14:56 -08:00
Mouse Reeve
2b0b88802b
Fixes weirdness in handling avatars
...
- urls weren't serialized correctly for activitypub
- the filename shouldn't have been preserved as-is
2020-11-01 12:36:56 -08:00
Mouse Reeve
a2692f92d2
Fixes logic issues in saving user model
2020-11-01 12:07:51 -08:00
Mouse Reeve
8ae9519bf2
Merge branch 'main' into mention_users
2020-11-01 11:09:16 -08:00
Mouse Reeve
0cf1838276
Mention and notify users when creating a status
2020-11-01 10:13:51 -08:00
Mouse Reeve
4e02a8df99
Track when user was last active
...
fixes #10
2020-11-01 09:20:35 -08:00
Mouse Reeve
c334451216
code cleanup
2020-11-01 08:57:43 -08:00
Mouse Reeve
a7d8376b6a
Small activitypub serialization issues
2020-10-31 13:06:22 -07:00
Mouse Reeve
02265b1e49
Show federated servers and connectors in admin
2020-10-31 12:45:39 -07:00
Mouse Reeve
fd76d1a585
Merge pull request #263 from mouse-reeve/delete
...
Send Delete activity, not Tombstone on deletion
2020-10-31 11:05:07 -07:00
Mouse Reeve
301a452d9f
Send Delete activity, not Tombstone on deletion
2020-10-31 11:04:19 -07:00
Mouse Reeve
2cdd281e98
Prevent error on serializing book cover
2020-10-31 10:50:20 -07:00
Mouse Reeve
0393d81230
Fixes loading covers and authors
2020-10-30 17:18:25 -07:00
Mouse Reeve
203e526a83
Fixes loading remote books
...
- saves remote_id correctly
- loads remote books for incoming statuses
2020-10-30 17:04:10 -07:00
Mouse Reeve
a17f54e457
Fixes federation bugs
2020-10-30 15:22:20 -07:00
Mouse Reeve
c9354a5ad1
Make federated server blankable
2020-10-30 13:11:13 -07:00
Mouse Reeve
3ca50a7573
safer isbn normalization
2020-10-30 12:57:31 -07:00
Mouse Reeve
3fc1f46897
Handle dashes in isbns
2020-10-30 12:43:02 -07:00
Mouse Reeve
0b0de12968
Allow users to set privacy on imported reviews
...
or not import them at all. Fixes #252
2020-10-30 11:21:02 -07:00
Mouse Reeve
45f39fab48
upping confidence for import search
...
better to query OL than to get the wrong book locally
2020-10-29 23:28:23 -07:00
Mouse Reeve
7ce0890a41
Stop assuming every book is Hamlet
2020-10-29 15:30:53 -07:00