[release] Bump to version 65.6
- Add CSV endpoint for book scrobbles that LibraryThing can ingest - Fix recursive bug in backup script - TODOIST_* variable names flagged as TODOs (false positives)
This commit is contained in:
@ -1,5 +1,97 @@
|
||||
#+title: CHANGELOG
|
||||
|
||||
* Version 65.6 [3/3]
|
||||
** DONE [#B] Add CSV endpoint for book scrobbles that LibraryThing can ingest :books:feature:export:
|
||||
:PROPERTIES:
|
||||
:ID: fd8a2778-ff46-394b-9868-edb9a48d0ce6
|
||||
:END:
|
||||
|
||||
|
||||
*** Description
|
||||
We should provide an "Export for LibraryThings" link on the Books list page
|
||||
which creates a CSV file of all books and tags for "in-progress" or "finished"
|
||||
depending on whether the book has been marked as finished.
|
||||
|
||||
[[https://www.librarything.com/LibraryThingSample.csv][Sample CSV file]]
|
||||
|
||||
*** Implementation
|
||||
|
||||
Added a `books:librarything_export` endpoint (a `LoginRequiredMixin` view) that
|
||||
streams a CSV matching the [[https://www.librarything.com/LibraryThingSample.csv][LibraryThing sample]]
|
||||
column layout (TITLE, AUTHOR (last, first), DATE, ISBN, PUBLICATION INFO, TAGS,
|
||||
RATING, REVIEW, DATE READ, PAGE COUNT, CALL NUMBER). The `TAGS` column is set to
|
||||
"in-progress" or "finished" based on the user's last scrobble's
|
||||
`long_play_complete` flag, `DATE READ` reflects that scrobble's timestamp when
|
||||
finished, author names are reformatted to "last, first", and the export is
|
||||
limited to books the user has scrobbled. The CSV logic lives in
|
||||
`books.utils.librarything_csv_rows()` with a `format_author_last_first()`
|
||||
helper; a link on the Books list page (`book_list.html`) triggers the download.
|
||||
|
||||
** DONE [#A] Fix recursive bug in backup script :backups:bug:
|
||||
:PROPERTIES:
|
||||
:ID: e986d35e-fc23-5d31-9d2a-0a95da4748a2
|
||||
:END:
|
||||
|
||||
#+begin_src python
|
||||
ERROR vrobbler.apps.scrobbles.tasks:808 backup_database backup_database: webdav upload failed: Client.mkdir() got an unexpected keyword argument 'recursive'
|
||||
WARNING vrobbler.apps.scrobbles.tasks:537 _cleanup_failed_backup backup_database: removed incomplete backup /var/backups/vrobbler-backup-2026_08_23.sql.gz
|
||||
ERROR vrobbler.apps.scrobbles.tasks:827 backup_database backup_database failed: Client.mkdir() got an unexpected keyword argument 'recursive'
|
||||
DEBUG urllib3.connectionpool:2075 _new_conn Starting new HTTPS connection (1): ntfy.unbl.ink:443
|
||||
#+end_src
|
||||
** DONE [#B] TODOIST_* variable names flagged as TODOs (false positives) :tasks:metadata:cleanup:
|
||||
:PROPERTIES:
|
||||
:ID: b2fd3053-ce26-4cdb-bf37-578387fef6c7
|
||||
:END:
|
||||
*** Description
|
||||
|
||||
Need to clean up how we store task data in logdata.
|
||||
|
||||
*** Implementation
|
||||
|
||||
Task logdata now uses generic, source-agnostic field names instead of
|
||||
per-source prefixed keys. `TaskLogData` gained `source_id`, `project_id`,
|
||||
`state` and `raw_data` (the full remaining source payload kept for future
|
||||
reference, matching the music track `raw_data` convention); the old
|
||||
`orgmode_id`/`orgmode_state`/`orgmode_properties`/
|
||||
`orgmode_drawers`/`orgmode_timestamps` and `todoist_id`/`todoist_project_id`
|
||||
keys are gone. The todoist and emacs scrobblers and webhooks normalize into the
|
||||
generic fields, and all `log__orgmode_id` / `log__todoist_id` lookups became
|
||||
`log__source_id`. `Task.source_url_for_user()` now reads `source_id` (fixing the
|
||||
`todist_id` typo and the never-matching log `source` check). New
|
||||
`convert_orgmode_task_log_to_generic` / `convert_todoist_task_log_to_generic`
|
||||
helpers (wired into the `convert_task_log_data` management command) migrate
|
||||
existing scrobble logs. The scrobble "Edit Log" form no longer renders the
|
||||
read-only fields (labels, source_id, project_id, state, raw_data) as disabled
|
||||
inputs — they are excluded from the form and preserved on save — and the form
|
||||
now defaults to being toggled open. Task labels render as read-only badges in
|
||||
the detail view instead.
|
||||
|
||||
- Files:
|
||||
- ~vrobbler/settings.py~ (lines 108-109) -- =TODOIST_CLIENT_ID=, =TODOIST_CLIENT_SECRET=
|
||||
- ~vrobbler/apps/scrobbles/constants.py~ (line 74) -- =TODOIST_TASK_URL=
|
||||
- These are variable/constant names for the Todoist integration, not actual
|
||||
TODOs. No action needed, but worth noting they show up in searches.
|
||||
*** Agent description
|
||||
|
||||
Task logdata now uses generic, source-agnostic field names instead of
|
||||
per-source prefixed keys. `TaskLogData` gained `source_id`, `project_id`,
|
||||
`state` and `raw_data` (the full remaining source payload kept for future
|
||||
reference, matching the music track `raw_data` convention); the old `orgmode_*`
|
||||
and `todoist_*` keys are gone. The todoist and emacs scrobblers and webhooks
|
||||
normalize into the generic fields, and all `log__orgmode_id` / `log__todoist_id`
|
||||
lookups became `log__source_id`. `Task.source_url_for_user()` now reads
|
||||
`source_id` (fixing the `todist_id` typo and the never-matching log `source`
|
||||
check). New `convert_orgmode_task_log_to_generic` /
|
||||
`convert_todoist_task_log_to_generic` helpers (wired into the
|
||||
`convert_task_log_data` management command) migrate existing scrobble logs.
|
||||
The scrobble "Edit Log" form no longer renders the read-only fields (labels,
|
||||
source_id, project_id, state, raw_data) as disabled inputs — they are excluded
|
||||
from the form and preserved on save — and the form now defaults to being
|
||||
toggled open. Task labels render as read-only badges in the detail view
|
||||
instead.
|
||||
|
||||
|
||||
|
||||
* Version 65.5 [2/2]
|
||||
** DONE [#A] Fix database backup bug where running in celery task fails :bug:backups:celery:tasks:
|
||||
:PROPERTIES:
|
||||
|
||||
98
PROJECT.org
98
PROJECT.org
@ -18,7 +18,7 @@ tasks, Todoist tasks, web pages I've read and trails I've hiked has turned out
|
||||
to be sometimes cathartic and sometimes functional as I try to remember when I
|
||||
did a thing.
|
||||
|
||||
* Backlog [2/35] :vrobbler:project:personal:
|
||||
* Backlog [0/30] :vrobbler:project:personal:
|
||||
** TODO [#C] Configure IMAP folder/start in user profile :imap:settings:
|
||||
*** Description
|
||||
|
||||
@ -346,15 +346,11 @@ Last.FM timezone handling may not work 100% correctly. And maybe that's okay.
|
||||
}
|
||||
}
|
||||
#+end_src
|
||||
** TODO [#C] Allow auto trail tracking via email with Garmin LiveTrack URLs :trails:feature:
|
||||
:PROPERTIES:
|
||||
:ID: 133bcf71-078f-4efa-a029-1eae4b4d146d
|
||||
:END:
|
||||
** TODO [#C] Fix exporting so it works reliably :exporting:feature:
|
||||
|
||||
*** Description
|
||||
|
||||
The existing export function is very naieve. It runs in the web process, takes
|
||||
The existing export function is very naive. It runs in the web process, takes
|
||||
too long and just dumps tracks. We should make it more robust by creating one
|
||||
CSV file per scrobble media type and writing them into a zip file that gets
|
||||
placed in the media directory:
|
||||
@ -594,93 +590,3 @@ The Edit log form should have from top to bottom:
|
||||
- People (which should be similar to the Bird widget on BirdLocation and allow setting per user score, win true/false, rank, new true/false, seat_ordrer)
|
||||
- Expansion ids (which should a multi-select widget of expansions for this game)
|
||||
- Location (which should be a drop down of BoardGameLocations for this user)
|
||||
** DONE [#B] Add CSV endpoint for book scrobbles that LibraryThing can ingest :books:feature:export:
|
||||
:PROPERTIES:
|
||||
:ID: fd8a2778-ff46-394b-9868-edb9a48d0ce6
|
||||
:END:
|
||||
|
||||
|
||||
*** Description
|
||||
We should provide an "Export for LibraryThings" link on the Books list page
|
||||
which creates a CSV file of all books and tags for "in-progress" or "finished"
|
||||
depending on whether the book has been marked as finished.
|
||||
|
||||
[[https://www.librarything.com/LibraryThingSample.csv][Sample CSV file]]
|
||||
|
||||
*** Implementation
|
||||
|
||||
Added a `books:librarything_export` endpoint (a `LoginRequiredMixin` view) that
|
||||
streams a CSV matching the [[https://www.librarything.com/LibraryThingSample.csv][LibraryThing sample]]
|
||||
column layout (TITLE, AUTHOR (last, first), DATE, ISBN, PUBLICATION INFO, TAGS,
|
||||
RATING, REVIEW, DATE READ, PAGE COUNT, CALL NUMBER). The `TAGS` column is set to
|
||||
"in-progress" or "finished" based on the user's last scrobble's
|
||||
`long_play_complete` flag, `DATE READ` reflects that scrobble's timestamp when
|
||||
finished, author names are reformatted to "last, first", and the export is
|
||||
limited to books the user has scrobbled. The CSV logic lives in
|
||||
`books.utils.librarything_csv_rows()` with a `format_author_last_first()`
|
||||
helper; a link on the Books list page (`book_list.html`) triggers the download.
|
||||
|
||||
** DONE [#A] Fix recursive bug in backup script :backups:bug:
|
||||
:PROPERTIES:
|
||||
:ID: e986d35e-fc23-5d31-9d2a-0a95da4748a2
|
||||
:END:
|
||||
|
||||
#+begin_src python
|
||||
ERROR vrobbler.apps.scrobbles.tasks:808 backup_database backup_database: webdav upload failed: Client.mkdir() got an unexpected keyword argument 'recursive'
|
||||
WARNING vrobbler.apps.scrobbles.tasks:537 _cleanup_failed_backup backup_database: removed incomplete backup /var/backups/vrobbler-backup-2026_08_23.sql.gz
|
||||
ERROR vrobbler.apps.scrobbles.tasks:827 backup_database backup_database failed: Client.mkdir() got an unexpected keyword argument 'recursive'
|
||||
DEBUG urllib3.connectionpool:2075 _new_conn Starting new HTTPS connection (1): ntfy.unbl.ink:443
|
||||
#+end_src
|
||||
** DONE [#B] TODOIST_* variable names flagged as TODOs (false positives) :tasks:metadata:cleanup:
|
||||
:PROPERTIES:
|
||||
:ID: b2fd3053-ce26-4cdb-bf37-578387fef6c7
|
||||
:END:
|
||||
*** Description
|
||||
|
||||
Need to clean up how we store task data in logdata.
|
||||
|
||||
*** Implementation
|
||||
|
||||
Task logdata now uses generic, source-agnostic field names instead of
|
||||
per-source prefixed keys. `TaskLogData` gained `source_id`, `project_id`,
|
||||
`state` and `raw_data` (the full remaining source payload kept for future
|
||||
reference, matching the music track `raw_data` convention); the old
|
||||
`orgmode_id`/`orgmode_state`/`orgmode_properties`/
|
||||
`orgmode_drawers`/`orgmode_timestamps` and `todoist_id`/`todoist_project_id`
|
||||
keys are gone. The todoist and emacs scrobblers and webhooks normalize into the
|
||||
generic fields, and all `log__orgmode_id` / `log__todoist_id` lookups became
|
||||
`log__source_id`. `Task.source_url_for_user()` now reads `source_id` (fixing the
|
||||
`todist_id` typo and the never-matching log `source` check). New
|
||||
`convert_orgmode_task_log_to_generic` / `convert_todoist_task_log_to_generic`
|
||||
helpers (wired into the `convert_task_log_data` management command) migrate
|
||||
existing scrobble logs. The scrobble "Edit Log" form no longer renders the
|
||||
read-only fields (labels, source_id, project_id, state, raw_data) as disabled
|
||||
inputs — they are excluded from the form and preserved on save — and the form
|
||||
now defaults to being toggled open. Task labels render as read-only badges in
|
||||
the detail view instead.
|
||||
|
||||
- Files:
|
||||
- ~vrobbler/settings.py~ (lines 108-109) -- =TODOIST_CLIENT_ID=, =TODOIST_CLIENT_SECRET=
|
||||
- ~vrobbler/apps/scrobbles/constants.py~ (line 74) -- =TODOIST_TASK_URL=
|
||||
- These are variable/constant names for the Todoist integration, not actual
|
||||
TODOs. No action needed, but worth noting they show up in searches.
|
||||
*** Agent description
|
||||
|
||||
Task logdata now uses generic, source-agnostic field names instead of
|
||||
per-source prefixed keys. `TaskLogData` gained `source_id`, `project_id`,
|
||||
`state` and `raw_data` (the full remaining source payload kept for future
|
||||
reference, matching the music track `raw_data` convention); the old `orgmode_*`
|
||||
and `todoist_*` keys are gone. The todoist and emacs scrobblers and webhooks
|
||||
normalize into the generic fields, and all `log__orgmode_id` / `log__todoist_id`
|
||||
lookups became `log__source_id`. `Task.source_url_for_user()` now reads
|
||||
`source_id` (fixing the `todist_id` typo and the never-matching log `source`
|
||||
check). New `convert_orgmode_task_log_to_generic` /
|
||||
`convert_todoist_task_log_to_generic` helpers (wired into the
|
||||
`convert_task_log_data` management command) migrate existing scrobble logs.
|
||||
The scrobble "Edit Log" form no longer renders the read-only fields (labels,
|
||||
source_id, project_id, state, raw_data) as disabled inputs — they are excluded
|
||||
from the form and preserved on save — and the form now defaults to being
|
||||
toggled open. Task labels render as read-only badges in the detail view
|
||||
instead.
|
||||
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "vrobbler"
|
||||
version = "65.5"
|
||||
version = "65.6"
|
||||
description = ""
|
||||
authors = ["Colin Powell <colin@unbl.ink>"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user