Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DiscoDOS 3.0 - Sales, Import, Collection, Massive Refactor #22

Merged
merged 220 commits into from
Dec 30, 2024
Merged
Changes from 1 commit
Commits
Show all changes
220 commits
Select commit Hold shift + click to select a range
312f1c0
Add sold field to release table and fix code format
JOJ0 Oct 27, 2024
cef1536
Add optional orderby for model get_all_db_releases
JOJ0 Oct 27, 2024
ac8b815
Implement dsc ls command (list releases)
JOJ0 Oct 27, 2024
f572fd0
Migrate import to cmd group and subcmd name detail
JOJ0 Oct 27, 2024
5a8bd37
Split out single release import to separate command
JOJ0 Oct 27, 2024
eab6b46
Split out initial/basic import to separate subcmd
JOJ0 Oct 27, 2024
c3a25fb
Add typical workflow to import cmd group help
JOJ0 Oct 27, 2024
8ed2c61
Update and fix import details help
JOJ0 Oct 28, 2024
890b65d
Add sales table to schema upgrade tasks
JOJ0 Nov 1, 2024
38a5a23
Implement sales inventory import
JOJ0 Nov 1, 2024
7aca3d1
Format a comment in model_collection
JOJ0 Nov 1, 2024
af07834
Refactor database _select_simple and support join
JOJ0 Nov 1, 2024
fd297b0
Show sales inv ID in ls command
JOJ0 Nov 2, 2024
b554269
Restructure ctrl
JOJ0 Nov 2, 2024
a6f0753
Rename ctrl classes to PascalCase
JOJ0 Nov 2, 2024
4febb38
Sort imports in view modules
JOJ0 Nov 2, 2024
f0be036
Rename view classes to PascalCase
JOJ0 Nov 2, 2024
11cdd2b
Rename HeadersList and mark in docstring unused
JOJ0 Nov 2, 2024
1f5473a
Finish renaming view classes to PascalCase
JOJ0 Nov 2, 2024
e40ba17
Restructure view to separate package
JOJ0 Nov 2, 2024
e834a07
Fix all linting in view/mix
JOJ0 Nov 2, 2024
12bca55
Add rich based progess display to sales import
JOJ0 Nov 3, 2024
2934f7f
Linting fixes in main command and reword help
JOJ0 Nov 3, 2024
d013aeb
New config option enable_tui
JOJ0 Nov 3, 2024
cd3d0a9
First draft of ls cmd table display with Textual
JOJ0 Nov 3, 2024
87de257
Draft a get_sales_listing method in Collection
JOJ0 Nov 3, 2024
0a526ec
Clean up messy Collection init and discogs_connect
JOJ0 Nov 3, 2024
445d76d
Remove unused method in Database, add docstr
JOJ0 Nov 3, 2024
ca8ff12
Format entire Database class with black
JOJ0 Nov 3, 2024
5e55d8e
Fix or disable all pylint issues in Collection
JOJ0 Nov 3, 2024
1b95d7b
Quickfix missing db records issue on brainz match
JOJ0 Nov 3, 2024
f92c71b
Move discogs_connect to mixin class
JOJ0 Nov 3, 2024
5ebe80f
Move DiscoDOSListApp to controller and fix .me
JOJ0 Nov 4, 2024
735a924
Improve me and d properties in Collection Controller
JOJ0 Nov 4, 2024
aef5fb0
Textual table fetch sales details on cell enter key
JOJ0 Nov 4, 2024
0347134
Huge Collection reorder and DiscogsMixin movals
JOJ0 Nov 4, 2024
f29d0cd
Finally use collection_item for is_in_d_coll
JOJ0 Nov 4, 2024
b9bc364
Refactor import_release, is_in_d_coll, get_d_release
JOJ0 Nov 5, 2024
b456a2c
dsc import release Rich Progress dspl
JOJ0 Nov 5, 2024
8b52641
Refactor import_collection and add Rich Progress
JOJ0 Nov 5, 2024
8e918cc
Quickfix import_collection progress warnings mess
JOJ0 Nov 6, 2024
2d8af1b
Cleanup DiscodosListApp
JOJ0 Nov 6, 2024
00be0dd
ListApp info panel 3 equal columns layout
JOJ0 Nov 6, 2024
32c7378
Finally really get a decent 3 column layout
JOJ0 Nov 6, 2024
2312bc6
Big fat sales price display
JOJ0 Nov 6, 2024
bd64fc2
Finally fetch all listing data to left most column
JOJ0 Nov 6, 2024
37abc7e
Sales import fetches and saves all avilable data
JOJ0 Nov 7, 2024
6161823
Fix exception in discogs_connect when self.me
JOJ0 Nov 7, 2024
f6e4959
Prettify Is in Coll. column in dsc ls table
JOJ0 Nov 7, 2024
6241ebf
Fix dups issue and add sales status to dsc ls
JOJ0 Nov 7, 2024
723db90
Textual table to instance var and fix layout
JOJ0 Nov 7, 2024
45437ed
Rebuild dsc ls Textual layout using contexts
JOJ0 Nov 7, 2024
64f211f
Huge restructure, model package, imports sorting,
JOJ0 Nov 8, 2024
e3ead3f
Fix and sort test package imports
JOJ0 Nov 8, 2024
0f2ba63
Fetch cell values via row select
JOJ0 Nov 9, 2024
623160e
Refactor database._select()
JOJ0 Nov 10, 2024
7543aef
Marketplace listing details from DB or Discogs
JOJ0 Nov 10, 2024
ed2f926
Sizing of upper/lower/log panels
JOJ0 Nov 10, 2024
9952755
Reorder DiscodosListApp methods and rename
JOJ0 Nov 11, 2024
d1b9471
Implement dsc sell
JOJ0 Nov 11, 2024
ea178d7
Refactor d_artists_parse, some linting in DiscogsMixin
JOJ0 Nov 12, 2024
c3d63f6
Useless efforts on _select error handling improvements
JOJ0 Nov 12, 2024
b08252f
Fix dsc ls crashes on fetch_marked/listing (enter)
JOJ0 Nov 12, 2024
dbe379f
Fix dsc ls crashes on initial load when unlisted
JOJ0 Nov 12, 2024
f2b5438
Further improve logic when to fetch_listing/market
JOJ0 Nov 12, 2024
2e37a1d
Fix missing near mint in fetch_price_suggestion
JOJ0 Nov 12, 2024
63eb39e
Render release/listing URLs as rich markdown links
JOJ0 Nov 12, 2024
15c0d8e
Use rich print throughout discodos
JOJ0 Nov 16, 2024
4cf22e1
Fix terminal behaviour after Textual exit
JOJ0 Nov 17, 2024
a123178
Sales import save sold state, catch JSONDecodError
JOJ0 Nov 17, 2024
09a17a9
Further improve and fix database logging
JOJ0 Nov 17, 2024
c3320cb
Prettify key_value_search_releases result via ViewCommon
JOJ0 Nov 17, 2024
28d3877
dsc ls toggle sold key binding, no refresh
JOJ0 Nov 18, 2024
6be7d37
Remove workaroun: terminal issue after Textual quit
JOJ0 Nov 18, 2024
0bf5257
Rename db method to get_release_by_id
JOJ0 Nov 18, 2024
6a109ee
Implement dsc ls "mark sold in db" toggle,
JOJ0 Nov 18, 2024
5aa536f
Logging improvements in Brainz* magic
JOJ0 Nov 18, 2024
13b051c
One rich Progress for sales/basic/details imports
JOJ0 Nov 19, 2024
419882e
One custom_progress definition for sales/details imports
JOJ0 Nov 19, 2024
b1d1455
Implement --resume for details -u update
JOJ0 Nov 20, 2024
05e241a
dsc sell query discogs/db with arbitrary args
JOJ0 Nov 20, 2024
12882d0
Also catch other exceptions while sales importing
JOJ0 Nov 20, 2024
70b6c0c
Improve sell command and move two_column_view
JOJ0 Nov 21, 2024
fe0c235
dsc ls sales stats error handling when offline
JOJ0 Nov 21, 2024
e01901e
Overengineer fetch stats/listing error handling
JOJ0 Nov 22, 2024
2a51718
Remove redundant rich progress from ctrl.collection
JOJ0 Nov 22, 2024
a01e64c
Finally implement a remove/delete release command
JOJ0 Nov 22, 2024
1b8f30a
Many import release cmd improvements
JOJ0 Nov 23, 2024
91a0aee
An edit sales listing via dsc ls TUI draft
JOJ0 Nov 24, 2024
cbb138d
Improve for sale list wizard with videos and panels
JOJ0 Nov 24, 2024
a5d13d2
Split column initializations in ViewCommon
JOJ0 Nov 25, 2024
b160b8a
Sort/Order view.collection/common helpers
JOJ0 Nov 25, 2024
f3dc2bb
Use TableDefaults magic with key_value_search/TUI
JOJ0 Nov 25, 2024
2fd7c1b
Final list_for_sale wizard layouts and error handling
JOJ0 Nov 25, 2024
3689a01
sell cmd, sleeves, less prompts, offers fix attempt
JOJ0 Nov 25, 2024
8f0106b
A quick import listing commmand
JOJ0 Nov 25, 2024
3177135
Import listing to DB after CLI wizard successful
JOJ0 Nov 25, 2024
8b004b9
Implement discogs url/id regex in search_release_online
JOJ0 Nov 25, 2024
85331a8
Also suggest actually wanted condition in wizard
JOJ0 Nov 26, 2024
d72a590
Implement a basic edit listing command
JOJ0 Nov 27, 2024
660ecd3
Fix dsc ls (CLI version) by using TableDefaults
JOJ0 Nov 30, 2024
b537ea9
Finalize condition/status choices handling utils
JOJ0 Nov 30, 2024
1f34d2d
dsc ls EditScreens gets current and saves
JOJ0 Dec 2, 2024
fe1dd5d
Mark sold on import sales when location comments
JOJ0 Dec 2, 2024
b9e9555
Implement dsc clean sales command
JOJ0 Dec 4, 2024
9db632e
Tiny progress fix in import sales command
JOJ0 Dec 4, 2024
c6abb18
New table collection in Db_setup
JOJ0 Dec 7, 2024
8932d4d
Implement import release collection table support
JOJ0 Dec 7, 2024
a6dc3cb
Refactor import release to use helper
JOJ0 Dec 7, 2024
1fd6fc8
Broken commit create_collection_item on import basic
JOJ0 Dec 8, 2024
94198aa
Fix missing location in key_value_search_release
JOJ0 Dec 8, 2024
be9bdfb
Implement import release accept Discogs URL
JOJ0 Dec 8, 2024
3470e59
Support --order-by in dsc ls command (asc)
JOJ0 Dec 8, 2024
36a0081
dsc sell prompts for sleeve
JOJ0 Dec 8, 2024
6535044
Fix dsc ls orderby, fix coll. table d_coll_notes
JOJ0 Dec 9, 2024
4abee4e
Finally implement update cell on TUI listing edit
JOJ0 Dec 10, 2024
36ecd90
Rename dsc ls key_val_search captions,shortcuts
JOJ0 Dec 10, 2024
1a44772
Support shortcuts for dsc ls --order-by
JOJ0 Dec 10, 2024
c709b14
Add price column to dsc ls tui
JOJ0 Dec 10, 2024
31f2477
Invent a --light option for dsc import sales
JOJ0 Dec 10, 2024
bcdbb5e
Better help for dsc ls
JOJ0 Dec 11, 2024
b432d75
dsc ls fix crash when trying to add non-listed release
JOJ0 Dec 11, 2024
72b69d7
dsc ls add currently-for-sale link
JOJ0 Dec 11, 2024
dee8f87
dsc ls add price suggestion (VG+) on Return key
JOJ0 Dec 11, 2024
d66d9bb
dsc import sales (light) include allow_offers
JOJ0 Dec 11, 2024
693af63
dsc ls fix empty comments field
JOJ0 Dec 11, 2024
1746ba3
dsc ls use TableDefaults magic for sales_listing_details
JOJ0 Dec 11, 2024
9500713
Support overriding enable_tui config via --tui flag
JOJ0 Dec 12, 2024
745bd23
dsc ls shorten Is In Collection column caption
JOJ0 Dec 12, 2024
1e2ae95
Rename dsc ls (all) cmd to dsc ls links
JOJ0 Dec 12, 2024
1bd6120
Bring back get_all_db_releases model
JOJ0 Dec 12, 2024
8cd6fc1
Fix sales listing magic in hyperlinks helper
JOJ0 Dec 12, 2024
8de57e9
Improve dsc clean sales
JOJ0 Dec 13, 2024
0ef12a8
Display listing ID after sell wizard
JOJ0 Dec 13, 2024
0670a7f
Improve edit sales listing CLI flag
JOJ0 Dec 14, 2024
5e30081
Finally implement long awaited dsc clean collection
JOJ0 Dec 14, 2024
bc170d3
ls TUI remove not yet implemented bindings and methods
JOJ0 Dec 15, 2024
7bf88f1
ls TUI fetch videos with keystroke
JOJ0 Dec 15, 2024
864fa72
Fix renamed arg in update_sales_listing TUI on_save
JOJ0 Dec 15, 2024
3521c7a
Rename comments_private, Separate listing details
JOJ0 Dec 15, 2024
29d8968
Refactor import release -a and support URL
JOJ0 Dec 15, 2024
38ffcae
Fix col key on TUI set sold keystroke
JOJ0 Dec 15, 2024
3eb18dc
Fix dsc ls crash when only only one in list
JOJ0 Dec 16, 2024
e94a14e
dsc import release -d support URL
JOJ0 Dec 16, 2024
15a71ee
Remove redundant stats_releases_total (copy/paste err)
JOJ0 Dec 16, 2024
213050c
Implement dsc import sales --delete
JOJ0 Dec 16, 2024
be1808c
dsc ls fix fallback to title in key/val search
JOJ0 Dec 16, 2024
08b453c
Finally support abbreviated commands
JOJ0 Dec 17, 2024
c71ccdd
Finally split import commands into tracks,brainz
JOJ0 Dec 17, 2024
396de73
Use sphinx-click and pydata theme for docs
JOJ0 Dec 18, 2024
fff43e1
pip freeze to sphinx_requirements.txt
JOJ0 Dec 18, 2024
bca8d28
More docs nav headers, reorder chapters
JOJ0 Dec 18, 2024
ff507ef
Fix installation guide by moving venv chapters over
JOJ0 Dec 18, 2024
d1937b5
Remove commands chart chapter and rename basic tutorial chapter
JOJ0 Dec 18, 2024
33833e1
Quickfix MANUAL
JOJ0 Dec 18, 2024
6eeb858
Remove skip chapter in Windows install
JOJ0 Dec 18, 2024
e7d5fb8
Disable section nav except for reference
JOJ0 Dec 18, 2024
f05b0f0
Remove everything is in-detail on manual first paragraph
JOJ0 Dec 18, 2024
1501639
Fix to Contributing headline
JOJ0 Dec 18, 2024
a882499
A note on commands abbreviations in manual
JOJ0 Dec 19, 2024
7aed691
Fix/shorten installation doc
JOJ0 Dec 20, 2024
bc29dca
Decide to remove TOCs everywhere
JOJ0 Dec 20, 2024
343499e
Quickly fix quickstart doc
JOJ0 Dec 20, 2024
dd50c1e
dsc sell cmd final fixes options/defaults/help
JOJ0 Dec 21, 2024
a593415
dsc sell chapter to quickstart and tiny reference/index fixes
JOJ0 Dec 21, 2024
599e58c
Rework search command chapter
JOJ0 Dec 22, 2024
cd5fb96
Fix link to import quickstart in install doc
JOJ0 Dec 22, 2024
b1f5ebb
Rework manual, reorder, add new features
JOJ0 Dec 22, 2024
bfbad8a
Rework README
JOJ0 Dec 22, 2024
473a09e
Fixes in AcousticBrainz chapter
JOJ0 Dec 22, 2024
6876d99
Fix dsc ls Video panel headline
JOJ0 Dec 23, 2024
cae1597
Change print/log helper default to always log INFO
JOJ0 Dec 23, 2024
9b4bd40
Fix dsc import listing -d logic
JOJ0 Dec 23, 2024
52f0f24
dsc ls fix updating table row after listing edit
JOJ0 Dec 23, 2024
229a229
Improve dsc clean collection output if orphaned
JOJ0 Dec 24, 2024
18b289e
Revert "dsc ls fix fallback to title in key/val search"
JOJ0 Dec 25, 2024
f559795
Support disabling log in ViewCommonCommandline.p()
JOJ0 Dec 25, 2024
a92557e
Attempt to improve sold logic by moving to collection
JOJ0 Dec 25, 2024
ca2f7d6
_select_simple UNION and use with key/val
JOJ0 Dec 26, 2024
d093897
dsc ls support reverse order and finally also
JOJ0 Dec 26, 2024
1c4733e
Use trim_table_fields with dsc ls --no-tui
JOJ0 Dec 26, 2024
0807fa9
Refactor trim_table_fields pythonic
JOJ0 Dec 26, 2024
bdd6b7a
Useless add JOIN release key/val SELECT
JOJ0 Dec 26, 2024
81d6e0c
dsc ls 'sales-only-releases-display' configurable
JOJ0 Dec 26, 2024
8725351
Fix ambigous sold field in cols_key_value_search defaults
JOJ0 Dec 26, 2024
7296b22
gitignore wip/ dir
JOJ0 Dec 27, 2024
344b59c
Database schema changes for sold/coll-logic rework
JOJ0 Dec 27, 2024
edd1f91
Reorder methods in ctrl.collection module
JOJ0 Dec 27, 2024
b8d2867
Remove in_d_coll handling in create_release
JOJ0 Dec 27, 2024
ab39564
Fix release/collection import
JOJ0 Dec 27, 2024
d6967e2
Fix sales import
JOJ0 Dec 27, 2024
ba89e0e
Fix sales import performance
JOJ0 Dec 27, 2024
5d6055c
Log level cleanup: Change a lot to debug
JOJ0 Dec 28, 2024
0468ca3
Rename to fetch_discogs_rlease (was get_d_release)
JOJ0 Dec 28, 2024
8eace66
Support non-coll-item release creation with helper
JOJ0 Dec 28, 2024
666bd00
Implement collection/sales sold flag separation
JOJ0 Dec 28, 2024
5c4f56b
dsc ls change order of sold,listing,status fields
JOJ0 Dec 28, 2024
c041072
Draft fix collection status field...
JOJ0 Dec 28, 2024
bca1e7e
Fix return type in get_coll_item_by_release
JOJ0 Dec 28, 2024
264d315
Fix ls update sales after edit, use col_keys, not ID
JOJ0 Dec 28, 2024
fced962
ls also update listing details panel after edit
JOJ0 Dec 28, 2024
060b088
Rename in_d_collection to in_d prevent confusion
JOJ0 Dec 28, 2024
c177a15
Prevent help/notes on non-interactive import listing
JOJ0 Dec 29, 2024
9d9af5f
Centralize rlog in ls TUI
JOJ0 Dec 29, 2024
c42c1f5
ls add release URL to column_right panel
JOJ0 Dec 29, 2024
1c509d6
Prettify ls TUI, links, clutter, loads of things
JOJ0 Dec 29, 2024
86295f8
Finally fix ls -a being not entirely "explanatory"
JOJ0 Dec 29, 2024
81039a5
Continue writing Technicalities docs chapter
JOJ0 Dec 29, 2024
4dca1cd
Support handle_listing in single listing import
JOJ0 Dec 29, 2024
17772ea
import release orphane coll items
JOJ0 Dec 30, 2024
aa069c3
import collection mark orphaned, prettify final report
JOJ0 Dec 30, 2024
e00c99e
For now, disable collection-sales JOIN magic
JOJ0 Dec 30, 2024
b165c9e
Remove docs collection sold chapter
JOJ0 Dec 30, 2024
442d6a9
In create_coll_i helper ensure types for comparision
JOJ0 Dec 30, 2024
ece0ae6
Fix regression from sold/Sold change, now really fixed
JOJ0 Dec 30, 2024
6517266
dsc ls patch out toggle_sold but leave dead code
JOJ0 Dec 30, 2024
0d3ce02
Final auto-marked sold chapter docs fixes
JOJ0 Dec 30, 2024
6e13696
Fix dsc ls fetch videos log message
JOJ0 Dec 30, 2024
fc3c83c
Final dsc ls and dsc links documentation
JOJ0 Dec 30, 2024
aad2100
Final README edits for release
JOJ0 Dec 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
dsc ls sales stats error handling when offline
JOJ0 committed Dec 14, 2024
commit fe0c2351bd47bf8074c0eb7f15d703d02aba2035
7 changes: 7 additions & 0 deletions discodos/ctrl/tui.py
Original file line number Diff line number Diff line change
@@ -169,19 +169,26 @@ def on_data_table_row_selected(self, event):
listing_id = self.table.get_cell(row_key, "forsale")
if listing_id:
listing = self.fetch_sales_listing_details(listing_id)
if not listing:
rlog.write("Not online.")
return
self.left_column_content.update(
self.cli.two_column_view(listing, translate_keys=self.key_translation)
)
self._sales_digits_update(listing)
# Stats - we fetch always
release_id = self.table.get_cell(row_key, "release_id")
stats = self.fetch_marketplace_stats(release_id)
if not stats: # On Exciption return
rlog.write("Not online.")
return
self.middle_column_content.update(self.cli.two_column_view(stats))
rlog.write(
f"Updated price, marketplace stats and details of listing {listing_id} "
"with Discogs data."
)


# Helpers

def _load_rows_into_table(self):
58 changes: 33 additions & 25 deletions discodos/model/discogs.py
Original file line number Diff line number Diff line change
@@ -174,33 +174,41 @@ def stats_releases_d_collection_online(self):

def fetch_sales_listing_details(self, listing_id):
"""Fetches details like price for a Discogs marketplace listing."""
listing = self.d.listing(listing_id)
l = {
"d_sales_release_id": listing.release.id,
"d_sales_release_url": listing.release.url,
"d_sales_url": listing.url,
"d_sales_condition": listing.condition,
"d_sales_sleeve_condition": listing.sleeve_condition,
"d_sales_price": str(listing.price.value),
"d_sales_comments": listing.comments,
"d_sales_allow_offers": listing.allow_offers,
"d_sales_status": listing.status,
"d_sales_comments_private": listing.external_id,
"d_sales_counts_as": str(listing.format_quantity),
"d_sales_location": listing.location,
"d_sales_weight": str(listing.weight),
"d_sales_posted": listing.posted,
}
return l if l else None
try:
listing = self.d.listing(listing_id)
l = {
"d_sales_release_id": listing.release.id,
"d_sales_release_url": listing.release.url,
"d_sales_url": listing.url,
"d_sales_condition": listing.condition,
"d_sales_sleeve_condition": listing.sleeve_condition,
"d_sales_price": str(listing.price.value),
"d_sales_comments": listing.comments,
"d_sales_allow_offers": listing.allow_offers,
"d_sales_status": listing.status,
"d_sales_comments_private": listing.external_id,
"d_sales_counts_as": str(listing.format_quantity),
"d_sales_location": listing.location,
"d_sales_weight": str(listing.weight),
"d_sales_posted": listing.posted,
}
return l if l else None
except Exception as e:
log.debug("Not online. %s", e)
return None

def fetch_marketplace_stats(self, release_id):
release = self.d.release(release_id)
r = {
"lowest_price": str(release.marketplace_stats.lowest_price.value),
"num_for_sale": str(release.marketplace_stats.num_for_sale),
"blocked_from_sale": str(release.marketplace_stats.blocked_from_sale),
}
return r if r else None
try:
release = self.d.release(release_id)
r = {
"lowest_price": str(release.marketplace_stats.lowest_price.value),
"num_for_sale": str(release.marketplace_stats.num_for_sale),
"blocked_from_sale": str(release.marketplace_stats.blocked_from_sale),
}
return r if r else None
except Exception as e:
log.debug("Not online. %s", e)
return None

def fetch_price_suggestion(self, release_id, condition):
if isinstance(release_id, Release):