From a7cd85b11bcb586cf68df7eb4dc9e6c0045ba018 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Fri, 11 Jun 2021 15:43:57 +0000 Subject: [PATCH] deploy: 4fc4676041b8d9d908030f6da48346eb58075ad3 --- .doctrees/environment.pickle | Bin 71033 -> 84491 bytes .doctrees/index.doctree | Bin 8141 -> 8166 bytes .doctrees/src/MusicTools.MusicTools.doctree | Bin 0 -> 9126 bytes .doctrees/src/MusicTools.Playlist.doctree | Bin 0 -> 79326 bytes .doctrees/src/MusicTools.Tag.doctree | Bin 0 -> 23490 bytes .doctrees/src/MusicTools.doctree | Bin 0 -> 3004 bytes .doctrees/src/modules.doctree | Bin 2645 -> 2669 bytes _sources/index.rst.txt | 1 + _sources/src/MusicTools.MusicTools.rst.txt | 6 + _sources/src/MusicTools.Playlist.rst.txt | 61 +++ _sources/src/MusicTools.Tag.rst.txt | 30 ++ _sources/src/MusicTools.rst.txt | 13 + _sources/src/modules.rst.txt | 1 + genindex.html | 125 ++++- index.html | 2 + objects.inv | Bin 1776 -> 2210 bytes py-modindex.html | 1 + search.html | 1 + searchindex.js | 2 +- src/MusicTools.MusicTools.html | 158 ++++++ src/MusicTools.Playlist.html | 541 ++++++++++++++++++++ src/MusicTools.Tag.html | 240 +++++++++ src/MusicTools.html | 142 +++++ src/modules.html | 23 + src/music.api.html | 5 +- src/music.auth.html | 5 +- src/music.cloud.html | 5 +- src/music.db.html | 5 +- src/music.html | 1 + src/music.model.html | 5 +- src/music.tasks.html | 7 +- 31 files changed, 1357 insertions(+), 23 deletions(-) create mode 100644 .doctrees/src/MusicTools.MusicTools.doctree create mode 100644 .doctrees/src/MusicTools.Playlist.doctree create mode 100644 .doctrees/src/MusicTools.Tag.doctree create mode 100644 .doctrees/src/MusicTools.doctree create mode 100644 _sources/src/MusicTools.MusicTools.rst.txt create mode 100644 _sources/src/MusicTools.Playlist.rst.txt create mode 100644 _sources/src/MusicTools.Tag.rst.txt create mode 100644 _sources/src/MusicTools.rst.txt create mode 100644 src/MusicTools.MusicTools.html create mode 100644 src/MusicTools.Playlist.html create mode 100644 src/MusicTools.Tag.html create mode 100644 src/MusicTools.html diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index d177da95d1c17a48b8090d556f8baf237a9edfca..68585df66a28e53d7775d9ceece3c40d4030e87e 100644 GIT binary patch literal 84491 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 delta 1313 zcma)+Ur19?9LIOIJLh#{f38huZg+EC zbHm!lE6=%UH7u$N;gfn4wZcWsYeXQMt3rPG=qQFNUIzj0sI~{^V+?a#(0(_J%ki+B z6_mQ9pyc;Sok}xetKkj_9tn9cVc;w#DoEIlHQ0eGu-Gg>m-big(-7M`wP($`+@GOW zo1*b@FBZMw4%`b9nK#i=f+17;3J=L8V9_6jR$ky4O_WxRKp#J3T!|6k@fb!F{_w7S zX60Ge(dVSuw}e@VQDIwC-HM?_XM{R^qw#yX>zMv4iUKi|S!WWNa&~f1klE#^AqQou zkV-|>ZQ5zK&X!U)4ZN|<{cKQ?QJF$=Y59R8vBQ01qej5vux2b%KWv9LR-0DM62iPj zgc?&FUlnUbD$t~};t(A-@i1X`;v&2>UC_^ZMwCIN6l+NXWSa|71Js%w^x0~5qZX(a zM3^#{^5^4T=g_1m!kl13mtfo6WNBh@{QO+B!RgpCJze9@1ekh~sUn>fsgJuHPvf9x zNlw73#a+9La+_7?t|;UzeMtf)Rd1RKcEOGAQB)^tgR4T(4(xCec8tPS9wFE0HaW95 z(An+ply0$uB`E<4DC*$808AbDp8zA-u9N@^2L?#0X#p1COSTKW*dJgi8Q?7oP#6!8 z5t7=2KD-y-O+gp;;WKrfsfN_~Ly5JfbN$wLVl> W=6bsQlF}@&0VP_d|E!)kz5f8U=8X0L diff --git a/.doctrees/src/MusicTools.MusicTools.doctree b/.doctrees/src/MusicTools.MusicTools.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0328fc230e0f1e03a0d114ef67bb607e312a99ae GIT binary patch literal 9126 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 literal 0 HcmV?d00001 diff --git a/.doctrees/src/MusicTools.Playlist.doctree b/.doctrees/src/MusicTools.Playlist.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0d243f89030719b24455ab5f9cd189214c0038c5 GIT binary patch literal 79326 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 literal 0 HcmV?d00001 diff --git a/.doctrees/src/MusicTools.Tag.doctree b/.doctrees/src/MusicTools.Tag.doctree new file mode 100644 index 0000000000000000000000000000000000000000..020ff214818f9976095b98331f5de6c9985ad1ef GIT binary patch literal 23490 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 QfJb88AxC%i_Er}E4>PEl=>Px# literal 0 HcmV?d00001 diff --git a/.doctrees/src/MusicTools.doctree b/.doctrees/src/MusicTools.doctree new file mode 100644 index 0000000000000000000000000000000000000000..812d4235dd3274a8fa94081010c1ef6651d276e9 GIT binary patch literal 3004 zcmZ`*OK%%D5O!?qWm)ngO^PCR>YxbXppg_5Jrq3@Epjv>v`N}qv7mM-kuaCsl3YtZ z6lf1A5`edCZ~YVfhyBQ1tsZCu2w2Vx=lRWW{%HLDZ+9pB+>yx`my01u5~&hu3fE3l zoTpUU;zRND&*Jyu(seYM8-tm&)y07y|24BbwUWRPl-=wY5^A&u1Uivm>4}AvM=LnlULW;k@ z|1thg@PCSs*q0%cK`G9j!I1_W>7d{$%~URvwZfG(Wjn}&imj&WMXh)rGsGUa{$|`r zKPsqsNc!d2eYVLSh7^Vj6@L|D_vse{Yduz2pEoog#*EMU9Aj{Hj zlh-PJumbI}(rfBYQs0#W>$`HGLszbpmduO5yjU`~RPU{U2x$H|>gq0K&wP^ZxPF{# z-_KFqy@yLm*~PAHsI^?qFsx4M=`+Z6iT%s3@*>-2o$_J~rG5 zU2x>e5}TW)P{TD6I>~1+*PjzDkt;}`QYk1Mt4U0KP{ljf=Q7J}L}jcJNENP=+v(t& zf#LW*+hj&mYo#MbWFml16b`XrT)QKc+f6Nvprvr>t-Jm989EUOn4nY~6In zJ^+I(G2}-epu+V8k+U2#5$R5F-bK&4yPC#IClMMP;D8xFW5%u-D>+4sNC!`%3`3nS z3f6Rel3Nw6NN$${QN1Kjv#3TLvKj~+fYXu)uka{PkXmVc?N_AC&^%GmBK3GWri)A& z8m-?95Q%Mc!woO-c@!nwkcsetR9?20-N2r?Lj+@he^SkZ@uCXz3B4IX(u@js&)@JG{f)@d6j`>&Y8&*y z$?Sz8~`btisMpc&*0y(M_cZSnH>i90s8(vn5Q_>2ks0o{F} zJn9ckO3-7!4tvHPHp|LzPGKb;^1k=M2N8fq40(4 z#!3jJ88P5VXuYWDACQH&#VfQ0_E9t%Hb@f|G`N0R4~7kLwYbUfpu!qMwTy(HX43CoW(`S`njdWnaNYyrug;nfw;aPZb*K9PBBm{wTCA& zFFB_)B{eNGC$)G=>=ca*hYY9G%`!})%#4kjjaWA^%S2~H6!&oECFZ7`_ ---------------------------------------------- diff --git a/_sources/src/MusicTools.MusicTools.rst.txt b/_sources/src/MusicTools.MusicTools.rst.txt new file mode 100644 index 0000000..06a6bb6 --- /dev/null +++ b/_sources/src/MusicTools.MusicTools.rst.txt @@ -0,0 +1,6 @@ +MusicTools +================= + +.. js:autoclass:: MusicTools + :members: + :private-members: \ No newline at end of file diff --git a/_sources/src/MusicTools.Playlist.rst.txt b/_sources/src/MusicTools.Playlist.rst.txt new file mode 100644 index 0000000..5e3b698 --- /dev/null +++ b/_sources/src/MusicTools.Playlist.rst.txt @@ -0,0 +1,61 @@ +Playlist +================= + +Router +-------- + +.. js:autoclass:: Playlists + :members: + :private-members: + +Playlists List +------------------ + +.. js:autoclass:: PlaylistsView + :members: + :private-members: + +.. js:autoclass:: PlaylistGrid + :members: + :private-members: + +.. js:autoclass:: PlaylistCard + :members: + :private-members: + +.. js:autofunction:: getPlaylistLink + +New Playlist Card +-------------------- + +.. js:autoclass:: NewPlaylist + :members: + :private-members: + +Playlist Router +------------------ + +.. js:autoclass:: PlaylistRouter.View + :members: + :private-members: + +Playlist View +------------------ + +.. js:autoclass:: Edit + :members: + :private-members: + +.. js:autofunction:: ReferenceEntry + +.. js:autofunction:: Edit.ListBlock + +.. js:autofunction:: Edit.BlockGridItem + +Playlist Stats View +----------------------- + +.. js:autoclass:: Count + :members: + :private-members: + diff --git a/_sources/src/MusicTools.Tag.rst.txt b/_sources/src/MusicTools.Tag.rst.txt new file mode 100644 index 0000000..28db4c0 --- /dev/null +++ b/_sources/src/MusicTools.Tag.rst.txt @@ -0,0 +1,30 @@ +Tag +================= + +Router +-------- + +.. js:autoclass:: TagRouter + :members: + :private-members: + +Tags List +------------------ + +.. js:autoclass:: TagList + :members: + :private-members: + +.. js:autofunction:: TagGrid + +.. js:autofunction:: TagCard + +.. js:autofunction:: getTagLink + +New Tag Card +-------------------- + +.. js:autoclass:: NewTag + :members: + :private-members: + diff --git a/_sources/src/MusicTools.rst.txt b/_sources/src/MusicTools.rst.txt new file mode 100644 index 0000000..e5e5ec4 --- /dev/null +++ b/_sources/src/MusicTools.rst.txt @@ -0,0 +1,13 @@ +Music Tools React +=================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + MusicTools.MusicTools + MusicTools.Playlist + MusicTools.Tag + diff --git a/_sources/src/modules.rst.txt b/_sources/src/modules.rst.txt index 40216a1..0f60f80 100644 --- a/_sources/src/modules.rst.txt +++ b/_sources/src/modules.rst.txt @@ -5,3 +5,4 @@ music :maxdepth: 4 music + MusicTools diff --git a/genindex.html b/genindex.html index eca2290..e90d330 100644 --- a/genindex.html +++ b/genindex.html @@ -129,8 +129,16 @@

  • Config.Meta (class in music.model.config)
  • count (music.model.tag.Tag attribute) +
  • +
  • Count() (class)
  • count() (in module music.api.spotfm) +
  • +
  • Count.Count (Count attribute) +
  • +
  • Count.getUserInfo() (Count method) +
  • +
  • Count.updateStats() (Count method)
  • create_app() (in module music.music)
  • @@ -166,6 +174,38 @@

    E

    + @@ -180,13 +220,17 @@
  • get_authed_spotify_network() (in module music.db.database)
  • - - +
    @@ -374,8 +418,6 @@
  • module
  • - -
    • music.api.spotfm @@ -390,6 +432,8 @@
    • module
    + +
    • music.api.tag @@ -530,6 +574,16 @@
    • module
    +
  • MusicTools() (class) +
  • +
  • MusicTools.componentDidMount() (MusicTools method) +
  • +
  • MusicTools.componentWillUnmount() (MusicTools method) +
  • +
  • MusicTools.getUserInfo() (MusicTools method) +
  • +
  • MusicTools.setOpen() (MusicTools method) +
  • mutable_keys (music.model.playlist.Playlist attribute)
  • @@ -544,8 +598,24 @@
  • (music.model.tag.Tag attribute)
  • +
  • NewPlaylist() (class) +
  • +
  • NewPlaylist.componentDidMount() (NewPlaylist method) +
  • +
  • NewPlaylist.handleInputChange() (NewPlaylist method) +
  • @@ -578,13 +648,33 @@
  • playlist_get_delete_route() (in module music.api.api)
  • - - +
      +
    • PlaylistRouter.View() (class) +
    • +
    • PlaylistRouter.View.handleChange() (PlaylistRouter.View method) +
    • +
    • Playlists() (class) +
    • +
    • PlaylistsView() (class) +
    • +
    • PlaylistsView.getPlaylists() (PlaylistsView method) +
    • +
    • PlaylistsView.handleDeletePlaylist() (PlaylistsView method) +
    • +
    • PlaylistsView.handleRunAll() (PlaylistsView method) +
    • +
    • PlaylistsView.handleRunPlaylist() (PlaylistsView method)
    • post_tag() (in module music.api.tag)
    • @@ -611,6 +701,8 @@ + -
      -
      diff --git a/index.html b/index.html index 6f92ca3..37b673f 100644 --- a/index.html +++ b/index.html @@ -45,6 +45,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • @@ -90,6 +91,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • diff --git a/objects.inv b/objects.inv index f12b4de89aa773c5eb621ee80ae23d164ad0fa21..dffeb448e3035520e93c33675be3b468894dc149 100644 GIT binary patch delta 2110 zcmV-E2*LO84Wbc{dwZAP_kIehX0~A_+w3x(sZ>`bnN%m4SyD0_+lmDulIX;5 zKe_-G7-%?>7fEBG|I_X0=*k0cDwTYfZ*oSYOkO8aMrQC_VFG=FtL6ns%c$*q9D3%aei zMv(r+cz%8_Xz{3^#3Y$^>29hntNfsYZ2G8lb6(cGf=a!k#mBDAHdAzqb#E}OHfEq& zEj^K{VDPpmJ`VO=Lh|K452($b)$kQPf+q_2&@+eiBUCAO@&gI zQLdf$P}1+A@mJLxMqE>y36JC41z9_A5iN;@db?^=tDDZoEC{d3H zZyAe3!e*==+WxMTxNKExi|_1vWw+2jI>TPC_^|9(r=pwo*N<|0LWA~hJpW{S z>lx_>T5X=qx-!139Hd#A@T9)HDS6Q_NdC03ZK#Xn!e8}qQ&Q8J`1;MfCM88lE4P%! z5sHk4WJr%*>QGu!t4Ikk8cb(Pw>%eKNrPz-vL$P-=;4wvJ&wlUJrhRFLOmnmC}VKG z%k8FhC{g|NP^JZ;?2_qa8sG03Y%YNDuFf@XPTWb;3VvzdEJ%LFrEUKprSjAq4h)d$ zXMfI`a(+;4I)EK%S78!N5w`z9~^ob&@6&cC?c9A_66~(^agtK}${J>c1%aFnXg! zcIIA=nIg90Z8q7?0j3N?znZfQ^D0o9E`Luydcu^nfB>T&xqz-Lbu$D_|;-HGdBFJHiLJs3N_gbM898PSGAKx*y{ zy!UY{n{o+bt587R2uYvK#;$ONU4Mc)@gk623!a0NX6EM(bh5o}AmWyz_e-Jw5iJ>Q z6QEYpXhoIT@0zuiQGDI>z-G+DzMHWS_b%tvfgS_p=|fMsH7XCXs7^nEA`uWeh%vC$ z)?3T8w^@z75~IRmWzRUnOnbweQK;0SgI&$+hh?{&%xh!Iv^r)casj3?E>E>Q?L%?;mX-pK0zD1M54fERKDz`L^1XU+0qeAnO z@&1gO>ohTm!roDdL=1CbOTd_oUXV++=S@`*afyYzUeL<;Gl-vpD!2n%HirZK6$wnM zoHYe#quL8y6>f`HMuzK&8-FiL(3Ncp5Q}d6tXu6A5s`X)GwaTFC%!))xC>nmb~)UK z?{@z0mVJl6U;givaceZ*7H?#H+zKfhy|80oCNHr%O+**kFT!H5yrVR?D2hcM`kqXZ zvSzVrz&rAcL2D0(BA^uSFLz8V1-GFtb*ut5f`*a4v^9jAOB%HvNPiEcVJbWy+OQay zO&9xNK{zhNmgbKLU!L=uqo=QA`;xlV;pX?gILZXC1KMF#h9T_G7RCsi1m9x9YX(1{ zc7)*hRtE|$OD%Y<`%Gx{n&Vm;Run}`$oT%dZly4bL3`{gKoORi`~>Es!(^q5Kyv3e z{*5R+5Wh6(5Z#qL6n~_{bgwZf zaCJT=rR%RmEo5+b*9(=iD`L&fu~A-*P|>P@Ux`%38%FlPl2@;jF4V?L9?j$K8m-{D ziR8twp9CiMn}5Ka&gBHLzP##Qv=UcT$M)X7Ap3mL{=6EhB@mIHhC&zSG+*5N&*TWZ z;RlRF_M80$)Fjna*36ff3$Ve*no0L-cl%-H0;BtEGtm!L=`8D} z3~jKBYt3iZ8`4eO-kpzQ+OH-jV|VvZ~l|*tb+O(Pm$kC^vGf!S)~LMSsW1g)^m9Aw{nNk-fw8 z3Su+heQ4aBxtHcG ze3;lQ2|eTTc0Z6(b?T2t4oLNz;C-`OZ2b?}Twa<}(SNrZm+d?_OE^kUCnV--U?sfl z8&ptTq)Ck(t(S1lvtntO;r~XS!UToUn^=c-Hlxjzkh`5tlNyz$(dEPRb3p9Oby!58 zq;9&3)%IwqZCvvcZ!2zX%C$JdKD*uAdZmfnyOlQb@1|^G0dvHi#()thvN{8GW2_B^(?W)QZ?|-ez71uQ{OoqfPOd&#=|2_Qj-!MI- zW)-cj>>V+m>-}a8a{-iSEm>*DU@7N9Klc*xu zoqrS*l(I8FkkC>nO4C5ZFGru3!}O3W8{-q8AEvREX}jOG>Mb|lo2Cc8;vVkZiih}j zRJ2D{N6PcRCd$221&~d3{tYxqfG|m%gR8d5Tb85E!`PXa6qd?78w?8*4Jl{P>dgTA zFmoD~{dThGtS_^+F6_q%_zI{rvEvMv6o0TGdZ(;_8>Y7x#SJH}s7^Kl^4Ea0tC!pn zaGh-#lf&{^(emWm`3f&BL6rRKPJO58J-{YTW|FaBtP7`eLCdQ|&kft{a zI}Ud8lB&}r458B^ECnk#O7n}NROIW}Qz+7OJXH+@N1iEY!{JZ@lor$Fj)kS*KGda4 zRlr`dIMVl_hH!I9t2P7ak@Q^0+kaski-X;CvExqyT#PTR9}#{&=eI{sKgj+i^`OJe z??Z8t3El{F!>WoyxS=hM5jhFI$HdnRen1@w(etel6kV21iq7%wJfeEnl(^} z@~3H~IFCU`>=~d5FRVS0c8r*!Q3*)?94EXHg$Lr7CL?0Jl81tf7gtbW)_;og^|Osn zvUN&asJ)ga2`Mv@P`9l;oo`2={FT)3#`eB`5Rl@6?-D3QT|q+_k7T$IJl%qb1r5s} zWHi5q1@~QJX@Z`kO$z-e0&{iF7Rd_l%0`zDJzRtcdv*vP9YgMb1t{zqVMZi!p7G-E z?)u&Rmp#K7x&(K0-*u0kqJM4O5b+22%lY|tLw=v^^zY^@aTf~{kZ+M=UkSED@a0^B z-6r}iwC(#QJMF#8!f$guH4lHO7N5n^wIy7g-;(mjuS9JaczxFkW!a2)7b5y86mV2|RoGl8veEyX;^4>tX(^64ZVaeDTc%h#x|5bud;g5P!SN%lKlD_@a7t z@b(kg>&3+L_FAogNP4;!`ZTZk?%%(X8V;@^oLGfr36j0WRn}puw!3eq;C1_@`y0W< zug6=e+4Ok0zUH_h8!td+^Yh{6p3<^%zQU9R35W33!?JL=4Uvschnw+XSv3zGS&(qJ TalK{j?3G!NaQGh|Ap#b>cn(V` diff --git a/py-modindex.html b/py-modindex.html index 1cf0445..36c17ed 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -219,6 +219,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • diff --git a/search.html b/search.html index ba7ac58..f5728e8 100644 --- a/search.html +++ b/search.html @@ -84,6 +84,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • diff --git a/searchindex.js b/searchindex.js index ecdc353..8112433 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","src/modules","src/music","src/music.api","src/music.auth","src/music.cloud","src/music.db","src/music.model","src/music.tasks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst","src/modules.rst","src/music.rst","src/music.api.rst","src/music.auth.rst","src/music.cloud.rst","src/music.db.rst","src/music.model.rst","src/music.tasks.rst"],objects:{"":{music:[2,0,0,"-"]},"music.api":{admin:[3,0,0,"-"],api:[3,0,0,"-"],decorators:[3,0,0,"-"],fm:[3,0,0,"-"],player:[3,0,0,"-"],spotfm:[3,0,0,"-"],spotify:[3,0,0,"-"],tag:[3,0,0,"-"]},"music.api.admin":{get_tasks:[3,1,1,""]},"music.api.api":{all_playlists_route:[3,1,1,""],all_users_route:[3,1,1,""],change_password:[3,1,1,""],image:[3,1,1,""],playlist_get_delete_route:[3,1,1,""],playlist_post_put_route:[3,1,1,""],run_playlist:[3,1,1,""],run_playlist_task:[3,1,1,""],run_user:[3,1,1,""],run_user_task:[3,1,1,""],run_users:[3,1,1,""],user_route:[3,1,1,""]},"music.api.decorators":{admin_required:[3,1,1,""],check_dict:[3,1,1,""],cloud_task:[3,1,1,""],gae_cron:[3,1,1,""],is_basic_authed:[3,1,1,""],is_logged_in:[3,1,1,""],lastfm_username_required:[3,1,1,""],login_or_basic_auth:[3,1,1,""],login_required:[3,1,1,""],spotify_link_required:[3,1,1,""],validate_args:[3,1,1,""],validate_json:[3,1,1,""]},"music.api.fm":{daily_scrobbles:[3,1,1,""]},"music.api.player":{next_track:[3,1,1,""],play:[3,1,1,""],shuffle:[3,1,1,""],volume:[3,1,1,""]},"music.api.spotfm":{count:[3,1,1,""],playlist_refresh:[3,1,1,""],run_playlist_album_task:[3,1,1,""],run_playlist_artist_task:[3,1,1,""],run_playlist_track_task:[3,1,1,""],run_user:[3,1,1,""],run_user_task:[3,1,1,""],run_users:[3,1,1,""]},"music.api.spotify":{sort:[3,1,1,""]},"music.api.tag":{delete_tag:[3,1,1,""],get_tag:[3,1,1,""],post_tag:[3,1,1,""],put_tag:[3,1,1,""],run_tag_task:[3,1,1,""],tag_refresh:[3,1,1,""],tag_route:[3,1,1,""],tags:[3,1,1,""]},"music.auth":{auth:[4,0,0,"-"]},"music.auth.auth":{auth:[4,1,1,""],deauth:[4,1,1,""],login:[4,1,1,""],logout:[4,1,1,""],register:[4,1,1,""],token:[4,1,1,""]},"music.cloud":{"function":[5,0,0,"-"],offload_or_run_user_playlist:[5,1,1,""],queue_run_user_playlist:[5,1,1,""],tasks:[5,0,0,"-"]},"music.cloud.function":{run_user_playlist_function:[5,1,1,""],update_tag:[5,1,1,""]},"music.cloud.tasks":{refresh_all_user_playlist_stats:[5,1,1,""],refresh_playlist_task:[5,1,1,""],refresh_user_playlist_stats:[5,1,1,""],refresh_user_stats_task:[5,1,1,""],run_user_playlist_task:[5,1,1,""],update_all_user_playlists:[5,1,1,""],update_all_user_tags:[5,1,1,""],update_playlists:[5,1,1,""]},"music.db":{database:[6,0,0,"-"],part_generator:[6,0,0,"-"]},"music.db.database":{DatabaseUser:[6,2,1,""],get_authed_lastfm_network:[6,1,1,""],get_authed_spotify_network:[6,1,1,""],refresh_token_database_callback:[6,1,1,""]},"music.db.database.DatabaseUser":{user_id:[6,3,1,""]},"music.db.part_generator":{PartGenerator:[6,2,1,""]},"music.db.part_generator.PartGenerator":{get_recursive_parts:[6,4,1,""],process_reference_by_name:[6,4,1,""],process_reference_by_reference:[6,4,1,""],reset:[6,4,1,""]},"music.model":{config:[7,0,0,"-"],playlist:[7,0,0,"-"],tag:[7,0,0,"-"],user:[7,0,0,"-"]},"music.model.config":{Config:[7,2,1,""]},"music.model.config.Config":{Meta:[7,2,1,""],collection:[7,3,1,""],collection_name:[7,3,1,""],last_fm_client_id:[7,3,1,""],playlist_cloud_operating_mode:[7,3,1,""],secret_key:[7,3,1,""],spotify_client_id:[7,3,1,""],spotify_client_secret:[7,3,1,""]},"music.model.config.Config.Meta":{collection_name:[7,3,1,""]},"music.model.playlist":{Playlist:[7,2,1,""],Sort:[7,2,1,""]},"music.model.playlist.Playlist":{Meta:[7,2,1,""],add_last_month:[7,3,1,""],add_this_month:[7,3,1,""],chart_limit:[7,3,1,""],chart_range:[7,3,1,""],collection:[7,3,1,""],collection_name:[7,3,1,""],day_boundary:[7,3,1,""],description_overwrite:[7,3,1,""],description_suffix:[7,3,1,""],include_library_tracks:[7,3,1,""],include_recommendations:[7,3,1,""],last_updated:[7,3,1,""],lastfm_stat_album_count:[7,3,1,""],lastfm_stat_album_percent:[7,3,1,""],lastfm_stat_artist_count:[7,3,1,""],lastfm_stat_artist_percent:[7,3,1,""],lastfm_stat_count:[7,3,1,""],lastfm_stat_last_refresh:[7,3,1,""],lastfm_stat_percent:[7,3,1,""],mutable_keys:[7,3,1,""],name:[7,3,1,""],parts:[7,3,1,""],playlist_references:[7,3,1,""],recommendation_sample:[7,3,1,""],shuffle:[7,3,1,""],sort:[7,3,1,""],to_dict:[7,4,1,""],type:[7,3,1,""],uri:[7,3,1,""]},"music.model.playlist.Playlist.Meta":{collection_name:[7,3,1,""]},"music.model.playlist.Sort":{"default":[7,3,1,""],release_date:[7,3,1,""],shuffle:[7,3,1,""]},"music.model.tag":{Tag:[7,2,1,""]},"music.model.tag.Tag":{Meta:[7,2,1,""],albums:[7,3,1,""],artists:[7,3,1,""],collection:[7,3,1,""],collection_name:[7,3,1,""],count:[7,3,1,""],last_updated:[7,3,1,""],name:[7,3,1,""],proportion:[7,3,1,""],tag_id:[7,3,1,""],time_objects:[7,3,1,""],to_dict:[7,4,1,""],total_time:[7,3,1,""],total_time_ms:[7,3,1,""],total_user_scrobbles:[7,3,1,""],tracks:[7,3,1,""],username:[7,3,1,""]},"music.model.tag.Tag.Meta":{collection_name:[7,3,1,""]},"music.model.user":{User:[7,2,1,""]},"music.model.user.User":{Meta:[7,2,1,""],access_token:[7,3,1,""],check_password:[7,4,1,""],collection:[7,3,1,""],collection_name:[7,3,1,""],email:[7,3,1,""],last_login:[7,3,1,""],last_refreshed:[7,3,1,""],lastfm_username:[7,3,1,""],locked:[7,3,1,""],password:[7,3,1,""],refresh_token:[7,3,1,""],spotify_linked:[7,3,1,""],to_dict:[7,4,1,""],token_expiry:[7,3,1,""],type:[7,3,1,""],username:[7,3,1,""],validated:[7,3,1,""]},"music.model.user.User.Meta":{collection_name:[7,3,1,""]},"music.music":{create_app:[2,1,1,""]},"music.tasks":{create_playlist:[8,0,0,"-"],refresh_lastfm_stats:[8,0,0,"-"],run_user_playlist:[8,0,0,"-"],update_tag:[8,0,0,"-"]},"music.tasks.create_playlist":{create_playlist:[8,1,1,""]},"music.tasks.refresh_lastfm_stats":{refresh_lastfm_album_stats:[8,1,1,""],refresh_lastfm_artist_stats:[8,1,1,""],refresh_lastfm_track_stats:[8,1,1,""]},"music.tasks.run_user_playlist":{run_user_playlist:[8,1,1,""]},"music.tasks.update_tag":{update_tag:[8,1,1,""]},music:{api:[3,0,0,"-"],auth:[4,0,0,"-"],cloud:[5,0,0,"-"],db:[6,0,0,"-"],init_log:[2,1,1,""],model:[7,0,0,"-"],music:[2,0,0,"-"],tasks:[8,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute","4":"py:method"},terms:{"class":[6,7],"default":[3,5,7,8],"enum":7,"function":[0,1,2,6,7,8],"int":5,"long":[5,8],"new":8,"return":[2,3,4,6,7,8],Adding:6,For:8,The:0,Used:6,access_token:[6,7],account:8,add_last_month:7,add_this_month:7,admin:[1,2],admin_requir:3,album:7,all:[3,5],all_playlists_rout:3,all_users_rout:3,allow:4,api:[0,1,2],app:[0,2,3,7,8],arg:[3,7],artist:7,asid:6,attributeerror:8,auth:[0,1,2],authent:6,avail:8,backend:2,base:[0,6,7],blueprint:[2,3],callback:6,change_password:3,chart_limit:7,chart_rang:7,check_dict:3,check_password:7,client_id:6,client_secret:6,cloud:[0,1,2,6,7],cloud_task:3,code:5,collect:7,collection_nam:7,compon:6,compos:0,config:[1,2],consol:2,contain:[2,7],content:[0,1],convert:7,correct:7,count:[3,7],creat:[0,2,5,8],create_app:2,create_playlist:[1,2],credemti:6,credenti:6,current:0,daily_scrobbl:3,data:7,databas:[1,2],databaseus:6,day_boundari:7,deauth:4,decor:[1,2],delai:5,delete_tag:3,depend:[5,6],descript:[3,7,8],description_overwrit:7,description_suffix:7,determin:7,dict:7,dispatch:0,document:6,documentrefer:6,done:7,email:7,endpoint:[3,4],enumer:7,environ:5,error:8,execut:5,expected_arg:3,fals:2,fireo:[0,7],firestor:[6,7],firestore_v1:6,flask:[0,2,3],fmframework:[0,6,8],fmnet:8,fmnetwork:6,from:6,fullplaylist:8,func:3,gae_cron:3,gcp:5,gener:[2,8],get:[4,6],get_authed_lastfm_network:6,get_authed_spotify_network:6,get_recursive_part:6,get_tag:3,get_task:3,given:[3,5,6],googl:[0,6],hand:5,handl:6,has:8,home:4,host:0,html:4,http:[3,4],imag:3,includ:[4,5,8],include_library_track:7,include_recommend:7,index:0,infrastuctur:5,init_log:2,initialis:2,interfac:[0,6],intern:6,is_basic_auth:3,is_logged_in:3,kei:7,kwarg:[3,7],last:[0,8],last_fm_client_id:7,last_login:7,last_refresh:7,last_upd:7,lastfm_stat_album_count:7,lastfm_stat_album_perc:7,lastfm_stat_artist_count:7,lastfm_stat_artist_perc:7,lastfm_stat_count:7,lastfm_stat_last_refresh:7,lastfm_stat_perc:7,lastfm_usernam:7,lastfm_username_requir:3,layer:[0,6,7],level:[2,7],list:6,load:[2,3],lock:7,log:2,login:4,login_or_basic_auth:3,login_requir:3,logout:4,longer:0,manag:7,meta:7,model:[0,1,2,6,8],modul:[0,1],mutable_kei:7,name:[5,6,7,8],nameerror:8,net:[6,8],network:[6,8],networkus:6,newli:6,next_track:3,none:[3,5,6,7,8],object:[6,7,8],off:5,offload_or_run_user_playlist:5,oper:[5,7,8],option:[3,5,6,8],orm:[0,6,7],other:6,page:[0,4],paramet:[3,5,6,7,8],part:7,part_gener:[1,2],partgener:6,password:[4,7],path:7,plai:3,platform:0,player:[1,2],playlist:[0,1,2,3,5,6,8],playlist_cloud_operating_mod:7,playlist_get_delete_rout:3,playlist_nam:[5,8],playlist_post_put_rout:3,playlist_refer:7,playlist_refresh:3,post:4,post_tag:3,process_reference_by_nam:6,process_reference_by_refer:6,proport:7,provid:8,put_tag:3,queue:5,queue_run_user_playlist:5,rais:8,readi:2,recommendation_sampl:7,recurs:6,redirect:4,ref:6,referenc:6,refresh:5,refresh_all_user_playlist_stat:5,refresh_lastfm_album_stat:8,refresh_lastfm_artist_stat:8,refresh_lastfm_stat:[1,2],refresh_lastfm_track_stat:8,refresh_playlist_task:5,refresh_token:[6,7],refresh_token_database_callback:6,refresh_user_playlist_stat:5,refresh_user_stats_task:5,regist:4,relat:4,release_d:7,request:4,request_param:3,reset:[4,6],resolut:6,resolv:6,respons:[3,4],result:4,retriev:[2,3,4,6,8],root:2,rout:4,run:[2,5,8],run_playlist:3,run_playlist_album_task:3,run_playlist_artist_task:3,run_playlist_task:3,run_playlist_track_task:3,run_tag_task:3,run_us:3,run_user_playlist:[1,2],run_user_playlist_funct:5,run_user_playlist_task:5,run_user_task:3,search:0,second:5,secret_kei:7,secur:4,server:0,serverless:5,servic:7,set:7,shuffl:[3,7],smart:[0,6,7,8],sort:[3,7],spotfm:[1,2],spotframework:[0,6,8],spotifi:[0,1,2,6,8],spotify_client_id:7,spotify_client_secret:7,spotify_link:7,spotify_link_requir:3,spotify_us:7,spotifynetwork:6,spotnet:8,spotnetwork:8,stack:2,stat:5,state:6,store:6,str:[5,6,8],structur:7,subject:[5,6,8],submiss:4,subpackag:1,system:0,tag:[1,2,5,8],tag_id:[3,5,7],tag_refresh:3,tag_rout:3,task:[0,1,2,7],time_object:7,to_dict:7,token:4,token_expiri:7,tool:[2,6],top:2,total_tim:7,total_time_m:7,total_user_scrobbl:7,track:7,type:[2,3,4,6,7,8],upad:8,updat:[5,6,7,8],update_all_user_playlist:5,update_all_user_tag:5,update_playlist:5,update_tag:[1,2,5],uri:[7,8],user:[1,2,3,5,6,8],user_id:6,user_rout:3,usernam:[5,6,7,8],valid:7,validate_arg:3,validate_json:3,valu:7,volum:3,walk:6,web:0,when:[6,8],whether:7},titles:["Music Tools","music","music","music.api","music.auth","music.cloud","music.db","music.model","music.tasks"],titleterms:{"function":5,admin:3,api:3,auth:4,cloud:5,config:7,content:[2,3,4,5,6,7,8],create_playlist:8,databas:6,decor:3,indic:0,model:7,modul:[2,3,4,5,6,7,8],music:[0,1,2,3,4,5,6,7,8],part_gener:6,player:3,playlist:7,refresh_lastfm_stat:8,run_user_playlist:8,spotfm:3,spotifi:3,subpackag:2,tabl:0,tag:[3,7],task:[5,8],tool:0,update_tag:8,user:7}}) \ No newline at end of file +Search.setIndex({docnames:["index","src/MusicTools","src/MusicTools.MusicTools","src/MusicTools.Playlist","src/MusicTools.Tag","src/modules","src/music","src/music.api","src/music.auth","src/music.cloud","src/music.db","src/music.model","src/music.tasks"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst","src/MusicTools.rst","src/MusicTools.MusicTools.rst","src/MusicTools.Playlist.rst","src/MusicTools.Tag.rst","src/modules.rst","src/music.rst","src/music.api.rst","src/music.auth.rst","src/music.cloud.rst","src/music.db.rst","src/music.model.rst","src/music.tasks.rst"],objects:{"":{Count:[3,0,1,""],Edit:[3,0,1,""],MusicTools:[2,0,1,""],NewPlaylist:[3,0,1,""],NewTag:[4,0,1,""],PlaylistCard:[3,0,1,""],PlaylistGrid:[3,0,1,""],Playlists:[3,0,1,""],PlaylistsView:[3,0,1,""],ReferenceEntry:[3,2,1,""],TagCard:[4,2,1,""],TagGrid:[4,2,1,""],TagList:[4,0,1,""],TagRouter:[4,0,1,""],getPlaylistLink:[3,2,1,""],getTagLink:[4,2,1,""],music:[6,3,0,"-"]},"PlaylistRouter.View":{handleChange:[3,2,1,""]},"music.api":{admin:[7,3,0,"-"],api:[7,3,0,"-"],decorators:[7,3,0,"-"],fm:[7,3,0,"-"],player:[7,3,0,"-"],spotfm:[7,3,0,"-"],spotify:[7,3,0,"-"],tag:[7,3,0,"-"]},"music.api.admin":{get_tasks:[7,4,1,""]},"music.api.api":{all_playlists_route:[7,4,1,""],all_users_route:[7,4,1,""],change_password:[7,4,1,""],image:[7,4,1,""],playlist_get_delete_route:[7,4,1,""],playlist_post_put_route:[7,4,1,""],run_playlist:[7,4,1,""],run_playlist_task:[7,4,1,""],run_user:[7,4,1,""],run_user_task:[7,4,1,""],run_users:[7,4,1,""],user_route:[7,4,1,""]},"music.api.decorators":{admin_required:[7,4,1,""],check_dict:[7,4,1,""],cloud_task:[7,4,1,""],gae_cron:[7,4,1,""],is_basic_authed:[7,4,1,""],is_logged_in:[7,4,1,""],lastfm_username_required:[7,4,1,""],login_or_basic_auth:[7,4,1,""],login_required:[7,4,1,""],spotify_link_required:[7,4,1,""],validate_args:[7,4,1,""],validate_json:[7,4,1,""]},"music.api.fm":{daily_scrobbles:[7,4,1,""]},"music.api.player":{next_track:[7,4,1,""],play:[7,4,1,""],shuffle:[7,4,1,""],volume:[7,4,1,""]},"music.api.spotfm":{count:[7,4,1,""],playlist_refresh:[7,4,1,""],run_playlist_album_task:[7,4,1,""],run_playlist_artist_task:[7,4,1,""],run_playlist_track_task:[7,4,1,""],run_user:[7,4,1,""],run_user_task:[7,4,1,""],run_users:[7,4,1,""]},"music.api.spotify":{sort:[7,4,1,""]},"music.api.tag":{delete_tag:[7,4,1,""],get_tag:[7,4,1,""],post_tag:[7,4,1,""],put_tag:[7,4,1,""],run_tag_task:[7,4,1,""],tag_refresh:[7,4,1,""],tag_route:[7,4,1,""],tags:[7,4,1,""]},"music.auth":{auth:[8,3,0,"-"]},"music.auth.auth":{auth:[8,4,1,""],deauth:[8,4,1,""],login:[8,4,1,""],logout:[8,4,1,""],register:[8,4,1,""],token:[8,4,1,""]},"music.cloud":{"function":[9,3,0,"-"],offload_or_run_user_playlist:[9,4,1,""],queue_run_user_playlist:[9,4,1,""],tasks:[9,3,0,"-"]},"music.cloud.function":{run_user_playlist_function:[9,4,1,""],update_tag:[9,4,1,""]},"music.cloud.tasks":{refresh_all_user_playlist_stats:[9,4,1,""],refresh_playlist_task:[9,4,1,""],refresh_user_playlist_stats:[9,4,1,""],refresh_user_stats_task:[9,4,1,""],run_user_playlist_task:[9,4,1,""],update_all_user_playlists:[9,4,1,""],update_all_user_tags:[9,4,1,""],update_playlists:[9,4,1,""]},"music.db":{database:[10,3,0,"-"],part_generator:[10,3,0,"-"]},"music.db.database":{DatabaseUser:[10,5,1,""],get_authed_lastfm_network:[10,4,1,""],get_authed_spotify_network:[10,4,1,""],refresh_token_database_callback:[10,4,1,""]},"music.db.database.DatabaseUser":{user_id:[10,6,1,""]},"music.db.part_generator":{PartGenerator:[10,5,1,""]},"music.db.part_generator.PartGenerator":{get_recursive_parts:[10,7,1,""],process_reference_by_name:[10,7,1,""],process_reference_by_reference:[10,7,1,""],reset:[10,7,1,""]},"music.model":{config:[11,3,0,"-"],playlist:[11,3,0,"-"],tag:[11,3,0,"-"],user:[11,3,0,"-"]},"music.model.config":{Config:[11,5,1,""]},"music.model.config.Config":{Meta:[11,5,1,""],collection:[11,6,1,""],collection_name:[11,6,1,""],last_fm_client_id:[11,6,1,""],playlist_cloud_operating_mode:[11,6,1,""],secret_key:[11,6,1,""],spotify_client_id:[11,6,1,""],spotify_client_secret:[11,6,1,""]},"music.model.config.Config.Meta":{collection_name:[11,6,1,""]},"music.model.playlist":{Playlist:[11,5,1,""],Sort:[11,5,1,""]},"music.model.playlist.Playlist":{Meta:[11,5,1,""],add_last_month:[11,6,1,""],add_this_month:[11,6,1,""],chart_limit:[11,6,1,""],chart_range:[11,6,1,""],collection:[11,6,1,""],collection_name:[11,6,1,""],day_boundary:[11,6,1,""],description_overwrite:[11,6,1,""],description_suffix:[11,6,1,""],include_library_tracks:[11,6,1,""],include_recommendations:[11,6,1,""],last_updated:[11,6,1,""],lastfm_stat_album_count:[11,6,1,""],lastfm_stat_album_percent:[11,6,1,""],lastfm_stat_artist_count:[11,6,1,""],lastfm_stat_artist_percent:[11,6,1,""],lastfm_stat_count:[11,6,1,""],lastfm_stat_last_refresh:[11,6,1,""],lastfm_stat_percent:[11,6,1,""],mutable_keys:[11,6,1,""],name:[11,6,1,""],parts:[11,6,1,""],playlist_references:[11,6,1,""],recommendation_sample:[11,6,1,""],shuffle:[11,6,1,""],sort:[11,6,1,""],to_dict:[11,7,1,""],type:[11,6,1,""],uri:[11,6,1,""]},"music.model.playlist.Playlist.Meta":{collection_name:[11,6,1,""]},"music.model.playlist.Sort":{"default":[11,6,1,""],release_date:[11,6,1,""],shuffle:[11,6,1,""]},"music.model.tag":{Tag:[11,5,1,""]},"music.model.tag.Tag":{Meta:[11,5,1,""],albums:[11,6,1,""],artists:[11,6,1,""],collection:[11,6,1,""],collection_name:[11,6,1,""],count:[11,6,1,""],last_updated:[11,6,1,""],name:[11,6,1,""],proportion:[11,6,1,""],tag_id:[11,6,1,""],time_objects:[11,6,1,""],to_dict:[11,7,1,""],total_time:[11,6,1,""],total_time_ms:[11,6,1,""],total_user_scrobbles:[11,6,1,""],tracks:[11,6,1,""],username:[11,6,1,""]},"music.model.tag.Tag.Meta":{collection_name:[11,6,1,""]},"music.model.user":{User:[11,5,1,""]},"music.model.user.User":{Meta:[11,5,1,""],access_token:[11,6,1,""],check_password:[11,7,1,""],collection:[11,6,1,""],collection_name:[11,6,1,""],email:[11,6,1,""],last_login:[11,6,1,""],last_refreshed:[11,6,1,""],lastfm_username:[11,6,1,""],locked:[11,6,1,""],password:[11,6,1,""],refresh_token:[11,6,1,""],spotify_linked:[11,6,1,""],to_dict:[11,7,1,""],token_expiry:[11,6,1,""],type:[11,6,1,""],username:[11,6,1,""],validated:[11,6,1,""]},"music.model.user.User.Meta":{collection_name:[11,6,1,""]},"music.music":{create_app:[6,4,1,""]},"music.tasks":{create_playlist:[12,3,0,"-"],refresh_lastfm_stats:[12,3,0,"-"],run_user_playlist:[12,3,0,"-"],update_tag:[12,3,0,"-"]},"music.tasks.create_playlist":{create_playlist:[12,4,1,""]},"music.tasks.refresh_lastfm_stats":{refresh_lastfm_album_stats:[12,4,1,""],refresh_lastfm_artist_stats:[12,4,1,""],refresh_lastfm_track_stats:[12,4,1,""]},"music.tasks.run_user_playlist":{run_user_playlist:[12,4,1,""]},"music.tasks.update_tag":{update_tag:[12,4,1,""]},Count:{Count:[3,1,1,""],getUserInfo:[3,2,1,""],updateStats:[3,2,1,""]},Edit:{BlockGridItem:[3,2,1,""],Edit:[3,1,1,""],ListBlock:[3,2,1,""],componentDidMount:[3,2,1,""],getPlaylistInfo:[3,2,1,""],getPlaylists:[3,2,1,""],handleAddPart:[3,2,1,""],handleAddReference:[3,2,1,""],handleCheckChange:[3,2,1,""],handleInputChange:[3,2,1,""],handleRemovePart:[3,2,1,""],handleRemoveReference:[3,2,1,""],handleRun:[3,2,1,""],makeNetworkUpdate:[3,2,1,""]},MusicTools:{componentDidMount:[2,2,1,""],componentWillUnmount:[2,2,1,""],getUserInfo:[2,2,1,""],setOpen:[2,2,1,""]},NewPlaylist:{componentDidMount:[3,2,1,""],handleInputChange:[3,2,1,""],handleSubmit:[3,2,1,""],setDescription:[3,2,1,""]},NewTag:{handleInputChange:[4,2,1,""],handleSubmit:[4,2,1,""]},PlaylistRouter:{View:[3,0,1,""]},PlaylistsView:{getPlaylists:[3,2,1,""],handleDeletePlaylist:[3,2,1,""],handleRunAll:[3,2,1,""],handleRunPlaylist:[3,2,1,""]},TagList:{getTags:[4,2,1,""],handleDeleteTag:[4,2,1,""]},music:{api:[7,3,0,"-"],auth:[8,3,0,"-"],cloud:[9,3,0,"-"],db:[10,3,0,"-"],init_log:[6,4,1,""],model:[11,3,0,"-"],music:[6,3,0,"-"],tasks:[12,3,0,"-"]}},objnames:{"0":["js","class","JavaScript class"],"1":["js","attribute","JavaScript attribute"],"2":["js","function","JavaScript function"],"3":["py","module","Python module"],"4":["py","function","Python function"],"5":["py","class","Python class"],"6":["py","attribute","Python attribute"],"7":["py","method","Python method"]},objtypes:{"0":"js:class","1":"js:attribute","2":"js:function","3":"py:module","4":"py:function","5":"py:class","6":"py:attribute","7":"py:method"},terms:{"class":[2,3,4,10,11],"default":[7,9,11,12],"enum":11,"function":[0,5,6,10,11,12],"int":9,"long":[9,12],"new":[1,5,12],"return":[3,4,6,7,8,10,11,12],Adding:10,For:12,The:0,Used:10,access_token:[10,11],account:12,action:3,add_last_month:11,add_this_month:11,adding:3,admin:[5,6],admin_requir:7,album:11,all:[3,7,9],all_playlists_rout:7,all_users_rout:7,allow:8,api:[0,2,3,4,5,6],app:[0,2,6,7,11,12],arg:[3,7,11],argument:[2,3,4],artist:11,asid:10,attributeerror:12,auth:[0,5,6],authent:10,avail:12,backend:6,base:[0,10,11],between:4,blockgriditem:3,blueprint:[6,7],bool:2,box:[3,4],button:3,callback:10,cancel:2,card:[1,5],cell:3,chang:[3,4],change_password:7,chart_limit:11,chart_rang:11,check:3,check_dict:7,check_password:11,checkbox:3,client_id:10,client_secret:10,cloud:[0,5,6,10,11],cloud_task:7,code:9,collect:11,collection_nam:11,compon:[2,3,4,10],componentdidmount:[2,3],componentwillunmount:2,compos:0,config:[5,6],consol:6,contain:[3,6,11],content:[0,5],convert:11,correct:11,count:[3,7,11],creat:[0,6,9,12],create_app:6,create_playlist:[5,6],credemti:10,credenti:10,current:0,daily_scrobbl:7,data:[3,4,11],databas:[5,6],databaseus:10,day_boundari:11,deauth:8,decor:[5,6],delai:9,delet:[3,4],delete_tag:7,depend:[9,10],descript:[3,7,11,12],description_overwrit:11,description_suffix:11,determin:11,dict:11,dictionari:3,direct:4,dispatch:0,document:10,documentrefer:10,done:11,drawer:2,dropbox:3,dure:3,edit:3,email:11,endpoint:[7,8],entri:3,enumer:11,environ:9,error:12,event:[3,4],execut:9,expected_arg:7,fals:6,fireo:[0,11],firestor:[10,11],firestore_v1:10,flask:[0,6,7],fmframework:[0,10,12],fmnet:12,fmnetwork:10,from:[2,3,4,10],fullplaylist:12,func:7,gae_cron:7,gcp:9,gener:[6,12],get:[2,3,4,8,10],get_authed_lastfm_network:10,get_authed_spotify_network:10,get_recursive_part:10,get_tag:7,get_task:7,getplaylist:3,getplaylistinfo:3,getplaylistlink:3,gettag:4,gettaglink:4,getuserinfo:[2,3],given:[3,7,9,10],googl:[0,10],grid:[3,4],hand:9,handl:[3,4,10],handleaddpart:3,handleaddrefer:3,handlechang:3,handlecheckchang:3,handledeleteplaylist:3,handledeletetag:4,handleinputchang:[3,4],handleremovepart:3,handleremoverefer:3,handlerun:3,handlerunal:3,handlerunplaylist:3,handlesubmit:[3,4],has:[3,12],home:8,host:[0,3],html:8,http:[7,8],imag:7,includ:[3,8,9,12],include_library_track:11,include_recommend:11,index:0,info:[2,3,4],infrastuctur:9,init:3,init_log:6,initi:3,initialis:6,input:[3,4],interfac:[0,10],intern:10,is_basic_auth:7,is_logged_in:7,kei:11,kwarg:[7,11],last:[0,3,12],last_fm_client_id:11,last_login:11,last_refresh:11,last_upd:11,lastfm_stat_album_count:11,lastfm_stat_album_perc:11,lastfm_stat_artist_count:11,lastfm_stat_artist_perc:11,lastfm_stat_count:11,lastfm_stat_last_refresh:11,lastfm_stat_perc:11,lastfm_usernam:11,lastfm_username_requir:7,layer:[0,10,11],level:[3,6,11],link:3,list:[1,5,10],listblock:3,listen:3,load:[2,3,6,7],lock:11,log:6,login:8,login_or_basic_auth:7,login_requir:7,logout:8,longer:0,main:3,make:[3,4],makenetworkupd:3,manag:11,map:4,match:3,meta:11,model:[0,5,6,10,12],modul:[0,5],music:3,musictool:[1,5],mutable_kei:11,name:[3,4,9,10,11,12],nameerror:12,net:[10,12],network:[10,12],networkus:10,newli:10,newplaylist:3,newtag:4,newvalu:3,next_track:7,none:[7,9,10,11,12],object:[3,10,11,12],off:9,offload_or_run_user_playlist:9,open:2,oper:[9,11,12],option:[3,7,9,10,12],orm:[0,10,11],other:10,page:[0,3,8],paramet:[7,9,10,11,12],part:11,part_gener:[5,6],partgener:10,password:[8,11],path:11,plai:7,platform:0,player:[5,6],playlist:[0,1,5,6,7,9,10,12],playlist_cloud_operating_mod:11,playlist_get_delete_rout:7,playlist_nam:[9,12],playlist_post_put_rout:7,playlist_refer:11,playlist_refresh:7,playlistcard:3,playlistgrid:3,playlistnam:3,playlistrout:3,playlistsview:3,post:[3,8],post_tag:7,present:3,process_reference_by_nam:10,process_reference_by_refer:10,prop:[2,3,4],properti:[3,4],proport:11,provid:12,put_tag:7,queue:9,queue_run_user_playlist:9,rais:12,react:[0,5],readi:6,recommendation_sampl:11,recurs:10,redirect:8,ref:10,refer:3,referenc:10,referenceentri:3,refresh:[3,9],refresh_all_user_playlist_stat:9,refresh_lastfm_album_stat:12,refresh_lastfm_artist_stat:12,refresh_lastfm_stat:[5,6],refresh_lastfm_track_stat:12,refresh_playlist_task:9,refresh_token:[10,11],refresh_token_database_callback:10,refresh_user_playlist_stat:9,refresh_user_stats_task:9,regist:8,relat:8,release_d:11,remov:3,request:[2,3,4,8],request_param:7,reset:[8,10],resolut:10,resolv:10,respons:[7,8],result:[3,8],retriev:[6,7,8,10,12],root:[2,6],rout:8,router:[1,5],run:[3,6,9,12],run_playlist:7,run_playlist_album_task:7,run_playlist_artist_task:7,run_playlist_task:7,run_playlist_track_task:7,run_tag_task:7,run_us:7,run_user_playlist:[5,6],run_user_playlist_funct:9,run_user_playlist_task:9,run_user_task:7,search:0,second:9,secret_kei:11,secur:8,send:3,server:0,serverless:9,servic:11,set:[2,3,11],setdescript:3,setopen:2,shuffl:[7,11],side:2,smart:[0,3,10,11,12],sort:[3,7,11],spotfm:[5,6],spotframework:[0,10,12],spotifi:[0,3,5,6,10,12],spotify_client_id:11,spotify_client_secret:11,spotify_link:11,spotify_link_requir:7,spotify_us:11,spotifynetwork:10,spotnet:12,spotnetwork:12,stack:6,stat:[1,5,9],state:[2,3,4,10],statist:3,store:10,str:[9,10,12],string:3,structur:[3,11],subject:[3,4,9,10,12],submiss:8,subpackag:5,system:0,tab:3,tag:[1,5,6,9,12],tag_id:[4,7,9,11],tag_refresh:7,tag_rout:7,tagcard:4,taggrid:4,taglist:4,tagnam:4,tagrout:4,task:[0,5,6,11],time_object:11,to_dict:11,token:8,token_expiri:11,tool:[3,5,6,10],top:[3,6],total_tim:11,total_time_m:11,total_user_scrobbl:11,track:11,trigger:3,type:[3,6,7,8,10,11,12],upad:12,updat:[3,9,10,11,12],update_all_user_playlist:9,update_all_user_tag:9,update_playlist:9,update_tag:[5,6,9],updatestat:3,uri:[11,12],url:[3,4],user:[2,3,5,6,7,9,10,12],user_id:10,user_rout:7,usernam:[3,9,10,11,12],valid:[3,4,11],validate_arg:7,validate_json:7,valu:[3,11],view:[1,5],volum:7,walk:10,watch:3,web:0,when:[10,12],whether:[2,11],wrap:3},titles:["Music Tools","Music Tools React","MusicTools","Playlist","Tag","music","music","music.api","music.auth","music.cloud","music.db","music.model","music.tasks"],titleterms:{"function":9,"new":[3,4],admin:7,api:7,auth:8,card:[3,4],cloud:9,config:11,content:[6,7,8,9,10,11,12],create_playlist:12,databas:10,decor:7,indic:0,list:[3,4],model:11,modul:[6,7,8,9,10,11,12],music:[0,1,5,6,7,8,9,10,11,12],musictool:2,part_gener:10,player:7,playlist:[3,11],react:1,refresh_lastfm_stat:12,router:[3,4],run_user_playlist:12,spotfm:7,spotifi:7,stat:3,subpackag:[1,6],tabl:0,tag:[4,7,11],task:[9,12],tool:[0,1],update_tag:12,user:11,view:3}}) \ No newline at end of file diff --git a/src/MusicTools.MusicTools.html b/src/MusicTools.MusicTools.html new file mode 100644 index 0000000..5aeb057 --- /dev/null +++ b/src/MusicTools.MusicTools.html @@ -0,0 +1,158 @@ + + + + + + + + + MusicTools — Music Tools documentation + + + + + + + + + + + + + + + + + + + +
      +
      +
      + + +
      + +
      +

      MusicTools

      +
      +
      +class MusicTools(props)
      +

      Root component for app

      +
      +
      +MusicTools.componentDidMount()
      +

      Get user info from API on load

      +
      + +
      +
      +MusicTools.componentWillUnmount()
      +

      Cancel get user info request

      +
      + +
      +
      +MusicTools.getUserInfo()
      +

      Get user info from API

      +
      + +
      +
      +MusicTools.setOpen(bool)
      +

      Set whether side app drawer is open

      +
      +
      Arguments
      +
        +
      • bool (*) – Open state of side drawer

      • +
      +
      +
      +
      + +
      + +
      + + +
      + +
      +
      + +
      +
      + + + + + + + \ No newline at end of file diff --git a/src/MusicTools.Playlist.html b/src/MusicTools.Playlist.html new file mode 100644 index 0000000..71190fe --- /dev/null +++ b/src/MusicTools.Playlist.html @@ -0,0 +1,541 @@ + + + + + + + + + Playlist — Music Tools documentation + + + + + + + + + + + + + + + + + + + +
      +
      +
      + + +
      + +
      +

      Playlist

      +
      +

      Router

      +
      +
      +class Playlists()
      +

      Router for playlist lists page, includes new playlist page

      +
      + +
      +
      +

      Playlists List

      +
      +
      +class PlaylistsView(props)
      +

      Top-level object for hosting playlist card grid with new/run all buttons

      +

      Trigger loading playlist data during init

      +
      +
      Arguments
      +
        +
      • props (*) – Component properties

      • +
      +
      +
      +
      +
      +PlaylistsView.getPlaylists()
      +

      Get playlist data from API and set state with results

      +
      + +
      +
      +PlaylistsView.handleDeletePlaylist(name, event)
      +

      Post delete playlist action to API

      +
      +
      Arguments
      +
        +
      • name (*) – Playlist name to delete

      • +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +PlaylistsView.handleRunAll(event)
      +

      Post run all playlists action to API

      +
      +
      Arguments
      +
        +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +PlaylistsView.handleRunPlaylist(name, event)
      +

      Post run playlist action to API

      +
      +
      Arguments
      +
        +
      • name (*) – Playlist name to run

      • +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      + +
      +
      +class PlaylistGrid(props)
      +

      Playlist grid component for new/run all buttons and playlist cards

      +
      +
      Arguments
      +
        +
      • props (*) – Component properties

      • +
      +
      +
      Returns
      +

      Grid component

      +
      +
      +
      + +
      +
      +class PlaylistCard(props)
      +

      Playlist card component with view/run/delete buttons

      +
      +
      Arguments
      +
        +
      • props (*) – Component properties

      • +
      +
      +
      Returns
      +

      Playlist card component

      +
      +
      +
      + +
      + +

      Get URL for playlist given name

      +
      +
      Arguments
      +
        +
      • playlistName (*) – Subject playlist name

      • +
      +
      +
      Returns
      +

      URL string

      +
      +
      +
      + +
      +
      +

      New Playlist Card

      +
      +
      +class NewPlaylist(props)
      +

      New playlist card

      +
      +
      +NewPlaylist.componentDidMount()
      +

      Set initial state of playlist type description

      +
      + +
      +
      +NewPlaylist.handleInputChange(event)
      +

      Handle input changes by setting state

      +
      +
      Arguments
      +
        +
      • event (*) –

      • +
      +
      +
      +
      + +
      +
      +NewPlaylist.handleSubmit(event)
      +

      Validate input and make new playlist API request

      +
      +
      Arguments
      +
        +
      • event (*) –

      • +
      +
      +
      +
      + +
      +
      +NewPlaylist.setDescription(value)
      +

      Set playlist type description

      +
      +
      Arguments
      +
        +
      • value (*) – Playlist type string to match

      • +
      +
      +
      +
      + +
      + +
      +
      +

      Playlist Router

      +
      +
      +class PlaylistRouter.View(props)
      +

      Playlist view structure with tabs for view/editing and statistics

      +
      +
      +PlaylistRouter.View.handleChange(e, newValue)
      +

      Handle tab change event

      +
      +
      Arguments
      +
        +
      • e (*) – Event args

      • +
      • newValue (*) – New tab object

      • +
      +
      +
      +
      + +
      + +
      +
      +

      Playlist View

      +
      +
      +class Edit()
      +

      Main view/edit card for playlists

      +
      +
      +Edit.Edit
      +
      + +
      +
      +Edit.componentDidMount()
      +

      Get playlist info and all playlists from API, sort and set state

      +
      + +
      +
      +Edit.getPlaylistInfo()
      +

      Get API playlist info request

      +
      +
      Returns
      +

      Playlist info request

      +
      +
      +
      + +
      +
      +Edit.getPlaylists()
      +

      Get API list of playlist infos request

      +
      +
      Returns
      +

      Playlists info request

      +
      +
      +
      + +
      +
      +Edit.handleAddPart(event)
      +

      Handle adding new watched Spotify playlist name string

      +
      +
      Arguments
      +
        +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.handleAddReference(event)
      +

      Handle adding new watched music tools playlist reference

      +
      +
      Arguments
      +
        +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.handleCheckChange(event)
      +

      Handle checkbox state changes, make API requests

      +
      +
      Arguments
      +
        +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.handleInputChange(event)
      +

      Handle input box state changes, make API requests

      +
      +
      Arguments
      +
        +
      • event (*) –

      • +
      +
      +
      +
      + +
      +
      +Edit.handleRemovePart(id, event)
      +

      Handle removing watched Spotify playlist name string

      +
      +
      Arguments
      +
        +
      • id (*) – Subject playlist name

      • +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.handleRemoveReference(id, event)
      +

      Handle removing watched music tools playlist reference

      +
      +
      Arguments
      +
        +
      • id (*) – Subject playlist name

      • +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.handleRun(event)
      +

      Handle refreshing playlist action, checks for spotify link

      +
      +
      Arguments
      +
        +
      • event (*) – Event data

      • +
      +
      +
      +
      + +
      +
      +Edit.makeNetworkUpdate(changes)
      +

      Send playlist info updates to API

      +
      +
      Arguments
      +
        +
      • changes (*) – Dictionary of changes to make

      • +
      +
      +
      +
      + +
      + +
      +
      +ReferenceEntry(props)
      +

      Smart playlist entry in dropbox

      +
      +
      Arguments
      +
        +
      • props (*) – Properties containing name

      • +
      +
      +
      Returns
      +

      Dropbox option component

      +
      +
      +
      + +
      +
      +Edit.ListBlock(props)
      +

      Grid of cards for smart/Spotify playlist names with delete button

      +
      +
      Arguments
      +
        +
      • props (*) – Properties

      • +
      +
      +
      Returns
      +

      Grid component

      +
      +
      +
      + +
      +
      +Edit.BlockGridItem(props)
      +

      Smart/Spotify playlist card including name and delete button

      +
      +
      Arguments
      +
        +
      • props (*) – Properties

      • +
      +
      +
      Returns
      +

      Card component wrapped in grid cell

      +
      +
      +
      + +
      +
      +

      Playlist Stats View

      +
      +
      +class Count()
      +

      Playlist count tab for presenting listening stats

      +
      +
      +Count.Count
      +
      + +
      +
      +Count.getUserInfo()
      +

      Get playlist info with stats from API and set state if user has Last.fm username

      +
      + +
      +
      +Count.updateStats()
      +

      Make stats refresh request of API

      +
      + +
      + +
      +
      + + +
      + +
      +
      + +
      +
      + + + + + + + \ No newline at end of file diff --git a/src/MusicTools.Tag.html b/src/MusicTools.Tag.html new file mode 100644 index 0000000..09b88c2 --- /dev/null +++ b/src/MusicTools.Tag.html @@ -0,0 +1,240 @@ + + + + + + + + + Tag — Music Tools documentation + + + + + + + + + + + + + + + + + + +
      +
      +
      + + +
      + +
      +

      Tag

      +
      +

      Router

      +
      +
      +class TagRouter()
      +

      Tag router for directing between tag list and new

      +
      + +
      +
      +

      Tags List

      +
      +
      +class TagList(props)
      +

      Tag card list component

      +
      +
      +TagList.getTags()
      +

      Get tags info from API

      +
      + +
      +
      +TagList.handleDeleteTag(tag_id, event)
      +

      Make delete tag request of API

      +
      +
      Arguments
      +
        +
      • tag_id (*) – Tag ID

      • +
      • event (*) – Event Data

      • +
      +
      +
      +
      + +
      + +
      +
      +TagGrid(props)
      +

      Tag card grid component

      +
      +
      Arguments
      +
        +
      • props (*) – Properties

      • +
      +
      +
      Returns
      +

      Grid component

      +
      +
      +
      + +
      +
      +TagCard(props)
      +

      Tag card component

      +
      +
      Arguments
      +
        +
      • props (*) – Properties

      • +
      +
      +
      Returns
      +

      Card component

      +
      +
      +
      + +
      + +

      Map tag name to URL

      +
      +
      Arguments
      +
        +
      • tagName (*) – Subject tag name

      • +
      +
      +
      Returns
      +

      Tag URL

      +
      +
      +
      + +
      +
      +

      New Tag Card

      +
      +
      +class NewTag(props)
      +

      New tag card component

      +
      +
      +NewTag.handleInputChange(event)
      +

      Handle tag id input box state changes

      +
      +
      Arguments
      +
        +
      • event (*) –

      • +
      +
      +
      +
      + +
      +
      +NewTag.handleSubmit(event)
      +

      Validate input, make new tag API request

      +
      +
      Arguments
      +
        +
      • event (*) –

      • +
      +
      +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + +
      +
      + + + + + + + \ No newline at end of file diff --git a/src/MusicTools.html b/src/MusicTools.html new file mode 100644 index 0000000..69e9014 --- /dev/null +++ b/src/MusicTools.html @@ -0,0 +1,142 @@ + + + + + + + + + Music Tools React — Music Tools documentation + + + + + + + + + + + + + + + + + + + +
      +
      +
      + + + + +
      +
      + +
      +
      + + + + + + + \ No newline at end of file diff --git a/src/modules.html b/src/modules.html index a571cc8..72dbc57 100644 --- a/src/modules.html +++ b/src/modules.html @@ -90,6 +90,28 @@
    • music.music module
    • +
    • Music Tools React +
    • @@ -121,6 +143,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • diff --git a/src/music.api.html b/src/music.api.html index e18a267..b83f910 100644 --- a/src/music.api.html +++ b/src/music.api.html @@ -331,14 +331,15 @@

      Navigation

      Contents:

      diff --git a/src/music.auth.html b/src/music.auth.html index badd28c..be00c77 100644 --- a/src/music.auth.html +++ b/src/music.auth.html @@ -102,14 +102,15 @@

      Navigation

      Contents:

      diff --git a/src/music.cloud.html b/src/music.cloud.html index dc69610..b62a9a6 100644 --- a/src/music.cloud.html +++ b/src/music.cloud.html @@ -189,14 +189,15 @@

      Navigation

      Contents:

      diff --git a/src/music.db.html b/src/music.db.html index d98d0de..5e94828 100644 --- a/src/music.db.html +++ b/src/music.db.html @@ -176,14 +176,15 @@

      Navigation

      Contents:

      diff --git a/src/music.html b/src/music.html index 1db232d..6552bd9 100644 --- a/src/music.html +++ b/src/music.html @@ -143,6 +143,7 @@
    • music.db
    • music.model
    • music.tasks
    • +
    • Music Tools React
    • diff --git a/src/music.model.html b/src/music.model.html index d45fc6a..26641ce 100644 --- a/src/music.model.html +++ b/src/music.model.html @@ -525,14 +525,15 @@

      Navigation

      Contents:

      diff --git a/src/music.tasks.html b/src/music.tasks.html index b527cd6..bdc6d8e 100644 --- a/src/music.tasks.html +++ b/src/music.tasks.html @@ -15,6 +15,7 @@ + @@ -143,14 +144,15 @@

      Navigation

      Contents:

      @@ -160,6 +162,7 @@
    • music