From 4d5c94175b759ad8dd4fa836518517fe0ececb38 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Fri, 9 Dec 2022 08:51:42 +0000 Subject: [PATCH] deploy: 7a907e918ca502f37fb0fd48aef44c0f73127296 --- .doctrees/environment.pickle | Bin 187287 -> 192151 bytes .doctrees/src/music.model.doctree | Bin 139800 -> 148421 bytes .doctrees/src/music.tasks.doctree | Bin 34634 -> 35679 bytes genindex.html | 26 +++++++++++++++++----- objects.inv | Bin 2091 -> 2139 bytes searchindex.js | 2 +- src/modules.html | 1 + src/music.html | 7 ++++++ src/music.model.html | 35 ++++++++++++++++++++++++++++++ src/music.tasks.html | 2 +- 10 files changed, 65 insertions(+), 8 deletions(-) diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index aaf621495bcf80d3d1c7df7c6fbfc14543e08e2e..db94f36edb5c4ad3384159c8afd6a41a8895846a 100644 GIT binary patch literal 192151 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

OX&#m!EpwjB)bjS`%!aG+SRsiZq0a8oFa77KQ# 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 U)<7hZheH#c=qTD}cPjV)0n?vB;s5{u diff --git a/.doctrees/src/music.model.doctree b/.doctrees/src/music.model.doctree index 3d461ed78c651aff4e6ba40a2381cafe1d6a2947..ebad57d41cfe72412958d44b27fd573d6069c06e 100644 GIT binary patch delta 21178 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 diff --git a/.doctrees/src/music.tasks.doctree b/.doctrees/src/music.tasks.doctree index 7eeb9e34e59db99d4806245457d4fe58aa2ed172..87cb98163a01b5526471efa062e2b7a47567e746 100644 GIT binary patch delta 723 zcmX@r$8>)h6KezO)R69ttdokkV@nHC5=&C!OA^y3A7qmk2hvswb-AU*naO&&`6;P6 zdO#7qkjVulGMkSTEn;L0oa|sJhew(2*s_+)-NHO3D>VYA6OcEOBdlNF1^7^h4QhF=i6vnS9q? zjY*kja-uDm2eg&RkY}=@kC~_-4+BGKQpQ!y#woQ^G%{Fwn1M!2R`8Q%0W+#9G$$Lx zN>1kCQxFlx2m+u=13pvrnmURD(|ka!7VRYO>l>EvA=?u+`Jk22J wZ9F+n)nzh&ivvX72Bf;bWr`rkNm-dd+p^j~1XQzMD_nCj$g0h&S{E<^0H%oWK>z>% delta 499 zcmcaVjp)89y?_+S84L(tLkc#pH&KSG6Qu&M5mUkG2WW2m?t-Rf{7T@HSWn5)wO_1 zf*3!+1>bQ`&acvBV&Ivq=p#GXw?>8uC?fBx&%_52$@Mj6d^cG!Uw*QIIuFSB$&;(C znSjiNVzMAp8I>pJRcSGqBJ?Zsfb>s(Qz17w$Jc}j$UP`62i7f7yNEGm^6uK5V#PcR z3|UpoK%xZ1s)n#8$C)W?UR8IIiD@;@=Gw-`%xtY7*`~>9t!hrSU@btRw1+bd*8M=(@I2mQO&5 z$rlSHCU0ny2Z>#5n+6jTpWM{0%<&PZAVapNeDXmn
  • Admin (class in admin)
  • - - +
    • albums (music.model.tag.Tag attribute)
    • all_playlists_route() (in module music.api.api)
    • all_users_route() (in module music.api.api) +
    • +
    • apns_key_id (music.model.config.Config attribute) +
    • +
    • apns_team_id (music.model.config.Config attribute)
    • apns_tokens (music.model.user.User attribute)
    • @@ -250,15 +254,17 @@ - +
      -
      diff --git a/objects.inv b/objects.inv index 6e4b8af5952d75aacd00312fb829332a2469a3cd..f9e13b8534700f7658035bc2c1c4aeccdca53026 100644 GIT binary patch delta 1947 zcmV;M2W0rG5Ze%tr+*(7{C|42q?Xi>s-ZkxWv*?oTBV6rD1wBR zNGO;n3A30QLJ3!6M1cltWD+=OLi3VcX#JEOe1Q_srdh;yC_}r_v|hLZ)omJr?d+ZC z@*LV6aA}3qc3ROOp(=b=11~8AafTsZ_z5ROO1YN83W(N{9y<*mYn(N!K#}S5rqvIN zhS_MGJ9pka2}4$aRD~7=t+|lS?kl3no~SqWNBDy|?7!P|ik5eam`lA|#C$4g>Bjr! z$+jjZtIOrX%Dgs1P!sjK*1!wOLXIu4{gdbcGk>eoc$66pvlTW*?`#VTv3(n(jm{i1 zC~}u`YKF(UU4`n=38W@4 z`T$4-RmG8*^n!Hy9Mvp_^!;5Y;V@Cx#%G{06|-eY(Aj1WrcaFE2!^_MS^rM$D?I9_kM zcb%isA$M1jM`_4%RmTnMt&SU}YkwZt19!7ohX`r@XaAr7diQdAyF15xtoP?>v|77z zc!XsgCx1>;^yeEK^t+JTX7ey_*m1`Jhf(4dmSRXQN@GIDz0Kn)wKcnpq6Q9b^Nr}k zIUs*AKmVTM9_-3JjB7#(WhWJVvj_N6-(Qnq*{u{MC}llIkibhQj;4dwE`L#z<}m(9 zmW{Cq&=1onr`jGRZd%LYebe>8Hq664+prM-tQ7o2>qvS2$4I$1stIIQoqq*Q5+F6+z?yGBr%nHG^zaJZW^8=dv+bF z&r~IamS;QXGulv{lql_8cq(Gt+^`2s+36Lz7Dv(XipXm!B&br-)|FJefqa)#!xPx5 zJDuny5t#Clbrl$+I!e9%B*{(g#OcymP1$v47os;P+1{k!Js3 zce4H6z<6Wv6uMbYN_Y<6-$gvF_#Xef@;|HK&S)lw&WZ798>H#XR*`}AF;fl5gwyl5 ztxLh0T<-a8Rx0v*UMm!7T9&E>CYP`&X#I6n0+beGM9<3RG7NQXQ&q5&G>-JGZy}tY zYSnqa=ZG(dF)Rl57=OpEKM8O#wzPd|`SE_jUWWZk!Z+!?4!3uhijz2x1JEt2Dh}b6 zwm3$lgME*QZyEf8IuN4$tpOBWmsScJk00B-_5zv4RYlVV3URa_NyJ$Udd9v1G+~7; zPh>d;Owp(WB!4qBjnTpb@!OsOF$6xMAVVk(YMQm;eEYWKgMVzD5;xV(TL8)A$-FMXN(YD2rs+8=B28^^hDD19Gd2+33{K zmgGod@JTGF-zy@Qyg6(VdL2u15yg=ZK8DyuLkjmjf=a_0H-p~UNJO=(eH!3&YKg$i zu7x96)6no}yMI9YB2$FD>V`{8WvqdrH=s8}qCq#rxkt3Gi!B(3%IZDtIwJU+#Xf38 zf(ushU#LHFZ@d>1$wJ7Ci)}Z{RpeT z^4?|Pk71vhhYv%?XR#KjhimgCDStc&aHoLt=tfk@ZhweJVkH-4F%A#q6n%8{u&tFIlhw*#tX+7p2X=nX&cbVn{zS-4M(kCw(pf8&`j4ghr8|S_3 zFJ{9Fe@r(P4!k8tiS*O delta 1899 zcmV-x2bB2R5UUW7r+*$6{C|42q?XhsRYQ5!UcWS=>KJ6dW=fX75SyBxb;Ex0>7Rbi zJ{^4OZ-b&_M5*laQm}Y4FGbT*2E|DVu7OuBGtg&IJ)&)|MMEerP6iR8te|D$TAVsw zYASe;R1~Cb0~MvI-I$vS6j!1QmB5ASK#6O|T8b{TZY?8MMt_w?%3RxEwMrAMPy`7r zkx(#E5@sL}dV1)5g1gWf3 ze^)*X??(q6q(O~mYp7;->b#%8is8I#aT$Rw)(C#=wB}*lQ_AR|{_-WVly?>!$Lme^ zu5(m6bPOO)p5gg&3^-X;BGeS5FyR~?Em?%cQ2>6yK~IPdViiqtF3A}{jXgX-^5`Q&m4&#Sp z*%+Gu{V=%BnV?8_+r zEC2;#y#pYBnUI3a?~Z`8;(v8a5>vTHlgh83rr|lVXV;M!gKik zxc_Oz_xR_P|5*ihMl(6rO^i?5AWdg>V+@K{xTYGA38&|A=ahmqxj*wenN;NYyjCdE zv@BH%Ozt^T(E1yp1Sl=WpqZ8ZTNvuvrmA2kX&mWW-$FP))vEJ;&k)KxCZxD&d<~SM)uADjMKbIq$mW;fkQ@~Qa;uBk=+x1c zA4wBf-n%UPS>RLi@ZrYzEY}!+@dUI)up_GOQv-7 zg^?q$?9=CLNOkXJ|JZ*Ix7R9B+LtD8e5Dt`MFa9+%73`RYpuMV?F-*wdx0-TK>5Azt%4cQPKn%zDh7C~I=%3FL_Hc2>4LqgVt leW*w_d>lF~mY8+bZS~0}35SLCu4`|GolO!B{{vpqi6;f4t3dz& diff --git a/searchindex.js b/searchindex.js index b6bfda1..056294c 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "src/admin", "src/modules", "src/music", "src/music.api", "src/music.auth", "src/music.cloud", "src/music.db", "src/music.model", "src/music.tasks"], "filenames": ["index.rst", "src/admin.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"], "titles": ["Mixonomer", "admin script", "Mixonomer Modules", "Flask Backend", "music.api", "music.auth", "music.cloud", "music.db", "music.model", "music.tasks"], "terms": {"py": [0, 1], "music": [0, 2], "api": [0, 2, 3], "auth": [0, 2, 3, 4], "cloud": [0, 1, 2, 3, 8], "db": [0, 2, 3], "model": [0, 2, 3, 7], "task": [0, 1, 2, 3, 8], "root": [0, 2], "modul": 0, "admin": [0, 2, 3], "script": 0, "doc": [0, 1], "folders_to_ignor": [0, 1], "run": [0, 1, 3, 6, 9], "test": [0, 1], "all": [0, 4, 6, 8], "flask": [0, 1, 2, 4], "backend": [0, 2], "i": 0, "web": 0, "app": [0, 1, 3, 4, 8, 9], "creat": [0, 3, 6, 9], "smart": [0, 7, 8, 9], "spotifi": [0, 2, 3, 7, 9], "playlist": [0, 1, 2, 3, 4, 6, 7, 9], "The": 0, "base": [0, 1, 7, 8], "spotframework": [0, 1, 7, 9], "fmframework": [0, 1, 7, 9], "interfac": [0, 7], "last": [0, 9], "fm": [0, 2, 3, 9], "current": 0, "host": 0, "googl": 0, "": [0, 6, 7, 8, 9], "platform": 0, "compos": 0, "server": 0, "fireo": [0, 8], "orm": [0, 7, 8], "layer": [0, 7, 8], "longer": 0, "dispatch": 0, "function": [0, 1, 2, 3, 7, 8, 9], "frontend": 0, "react": 0, "materi": 0, "ui": 0, "compon": [0, 1, 7], "axio": 0, "http": [0, 4, 5], "request": [0, 5], "index": 0, "search": 0, "page": [0, 5], "class": [1, 7, 8], "completekei": 1, "tab": 1, "stdin": 1, "none": [1, 4, 6, 7, 8, 9], "stdout": 1, "cmd": 1, "compile_frontend": 1, "compil": 1, "sass": 1, "css": 1, "npm": 1, "build": 1, "copy_main_fil": 1, "path": [1, 8], "copi": 1, "main": 1, "file": 1, "correspond": 1, "python": 1, "stage": 1, "deploy_funct": 1, "name": [1, 3, 6, 7, 8, 9], "timeout": 1, "int": [1, 6], "60": 1, "region": 1, "europ": 1, "west2": 1, "deploi": 1, "requir": 1, "environ": [1, 6], "variabl": 1, "do_app": 1, "arg": [1, 4, 8], "front": 1, "end": 1, "engin": 1, "do_cron_funct": 1, "background": 1, "includ": [1, 5, 6, 9], "cron": 1, "job": 1, "schedul": 1, "updat": [1, 6, 7, 8, 9], "action": 1, "run_all_playlist": 1, "run_all_playlist_stat": 1, "run_all_tag": 1, "do_doc": 1, "document": [1, 7], "us": [1, 7], "sphinx": 1, "do_exit": 1, "exit": 1, "do_main_group": 1, "primari": 1, "run_user_playlist": [1, 2, 3], "update_tag": [1, 2, 3, 6], "do_playlist": 1, "do_playlist_cron": 1, "do_playlist_stats_cron": 1, "do_prepare_local_stag": 1, "prepar": 1, "local": 1, "work": 1, "directori": 1, "deploy": 1, "static": 1, "sarsoolib": 1, "inject": 1, "do_pydepend": 1, "gener": [1, 3, 5, 9], "export": 1, "txt": 1, "from": [1, 7], "poetri": 1, "manifest": 1, "do_renam": 1, "renam": 1, "firestor": [1, 7, 8], "do_run": 1, "do_sass": 1, "do_set_project": 1, "set": [1, 8], "project": 1, "gcloud": 1, "consol": [1, 3], "do_tag": 1, "do_tags_cron": 1, "do_test": 1, "unit": 1, "do_watchsass": 1, "watch": 1, "argument": 1, "begin": 1, "sourc": 1, "folder": 1, "chang": 1, "export_filtered_depend": 1, "function_deploi": 1, "function_id": 1, "initi": 1, "command": 1, "paramet": [1, 4, 6, 7, 8, 9], "str": [1, 6, 7, 8, 9], "id": [1, 6], "intro": 1, "mixonom": [1, 3, 7], "help": 1, "spotfm": [1, 2, 3], "prompt": 1, "venv": 1, "git": 1, "idea": 1, "node_modul": 1, "content": [2, 3], "get_task": [2, 3, 4], "all_playlists_rout": [2, 3, 4], "all_users_rout": [2, 3, 4], "change_password": [2, 3, 4], "imag": [2, 3, 4], "playlist_get_delete_rout": [2, 3, 4], "playlist_post_put_rout": [2, 3, 4], "run_playlist": [2, 3, 4], "run_playlist_task": [2, 3, 4], "run_us": [2, 3, 4], "run_user_task": [2, 3, 4], "user_delete_rout": [2, 3, 4], "user_rout": [2, 3, 4], "decor": [2, 3], "admin_requir": [2, 3, 4], "check_dict": [2, 3, 4], "cloud_task": [2, 3, 4], "gae_cron": [2, 3, 4], "is_basic_auth": [2, 3, 4], "is_jwt_auth": [2, 3, 4], "is_logged_in": [2, 3, 4], "jwt_requir": [2, 3, 4], "lastfm_username_requir": [2, 3, 4], "login_or_basic_auth": [2, 3, 4], "login_or_jwt": [2, 3, 4], "login_requir": [2, 3, 4], "no_cach": [2, 3, 4], "no_locked_us": [2, 3, 4], "spotify_link_requir": [2, 3, 4], "validate_arg": [2, 3, 4], "validate_json": [2, 3, 4], "daily_scrobbl": [2, 3, 4], "player": [2, 3], "next_track": [2, 3, 4], "plai": [2, 3, 4], "shuffl": [2, 3, 4, 8], "volum": [2, 3, 4], "count": [2, 3, 4, 8], "playlist_refresh": [2, 3, 4], "run_playlist_album_task": [2, 3, 4], "run_playlist_artist_task": [2, 3, 4], "run_playlist_track_task": [2, 3, 4], "sort": [2, 3, 4, 8], "tag": [2, 3, 6, 9], "delete_tag": [2, 3, 4], "get_tag": [2, 3, 4], "post_tag": [2, 3, 4], "put_tag": [2, 3, 4], "run_tag_task": [2, 3, 4], "tag_refresh": [2, 3, 4], "tag_rout": [2, 3, 4], "deauth": [2, 3, 5], "jwt_token": [2, 3, 5], "login": [2, 3, 5], "logout": [2, 3, 5], "regist": [2, 3, 5], "token": [2, 3, 5], "offload_or_run_user_playlist": [2, 3, 6], "queue_run_user_playlist": [2, 3, 6], "run_user_playlist_funct": [2, 3, 6], "refresh_all_user_playlist_stat": [2, 3, 6], "refresh_playlist_task": [2, 3, 6], "refresh_user_playlist_stat": [2, 3, 6], "refresh_user_stats_task": [2, 3, 6], "run_user_playlist_task": [2, 3, 6], "update_all_user_playlist": [2, 3, 6], "update_all_user_tag": [2, 3, 6], "update_playlist": [2, 3, 6], "databas": [2, 3], "databaseus": [2, 3, 7], "get_authed_lastfm_network": [2, 3, 7], "get_authed_spotify_network": [2, 3, 7], "refresh_token_database_callback": [2, 3, 7], "part_gener": [2, 3], "partgener": [2, 3, 7], "config": [2, 3], "user": [2, 3, 4, 6, 7, 9], "create_playlist": [2, 3], "refresh_lastfm_stat": [2, 3], "refresh_lastfm_album_stat": [2, 3, 9], "refresh_lastfm_artist_stat": [2, 3, 9], "refresh_lastfm_track_stat": [2, 3, 9], "init_log": [2, 3], "create_app": [2, 3], "user_id": [3, 7], "get_recursive_part": [3, 7], "process_reference_by_nam": [3, 7], "process_reference_by_refer": [3, 7], "reset": [3, 5, 7], "meta": [3, 8], "collect": [3, 8], "collection_nam": [3, 8], "jwt_default_length": [3, 8], "jwt_max_length": [3, 8], "playlist_cloud_operating_mod": [3, 8], "add_last_month": [3, 8], "add_this_month": [3, 8], "chart_limit": [3, 8], "chart_rang": [3, 8], "day_boundari": [3, 8], "description_overwrit": [3, 8], "description_suffix": [3, 8], "include_library_track": [3, 8], "include_recommend": [3, 8], "include_spotify_own": [3, 8], "last_upd": [3, 8], "lastfm_stat_album_count": [3, 8], "lastfm_stat_album_perc": [3, 8], "lastfm_stat_artist_count": [3, 8], "lastfm_stat_artist_perc": [3, 8], "lastfm_stat_count": [3, 8], "lastfm_stat_last_refresh": [3, 8], "lastfm_stat_perc": [3, 8], "mutable_kei": [3, 8], "part": [3, 8], "playlist_refer": [3, 8], "recommendation_sampl": [3, 8], "to_dict": [3, 8], "type": [3, 4, 5, 7, 8, 9], "uri": [3, 8, 9], "default": [3, 4, 6, 8, 9], "release_d": [3, 8], "album": [3, 8], "artist": [3, 8], "proport": [3, 8], "tag_id": [3, 4, 6, 8], "time_object": [3, 8], "total_tim": [3, 8], "total_time_m": [3, 8], "total_user_scrobbl": [3, 8], "track": [3, 8], "usernam": [3, 6, 7, 8, 9], "access_token": [3, 7, 8], "apns_token": [3, 8], "check_password": [3, 8], "email": [3, 8], "get_playlist": [3, 8], "last_keygen": [3, 8], "last_login": [3, 8], "last_refresh": [3, 8], "lastfm_usernam": [3, 8], "lock": [3, 8], "password": [3, 5, 8], "refresh_token": [3, 7, 8], "spotify_link": [3, 8], "token_expiri": [3, 8], "valid": [3, 8], "contain": [3, 8], "top": 3, "level": [3, 8], "load": [3, 4], "blueprint": [3, 4], "initialis": 3, "log": 3, "stack": 3, "fals": 3, "retriev": [3, 4, 5, 7, 9], "readi": 3, "return": [3, 4, 5, 7, 8, 9], "endpoint": [4, 5], "dict": [4, 8], "given": [4, 6, 7], "option": [4, 6, 7, 8, 9], "descript": [4, 8, 9], "respons": [4, 5], "func": 4, "request_param": 4, "expected_arg": 4, "kwarg": [4, 8], "secur": 5, "relat": 5, "jwt": 5, "post": 5, "rout": 5, "allow": 5, "html": 5, "submiss": 5, "result": 5, "home": 5, "redirect": 5, "get": [5, 7, 8], "infrastuctur": 6, "code": 6, "hand": 6, "off": 6, "playlist_nam": [6, 8, 9], "queue": 6, "serverless": 6, "subject": [6, 7, 8, 9], "gcp": 6, "long": [6, 9], "oper": [6, 8, 9], "stat": 6, "refresh": 6, "delai": 6, "0": 6, "second": 6, "execut": 6, "depend": [6, 7], "asid": 7, "client_id": 7, "client_secret": 7, "networkus": 7, "ad": 7, "network": [7, 9], "an": [7, 8], "authent": 7, "fmnetwork": 7, "spotifynetwork": 7, "callback": 7, "handl": 7, "when": [7, 9], "credemti": 7, "store": 7, "newli": 7, "credenti": 7, "object": [7, 8, 9], "resolv": 7, "other": 7, "referenc": 7, "list": [7, 8], "recurs": 7, "ref": 7, "documentrefer": 7, "resolut": 7, "walk": 7, "intern": 7, "state": 7, "data": 8, "servic": 8, "structur": 8, "kei": 8, "correct": 8, "manag": 8, "determin": 8, "whether": 8, "ar": 8, "done": 8, "convert": 8, "valu": 8, "enum": 8, "enumer": 8, "1": 8, "3": 8, "2": 8, "spotify_us": 8, "single_return": 8, "true": 8, "raise_error": 8, "case": 8, "sensit": 8, "Will": 8, "exact": 8, "match": 8, "possibl": 8, "otherwis": 8, "first": 8, "insensit": 8, "bool": 8, "best": 8, "found": 8, "rais": [8, 9], "nameerror": [8, 9], "noth": 8, "If": 8, "fullplaylist": 9, "new": 9, "account": 9, "For": 9, "spotnet": 9, "fmnet": 9, "upad": 9, "spotnetwork": 9, "No": 9, "provid": 9, "attributeerror": 9, "ha": 9, "avail": 9, "e": 9, "error": 9}, "objects": {"": [[1, 0, 0, "-", "admin"], [3, 0, 0, "-", "music"]], "admin": [[1, 1, 1, "", "Admin"], [1, 4, 1, "", "docs"], [1, 5, 1, "", "folders_to_ignore"], [1, 4, 1, "", "run"], [1, 4, 1, "", "test"]], "admin.Admin": [[1, 2, 1, "", "compile_frontend"], [1, 2, 1, "", "copy_main_file"], [1, 2, 1, "", "deploy_function"], [1, 2, 1, "", "do_app"], [1, 2, 1, "", "do_cron_functions"], [1, 2, 1, "", "do_docs"], [1, 2, 1, "", "do_exit"], [1, 2, 1, "", "do_main_group"], [1, 2, 1, "", "do_playlist"], [1, 2, 1, "", "do_playlist_cron"], [1, 2, 1, "", "do_playlist_stats_cron"], [1, 2, 1, "", "do_prepare_local_stage"], [1, 2, 1, "", "do_pydepend"], [1, 2, 1, "", "do_rename"], [1, 2, 1, "", "do_run"], [1, 2, 1, "", "do_sass"], [1, 2, 1, "", "do_set_project"], [1, 2, 1, "", "do_tag"], [1, 2, 1, "", "do_tags_cron"], [1, 2, 1, "", "do_test"], [1, 2, 1, "", "do_watchsass"], [1, 2, 1, "", "export_filtered_dependencies"], [1, 2, 1, "", "function_deploy"], [1, 3, 1, "", "intro"], [1, 3, 1, "", "locals"], [1, 3, 1, "", "prompt"]], "music": [[4, 0, 0, "-", "api"], [5, 0, 0, "-", "auth"], [6, 0, 0, "-", "cloud"], [7, 0, 0, "-", "db"], [3, 4, 1, "", "init_log"], [8, 0, 0, "-", "model"], [3, 0, 0, "-", "music"], [9, 0, 0, "-", "tasks"]], "music.api": [[4, 0, 0, "-", "admin"], [4, 0, 0, "-", "api"], [4, 0, 0, "-", "decorators"], [4, 0, 0, "-", "fm"], [4, 0, 0, "-", "player"], [4, 0, 0, "-", "spotfm"], [4, 0, 0, "-", "spotify"], [4, 0, 0, "-", "tag"]], "music.api.admin": [[4, 4, 1, "", "get_tasks"]], "music.api.api": [[4, 4, 1, "", "all_playlists_route"], [4, 4, 1, "", "all_users_route"], [4, 4, 1, "", "change_password"], [4, 4, 1, "", "image"], [4, 4, 1, "", "playlist_get_delete_route"], [4, 4, 1, "", "playlist_post_put_route"], [4, 4, 1, "", "run_playlist"], [4, 4, 1, "", "run_playlist_task"], [4, 4, 1, "", "run_user"], [4, 4, 1, "", "run_user_task"], [4, 4, 1, "", "run_users"], [4, 4, 1, "", "user_delete_route"], [4, 4, 1, "", "user_route"]], "music.api.decorators": [[4, 4, 1, "", "admin_required"], [4, 4, 1, "", "check_dict"], [4, 4, 1, "", "cloud_task"], [4, 4, 1, "", "gae_cron"], [4, 4, 1, "", "is_basic_authed"], [4, 4, 1, "", "is_jwt_authed"], [4, 4, 1, "", "is_logged_in"], [4, 4, 1, "", "jwt_required"], [4, 4, 1, "", "lastfm_username_required"], [4, 4, 1, "", "login_or_basic_auth"], [4, 4, 1, "", "login_or_jwt"], [4, 4, 1, "", "login_required"], [4, 4, 1, "", "no_cache"], [4, 4, 1, "", "no_locked_users"], [4, 4, 1, "", "spotify_link_required"], [4, 4, 1, "", "validate_args"], [4, 4, 1, "", "validate_json"]], "music.api.fm": [[4, 4, 1, "", "daily_scrobbles"]], "music.api.player": [[4, 4, 1, "", "next_track"], [4, 4, 1, "", "play"], [4, 4, 1, "", "shuffle"], [4, 4, 1, "", "volume"]], "music.api.spotfm": [[4, 4, 1, "", "count"], [4, 4, 1, "", "playlist_refresh"], [4, 4, 1, "", "run_playlist_album_task"], [4, 4, 1, "", "run_playlist_artist_task"], [4, 4, 1, "", "run_playlist_track_task"], [4, 4, 1, "", "run_user"], [4, 4, 1, "", "run_user_task"], [4, 4, 1, "", "run_users"]], "music.api.spotify": [[4, 4, 1, "", "sort"]], "music.api.tag": [[4, 4, 1, "", "delete_tag"], [4, 4, 1, "", "get_tag"], [4, 4, 1, "", "post_tag"], [4, 4, 1, "", "put_tag"], [4, 4, 1, "", "run_tag_task"], [4, 4, 1, "", "tag_refresh"], [4, 4, 1, "", "tag_route"], [4, 4, 1, "", "tags"]], "music.auth": [[5, 0, 0, "-", "auth"]], "music.auth.auth": [[5, 4, 1, "", "auth"], [5, 4, 1, "", "deauth"], [5, 4, 1, "", "jwt_token"], [5, 4, 1, "", "login"], [5, 4, 1, "", "logout"], [5, 4, 1, "", "register"], [5, 4, 1, "", "token"]], "music.cloud": [[6, 0, 0, "-", "function"], [6, 4, 1, "", "offload_or_run_user_playlist"], [6, 4, 1, "", "queue_run_user_playlist"], [6, 0, 0, "-", "tasks"]], "music.cloud.function": [[6, 4, 1, "", "run_user_playlist_function"], [6, 4, 1, "", "update_tag"]], "music.cloud.tasks": [[6, 4, 1, "", "refresh_all_user_playlist_stats"], [6, 4, 1, "", "refresh_playlist_task"], [6, 4, 1, "", "refresh_user_playlist_stats"], [6, 4, 1, "", "refresh_user_stats_task"], [6, 4, 1, "", "run_user_playlist_task"], [6, 4, 1, "", "update_all_user_playlists"], [6, 4, 1, "", "update_all_user_tags"], [6, 4, 1, "", "update_playlists"]], "music.db": [[7, 0, 0, "-", "database"], [7, 0, 0, "-", "part_generator"]], "music.db.database": [[7, 1, 1, "", "DatabaseUser"], [7, 4, 1, "", "get_authed_lastfm_network"], [7, 4, 1, "", "get_authed_spotify_network"], [7, 4, 1, "", "refresh_token_database_callback"]], "music.db.database.DatabaseUser": [[7, 3, 1, "", "user_id"]], "music.db.part_generator": [[7, 1, 1, "", "PartGenerator"]], "music.db.part_generator.PartGenerator": [[7, 2, 1, "", "get_recursive_parts"], [7, 2, 1, "", "process_reference_by_name"], [7, 2, 1, "", "process_reference_by_reference"], [7, 2, 1, "", "reset"]], "music.model": [[8, 0, 0, "-", "config"], [8, 0, 0, "-", "playlist"], [8, 0, 0, "-", "tag"], [8, 0, 0, "-", "user"]], "music.model.config": [[8, 1, 1, "", "Config"]], "music.model.config.Config": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "jwt_default_length"], [8, 3, 1, "", "jwt_max_length"], [8, 3, 1, "", "playlist_cloud_operating_mode"]], "music.model.config.Config.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.playlist": [[8, 1, 1, "", "Playlist"], [8, 1, 1, "", "Sort"]], "music.model.playlist.Playlist": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "add_last_month"], [8, 3, 1, "", "add_this_month"], [8, 3, 1, "", "chart_limit"], [8, 3, 1, "", "chart_range"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "day_boundary"], [8, 3, 1, "", "description_overwrite"], [8, 3, 1, "", "description_suffix"], [8, 3, 1, "", "include_library_tracks"], [8, 3, 1, "", "include_recommendations"], [8, 3, 1, "", "include_spotify_owned"], [8, 3, 1, "", "last_updated"], [8, 3, 1, "", "lastfm_stat_album_count"], [8, 3, 1, "", "lastfm_stat_album_percent"], [8, 3, 1, "", "lastfm_stat_artist_count"], [8, 3, 1, "", "lastfm_stat_artist_percent"], [8, 3, 1, "", "lastfm_stat_count"], [8, 3, 1, "", "lastfm_stat_last_refresh"], [8, 3, 1, "", "lastfm_stat_percent"], [8, 3, 1, "", "mutable_keys"], [8, 3, 1, "", "name"], [8, 3, 1, "", "parts"], [8, 3, 1, "", "playlist_references"], [8, 3, 1, "", "recommendation_sample"], [8, 3, 1, "", "shuffle"], [8, 3, 1, "", "sort"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "type"], [8, 3, 1, "", "uri"]], "music.model.playlist.Playlist.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.playlist.Sort": [[8, 3, 1, "", "default"], [8, 3, 1, "", "release_date"], [8, 3, 1, "", "shuffle"]], "music.model.tag": [[8, 1, 1, "", "Tag"]], "music.model.tag.Tag": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "albums"], [8, 3, 1, "", "artists"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "count"], [8, 3, 1, "", "last_updated"], [8, 3, 1, "", "name"], [8, 3, 1, "", "proportion"], [8, 3, 1, "", "tag_id"], [8, 3, 1, "", "time_objects"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "total_time"], [8, 3, 1, "", "total_time_ms"], [8, 3, 1, "", "total_user_scrobbles"], [8, 3, 1, "", "tracks"], [8, 3, 1, "", "username"]], "music.model.tag.Tag.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.user": [[8, 1, 1, "", "User"]], "music.model.user.User": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "access_token"], [8, 3, 1, "", "apns_tokens"], [8, 2, 1, "", "check_password"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "email"], [8, 2, 1, "", "get_playlist"], [8, 2, 1, "", "get_playlists"], [8, 3, 1, "", "last_keygen"], [8, 3, 1, "", "last_login"], [8, 3, 1, "", "last_refreshed"], [8, 3, 1, "", "lastfm_username"], [8, 3, 1, "", "locked"], [8, 3, 1, "", "password"], [8, 3, 1, "", "refresh_token"], [8, 3, 1, "", "spotify_linked"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "token_expiry"], [8, 3, 1, "", "type"], [8, 3, 1, "", "username"], [8, 3, 1, "", "validated"]], "music.model.user.User.Meta": [[8, 3, 1, "", "collection_name"]], "music.music": [[3, 4, 1, "", "create_app"]], "music.tasks": [[9, 0, 0, "-", "create_playlist"], [9, 0, 0, "-", "refresh_lastfm_stats"], [9, 0, 0, "-", "run_user_playlist"], [9, 0, 0, "-", "update_tag"]], "music.tasks.create_playlist": [[9, 4, 1, "", "create_playlist"]], "music.tasks.refresh_lastfm_stats": [[9, 4, 1, "", "refresh_lastfm_album_stats"], [9, 4, 1, "", "refresh_lastfm_artist_stats"], [9, 4, 1, "", "refresh_lastfm_track_stats"]], "music.tasks.run_user_playlist": [[9, 4, 1, "", "run_user_playlist"]], "music.tasks.update_tag": [[9, 4, 1, "", "update_tag"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "data", "Python data"]}, "titleterms": {"mixonom": [0, 2], "content": [0, 4, 5, 6, 7, 8, 9], "indic": 0, "tabl": 0, "admin": [1, 4], "script": 1, "modul": [2, 3, 4, 5, 6, 7, 8, 9], "flask": 3, "backend": 3, "music": [3, 4, 5, 6, 7, 8, 9], "root": 3, "api": 4, "decor": 4, "fm": 4, "player": 4, "spotfm": 4, "spotifi": 4, "tag": [4, 8], "auth": 5, "cloud": 6, "function": 6, "task": [6, 9], "db": 7, "databas": 7, "part_gener": 7, "model": 8, "config": 8, "playlist": 8, "user": 8, "create_playlist": 9, "refresh_lastfm_stat": 9, "run_user_playlist": 9, "update_tag": 9}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Mixonomer": [[0, "mixonomer"], [0, "id2"]], "Contents:": [[0, null]], "Indices and tables": [[0, "indices-and-tables"]], "admin script": [[1, "module-admin"]], "Mixonomer Modules": [[2, "mixonomer-modules"]], "Flask Backend": [[3, "flask-backend"]], "music Root Module": [[3, "module-music"]], "music.api": [[4, "music-api"]], "Module contents": [[4, "module-music.api"], [5, "module-music.auth"], [6, "module-music.cloud"], [7, "module-music.db"], [8, "module-music.model"], [9, "module-music.tasks"]], "api.admin": [[4, "module-music.api.admin"]], "api.api": [[4, "module-music.api.api"]], "api.decorators": [[4, "module-music.api.decorators"]], "api.fm": [[4, "module-music.api.fm"]], "api.player": [[4, "module-music.api.player"]], "api.spotfm": [[4, "module-music.api.spotfm"]], "api.spotify": [[4, "module-music.api.spotify"]], "api.tag": [[4, "module-music.api.tag"]], "music.auth": [[5, "music-auth"]], "auth.auth": [[5, "module-music.auth.auth"]], "music.cloud": [[6, "music-cloud"]], "cloud.function": [[6, "module-music.cloud.function"]], "cloud.tasks": [[6, "module-music.cloud.tasks"]], "music.db": [[7, "music-db"]], "db.database": [[7, "module-music.db.database"]], "db.part_generator": [[7, "module-music.db.part_generator"]], "music.model": [[8, "music-model"]], "model.config": [[8, "module-music.model.config"]], "model.playlist": [[8, "module-music.model.playlist"]], "model.tag": [[8, "module-music.model.tag"]], "model.user": [[8, "module-music.model.user"]], "music.tasks": [[9, "music-tasks"]], "tasks.create_playlist": [[9, "module-music.tasks.create_playlist"]], "tasks.refresh_lastfm_stats": [[9, "module-music.tasks.refresh_lastfm_stats"]], "tasks.run_user_playlist": [[9, "module-music.tasks.run_user_playlist"]], "tasks.update_tag": [[9, "module-music.tasks.update_tag"]]}, "indexentries": {"admin (class in admin)": [[1, "admin.Admin"]], "admin": [[1, "module-admin"]], "compile_frontend() (admin.admin method)": [[1, "admin.Admin.compile_frontend"]], "copy_main_file() (admin.admin method)": [[1, "admin.Admin.copy_main_file"]], "deploy_function() (admin.admin method)": [[1, "admin.Admin.deploy_function"]], "do_app() (admin.admin method)": [[1, "admin.Admin.do_app"]], "do_cron_functions() (admin.admin method)": [[1, "admin.Admin.do_cron_functions"]], "do_docs() (admin.admin method)": [[1, "admin.Admin.do_docs"]], "do_exit() (admin.admin method)": [[1, "admin.Admin.do_exit"]], "do_main_group() (admin.admin method)": [[1, "admin.Admin.do_main_group"]], "do_playlist() (admin.admin method)": [[1, "admin.Admin.do_playlist"]], "do_playlist_cron() (admin.admin method)": [[1, "admin.Admin.do_playlist_cron"]], "do_playlist_stats_cron() (admin.admin method)": [[1, "admin.Admin.do_playlist_stats_cron"]], "do_prepare_local_stage() (admin.admin method)": [[1, "admin.Admin.do_prepare_local_stage"]], "do_pydepend() (admin.admin method)": [[1, "admin.Admin.do_pydepend"]], "do_rename() (admin.admin method)": [[1, "admin.Admin.do_rename"]], "do_run() (admin.admin method)": [[1, "admin.Admin.do_run"]], "do_sass() (admin.admin method)": [[1, "admin.Admin.do_sass"]], "do_set_project() (admin.admin method)": [[1, "admin.Admin.do_set_project"]], "do_tag() (admin.admin method)": [[1, "admin.Admin.do_tag"]], "do_tags_cron() (admin.admin method)": [[1, "admin.Admin.do_tags_cron"]], "do_test() (admin.admin method)": [[1, "admin.Admin.do_test"]], "do_watchsass() (admin.admin method)": [[1, "admin.Admin.do_watchsass"]], "docs() (in module admin)": [[1, "admin.docs"]], "export_filtered_dependencies() (admin.admin method)": [[1, "admin.Admin.export_filtered_dependencies"]], "folders_to_ignore (in module admin)": [[1, "admin.folders_to_ignore"]], "function_deploy() (admin.admin method)": [[1, "admin.Admin.function_deploy"]], "intro (admin.admin attribute)": [[1, "admin.Admin.intro"]], "locals (admin.admin attribute)": [[1, "admin.Admin.locals"]], "module": [[1, "module-admin"], [3, "module-music"], [3, "module-music.music"], [4, "module-music.api"], [4, "module-music.api.admin"], [4, "module-music.api.api"], [4, "module-music.api.decorators"], [4, "module-music.api.fm"], [4, "module-music.api.player"], [4, "module-music.api.spotfm"], [4, "module-music.api.spotify"], [4, "module-music.api.tag"], [5, "module-music.auth"], [5, "module-music.auth.auth"], [6, "module-music.cloud"], [6, "module-music.cloud.function"], [6, "module-music.cloud.tasks"], [7, "module-music.db"], [7, "module-music.db.database"], [7, "module-music.db.part_generator"], [8, "module-music.model"], [8, "module-music.model.config"], [8, "module-music.model.playlist"], [8, "module-music.model.tag"], [8, "module-music.model.user"], [9, "module-music.tasks"], [9, "module-music.tasks.create_playlist"], [9, "module-music.tasks.refresh_lastfm_stats"], [9, "module-music.tasks.run_user_playlist"], [9, "module-music.tasks.update_tag"]], "prompt (admin.admin attribute)": [[1, "admin.Admin.prompt"]], "run() (in module admin)": [[1, "admin.run"]], "test() (in module admin)": [[1, "admin.test"]], "create_app() (in module music.music)": [[3, "music.music.create_app"]], "init_log() (in module music)": [[3, "music.init_log"]], "music": [[3, "module-music"]], "music.music": [[3, "module-music.music"]], "admin_required() (in module music.api.decorators)": [[4, "music.api.decorators.admin_required"]], "all_playlists_route() (in module music.api.api)": [[4, "music.api.api.all_playlists_route"]], "all_users_route() (in module music.api.api)": [[4, "music.api.api.all_users_route"]], "change_password() (in module music.api.api)": [[4, "music.api.api.change_password"]], "check_dict() (in module music.api.decorators)": [[4, "music.api.decorators.check_dict"]], "cloud_task() (in module music.api.decorators)": [[4, "music.api.decorators.cloud_task"]], "count() (in module music.api.spotfm)": [[4, "music.api.spotfm.count"]], "daily_scrobbles() (in module music.api.fm)": [[4, "music.api.fm.daily_scrobbles"]], "delete_tag() (in module music.api.tag)": [[4, "music.api.tag.delete_tag"]], "gae_cron() (in module music.api.decorators)": [[4, "music.api.decorators.gae_cron"]], "get_tag() (in module music.api.tag)": [[4, "music.api.tag.get_tag"]], "get_tasks() (in module music.api.admin)": [[4, "music.api.admin.get_tasks"]], "image() (in module music.api.api)": [[4, "music.api.api.image"]], "is_basic_authed() (in module music.api.decorators)": [[4, "music.api.decorators.is_basic_authed"]], "is_jwt_authed() (in module music.api.decorators)": [[4, "music.api.decorators.is_jwt_authed"]], "is_logged_in() (in module music.api.decorators)": [[4, "music.api.decorators.is_logged_in"]], "jwt_required() (in module music.api.decorators)": [[4, "music.api.decorators.jwt_required"]], "lastfm_username_required() (in module music.api.decorators)": [[4, "music.api.decorators.lastfm_username_required"]], "login_or_basic_auth() (in module music.api.decorators)": [[4, "music.api.decorators.login_or_basic_auth"]], "login_or_jwt() (in module music.api.decorators)": [[4, "music.api.decorators.login_or_jwt"]], "login_required() (in module music.api.decorators)": [[4, "music.api.decorators.login_required"]], "music.api": [[4, "module-music.api"]], "music.api.admin": [[4, "module-music.api.admin"]], "music.api.api": [[4, "module-music.api.api"]], "music.api.decorators": [[4, "module-music.api.decorators"]], "music.api.fm": [[4, "module-music.api.fm"]], "music.api.player": [[4, "module-music.api.player"]], "music.api.spotfm": [[4, "module-music.api.spotfm"]], "music.api.spotify": [[4, "module-music.api.spotify"]], "music.api.tag": [[4, "module-music.api.tag"]], "next_track() (in module music.api.player)": [[4, "music.api.player.next_track"]], "no_cache() (in module music.api.decorators)": [[4, "music.api.decorators.no_cache"]], "no_locked_users() (in module music.api.decorators)": [[4, "music.api.decorators.no_locked_users"]], "play() (in module music.api.player)": [[4, "music.api.player.play"]], "playlist_get_delete_route() (in module music.api.api)": [[4, "music.api.api.playlist_get_delete_route"]], "playlist_post_put_route() (in module music.api.api)": [[4, "music.api.api.playlist_post_put_route"]], "playlist_refresh() (in module music.api.spotfm)": [[4, "music.api.spotfm.playlist_refresh"]], "post_tag() (in module music.api.tag)": [[4, "music.api.tag.post_tag"]], "put_tag() (in module music.api.tag)": [[4, "music.api.tag.put_tag"]], "run_playlist() (in module music.api.api)": [[4, "music.api.api.run_playlist"]], "run_playlist_album_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_album_task"]], "run_playlist_artist_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_artist_task"]], "run_playlist_task() (in module music.api.api)": [[4, "music.api.api.run_playlist_task"]], "run_playlist_track_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_track_task"]], "run_tag_task() (in module music.api.tag)": [[4, "music.api.tag.run_tag_task"]], "run_user() (in module music.api.api)": [[4, "music.api.api.run_user"]], "run_user() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_user"]], "run_user_task() (in module music.api.api)": [[4, "music.api.api.run_user_task"]], "run_user_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_user_task"]], "run_users() (in module music.api.api)": [[4, "music.api.api.run_users"]], "run_users() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_users"]], "shuffle() (in module music.api.player)": [[4, "music.api.player.shuffle"]], "sort() (in module music.api.spotify)": [[4, "music.api.spotify.sort"]], "spotify_link_required() (in module music.api.decorators)": [[4, "music.api.decorators.spotify_link_required"]], "tag_refresh() (in module music.api.tag)": [[4, "music.api.tag.tag_refresh"]], "tag_route() (in module music.api.tag)": [[4, "music.api.tag.tag_route"]], "tags() (in module music.api.tag)": [[4, "music.api.tag.tags"]], "user_delete_route() (in module music.api.api)": [[4, "music.api.api.user_delete_route"]], "user_route() (in module music.api.api)": [[4, "music.api.api.user_route"]], "validate_args() (in module music.api.decorators)": [[4, "music.api.decorators.validate_args"]], "validate_json() (in module music.api.decorators)": [[4, "music.api.decorators.validate_json"]], "volume() (in module music.api.player)": [[4, "music.api.player.volume"]], "auth() (in module music.auth.auth)": [[5, "music.auth.auth.auth"]], "deauth() (in module music.auth.auth)": [[5, "music.auth.auth.deauth"]], "jwt_token() (in module music.auth.auth)": [[5, "music.auth.auth.jwt_token"]], "login() (in module music.auth.auth)": [[5, "music.auth.auth.login"]], "logout() (in module music.auth.auth)": [[5, "music.auth.auth.logout"]], "music.auth": [[5, "module-music.auth"]], "music.auth.auth": [[5, "module-music.auth.auth"]], "register() (in module music.auth.auth)": [[5, "music.auth.auth.register"]], "token() (in module music.auth.auth)": [[5, "music.auth.auth.token"]], "music.cloud": [[6, "module-music.cloud"]], "music.cloud.function": [[6, "module-music.cloud.function"]], "music.cloud.tasks": [[6, "module-music.cloud.tasks"]], "offload_or_run_user_playlist() (in module music.cloud)": [[6, "music.cloud.offload_or_run_user_playlist"]], "queue_run_user_playlist() (in module music.cloud)": [[6, "music.cloud.queue_run_user_playlist"]], "refresh_all_user_playlist_stats() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_all_user_playlist_stats"]], "refresh_playlist_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_playlist_task"]], "refresh_user_playlist_stats() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_user_playlist_stats"]], "refresh_user_stats_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_user_stats_task"]], "run_user_playlist_function() (in module music.cloud.function)": [[6, "music.cloud.function.run_user_playlist_function"]], "run_user_playlist_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.run_user_playlist_task"]], "update_all_user_playlists() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_all_user_playlists"]], "update_all_user_tags() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_all_user_tags"]], "update_playlists() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_playlists"]], "update_tag() (in module music.cloud.function)": [[6, "music.cloud.function.update_tag"]], "databaseuser (class in music.db.database)": [[7, "music.db.database.DatabaseUser"]], "partgenerator (class in music.db.part_generator)": [[7, "music.db.part_generator.PartGenerator"]], "get_authed_lastfm_network() (in module music.db.database)": [[7, "music.db.database.get_authed_lastfm_network"]], "get_authed_spotify_network() (in module music.db.database)": [[7, "music.db.database.get_authed_spotify_network"]], "get_recursive_parts() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.get_recursive_parts"]], "music.db": [[7, "module-music.db"]], "music.db.database": [[7, "module-music.db.database"]], "music.db.part_generator": [[7, "module-music.db.part_generator"]], "process_reference_by_name() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.process_reference_by_name"]], "process_reference_by_reference() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.process_reference_by_reference"]], "refresh_token_database_callback() (in module music.db.database)": [[7, "music.db.database.refresh_token_database_callback"]], "reset() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.reset"]], "user_id (music.db.database.databaseuser attribute)": [[7, "music.db.database.DatabaseUser.user_id"]], "config (class in music.model.config)": [[8, "music.model.config.Config"]], "config.meta (class in music.model.config)": [[8, "music.model.config.Config.Meta"]], "playlist (class in music.model.playlist)": [[8, "music.model.playlist.Playlist"]], "playlist.meta (class in music.model.playlist)": [[8, "music.model.playlist.Playlist.Meta"]], "sort (class in music.model.playlist)": [[8, "music.model.playlist.Sort"]], "tag (class in music.model.tag)": [[8, "music.model.tag.Tag"]], "tag.meta (class in music.model.tag)": [[8, "music.model.tag.Tag.Meta"]], "user (class in music.model.user)": [[8, "music.model.user.User"]], "user.meta (class in music.model.user)": [[8, "music.model.user.User.Meta"]], "access_token (music.model.user.user attribute)": [[8, "music.model.user.User.access_token"]], "add_last_month (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.add_last_month"]], "add_this_month (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.add_this_month"]], "albums (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.albums"]], "apns_tokens (music.model.user.user attribute)": [[8, "music.model.user.User.apns_tokens"]], "artists (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.artists"]], "chart_limit (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.chart_limit"]], "chart_range (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.chart_range"]], "check_password() (music.model.user.user method)": [[8, "music.model.user.User.check_password"]], "collection (music.model.config.config attribute)": [[8, "music.model.config.Config.collection"]], "collection (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.collection"]], "collection (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.collection"]], "collection (music.model.user.user attribute)": [[8, "music.model.user.User.collection"]], "collection_name (music.model.config.config attribute)": [[8, "music.model.config.Config.collection_name"]], "collection_name (music.model.config.config.meta attribute)": [[8, "music.model.config.Config.Meta.collection_name"]], "collection_name (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.collection_name"]], "collection_name (music.model.playlist.playlist.meta attribute)": [[8, "music.model.playlist.Playlist.Meta.collection_name"]], "collection_name (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.collection_name"]], "collection_name (music.model.tag.tag.meta attribute)": [[8, "music.model.tag.Tag.Meta.collection_name"]], "collection_name (music.model.user.user attribute)": [[8, "music.model.user.User.collection_name"]], "collection_name (music.model.user.user.meta attribute)": [[8, "music.model.user.User.Meta.collection_name"]], "count (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.count"]], "day_boundary (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.day_boundary"]], "default (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.default"]], "description_overwrite (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.description_overwrite"]], "description_suffix (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.description_suffix"]], "email (music.model.user.user attribute)": [[8, "music.model.user.User.email"]], "get_playlist() (music.model.user.user method)": [[8, "music.model.user.User.get_playlist"]], "get_playlists() (music.model.user.user method)": [[8, "music.model.user.User.get_playlists"]], "include_library_tracks (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_library_tracks"]], "include_recommendations (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_recommendations"]], "include_spotify_owned (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_spotify_owned"]], "jwt_default_length (music.model.config.config attribute)": [[8, "music.model.config.Config.jwt_default_length"]], "jwt_max_length (music.model.config.config attribute)": [[8, "music.model.config.Config.jwt_max_length"]], "last_keygen (music.model.user.user attribute)": [[8, "music.model.user.User.last_keygen"]], "last_login (music.model.user.user attribute)": [[8, "music.model.user.User.last_login"]], "last_refreshed (music.model.user.user attribute)": [[8, "music.model.user.User.last_refreshed"]], "last_updated (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.last_updated"]], "last_updated (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.last_updated"]], "lastfm_stat_album_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_album_count"]], "lastfm_stat_album_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_album_percent"]], "lastfm_stat_artist_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_artist_count"]], "lastfm_stat_artist_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_artist_percent"]], "lastfm_stat_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_count"]], "lastfm_stat_last_refresh (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_last_refresh"]], "lastfm_stat_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_percent"]], "lastfm_username (music.model.user.user attribute)": [[8, "music.model.user.User.lastfm_username"]], "locked (music.model.user.user attribute)": [[8, "music.model.user.User.locked"]], "music.model": [[8, "module-music.model"]], "music.model.config": [[8, "module-music.model.config"]], "music.model.playlist": [[8, "module-music.model.playlist"]], "music.model.tag": [[8, "module-music.model.tag"]], "music.model.user": [[8, "module-music.model.user"]], "mutable_keys (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.mutable_keys"]], "name (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.name"]], "name (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.name"]], "parts (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.parts"]], "password (music.model.user.user attribute)": [[8, "music.model.user.User.password"]], "playlist_cloud_operating_mode (music.model.config.config attribute)": [[8, "music.model.config.Config.playlist_cloud_operating_mode"]], "playlist_references (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.playlist_references"]], "proportion (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.proportion"]], "recommendation_sample (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.recommendation_sample"]], "refresh_token (music.model.user.user attribute)": [[8, "music.model.user.User.refresh_token"]], "release_date (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.release_date"]], "shuffle (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.shuffle"]], "shuffle (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.shuffle"]], "sort (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.sort"]], "spotify_linked (music.model.user.user attribute)": [[8, "music.model.user.User.spotify_linked"]], "tag_id (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.tag_id"]], "time_objects (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.time_objects"]], "to_dict() (music.model.playlist.playlist method)": [[8, "music.model.playlist.Playlist.to_dict"]], "to_dict() (music.model.tag.tag method)": [[8, "music.model.tag.Tag.to_dict"]], "to_dict() (music.model.user.user method)": [[8, "music.model.user.User.to_dict"]], "token_expiry (music.model.user.user attribute)": [[8, "music.model.user.User.token_expiry"]], "total_time (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_time"]], "total_time_ms (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_time_ms"]], "total_user_scrobbles (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_user_scrobbles"]], "tracks (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.tracks"]], "type (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.type"]], "type (music.model.user.user attribute)": [[8, "music.model.user.User.type"]], "uri (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.uri"]], "username (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.username"]], "username (music.model.user.user attribute)": [[8, "music.model.user.User.username"]], "validated (music.model.user.user attribute)": [[8, "music.model.user.User.validated"]], "create_playlist() (in module music.tasks.create_playlist)": [[9, "music.tasks.create_playlist.create_playlist"]], "music.tasks": [[9, "module-music.tasks"]], "music.tasks.create_playlist": [[9, "module-music.tasks.create_playlist"]], "music.tasks.refresh_lastfm_stats": [[9, "module-music.tasks.refresh_lastfm_stats"]], "music.tasks.run_user_playlist": [[9, "module-music.tasks.run_user_playlist"]], "music.tasks.update_tag": [[9, "module-music.tasks.update_tag"]], "refresh_lastfm_album_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats"]], "refresh_lastfm_artist_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats"]], "refresh_lastfm_track_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats"]], "run_user_playlist() (in module music.tasks.run_user_playlist)": [[9, "music.tasks.run_user_playlist.run_user_playlist"]], "update_tag() (in module music.tasks.update_tag)": [[9, "music.tasks.update_tag.update_tag"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["index", "src/admin", "src/modules", "src/music", "src/music.api", "src/music.auth", "src/music.cloud", "src/music.db", "src/music.model", "src/music.tasks"], "filenames": ["index.rst", "src/admin.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"], "titles": ["Mixonomer", "admin script", "Mixonomer Modules", "Flask Backend", "music.api", "music.auth", "music.cloud", "music.db", "music.model", "music.tasks"], "terms": {"py": [0, 1], "music": [0, 2], "api": [0, 2, 3], "auth": [0, 2, 3, 4], "cloud": [0, 1, 2, 3, 8], "db": [0, 2, 3], "model": [0, 2, 3, 7], "task": [0, 1, 2, 3, 8], "root": [0, 2], "modul": 0, "admin": [0, 2, 3], "script": 0, "doc": [0, 1], "folders_to_ignor": [0, 1], "run": [0, 1, 3, 6, 9], "test": [0, 1], "all": [0, 4, 6, 8], "flask": [0, 1, 2, 4], "backend": [0, 2], "i": 0, "web": 0, "app": [0, 1, 3, 4, 8, 9], "creat": [0, 3, 6, 9], "smart": [0, 7, 8, 9], "spotifi": [0, 2, 3, 7, 9], "playlist": [0, 1, 2, 3, 4, 6, 7, 9], "The": 0, "base": [0, 1, 7, 8], "spotframework": [0, 1, 7, 9], "fmframework": [0, 1, 7, 9], "interfac": [0, 7], "last": [0, 9], "fm": [0, 2, 3, 9], "current": 0, "host": 0, "googl": 0, "": [0, 6, 7, 8, 9], "platform": 0, "compos": 0, "server": 0, "fireo": [0, 8], "orm": [0, 7, 8], "layer": [0, 7, 8], "longer": 0, "dispatch": 0, "function": [0, 1, 2, 3, 7, 8, 9], "frontend": 0, "react": 0, "materi": 0, "ui": 0, "compon": [0, 1, 7], "axio": 0, "http": [0, 4, 5], "request": [0, 5], "index": 0, "search": 0, "page": [0, 5], "class": [1, 7, 8], "completekei": 1, "tab": 1, "stdin": 1, "none": [1, 4, 6, 7, 8, 9], "stdout": 1, "cmd": 1, "compile_frontend": 1, "compil": 1, "sass": 1, "css": 1, "npm": 1, "build": 1, "copy_main_fil": 1, "path": [1, 8], "copi": 1, "main": 1, "file": 1, "correspond": 1, "python": 1, "stage": 1, "deploy_funct": 1, "name": [1, 3, 6, 7, 8, 9], "timeout": 1, "int": [1, 6], "60": 1, "region": 1, "europ": 1, "west2": 1, "deploi": 1, "requir": 1, "environ": [1, 6], "variabl": 1, "do_app": 1, "arg": [1, 4, 8], "front": 1, "end": 1, "engin": 1, "do_cron_funct": 1, "background": 1, "includ": [1, 5, 6, 9], "cron": 1, "job": 1, "schedul": 1, "updat": [1, 6, 7, 8, 9], "action": 1, "run_all_playlist": 1, "run_all_playlist_stat": 1, "run_all_tag": 1, "do_doc": 1, "document": [1, 7], "us": [1, 7], "sphinx": 1, "do_exit": 1, "exit": 1, "do_main_group": 1, "primari": 1, "run_user_playlist": [1, 2, 3], "update_tag": [1, 2, 3, 6], "do_playlist": 1, "do_playlist_cron": 1, "do_playlist_stats_cron": 1, "do_prepare_local_stag": 1, "prepar": 1, "local": 1, "work": 1, "directori": 1, "deploy": 1, "static": 1, "sarsoolib": 1, "inject": 1, "do_pydepend": 1, "gener": [1, 3, 5, 9], "export": 1, "txt": 1, "from": [1, 7], "poetri": 1, "manifest": 1, "do_renam": 1, "renam": 1, "firestor": [1, 7, 8], "do_run": 1, "do_sass": 1, "do_set_project": 1, "set": [1, 8], "project": 1, "gcloud": 1, "consol": [1, 3], "do_tag": 1, "do_tags_cron": 1, "do_test": 1, "unit": 1, "do_watchsass": 1, "watch": 1, "argument": 1, "begin": 1, "sourc": 1, "folder": 1, "chang": 1, "export_filtered_depend": 1, "function_deploi": 1, "function_id": 1, "initi": 1, "command": 1, "paramet": [1, 4, 6, 7, 8, 9], "str": [1, 6, 7, 8, 9], "id": [1, 6], "intro": 1, "mixonom": [1, 3, 7], "help": 1, "spotfm": [1, 2, 3], "prompt": 1, "venv": 1, "git": 1, "idea": 1, "node_modul": 1, "content": [2, 3], "get_task": [2, 3, 4], "all_playlists_rout": [2, 3, 4], "all_users_rout": [2, 3, 4], "change_password": [2, 3, 4], "imag": [2, 3, 4], "playlist_get_delete_rout": [2, 3, 4], "playlist_post_put_rout": [2, 3, 4], "run_playlist": [2, 3, 4], "run_playlist_task": [2, 3, 4], "run_us": [2, 3, 4], "run_user_task": [2, 3, 4], "user_delete_rout": [2, 3, 4], "user_rout": [2, 3, 4], "decor": [2, 3], "admin_requir": [2, 3, 4], "check_dict": [2, 3, 4], "cloud_task": [2, 3, 4], "gae_cron": [2, 3, 4], "is_basic_auth": [2, 3, 4], "is_jwt_auth": [2, 3, 4], "is_logged_in": [2, 3, 4], "jwt_requir": [2, 3, 4], "lastfm_username_requir": [2, 3, 4], "login_or_basic_auth": [2, 3, 4], "login_or_jwt": [2, 3, 4], "login_requir": [2, 3, 4], "no_cach": [2, 3, 4], "no_locked_us": [2, 3, 4], "spotify_link_requir": [2, 3, 4], "validate_arg": [2, 3, 4], "validate_json": [2, 3, 4], "daily_scrobbl": [2, 3, 4], "player": [2, 3], "next_track": [2, 3, 4], "plai": [2, 3, 4], "shuffl": [2, 3, 4, 8], "volum": [2, 3, 4], "count": [2, 3, 4, 8], "playlist_refresh": [2, 3, 4], "run_playlist_album_task": [2, 3, 4], "run_playlist_artist_task": [2, 3, 4], "run_playlist_track_task": [2, 3, 4], "sort": [2, 3, 4, 8], "tag": [2, 3, 6, 9], "delete_tag": [2, 3, 4], "get_tag": [2, 3, 4], "post_tag": [2, 3, 4], "put_tag": [2, 3, 4], "run_tag_task": [2, 3, 4], "tag_refresh": [2, 3, 4], "tag_rout": [2, 3, 4], "deauth": [2, 3, 5], "jwt_token": [2, 3, 5], "login": [2, 3, 5], "logout": [2, 3, 5], "regist": [2, 3, 5], "token": [2, 3, 5], "offload_or_run_user_playlist": [2, 3, 6], "queue_run_user_playlist": [2, 3, 6], "run_user_playlist_funct": [2, 3, 6], "refresh_all_user_playlist_stat": [2, 3, 6], "refresh_playlist_task": [2, 3, 6], "refresh_user_playlist_stat": [2, 3, 6], "refresh_user_stats_task": [2, 3, 6], "run_user_playlist_task": [2, 3, 6], "update_all_user_playlist": [2, 3, 6], "update_all_user_tag": [2, 3, 6], "update_playlist": [2, 3, 6], "databas": [2, 3], "databaseus": [2, 3, 7], "get_authed_lastfm_network": [2, 3, 7], "get_authed_spotify_network": [2, 3, 7], "refresh_token_database_callback": [2, 3, 7], "part_gener": [2, 3], "partgener": [2, 3, 7], "config": [2, 3], "user": [2, 3, 4, 6, 7, 9], "get_admin": [2, 3, 8], "create_playlist": [2, 3], "refresh_lastfm_stat": [2, 3], "refresh_lastfm_album_stat": [2, 3, 9], "refresh_lastfm_artist_stat": [2, 3, 9], "refresh_lastfm_track_stat": [2, 3, 9], "init_log": [2, 3], "create_app": [2, 3], "user_id": [3, 7], "get_recursive_part": [3, 7], "process_reference_by_nam": [3, 7], "process_reference_by_refer": [3, 7], "reset": [3, 5, 7], "meta": [3, 8], "apns_key_id": [3, 8], "apns_team_id": [3, 8], "collect": [3, 8], "collection_nam": [3, 8], "jwt_default_length": [3, 8], "jwt_max_length": [3, 8], "playlist_cloud_operating_mod": [3, 8], "add_last_month": [3, 8], "add_this_month": [3, 8], "chart_limit": [3, 8], "chart_rang": [3, 8], "day_boundari": [3, 8], "description_overwrit": [3, 8], "description_suffix": [3, 8], "include_library_track": [3, 8], "include_recommend": [3, 8], "include_spotify_own": [3, 8], "last_upd": [3, 8], "lastfm_stat_album_count": [3, 8], "lastfm_stat_album_perc": [3, 8], "lastfm_stat_artist_count": [3, 8], "lastfm_stat_artist_perc": [3, 8], "lastfm_stat_count": [3, 8], "lastfm_stat_last_refresh": [3, 8], "lastfm_stat_perc": [3, 8], "mutable_kei": [3, 8], "part": [3, 8], "playlist_refer": [3, 8], "recommendation_sampl": [3, 8], "to_dict": [3, 8], "type": [3, 4, 5, 7, 8, 9], "uri": [3, 8, 9], "default": [3, 4, 6, 8, 9], "release_d": [3, 8], "album": [3, 8], "artist": [3, 8], "proport": [3, 8], "tag_id": [3, 4, 6, 8], "time_object": [3, 8], "total_tim": [3, 8], "total_time_m": [3, 8], "total_user_scrobbl": [3, 8], "track": [3, 8], "usernam": [3, 6, 7, 8, 9], "access_token": [3, 7, 8], "apns_token": [3, 8], "check_password": [3, 8], "email": [3, 8], "get_playlist": [3, 8], "last_keygen": [3, 8], "last_login": [3, 8], "last_refresh": [3, 8], "lastfm_usernam": [3, 8], "lock": [3, 8], "notifi": [3, 8], "notify_admin": [3, 8], "notify_playlist_upd": [3, 8], "notify_tag_upd": [3, 8], "password": [3, 5, 8], "refresh_token": [3, 7, 8], "spotify_link": [3, 8], "token_expiri": [3, 8], "valid": [3, 8], "contain": [3, 8], "top": 3, "level": [3, 8], "load": [3, 4], "blueprint": [3, 4], "initialis": 3, "log": 3, "stack": 3, "fals": 3, "retriev": [3, 4, 5, 7, 9], "readi": 3, "return": [3, 4, 5, 7, 8, 9], "endpoint": [4, 5], "dict": [4, 8], "given": [4, 6, 7], "option": [4, 6, 7, 8, 9], "descript": [4, 8, 9], "respons": [4, 5], "func": 4, "request_param": 4, "expected_arg": 4, "kwarg": [4, 8], "secur": 5, "relat": 5, "jwt": 5, "post": 5, "rout": 5, "allow": 5, "html": 5, "submiss": 5, "result": 5, "home": 5, "redirect": 5, "get": [5, 7, 8], "infrastuctur": 6, "code": 6, "hand": 6, "off": 6, "playlist_nam": [6, 8, 9], "queue": 6, "serverless": 6, "subject": [6, 7, 8, 9], "gcp": 6, "long": [6, 9], "oper": [6, 8, 9], "stat": 6, "refresh": 6, "delai": 6, "0": 6, "second": 6, "execut": 6, "depend": [6, 7], "asid": 7, "client_id": 7, "client_secret": 7, "networkus": 7, "ad": 7, "network": [7, 9], "an": [7, 8], "authent": 7, "fmnetwork": 7, "spotifynetwork": 7, "callback": 7, "handl": 7, "when": [7, 9], "credemti": 7, "store": 7, "newli": 7, "credenti": 7, "object": [7, 8, 9], "resolv": 7, "other": 7, "referenc": 7, "list": [7, 8], "recurs": 7, "ref": 7, "documentrefer": 7, "resolut": 7, "walk": 7, "intern": 7, "state": 7, "data": 8, "servic": 8, "structur": 8, "kei": 8, "correct": 8, "manag": 8, "determin": 8, "whether": 8, "ar": 8, "done": 8, "convert": 8, "valu": 8, "enum": 8, "enumer": 8, "1": 8, "3": 8, "2": 8, "spotify_us": 8, "single_return": 8, "true": 8, "raise_error": 8, "case": 8, "sensit": 8, "Will": 8, "exact": 8, "match": 8, "possibl": 8, "otherwis": 8, "first": 8, "insensit": 8, "bool": 8, "best": 8, "found": 8, "rais": [8, 9], "nameerror": [8, 9], "noth": 8, "If": 8, "fullplaylist": 9, "new": 9, "account": 9, "For": 9, "spotnet": 9, "fmnet": 9, "upad": 9, "spotnetwork": 9, "No": 9, "provid": 9, "attributeerror": 9, "ha": 9, "avail": 9, "e": 9, "error": 9}, "objects": {"": [[1, 0, 0, "-", "admin"], [3, 0, 0, "-", "music"]], "admin": [[1, 1, 1, "", "Admin"], [1, 4, 1, "", "docs"], [1, 5, 1, "", "folders_to_ignore"], [1, 4, 1, "", "run"], [1, 4, 1, "", "test"]], "admin.Admin": [[1, 2, 1, "", "compile_frontend"], [1, 2, 1, "", "copy_main_file"], [1, 2, 1, "", "deploy_function"], [1, 2, 1, "", "do_app"], [1, 2, 1, "", "do_cron_functions"], [1, 2, 1, "", "do_docs"], [1, 2, 1, "", "do_exit"], [1, 2, 1, "", "do_main_group"], [1, 2, 1, "", "do_playlist"], [1, 2, 1, "", "do_playlist_cron"], [1, 2, 1, "", "do_playlist_stats_cron"], [1, 2, 1, "", "do_prepare_local_stage"], [1, 2, 1, "", "do_pydepend"], [1, 2, 1, "", "do_rename"], [1, 2, 1, "", "do_run"], [1, 2, 1, "", "do_sass"], [1, 2, 1, "", "do_set_project"], [1, 2, 1, "", "do_tag"], [1, 2, 1, "", "do_tags_cron"], [1, 2, 1, "", "do_test"], [1, 2, 1, "", "do_watchsass"], [1, 2, 1, "", "export_filtered_dependencies"], [1, 2, 1, "", "function_deploy"], [1, 3, 1, "", "intro"], [1, 3, 1, "", "locals"], [1, 3, 1, "", "prompt"]], "music": [[4, 0, 0, "-", "api"], [5, 0, 0, "-", "auth"], [6, 0, 0, "-", "cloud"], [7, 0, 0, "-", "db"], [3, 4, 1, "", "init_log"], [8, 0, 0, "-", "model"], [3, 0, 0, "-", "music"], [9, 0, 0, "-", "tasks"]], "music.api": [[4, 0, 0, "-", "admin"], [4, 0, 0, "-", "api"], [4, 0, 0, "-", "decorators"], [4, 0, 0, "-", "fm"], [4, 0, 0, "-", "player"], [4, 0, 0, "-", "spotfm"], [4, 0, 0, "-", "spotify"], [4, 0, 0, "-", "tag"]], "music.api.admin": [[4, 4, 1, "", "get_tasks"]], "music.api.api": [[4, 4, 1, "", "all_playlists_route"], [4, 4, 1, "", "all_users_route"], [4, 4, 1, "", "change_password"], [4, 4, 1, "", "image"], [4, 4, 1, "", "playlist_get_delete_route"], [4, 4, 1, "", "playlist_post_put_route"], [4, 4, 1, "", "run_playlist"], [4, 4, 1, "", "run_playlist_task"], [4, 4, 1, "", "run_user"], [4, 4, 1, "", "run_user_task"], [4, 4, 1, "", "run_users"], [4, 4, 1, "", "user_delete_route"], [4, 4, 1, "", "user_route"]], "music.api.decorators": [[4, 4, 1, "", "admin_required"], [4, 4, 1, "", "check_dict"], [4, 4, 1, "", "cloud_task"], [4, 4, 1, "", "gae_cron"], [4, 4, 1, "", "is_basic_authed"], [4, 4, 1, "", "is_jwt_authed"], [4, 4, 1, "", "is_logged_in"], [4, 4, 1, "", "jwt_required"], [4, 4, 1, "", "lastfm_username_required"], [4, 4, 1, "", "login_or_basic_auth"], [4, 4, 1, "", "login_or_jwt"], [4, 4, 1, "", "login_required"], [4, 4, 1, "", "no_cache"], [4, 4, 1, "", "no_locked_users"], [4, 4, 1, "", "spotify_link_required"], [4, 4, 1, "", "validate_args"], [4, 4, 1, "", "validate_json"]], "music.api.fm": [[4, 4, 1, "", "daily_scrobbles"]], "music.api.player": [[4, 4, 1, "", "next_track"], [4, 4, 1, "", "play"], [4, 4, 1, "", "shuffle"], [4, 4, 1, "", "volume"]], "music.api.spotfm": [[4, 4, 1, "", "count"], [4, 4, 1, "", "playlist_refresh"], [4, 4, 1, "", "run_playlist_album_task"], [4, 4, 1, "", "run_playlist_artist_task"], [4, 4, 1, "", "run_playlist_track_task"], [4, 4, 1, "", "run_user"], [4, 4, 1, "", "run_user_task"], [4, 4, 1, "", "run_users"]], "music.api.spotify": [[4, 4, 1, "", "sort"]], "music.api.tag": [[4, 4, 1, "", "delete_tag"], [4, 4, 1, "", "get_tag"], [4, 4, 1, "", "post_tag"], [4, 4, 1, "", "put_tag"], [4, 4, 1, "", "run_tag_task"], [4, 4, 1, "", "tag_refresh"], [4, 4, 1, "", "tag_route"], [4, 4, 1, "", "tags"]], "music.auth": [[5, 0, 0, "-", "auth"]], "music.auth.auth": [[5, 4, 1, "", "auth"], [5, 4, 1, "", "deauth"], [5, 4, 1, "", "jwt_token"], [5, 4, 1, "", "login"], [5, 4, 1, "", "logout"], [5, 4, 1, "", "register"], [5, 4, 1, "", "token"]], "music.cloud": [[6, 0, 0, "-", "function"], [6, 4, 1, "", "offload_or_run_user_playlist"], [6, 4, 1, "", "queue_run_user_playlist"], [6, 0, 0, "-", "tasks"]], "music.cloud.function": [[6, 4, 1, "", "run_user_playlist_function"], [6, 4, 1, "", "update_tag"]], "music.cloud.tasks": [[6, 4, 1, "", "refresh_all_user_playlist_stats"], [6, 4, 1, "", "refresh_playlist_task"], [6, 4, 1, "", "refresh_user_playlist_stats"], [6, 4, 1, "", "refresh_user_stats_task"], [6, 4, 1, "", "run_user_playlist_task"], [6, 4, 1, "", "update_all_user_playlists"], [6, 4, 1, "", "update_all_user_tags"], [6, 4, 1, "", "update_playlists"]], "music.db": [[7, 0, 0, "-", "database"], [7, 0, 0, "-", "part_generator"]], "music.db.database": [[7, 1, 1, "", "DatabaseUser"], [7, 4, 1, "", "get_authed_lastfm_network"], [7, 4, 1, "", "get_authed_spotify_network"], [7, 4, 1, "", "refresh_token_database_callback"]], "music.db.database.DatabaseUser": [[7, 3, 1, "", "user_id"]], "music.db.part_generator": [[7, 1, 1, "", "PartGenerator"]], "music.db.part_generator.PartGenerator": [[7, 2, 1, "", "get_recursive_parts"], [7, 2, 1, "", "process_reference_by_name"], [7, 2, 1, "", "process_reference_by_reference"], [7, 2, 1, "", "reset"]], "music.model": [[8, 0, 0, "-", "config"], [8, 0, 0, "-", "playlist"], [8, 0, 0, "-", "tag"], [8, 0, 0, "-", "user"]], "music.model.config": [[8, 1, 1, "", "Config"]], "music.model.config.Config": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "apns_key_id"], [8, 3, 1, "", "apns_team_id"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "jwt_default_length"], [8, 3, 1, "", "jwt_max_length"], [8, 3, 1, "", "playlist_cloud_operating_mode"]], "music.model.config.Config.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.playlist": [[8, 1, 1, "", "Playlist"], [8, 1, 1, "", "Sort"]], "music.model.playlist.Playlist": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "add_last_month"], [8, 3, 1, "", "add_this_month"], [8, 3, 1, "", "chart_limit"], [8, 3, 1, "", "chart_range"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "day_boundary"], [8, 3, 1, "", "description_overwrite"], [8, 3, 1, "", "description_suffix"], [8, 3, 1, "", "include_library_tracks"], [8, 3, 1, "", "include_recommendations"], [8, 3, 1, "", "include_spotify_owned"], [8, 3, 1, "", "last_updated"], [8, 3, 1, "", "lastfm_stat_album_count"], [8, 3, 1, "", "lastfm_stat_album_percent"], [8, 3, 1, "", "lastfm_stat_artist_count"], [8, 3, 1, "", "lastfm_stat_artist_percent"], [8, 3, 1, "", "lastfm_stat_count"], [8, 3, 1, "", "lastfm_stat_last_refresh"], [8, 3, 1, "", "lastfm_stat_percent"], [8, 3, 1, "", "mutable_keys"], [8, 3, 1, "", "name"], [8, 3, 1, "", "parts"], [8, 3, 1, "", "playlist_references"], [8, 3, 1, "", "recommendation_sample"], [8, 3, 1, "", "shuffle"], [8, 3, 1, "", "sort"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "type"], [8, 3, 1, "", "uri"]], "music.model.playlist.Playlist.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.playlist.Sort": [[8, 3, 1, "", "default"], [8, 3, 1, "", "release_date"], [8, 3, 1, "", "shuffle"]], "music.model.tag": [[8, 1, 1, "", "Tag"]], "music.model.tag.Tag": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "albums"], [8, 3, 1, "", "artists"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "count"], [8, 3, 1, "", "last_updated"], [8, 3, 1, "", "name"], [8, 3, 1, "", "proportion"], [8, 3, 1, "", "tag_id"], [8, 3, 1, "", "time_objects"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "total_time"], [8, 3, 1, "", "total_time_ms"], [8, 3, 1, "", "total_user_scrobbles"], [8, 3, 1, "", "tracks"], [8, 3, 1, "", "username"]], "music.model.tag.Tag.Meta": [[8, 3, 1, "", "collection_name"]], "music.model.user": [[8, 1, 1, "", "User"], [8, 4, 1, "", "get_admins"]], "music.model.user.User": [[8, 1, 1, "", "Meta"], [8, 3, 1, "", "access_token"], [8, 3, 1, "", "apns_tokens"], [8, 2, 1, "", "check_password"], [8, 3, 1, "", "collection"], [8, 3, 1, "", "collection_name"], [8, 3, 1, "", "email"], [8, 2, 1, "", "get_playlist"], [8, 2, 1, "", "get_playlists"], [8, 3, 1, "", "last_keygen"], [8, 3, 1, "", "last_login"], [8, 3, 1, "", "last_refreshed"], [8, 3, 1, "", "lastfm_username"], [8, 3, 1, "", "locked"], [8, 3, 1, "", "notify"], [8, 3, 1, "", "notify_admins"], [8, 3, 1, "", "notify_playlist_updates"], [8, 3, 1, "", "notify_tag_updates"], [8, 3, 1, "", "password"], [8, 3, 1, "", "refresh_token"], [8, 3, 1, "", "spotify_linked"], [8, 2, 1, "", "to_dict"], [8, 3, 1, "", "token_expiry"], [8, 3, 1, "", "type"], [8, 3, 1, "", "username"], [8, 3, 1, "", "validated"]], "music.model.user.User.Meta": [[8, 3, 1, "", "collection_name"]], "music.music": [[3, 4, 1, "", "create_app"]], "music.tasks": [[9, 0, 0, "-", "create_playlist"], [9, 0, 0, "-", "refresh_lastfm_stats"], [9, 0, 0, "-", "run_user_playlist"], [9, 0, 0, "-", "update_tag"]], "music.tasks.create_playlist": [[9, 4, 1, "", "create_playlist"]], "music.tasks.refresh_lastfm_stats": [[9, 4, 1, "", "refresh_lastfm_album_stats"], [9, 4, 1, "", "refresh_lastfm_artist_stats"], [9, 4, 1, "", "refresh_lastfm_track_stats"]], "music.tasks.run_user_playlist": [[9, 4, 1, "", "run_user_playlist"]], "music.tasks.update_tag": [[9, 4, 1, "", "update_tag"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "data", "Python data"]}, "titleterms": {"mixonom": [0, 2], "content": [0, 4, 5, 6, 7, 8, 9], "indic": 0, "tabl": 0, "admin": [1, 4], "script": 1, "modul": [2, 3, 4, 5, 6, 7, 8, 9], "flask": 3, "backend": 3, "music": [3, 4, 5, 6, 7, 8, 9], "root": 3, "api": 4, "decor": 4, "fm": 4, "player": 4, "spotfm": 4, "spotifi": 4, "tag": [4, 8], "auth": 5, "cloud": 6, "function": 6, "task": [6, 9], "db": 7, "databas": 7, "part_gener": 7, "model": 8, "config": 8, "playlist": 8, "user": 8, "create_playlist": 9, "refresh_lastfm_stat": 9, "run_user_playlist": 9, "update_tag": 9}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Mixonomer": [[0, "mixonomer"], [0, "id2"]], "Contents:": [[0, null]], "Indices and tables": [[0, "indices-and-tables"]], "admin script": [[1, "module-admin"]], "Mixonomer Modules": [[2, "mixonomer-modules"]], "Flask Backend": [[3, "flask-backend"]], "music Root Module": [[3, "module-music"]], "music.api": [[4, "music-api"]], "Module contents": [[4, "module-music.api"], [5, "module-music.auth"], [6, "module-music.cloud"], [7, "module-music.db"], [8, "module-music.model"], [9, "module-music.tasks"]], "api.admin": [[4, "module-music.api.admin"]], "api.api": [[4, "module-music.api.api"]], "api.decorators": [[4, "module-music.api.decorators"]], "api.fm": [[4, "module-music.api.fm"]], "api.player": [[4, "module-music.api.player"]], "api.spotfm": [[4, "module-music.api.spotfm"]], "api.spotify": [[4, "module-music.api.spotify"]], "api.tag": [[4, "module-music.api.tag"]], "music.auth": [[5, "music-auth"]], "auth.auth": [[5, "module-music.auth.auth"]], "music.cloud": [[6, "music-cloud"]], "cloud.function": [[6, "module-music.cloud.function"]], "cloud.tasks": [[6, "module-music.cloud.tasks"]], "music.db": [[7, "music-db"]], "db.database": [[7, "module-music.db.database"]], "db.part_generator": [[7, "module-music.db.part_generator"]], "music.model": [[8, "music-model"]], "model.config": [[8, "module-music.model.config"]], "model.playlist": [[8, "module-music.model.playlist"]], "model.tag": [[8, "module-music.model.tag"]], "model.user": [[8, "module-music.model.user"]], "music.tasks": [[9, "music-tasks"]], "tasks.create_playlist": [[9, "module-music.tasks.create_playlist"]], "tasks.refresh_lastfm_stats": [[9, "module-music.tasks.refresh_lastfm_stats"]], "tasks.run_user_playlist": [[9, "module-music.tasks.run_user_playlist"]], "tasks.update_tag": [[9, "module-music.tasks.update_tag"]]}, "indexentries": {"admin (class in admin)": [[1, "admin.Admin"]], "admin": [[1, "module-admin"]], "compile_frontend() (admin.admin method)": [[1, "admin.Admin.compile_frontend"]], "copy_main_file() (admin.admin method)": [[1, "admin.Admin.copy_main_file"]], "deploy_function() (admin.admin method)": [[1, "admin.Admin.deploy_function"]], "do_app() (admin.admin method)": [[1, "admin.Admin.do_app"]], "do_cron_functions() (admin.admin method)": [[1, "admin.Admin.do_cron_functions"]], "do_docs() (admin.admin method)": [[1, "admin.Admin.do_docs"]], "do_exit() (admin.admin method)": [[1, "admin.Admin.do_exit"]], "do_main_group() (admin.admin method)": [[1, "admin.Admin.do_main_group"]], "do_playlist() (admin.admin method)": [[1, "admin.Admin.do_playlist"]], "do_playlist_cron() (admin.admin method)": [[1, "admin.Admin.do_playlist_cron"]], "do_playlist_stats_cron() (admin.admin method)": [[1, "admin.Admin.do_playlist_stats_cron"]], "do_prepare_local_stage() (admin.admin method)": [[1, "admin.Admin.do_prepare_local_stage"]], "do_pydepend() (admin.admin method)": [[1, "admin.Admin.do_pydepend"]], "do_rename() (admin.admin method)": [[1, "admin.Admin.do_rename"]], "do_run() (admin.admin method)": [[1, "admin.Admin.do_run"]], "do_sass() (admin.admin method)": [[1, "admin.Admin.do_sass"]], "do_set_project() (admin.admin method)": [[1, "admin.Admin.do_set_project"]], "do_tag() (admin.admin method)": [[1, "admin.Admin.do_tag"]], "do_tags_cron() (admin.admin method)": [[1, "admin.Admin.do_tags_cron"]], "do_test() (admin.admin method)": [[1, "admin.Admin.do_test"]], "do_watchsass() (admin.admin method)": [[1, "admin.Admin.do_watchsass"]], "docs() (in module admin)": [[1, "admin.docs"]], "export_filtered_dependencies() (admin.admin method)": [[1, "admin.Admin.export_filtered_dependencies"]], "folders_to_ignore (in module admin)": [[1, "admin.folders_to_ignore"]], "function_deploy() (admin.admin method)": [[1, "admin.Admin.function_deploy"]], "intro (admin.admin attribute)": [[1, "admin.Admin.intro"]], "locals (admin.admin attribute)": [[1, "admin.Admin.locals"]], "module": [[1, "module-admin"], [3, "module-music"], [3, "module-music.music"], [4, "module-music.api"], [4, "module-music.api.admin"], [4, "module-music.api.api"], [4, "module-music.api.decorators"], [4, "module-music.api.fm"], [4, "module-music.api.player"], [4, "module-music.api.spotfm"], [4, "module-music.api.spotify"], [4, "module-music.api.tag"], [5, "module-music.auth"], [5, "module-music.auth.auth"], [6, "module-music.cloud"], [6, "module-music.cloud.function"], [6, "module-music.cloud.tasks"], [7, "module-music.db"], [7, "module-music.db.database"], [7, "module-music.db.part_generator"], [8, "module-music.model"], [8, "module-music.model.config"], [8, "module-music.model.playlist"], [8, "module-music.model.tag"], [8, "module-music.model.user"], [9, "module-music.tasks"], [9, "module-music.tasks.create_playlist"], [9, "module-music.tasks.refresh_lastfm_stats"], [9, "module-music.tasks.run_user_playlist"], [9, "module-music.tasks.update_tag"]], "prompt (admin.admin attribute)": [[1, "admin.Admin.prompt"]], "run() (in module admin)": [[1, "admin.run"]], "test() (in module admin)": [[1, "admin.test"]], "create_app() (in module music.music)": [[3, "music.music.create_app"]], "init_log() (in module music)": [[3, "music.init_log"]], "music": [[3, "module-music"]], "music.music": [[3, "module-music.music"]], "admin_required() (in module music.api.decorators)": [[4, "music.api.decorators.admin_required"]], "all_playlists_route() (in module music.api.api)": [[4, "music.api.api.all_playlists_route"]], "all_users_route() (in module music.api.api)": [[4, "music.api.api.all_users_route"]], "change_password() (in module music.api.api)": [[4, "music.api.api.change_password"]], "check_dict() (in module music.api.decorators)": [[4, "music.api.decorators.check_dict"]], "cloud_task() (in module music.api.decorators)": [[4, "music.api.decorators.cloud_task"]], "count() (in module music.api.spotfm)": [[4, "music.api.spotfm.count"]], "daily_scrobbles() (in module music.api.fm)": [[4, "music.api.fm.daily_scrobbles"]], "delete_tag() (in module music.api.tag)": [[4, "music.api.tag.delete_tag"]], "gae_cron() (in module music.api.decorators)": [[4, "music.api.decorators.gae_cron"]], "get_tag() (in module music.api.tag)": [[4, "music.api.tag.get_tag"]], "get_tasks() (in module music.api.admin)": [[4, "music.api.admin.get_tasks"]], "image() (in module music.api.api)": [[4, "music.api.api.image"]], "is_basic_authed() (in module music.api.decorators)": [[4, "music.api.decorators.is_basic_authed"]], "is_jwt_authed() (in module music.api.decorators)": [[4, "music.api.decorators.is_jwt_authed"]], "is_logged_in() (in module music.api.decorators)": [[4, "music.api.decorators.is_logged_in"]], "jwt_required() (in module music.api.decorators)": [[4, "music.api.decorators.jwt_required"]], "lastfm_username_required() (in module music.api.decorators)": [[4, "music.api.decorators.lastfm_username_required"]], "login_or_basic_auth() (in module music.api.decorators)": [[4, "music.api.decorators.login_or_basic_auth"]], "login_or_jwt() (in module music.api.decorators)": [[4, "music.api.decorators.login_or_jwt"]], "login_required() (in module music.api.decorators)": [[4, "music.api.decorators.login_required"]], "music.api": [[4, "module-music.api"]], "music.api.admin": [[4, "module-music.api.admin"]], "music.api.api": [[4, "module-music.api.api"]], "music.api.decorators": [[4, "module-music.api.decorators"]], "music.api.fm": [[4, "module-music.api.fm"]], "music.api.player": [[4, "module-music.api.player"]], "music.api.spotfm": [[4, "module-music.api.spotfm"]], "music.api.spotify": [[4, "module-music.api.spotify"]], "music.api.tag": [[4, "module-music.api.tag"]], "next_track() (in module music.api.player)": [[4, "music.api.player.next_track"]], "no_cache() (in module music.api.decorators)": [[4, "music.api.decorators.no_cache"]], "no_locked_users() (in module music.api.decorators)": [[4, "music.api.decorators.no_locked_users"]], "play() (in module music.api.player)": [[4, "music.api.player.play"]], "playlist_get_delete_route() (in module music.api.api)": [[4, "music.api.api.playlist_get_delete_route"]], "playlist_post_put_route() (in module music.api.api)": [[4, "music.api.api.playlist_post_put_route"]], "playlist_refresh() (in module music.api.spotfm)": [[4, "music.api.spotfm.playlist_refresh"]], "post_tag() (in module music.api.tag)": [[4, "music.api.tag.post_tag"]], "put_tag() (in module music.api.tag)": [[4, "music.api.tag.put_tag"]], "run_playlist() (in module music.api.api)": [[4, "music.api.api.run_playlist"]], "run_playlist_album_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_album_task"]], "run_playlist_artist_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_artist_task"]], "run_playlist_task() (in module music.api.api)": [[4, "music.api.api.run_playlist_task"]], "run_playlist_track_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_playlist_track_task"]], "run_tag_task() (in module music.api.tag)": [[4, "music.api.tag.run_tag_task"]], "run_user() (in module music.api.api)": [[4, "music.api.api.run_user"]], "run_user() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_user"]], "run_user_task() (in module music.api.api)": [[4, "music.api.api.run_user_task"]], "run_user_task() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_user_task"]], "run_users() (in module music.api.api)": [[4, "music.api.api.run_users"]], "run_users() (in module music.api.spotfm)": [[4, "music.api.spotfm.run_users"]], "shuffle() (in module music.api.player)": [[4, "music.api.player.shuffle"]], "sort() (in module music.api.spotify)": [[4, "music.api.spotify.sort"]], "spotify_link_required() (in module music.api.decorators)": [[4, "music.api.decorators.spotify_link_required"]], "tag_refresh() (in module music.api.tag)": [[4, "music.api.tag.tag_refresh"]], "tag_route() (in module music.api.tag)": [[4, "music.api.tag.tag_route"]], "tags() (in module music.api.tag)": [[4, "music.api.tag.tags"]], "user_delete_route() (in module music.api.api)": [[4, "music.api.api.user_delete_route"]], "user_route() (in module music.api.api)": [[4, "music.api.api.user_route"]], "validate_args() (in module music.api.decorators)": [[4, "music.api.decorators.validate_args"]], "validate_json() (in module music.api.decorators)": [[4, "music.api.decorators.validate_json"]], "volume() (in module music.api.player)": [[4, "music.api.player.volume"]], "auth() (in module music.auth.auth)": [[5, "music.auth.auth.auth"]], "deauth() (in module music.auth.auth)": [[5, "music.auth.auth.deauth"]], "jwt_token() (in module music.auth.auth)": [[5, "music.auth.auth.jwt_token"]], "login() (in module music.auth.auth)": [[5, "music.auth.auth.login"]], "logout() (in module music.auth.auth)": [[5, "music.auth.auth.logout"]], "music.auth": [[5, "module-music.auth"]], "music.auth.auth": [[5, "module-music.auth.auth"]], "register() (in module music.auth.auth)": [[5, "music.auth.auth.register"]], "token() (in module music.auth.auth)": [[5, "music.auth.auth.token"]], "music.cloud": [[6, "module-music.cloud"]], "music.cloud.function": [[6, "module-music.cloud.function"]], "music.cloud.tasks": [[6, "module-music.cloud.tasks"]], "offload_or_run_user_playlist() (in module music.cloud)": [[6, "music.cloud.offload_or_run_user_playlist"]], "queue_run_user_playlist() (in module music.cloud)": [[6, "music.cloud.queue_run_user_playlist"]], "refresh_all_user_playlist_stats() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_all_user_playlist_stats"]], "refresh_playlist_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_playlist_task"]], "refresh_user_playlist_stats() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_user_playlist_stats"]], "refresh_user_stats_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.refresh_user_stats_task"]], "run_user_playlist_function() (in module music.cloud.function)": [[6, "music.cloud.function.run_user_playlist_function"]], "run_user_playlist_task() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.run_user_playlist_task"]], "update_all_user_playlists() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_all_user_playlists"]], "update_all_user_tags() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_all_user_tags"]], "update_playlists() (in module music.cloud.tasks)": [[6, "music.cloud.tasks.update_playlists"]], "update_tag() (in module music.cloud.function)": [[6, "music.cloud.function.update_tag"]], "databaseuser (class in music.db.database)": [[7, "music.db.database.DatabaseUser"]], "partgenerator (class in music.db.part_generator)": [[7, "music.db.part_generator.PartGenerator"]], "get_authed_lastfm_network() (in module music.db.database)": [[7, "music.db.database.get_authed_lastfm_network"]], "get_authed_spotify_network() (in module music.db.database)": [[7, "music.db.database.get_authed_spotify_network"]], "get_recursive_parts() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.get_recursive_parts"]], "music.db": [[7, "module-music.db"]], "music.db.database": [[7, "module-music.db.database"]], "music.db.part_generator": [[7, "module-music.db.part_generator"]], "process_reference_by_name() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.process_reference_by_name"]], "process_reference_by_reference() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.process_reference_by_reference"]], "refresh_token_database_callback() (in module music.db.database)": [[7, "music.db.database.refresh_token_database_callback"]], "reset() (music.db.part_generator.partgenerator method)": [[7, "music.db.part_generator.PartGenerator.reset"]], "user_id (music.db.database.databaseuser attribute)": [[7, "music.db.database.DatabaseUser.user_id"]], "config (class in music.model.config)": [[8, "music.model.config.Config"]], "config.meta (class in music.model.config)": [[8, "music.model.config.Config.Meta"]], "playlist (class in music.model.playlist)": [[8, "music.model.playlist.Playlist"]], "playlist.meta (class in music.model.playlist)": [[8, "music.model.playlist.Playlist.Meta"]], "sort (class in music.model.playlist)": [[8, "music.model.playlist.Sort"]], "tag (class in music.model.tag)": [[8, "music.model.tag.Tag"]], "tag.meta (class in music.model.tag)": [[8, "music.model.tag.Tag.Meta"]], "user (class in music.model.user)": [[8, "music.model.user.User"]], "user.meta (class in music.model.user)": [[8, "music.model.user.User.Meta"]], "access_token (music.model.user.user attribute)": [[8, "music.model.user.User.access_token"]], "add_last_month (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.add_last_month"]], "add_this_month (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.add_this_month"]], "albums (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.albums"]], "apns_key_id (music.model.config.config attribute)": [[8, "music.model.config.Config.apns_key_id"]], "apns_team_id (music.model.config.config attribute)": [[8, "music.model.config.Config.apns_team_id"]], "apns_tokens (music.model.user.user attribute)": [[8, "music.model.user.User.apns_tokens"]], "artists (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.artists"]], "chart_limit (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.chart_limit"]], "chart_range (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.chart_range"]], "check_password() (music.model.user.user method)": [[8, "music.model.user.User.check_password"]], "collection (music.model.config.config attribute)": [[8, "music.model.config.Config.collection"]], "collection (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.collection"]], "collection (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.collection"]], "collection (music.model.user.user attribute)": [[8, "music.model.user.User.collection"]], "collection_name (music.model.config.config attribute)": [[8, "music.model.config.Config.collection_name"]], "collection_name (music.model.config.config.meta attribute)": [[8, "music.model.config.Config.Meta.collection_name"]], "collection_name (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.collection_name"]], "collection_name (music.model.playlist.playlist.meta attribute)": [[8, "music.model.playlist.Playlist.Meta.collection_name"]], "collection_name (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.collection_name"]], "collection_name (music.model.tag.tag.meta attribute)": [[8, "music.model.tag.Tag.Meta.collection_name"]], "collection_name (music.model.user.user attribute)": [[8, "music.model.user.User.collection_name"]], "collection_name (music.model.user.user.meta attribute)": [[8, "music.model.user.User.Meta.collection_name"]], "count (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.count"]], "day_boundary (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.day_boundary"]], "default (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.default"]], "description_overwrite (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.description_overwrite"]], "description_suffix (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.description_suffix"]], "email (music.model.user.user attribute)": [[8, "music.model.user.User.email"]], "get_admins() (in module music.model.user)": [[8, "music.model.user.get_admins"]], "get_playlist() (music.model.user.user method)": [[8, "music.model.user.User.get_playlist"]], "get_playlists() (music.model.user.user method)": [[8, "music.model.user.User.get_playlists"]], "include_library_tracks (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_library_tracks"]], "include_recommendations (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_recommendations"]], "include_spotify_owned (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.include_spotify_owned"]], "jwt_default_length (music.model.config.config attribute)": [[8, "music.model.config.Config.jwt_default_length"]], "jwt_max_length (music.model.config.config attribute)": [[8, "music.model.config.Config.jwt_max_length"]], "last_keygen (music.model.user.user attribute)": [[8, "music.model.user.User.last_keygen"]], "last_login (music.model.user.user attribute)": [[8, "music.model.user.User.last_login"]], "last_refreshed (music.model.user.user attribute)": [[8, "music.model.user.User.last_refreshed"]], "last_updated (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.last_updated"]], "last_updated (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.last_updated"]], "lastfm_stat_album_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_album_count"]], "lastfm_stat_album_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_album_percent"]], "lastfm_stat_artist_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_artist_count"]], "lastfm_stat_artist_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_artist_percent"]], "lastfm_stat_count (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_count"]], "lastfm_stat_last_refresh (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_last_refresh"]], "lastfm_stat_percent (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.lastfm_stat_percent"]], "lastfm_username (music.model.user.user attribute)": [[8, "music.model.user.User.lastfm_username"]], "locked (music.model.user.user attribute)": [[8, "music.model.user.User.locked"]], "music.model": [[8, "module-music.model"]], "music.model.config": [[8, "module-music.model.config"]], "music.model.playlist": [[8, "module-music.model.playlist"]], "music.model.tag": [[8, "module-music.model.tag"]], "music.model.user": [[8, "module-music.model.user"]], "mutable_keys (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.mutable_keys"]], "name (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.name"]], "name (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.name"]], "notify (music.model.user.user attribute)": [[8, "music.model.user.User.notify"]], "notify_admins (music.model.user.user attribute)": [[8, "music.model.user.User.notify_admins"]], "notify_playlist_updates (music.model.user.user attribute)": [[8, "music.model.user.User.notify_playlist_updates"]], "notify_tag_updates (music.model.user.user attribute)": [[8, "music.model.user.User.notify_tag_updates"]], "parts (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.parts"]], "password (music.model.user.user attribute)": [[8, "music.model.user.User.password"]], "playlist_cloud_operating_mode (music.model.config.config attribute)": [[8, "music.model.config.Config.playlist_cloud_operating_mode"]], "playlist_references (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.playlist_references"]], "proportion (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.proportion"]], "recommendation_sample (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.recommendation_sample"]], "refresh_token (music.model.user.user attribute)": [[8, "music.model.user.User.refresh_token"]], "release_date (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.release_date"]], "shuffle (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.shuffle"]], "shuffle (music.model.playlist.sort attribute)": [[8, "music.model.playlist.Sort.shuffle"]], "sort (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.sort"]], "spotify_linked (music.model.user.user attribute)": [[8, "music.model.user.User.spotify_linked"]], "tag_id (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.tag_id"]], "time_objects (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.time_objects"]], "to_dict() (music.model.playlist.playlist method)": [[8, "music.model.playlist.Playlist.to_dict"]], "to_dict() (music.model.tag.tag method)": [[8, "music.model.tag.Tag.to_dict"]], "to_dict() (music.model.user.user method)": [[8, "music.model.user.User.to_dict"]], "token_expiry (music.model.user.user attribute)": [[8, "music.model.user.User.token_expiry"]], "total_time (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_time"]], "total_time_ms (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_time_ms"]], "total_user_scrobbles (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.total_user_scrobbles"]], "tracks (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.tracks"]], "type (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.type"]], "type (music.model.user.user attribute)": [[8, "music.model.user.User.type"]], "uri (music.model.playlist.playlist attribute)": [[8, "music.model.playlist.Playlist.uri"]], "username (music.model.tag.tag attribute)": [[8, "music.model.tag.Tag.username"]], "username (music.model.user.user attribute)": [[8, "music.model.user.User.username"]], "validated (music.model.user.user attribute)": [[8, "music.model.user.User.validated"]], "create_playlist() (in module music.tasks.create_playlist)": [[9, "music.tasks.create_playlist.create_playlist"]], "music.tasks": [[9, "module-music.tasks"]], "music.tasks.create_playlist": [[9, "module-music.tasks.create_playlist"]], "music.tasks.refresh_lastfm_stats": [[9, "module-music.tasks.refresh_lastfm_stats"]], "music.tasks.run_user_playlist": [[9, "module-music.tasks.run_user_playlist"]], "music.tasks.update_tag": [[9, "module-music.tasks.update_tag"]], "refresh_lastfm_album_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats"]], "refresh_lastfm_artist_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats"]], "refresh_lastfm_track_stats() (in module music.tasks.refresh_lastfm_stats)": [[9, "music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats"]], "run_user_playlist() (in module music.tasks.run_user_playlist)": [[9, "music.tasks.run_user_playlist.run_user_playlist"]], "update_tag() (in module music.tasks.update_tag)": [[9, "music.tasks.update_tag.update_tag"]]}}) \ No newline at end of file diff --git a/src/modules.html b/src/modules.html index 6b8656f..0a89451 100644 --- a/src/modules.html +++ b/src/modules.html @@ -190,6 +190,7 @@
    • model.user
    diff --git a/src/music.html b/src/music.html index 4a88dce..15e69be 100644 --- a/src/music.html +++ b/src/music.html @@ -187,6 +187,8 @@
  • model.config
  • diff --git a/src/music.model.html b/src/music.model.html index ac3b8b3..aefa6db 100644 --- a/src/music.model.html +++ b/src/music.model.html @@ -60,6 +60,16 @@ +
    +
    +apns_key_id = None
    +
    + +
    +
    +apns_team_id = None
    +
    +
    collection: Manager = <fireo.managers.managers.Manager object>
    @@ -506,6 +516,26 @@ locked = None
    +
    +
    +notify = None
    +
    + +
    +
    +notify_admins = None
    +
    + +
    +
    +notify_playlist_updates = None
    +
    + +
    +
    +notify_tag_updates = None
    +
    +
    password = None
    @@ -549,6 +579,11 @@
    +
    +
    +music.model.user.get_admins()
    +
    + diff --git a/src/music.tasks.html b/src/music.tasks.html index 22b3b7a..11b6568 100644 --- a/src/music.tasks.html +++ b/src/music.tasks.html @@ -121,7 +121,7 @@

    tasks.update_tag

    -music.tasks.update_tag.update_tag(user, tag, spotnet=None, fmnet=None)
    +music.tasks.update_tag.update_tag(user: User, tag: Tag, spotnet=None, fmnet=None)