From ae9a70fb04a52dbeaef66c0163f3a7755cf7a5e0 Mon Sep 17 00:00:00 2001 From: Hellow2 Date: Tue, 31 Jan 2023 09:53:05 +0100 Subject: [PATCH] fixed issue with date formats and the database --- src/music_kraken/database/database.py | 13 +++++---- src/music_kraken/database/objects/metadata.py | 25 +++++++++++++----- src/music_kraken/database/objects/song.py | 2 ++ src/music_kraken/static_files/new_db.sql | 1 + test.db | Bin 65536 -> 65536 bytes 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/music_kraken/database/database.py b/src/music_kraken/database/database.py index ddc211b..8cbe196 100644 --- a/src/music_kraken/database/database.py +++ b/src/music_kraken/database/database.py @@ -44,12 +44,12 @@ FROM Lyrics WHERE {where}; """ ALBUM_QUERY_UNJOINED = """ -SELECT Album.id AS album_id, title, label, album_status, language, date, country, barcode, albumsort, is_split +SELECT Album.id AS album_id, title, label, album_status, language, date, date_format, country, barcode, albumsort, is_split FROM Album WHERE {where}; """ ALBUM_QUERY_JOINED = """ -SELECT a.id AS album_id, a.title, a.label, a.album_status, a.language, a.date, a.country, a.barcode, a.albumsort, a.is_split +SELECT a.id AS album_id, a.title, a.label, a.album_status, a.language, a.date, a.date_format, a.country, a.barcode, a.albumsort, a.is_split FROM Song INNER JOIN Album a ON Song.album_id=a.id WHERE {where}; @@ -136,7 +136,9 @@ class Database: def push_album(self, album: Album): table = "Album" - query = f"INSERT OR REPLACE INTO {table} (id, title, label, album_status, language, date, country, barcode, albumsort, is_split) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" + query = f"INSERT OR REPLACE INTO {table} (id, title, label, album_status, language, date, date_format, country, barcode, albumsort, is_split) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" + + date_format, date = album.date.get_timestamp_w_format() values = ( album.id, @@ -144,7 +146,8 @@ class Database: album.label, album.album_status, album.iso_639_2_language, - album.date.strftime("%Y-%m-%d"), + date, + date_format, album.country, album.barcode, album.albumsort, @@ -583,7 +586,7 @@ class Database: label=album_result['label'], album_status=album_result['album_status'], language=language, - date=ID3Timestamp.strptime(album_result['date'], "%Y-%m-%d"), + date=ID3Timestamp.strptime(album_result['date'], album_result['date_format']), country=album_result['country'], barcode=album_result['barcode'], is_split=album_result['is_split'], diff --git a/src/music_kraken/database/objects/metadata.py b/src/music_kraken/database/objects/metadata.py index 5ffe146..c14ed85 100644 --- a/src/music_kraken/database/objects/metadata.py +++ b/src/music_kraken/database/objects/metadata.py @@ -142,7 +142,7 @@ class ID3Timestamp: second=second ) - def get_timestamp(self) -> str: + def get_time_format(self) -> str: """ https://mutagen-specs.readthedocs.io/en/latest/id3/id3v2.4.0-structure.html @@ -165,19 +165,30 @@ class ID3Timestamp: """ if self.has_year and self.has_month and self.has_day and self.has_hour and self.has_minute and self.has_second: - return self.date_obj.strftime("%Y-%m-%dT%H:%M:%S") + return "%Y-%m-%dT%H:%M:%S" if self.has_year and self.has_month and self.has_day and self.has_hour and self.has_minute: - return self.date_obj.strftime("%Y-%m-%dT%H:%M") + return "%Y-%m-%dT%H:%M" if self.has_year and self.has_month and self.has_day and self.has_hour: - return self.date_obj.strftime("%Y-%m-%dT%H") + return "%Y-%m-%dT%H" if self.has_year and self.has_month and self.has_day: - return self.date_obj.strftime("%Y-%m-%d") + return "%Y-%m-%d" if self.has_year and self.has_month: - return self.date_obj.strftime("%Y-%m") + return "%Y-%m" if self.has_year: - return self.date_obj.strftime("%Y") + return "%Y" return "" + + def get_timestamp(self) -> str: + time_format = self.get_time_format() + return self.date_obj.strftime(time_format) + + + def get_timestamp_w_format(self) -> Tuple[str, str]: + time_format = self.get_time_format() + return time_format, self.date_obj.strftime(time_format) + + @classmethod def strptime(cls, time_stamp: str, format: str): """ diff --git a/src/music_kraken/database/objects/song.py b/src/music_kraken/database/objects/song.py index c2a7166..1feb08e 100644 --- a/src/music_kraken/database/objects/song.py +++ b/src/music_kraken/database/objects/song.py @@ -269,6 +269,8 @@ class Album(DatabaseObject, SourceAttribute, MetadataAttribute): self.label = label self.language: pycountry.Languages = language self.date: ID3Timestamp = date + if date is None: + self.date = ID3Timestamp() self.country: str = country """ TODO diff --git a/src/music_kraken/static_files/new_db.sql b/src/music_kraken/static_files/new_db.sql index 7210dc0..fd9cd0d 100644 --- a/src/music_kraken/static_files/new_db.sql +++ b/src/music_kraken/static_files/new_db.sql @@ -32,6 +32,7 @@ CREATE TABLE Album album_status TEXT, language TEXT, date TEXT, + date_format TEXT, country TEXT, barcode TEXT, albumsort INT, diff --git a/test.db b/test.db index 5d1897045b6fd09e211a857b7b0412db085650c1..f30bb9618315b5b409b7a1741b70dc4cc62117ad 100644 GIT binary patch delta 1054 zcma)4-%Aux6uz@}MrYRDIV&QIDY!wQkmJseJ3Dh9LJ}m29wJ$+KxKZWu08vpoA z0(C6)3=g0VG&p`G4TlI?CXxII)>CWpWZSvas`M-QGxqQr|JZg?PJ%*yYtCmF`U5rQLD@B^|f7)vZQ&7OHVgWwtT%PVqbwLK%7b>O99 zmexB(3Ht^K)lhd8TMG<@=uW8EhN>y1uNRzJnjwZg(+E>A7hHVEsc&i-EPqIFJ`kQ;cOK~-G|Jwg@Y+NwfB8Yl&u=(ZgY z%~R>}lc7r^|F9Y+Q4LEcHm&2tUnV2)bjD^XRuI|>aRSz>XGD=va5ZXbnrcN%i~nW1 z#)-vF+RbJT4b?P#BUC(#x(d-WjZJR{3UwTZdbX`HPd?H_m$lYmuzsm zzabg-wS!=XF@J&HjszCYBJ@FcCms7E7x_1)IY4m0l6Igoi3KjsNyPPg2=*BC6}r+K aj|Gvn9OE&(k6@p{-#|`r7z<2}82tlGd>0k~ delta 2206 zcma)7&2Jk;9No3!)Xs;e0VPo>hmA@>C`>%Nv%9m4L?dX0NaCu{XlVr^(d>LQPVBYi zwX3v|>ZB3s!56Gt5GPa)Tymm+1Oh6!^@2c1g#(xLS~xMg2~t&1vOcUenveJ9{oe1* z_V&>B_Rwc9ZH88xXmHXhQu^-DTqZh`$8kriM82P>QLg~+9 zT>RtIwc*VN6Q>Uf4_1c19V&%|Q`6Ja`lsji=0+bsm>v5$KXh9Ix7CUk=AKKEVkW!4G=lKqGnHhRiekf{@aY=}lq5eB-!dPzByPaAy3YOur z`4RMeh}6%_eUW=_*|^wj3+ZC%+gzvvkp*o_aOiu;g%r7=Jz)}T`(`+zX_^imY2cBf z^$>Wk=Yw1pI{K4wwKHGd(!kB~R{5#g-5nn)|E>Ks7;Ne4v)Q}dUn&NZXP1hlKqAwY zmdznYmV`DY82X{dp&P1ea?f@UbK+)n<5siV>4svh(`m(TRx0UmE)*3mqnOk6`r5|& zTFkTX+v@kK3jNF#h0biseIjg#Y)7G+NI+jQ3UMg8Z<`EJDH8NXH?GNB|AN<}xlXgi zsAu3l_PS&J&BMTkX`dgZ}gRWEQC>?_sZ2l@wt z!MR>ixGWbfJWNZRp&*4Hl9gGw7rq}ar9Qf^f%}Tn=V0yQ-Dos`v)YR@YNB|o6_1>F zB@)KFwTRY@w^`zA)@>NAc9VD0Q7obxrti5BVTjD&`TT( zdUtl4g<$@z03+YGEH{M2GBLEBP&t&Vq2mx{QqL07CY7~jLsaUt9UmH^l9*<$(Zc_k zxO2GRWT%W#`G0rG!bX4c+)g)DAw!fL_HGW$XkZ5HDILBp>yHP6Mz4AAlR|KLA`p&a zVcS!F<;;Y371lKii9Xw1mo&a=IaGE^1K$7+rWCIt=vDJWK~TzK efh-`^oI0(T<+LLiHjb@hRnK}{7On1odHNsM>tf0P