This commit is contained in:
Sarsoo 2022-11-09 22:26:00 +00:00
parent f2aa0594eb
commit e3ec0431e0
26 changed files with 668 additions and 199 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -10,6 +10,13 @@
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
@ -18,73 +25,11 @@ const _ready = (callback) => {
}
};
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.highlightSearchWords();
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
@ -126,51 +71,6 @@ const Documentation = {
Documentation.LOCALE = catalog.locale;
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords: () => {
const highlight =
new URLSearchParams(window.location.search).get("highlight") || "";
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:Documentation.hideSearchWords()">' +
Documentation.gettext("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
const url = new URL(window.location);
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
},
/**
* helper function to focus on search bar
*/
@ -210,15 +110,11 @@ const Documentation = {
)
return;
const blacklistedElements = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
document.addEventListener("keydown", (event) => {
if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
@ -240,10 +136,6 @@ const Documentation = {
event.preventDefault();
}
break;
case "Escape":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.hideSearchWords();
event.preventDefault();
}
}

View File

@ -57,14 +57,14 @@ const _removeChildren = (element) => {
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, highlightTerms, searchTerms) => {
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr] = item;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
@ -82,10 +82,9 @@ const _displayItem = (item, highlightTerms, searchTerms) => {
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
const params = new URLSearchParams();
params.set("highlight", [...highlightTerms].join(" "));
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + "?" + params.toString() + anchor;
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
@ -96,7 +95,7 @@ const _displayItem = (item, highlightTerms, searchTerms) => {
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms, highlightTerms)
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
@ -116,15 +115,14 @@ const _finishSearch = (resultCount) => {
const _displayNextItem = (
results,
resultCount,
highlightTerms,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), highlightTerms, searchTerms);
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, highlightTerms, searchTerms),
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
@ -237,6 +235,12 @@ const Search = {
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
@ -264,6 +268,10 @@ const Search = {
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
@ -272,6 +280,40 @@ const Search = {
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
@ -318,7 +360,7 @@ const Search = {
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, highlightTerms, searchTerms);
_displayNextItem(results, results.length, searchTerms);
},
/**
@ -399,8 +441,8 @@ const Search = {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const docNames = Search._index.docnames;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const scoreMap = new Map();
@ -497,11 +539,9 @@ const Search = {
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, highlightWords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
* of stemmed words.
*/
makeSearchSummary: (htmlText, keywords, highlightWords) => {
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
@ -519,10 +559,6 @@ const Search = {
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
highlightWords.forEach((highlightWord) =>
_highlightText(summary, highlightWord, "highlighted")
);
return summary;
},
};

144
_static/sphinx_highlight.js Normal file
View File

@ -0,0 +1,144 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

View File

@ -13,6 +13,7 @@
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
@ -987,7 +988,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@ -14,6 +14,7 @@
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Flask Backend" href="src/music.html" />
@ -48,7 +49,14 @@
<li class="toctree-l2"><a class="reference internal" href="src/music.html#module-music">music Root Module</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="src/admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="src/admin.html">Admin Script</a><ul>
<li class="toctree-l2"><a class="reference internal" href="src/admin.html#admin.Admin"><code class="docutils literal notranslate"><span class="pre">Admin</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="src/admin.html#admin.docs"><code class="docutils literal notranslate"><span class="pre">docs()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="src/admin.html#admin.folders_to_ignore"><code class="docutils literal notranslate"><span class="pre">folders_to_ignore</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="src/admin.html#admin.run"><code class="docutils literal notranslate"><span class="pre">run()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="src/admin.html#admin.test"><code class="docutils literal notranslate"><span class="pre">test()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a><ul>
<li class="toctree-l2"><a class="reference internal" href="src/music.html">Flask Backend</a></li>
</ul>
@ -129,7 +137,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -13,6 +13,7 @@
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@ -259,7 +260,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@ -14,6 +14,7 @@
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
@ -114,7 +115,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

File diff suppressed because one or more lines are too long

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Mixonomer Modules" href="modules.html" />
@ -257,7 +258,14 @@ run_all_tags</p>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="music.html">Py</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Admin Script</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Admin Script</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#admin.Admin"><code class="docutils literal notranslate"><span class="pre">Admin</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#admin.docs"><code class="docutils literal notranslate"><span class="pre">docs()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#admin.folders_to_ignore"><code class="docutils literal notranslate"><span class="pre">folders_to_ignore</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#admin.run"><code class="docutils literal notranslate"><span class="pre">run()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#admin.test"><code class="docutils literal notranslate"><span class="pre">test()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
@ -296,7 +304,7 @@ run_all_tags</p>
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="admin script" href="admin.html" />
@ -40,50 +41,186 @@
<li class="toctree-l1"><a class="reference internal" href="music.html">Flask Backend</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.admin">api.admin</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.api">api.api</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.decorators">api.decorators</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.fm">api.fm</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.player">api.player</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.spotfm">api.spotfm</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.spotify">api.spotify</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.tag">api.tag</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.admin">api.admin</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.admin.get_tasks"><code class="docutils literal notranslate"><span class="pre">get_tasks()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.api">api.api</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.all_playlists_route"><code class="docutils literal notranslate"><span class="pre">all_playlists_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.all_users_route"><code class="docutils literal notranslate"><span class="pre">all_users_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.change_password"><code class="docutils literal notranslate"><span class="pre">change_password()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.image"><code class="docutils literal notranslate"><span class="pre">image()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.playlist_get_delete_route"><code class="docutils literal notranslate"><span class="pre">playlist_get_delete_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.playlist_post_put_route"><code class="docutils literal notranslate"><span class="pre">playlist_post_put_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.run_playlist"><code class="docutils literal notranslate"><span class="pre">run_playlist()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.run_playlist_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.run_user"><code class="docutils literal notranslate"><span class="pre">run_user()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.run_user_task"><code class="docutils literal notranslate"><span class="pre">run_user_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.run_users"><code class="docutils literal notranslate"><span class="pre">run_users()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.user_delete_route"><code class="docutils literal notranslate"><span class="pre">user_delete_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.api.user_route"><code class="docutils literal notranslate"><span class="pre">user_route()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.decorators">api.decorators</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.admin_required"><code class="docutils literal notranslate"><span class="pre">admin_required()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.check_dict"><code class="docutils literal notranslate"><span class="pre">check_dict()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.cloud_task"><code class="docutils literal notranslate"><span class="pre">cloud_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.gae_cron"><code class="docutils literal notranslate"><span class="pre">gae_cron()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.is_basic_authed"><code class="docutils literal notranslate"><span class="pre">is_basic_authed()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.is_jwt_authed"><code class="docutils literal notranslate"><span class="pre">is_jwt_authed()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.is_logged_in"><code class="docutils literal notranslate"><span class="pre">is_logged_in()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.jwt_required"><code class="docutils literal notranslate"><span class="pre">jwt_required()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.lastfm_username_required"><code class="docutils literal notranslate"><span class="pre">lastfm_username_required()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.login_or_basic_auth"><code class="docutils literal notranslate"><span class="pre">login_or_basic_auth()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.login_or_jwt"><code class="docutils literal notranslate"><span class="pre">login_or_jwt()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.login_required"><code class="docutils literal notranslate"><span class="pre">login_required()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.no_cache"><code class="docutils literal notranslate"><span class="pre">no_cache()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.no_locked_users"><code class="docutils literal notranslate"><span class="pre">no_locked_users()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.spotify_link_required"><code class="docutils literal notranslate"><span class="pre">spotify_link_required()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.validate_args"><code class="docutils literal notranslate"><span class="pre">validate_args()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.decorators.validate_json"><code class="docutils literal notranslate"><span class="pre">validate_json()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.fm">api.fm</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.fm.daily_scrobbles"><code class="docutils literal notranslate"><span class="pre">daily_scrobbles()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.player">api.player</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.player.next_track"><code class="docutils literal notranslate"><span class="pre">next_track()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.player.play"><code class="docutils literal notranslate"><span class="pre">play()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.player.shuffle"><code class="docutils literal notranslate"><span class="pre">shuffle()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.player.volume"><code class="docutils literal notranslate"><span class="pre">volume()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.spotfm">api.spotfm</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.count"><code class="docutils literal notranslate"><span class="pre">count()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.playlist_refresh"><code class="docutils literal notranslate"><span class="pre">playlist_refresh()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_album_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_album_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_artist_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_artist_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_track_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_track_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_user"><code class="docutils literal notranslate"><span class="pre">run_user()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_user_task"><code class="docutils literal notranslate"><span class="pre">run_user_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotfm.run_users"><code class="docutils literal notranslate"><span class="pre">run_users()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.spotify">api.spotify</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.spotify.sort"><code class="docutils literal notranslate"><span class="pre">sort()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#module-music.api.tag">api.tag</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.delete_tag"><code class="docutils literal notranslate"><span class="pre">delete_tag()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.get_tag"><code class="docutils literal notranslate"><span class="pre">get_tag()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.post_tag"><code class="docutils literal notranslate"><span class="pre">post_tag()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.put_tag"><code class="docutils literal notranslate"><span class="pre">put_tag()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.run_tag_task"><code class="docutils literal notranslate"><span class="pre">run_tag_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.tag_refresh"><code class="docutils literal notranslate"><span class="pre">tag_refresh()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.tag_route"><code class="docutils literal notranslate"><span class="pre">tag_route()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.api.html#music.api.tag.tags"><code class="docutils literal notranslate"><span class="pre">tags()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.auth.html">music.auth</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#module-music.auth">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#module-music.auth.auth">auth.auth</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#module-music.auth.auth">auth.auth</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.auth"><code class="docutils literal notranslate"><span class="pre">auth()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.deauth"><code class="docutils literal notranslate"><span class="pre">deauth()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.jwt_token"><code class="docutils literal notranslate"><span class="pre">jwt_token()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.login"><code class="docutils literal notranslate"><span class="pre">login()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.logout"><code class="docutils literal notranslate"><span class="pre">logout()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.register"><code class="docutils literal notranslate"><span class="pre">register()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.auth.html#music.auth.auth.token"><code class="docutils literal notranslate"><span class="pre">token()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html">music.cloud</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud.function">cloud.function</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud.tasks">cloud.tasks</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud">Module contents</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.offload_or_run_user_playlist"><code class="docutils literal notranslate"><span class="pre">offload_or_run_user_playlist()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.queue_run_user_playlist"><code class="docutils literal notranslate"><span class="pre">queue_run_user_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud.function">cloud.function</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.function.run_user_playlist_function"><code class="docutils literal notranslate"><span class="pre">run_user_playlist_function()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.function.update_tag"><code class="docutils literal notranslate"><span class="pre">update_tag()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#module-music.cloud.tasks">cloud.tasks</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_all_user_playlist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_all_user_playlist_stats()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_playlist_task"><code class="docutils literal notranslate"><span class="pre">refresh_playlist_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_user_playlist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_user_playlist_stats()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_user_stats_task"><code class="docutils literal notranslate"><span class="pre">refresh_user_stats_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.run_user_playlist_task"><code class="docutils literal notranslate"><span class="pre">run_user_playlist_task()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_all_user_playlists"><code class="docutils literal notranslate"><span class="pre">update_all_user_playlists()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_all_user_tags"><code class="docutils literal notranslate"><span class="pre">update_all_user_tags()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_playlists"><code class="docutils literal notranslate"><span class="pre">update_playlists()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.db.html">music.db</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#module-music.db">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#module-music.db.database">db.database</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#module-music.db.part_generator">db.part_generator</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#module-music.db.database">db.database</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.database.DatabaseUser"><code class="docutils literal notranslate"><span class="pre">DatabaseUser</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.database.get_authed_lastfm_network"><code class="docutils literal notranslate"><span class="pre">get_authed_lastfm_network()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.database.get_authed_spotify_network"><code class="docutils literal notranslate"><span class="pre">get_authed_spotify_network()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.database.refresh_token_database_callback"><code class="docutils literal notranslate"><span class="pre">refresh_token_database_callback()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#module-music.db.part_generator">db.part_generator</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator"><code class="docutils literal notranslate"><span class="pre">PartGenerator</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html">music.model</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.config">model.config</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.playlist">model.playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.tag">model.tag</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.user">model.user</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.config">model.config</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config"><code class="docutils literal notranslate"><span class="pre">Config</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.playlist">model.playlist</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist"><code class="docutils literal notranslate"><span class="pre">Playlist</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Sort"><code class="docutils literal notranslate"><span class="pre">Sort</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.tag">model.tag</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag"><code class="docutils literal notranslate"><span class="pre">Tag</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#module-music.model.user">model.user</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User"><code class="docutils literal notranslate"><span class="pre">User</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html">music.tasks</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.create_playlist">tasks.create_playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.refresh_lastfm_stats">tasks.refresh_lastfm_stats</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.run_user_playlist">tasks.run_user_playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.update_tag">tasks.update_tag</a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.create_playlist">tasks.create_playlist</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.create_playlist.create_playlist"><code class="docutils literal notranslate"><span class="pre">create_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.refresh_lastfm_stats">tasks.refresh_lastfm_stats</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_album_stats()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_artist_stats()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_track_stats()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.run_user_playlist">tasks.run_user_playlist</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.run_user_playlist.run_user_playlist"><code class="docutils literal notranslate"><span class="pre">run_user_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#module-music.tasks.update_tag">tasks.update_tag</a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.tasks.html#music.tasks.update_tag.update_tag"><code class="docutils literal notranslate"><span class="pre">update_tag()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.html#music.init_log"><code class="docutils literal notranslate"><span class="pre">init_log()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.html#music.music.create_app"><code class="docutils literal notranslate"><span class="pre">create_app()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul>
</li>
</ul>
@ -151,7 +288,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.auth" href="music.auth.html" />
@ -416,7 +417,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.cloud" href="music.cloud.html" />
@ -171,7 +172,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.db" href="music.db.html" />
@ -244,7 +245,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.model" href="music.model.html" />
@ -231,7 +232,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.api" href="music.api.html" />
@ -40,47 +41,281 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="music.api.html">music.api</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.admin">api.admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.api">api.api</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.decorators">api.decorators</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.fm">api.fm</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.player">api.player</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.spotfm">api.spotfm</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.spotify">api.spotify</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.tag">api.tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.admin">api.admin</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.admin.get_tasks"><code class="docutils literal notranslate"><span class="pre">get_tasks()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.api">api.api</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.all_playlists_route"><code class="docutils literal notranslate"><span class="pre">all_playlists_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.all_users_route"><code class="docutils literal notranslate"><span class="pre">all_users_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.change_password"><code class="docutils literal notranslate"><span class="pre">change_password()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.image"><code class="docutils literal notranslate"><span class="pre">image()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.playlist_get_delete_route"><code class="docutils literal notranslate"><span class="pre">playlist_get_delete_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.playlist_post_put_route"><code class="docutils literal notranslate"><span class="pre">playlist_post_put_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.run_playlist"><code class="docutils literal notranslate"><span class="pre">run_playlist()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.run_playlist_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.run_user"><code class="docutils literal notranslate"><span class="pre">run_user()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.run_user_task"><code class="docutils literal notranslate"><span class="pre">run_user_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.run_users"><code class="docutils literal notranslate"><span class="pre">run_users()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.user_delete_route"><code class="docutils literal notranslate"><span class="pre">user_delete_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.api.user_route"><code class="docutils literal notranslate"><span class="pre">user_route()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.decorators">api.decorators</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.admin_required"><code class="docutils literal notranslate"><span class="pre">admin_required()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.check_dict"><code class="docutils literal notranslate"><span class="pre">check_dict()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.cloud_task"><code class="docutils literal notranslate"><span class="pre">cloud_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.gae_cron"><code class="docutils literal notranslate"><span class="pre">gae_cron()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.is_basic_authed"><code class="docutils literal notranslate"><span class="pre">is_basic_authed()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.is_jwt_authed"><code class="docutils literal notranslate"><span class="pre">is_jwt_authed()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.is_logged_in"><code class="docutils literal notranslate"><span class="pre">is_logged_in()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.jwt_required"><code class="docutils literal notranslate"><span class="pre">jwt_required()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.lastfm_username_required"><code class="docutils literal notranslate"><span class="pre">lastfm_username_required()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.login_or_basic_auth"><code class="docutils literal notranslate"><span class="pre">login_or_basic_auth()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.login_or_jwt"><code class="docutils literal notranslate"><span class="pre">login_or_jwt()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.login_required"><code class="docutils literal notranslate"><span class="pre">login_required()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.no_cache"><code class="docutils literal notranslate"><span class="pre">no_cache()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.no_locked_users"><code class="docutils literal notranslate"><span class="pre">no_locked_users()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.spotify_link_required"><code class="docutils literal notranslate"><span class="pre">spotify_link_required()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.validate_args"><code class="docutils literal notranslate"><span class="pre">validate_args()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.decorators.validate_json"><code class="docutils literal notranslate"><span class="pre">validate_json()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.fm">api.fm</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.fm.daily_scrobbles"><code class="docutils literal notranslate"><span class="pre">daily_scrobbles()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.player">api.player</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.player.next_track"><code class="docutils literal notranslate"><span class="pre">next_track()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.player.play"><code class="docutils literal notranslate"><span class="pre">play()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.player.shuffle"><code class="docutils literal notranslate"><span class="pre">shuffle()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.player.volume"><code class="docutils literal notranslate"><span class="pre">volume()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.spotfm">api.spotfm</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.count"><code class="docutils literal notranslate"><span class="pre">count()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.playlist_refresh"><code class="docutils literal notranslate"><span class="pre">playlist_refresh()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_album_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_album_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_artist_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_artist_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_playlist_track_task"><code class="docutils literal notranslate"><span class="pre">run_playlist_track_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_user"><code class="docutils literal notranslate"><span class="pre">run_user()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_user_task"><code class="docutils literal notranslate"><span class="pre">run_user_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotfm.run_users"><code class="docutils literal notranslate"><span class="pre">run_users()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.spotify">api.spotify</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.spotify.sort"><code class="docutils literal notranslate"><span class="pre">sort()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.api.html#module-music.api.tag">api.tag</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.delete_tag"><code class="docutils literal notranslate"><span class="pre">delete_tag()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.get_tag"><code class="docutils literal notranslate"><span class="pre">get_tag()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.post_tag"><code class="docutils literal notranslate"><span class="pre">post_tag()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.put_tag"><code class="docutils literal notranslate"><span class="pre">put_tag()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.run_tag_task"><code class="docutils literal notranslate"><span class="pre">run_tag_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.tag_refresh"><code class="docutils literal notranslate"><span class="pre">tag_refresh()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.tag_route"><code class="docutils literal notranslate"><span class="pre">tag_route()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.api.html#music.api.tag.tags"><code class="docutils literal notranslate"><span class="pre">tags()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="music.auth.html">music.auth</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.auth.html#module-music.auth">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.auth.html#module-music.auth.auth">auth.auth</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.auth.html#module-music.auth.auth">auth.auth</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.auth"><code class="docutils literal notranslate"><span class="pre">auth()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.deauth"><code class="docutils literal notranslate"><span class="pre">deauth()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.jwt_token"><code class="docutils literal notranslate"><span class="pre">jwt_token()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.login"><code class="docutils literal notranslate"><span class="pre">login()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.logout"><code class="docutils literal notranslate"><span class="pre">logout()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.register"><code class="docutils literal notranslate"><span class="pre">register()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.auth.html#music.auth.auth.token"><code class="docutils literal notranslate"><span class="pre">token()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="music.cloud.html">music.cloud</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud.function">cloud.function</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud.tasks">cloud.tasks</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud">Module contents</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.offload_or_run_user_playlist"><code class="docutils literal notranslate"><span class="pre">offload_or_run_user_playlist()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.queue_run_user_playlist"><code class="docutils literal notranslate"><span class="pre">queue_run_user_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud.function">cloud.function</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.function.run_user_playlist_function"><code class="docutils literal notranslate"><span class="pre">run_user_playlist_function()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.function.update_tag"><code class="docutils literal notranslate"><span class="pre">update_tag()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.cloud.html#module-music.cloud.tasks">cloud.tasks</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_all_user_playlist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_all_user_playlist_stats()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_playlist_task"><code class="docutils literal notranslate"><span class="pre">refresh_playlist_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_user_playlist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_user_playlist_stats()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.refresh_user_stats_task"><code class="docutils literal notranslate"><span class="pre">refresh_user_stats_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.run_user_playlist_task"><code class="docutils literal notranslate"><span class="pre">run_user_playlist_task()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_all_user_playlists"><code class="docutils literal notranslate"><span class="pre">update_all_user_playlists()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_all_user_tags"><code class="docutils literal notranslate"><span class="pre">update_all_user_tags()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.cloud.html#music.cloud.tasks.update_playlists"><code class="docutils literal notranslate"><span class="pre">update_playlists()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="music.db.html">music.db</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.db.html#module-music.db">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.db.html#module-music.db.database">db.database</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.db.html#module-music.db.part_generator">db.part_generator</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.db.html#module-music.db.database">db.database</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#music.db.database.DatabaseUser"><code class="docutils literal notranslate"><span class="pre">DatabaseUser</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.database.DatabaseUser.user_id"><code class="docutils literal notranslate"><span class="pre">DatabaseUser.user_id</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#music.db.database.get_authed_lastfm_network"><code class="docutils literal notranslate"><span class="pre">get_authed_lastfm_network()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#music.db.database.get_authed_spotify_network"><code class="docutils literal notranslate"><span class="pre">get_authed_spotify_network()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#music.db.database.refresh_token_database_callback"><code class="docutils literal notranslate"><span class="pre">refresh_token_database_callback()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.db.html#module-music.db.part_generator">db.part_generator</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator"><code class="docutils literal notranslate"><span class="pre">PartGenerator</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator.get_recursive_parts"><code class="docutils literal notranslate"><span class="pre">PartGenerator.get_recursive_parts()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator.process_reference_by_name"><code class="docutils literal notranslate"><span class="pre">PartGenerator.process_reference_by_name()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator.process_reference_by_reference"><code class="docutils literal notranslate"><span class="pre">PartGenerator.process_reference_by_reference()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.db.html#music.db.part_generator.PartGenerator.reset"><code class="docutils literal notranslate"><span class="pre">PartGenerator.reset()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="music.model.html">music.model</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.config">model.config</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.playlist">model.playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.tag">model.tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.user">model.user</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.config">model.config</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#music.model.config.Config"><code class="docutils literal notranslate"><span class="pre">Config</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.Meta"><code class="docutils literal notranslate"><span class="pre">Config.Meta</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.collection"><code class="docutils literal notranslate"><span class="pre">Config.collection</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.collection_name"><code class="docutils literal notranslate"><span class="pre">Config.collection_name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.jwt_default_length"><code class="docutils literal notranslate"><span class="pre">Config.jwt_default_length</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.jwt_max_length"><code class="docutils literal notranslate"><span class="pre">Config.jwt_max_length</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.jwt_secret_key"><code class="docutils literal notranslate"><span class="pre">Config.jwt_secret_key</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.last_fm_client_id"><code class="docutils literal notranslate"><span class="pre">Config.last_fm_client_id</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.playlist_cloud_operating_mode"><code class="docutils literal notranslate"><span class="pre">Config.playlist_cloud_operating_mode</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.secret_key"><code class="docutils literal notranslate"><span class="pre">Config.secret_key</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.spotify_client_id"><code class="docutils literal notranslate"><span class="pre">Config.spotify_client_id</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.config.Config.spotify_client_secret"><code class="docutils literal notranslate"><span class="pre">Config.spotify_client_secret</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.playlist">model.playlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist"><code class="docutils literal notranslate"><span class="pre">Playlist</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.Meta"><code class="docutils literal notranslate"><span class="pre">Playlist.Meta</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.add_last_month"><code class="docutils literal notranslate"><span class="pre">Playlist.add_last_month</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.add_this_month"><code class="docutils literal notranslate"><span class="pre">Playlist.add_this_month</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.chart_limit"><code class="docutils literal notranslate"><span class="pre">Playlist.chart_limit</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.chart_range"><code class="docutils literal notranslate"><span class="pre">Playlist.chart_range</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.collection"><code class="docutils literal notranslate"><span class="pre">Playlist.collection</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.collection_name"><code class="docutils literal notranslate"><span class="pre">Playlist.collection_name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.day_boundary"><code class="docutils literal notranslate"><span class="pre">Playlist.day_boundary</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.description_overwrite"><code class="docutils literal notranslate"><span class="pre">Playlist.description_overwrite</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.description_suffix"><code class="docutils literal notranslate"><span class="pre">Playlist.description_suffix</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.include_library_tracks"><code class="docutils literal notranslate"><span class="pre">Playlist.include_library_tracks</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.include_recommendations"><code class="docutils literal notranslate"><span class="pre">Playlist.include_recommendations</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.include_spotify_owned"><code class="docutils literal notranslate"><span class="pre">Playlist.include_spotify_owned</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.last_updated"><code class="docutils literal notranslate"><span class="pre">Playlist.last_updated</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_album_count"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_album_count</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_album_percent"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_album_percent</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_artist_count"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_artist_count</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_artist_percent"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_artist_percent</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_count"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_count</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_last_refresh"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_last_refresh</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.lastfm_stat_percent"><code class="docutils literal notranslate"><span class="pre">Playlist.lastfm_stat_percent</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.mutable_keys"><code class="docutils literal notranslate"><span class="pre">Playlist.mutable_keys</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.name"><code class="docutils literal notranslate"><span class="pre">Playlist.name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.parts"><code class="docutils literal notranslate"><span class="pre">Playlist.parts</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.playlist_references"><code class="docutils literal notranslate"><span class="pre">Playlist.playlist_references</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.recommendation_sample"><code class="docutils literal notranslate"><span class="pre">Playlist.recommendation_sample</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.shuffle"><code class="docutils literal notranslate"><span class="pre">Playlist.shuffle</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.sort"><code class="docutils literal notranslate"><span class="pre">Playlist.sort</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.to_dict"><code class="docutils literal notranslate"><span class="pre">Playlist.to_dict()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.type"><code class="docutils literal notranslate"><span class="pre">Playlist.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist.uri"><code class="docutils literal notranslate"><span class="pre">Playlist.uri</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#music.model.playlist.Sort"><code class="docutils literal notranslate"><span class="pre">Sort</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Sort.default"><code class="docutils literal notranslate"><span class="pre">Sort.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Sort.release_date"><code class="docutils literal notranslate"><span class="pre">Sort.release_date</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.playlist.Sort.shuffle"><code class="docutils literal notranslate"><span class="pre">Sort.shuffle</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.tag">model.tag</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#music.model.tag.Tag"><code class="docutils literal notranslate"><span class="pre">Tag</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.Meta"><code class="docutils literal notranslate"><span class="pre">Tag.Meta</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.albums"><code class="docutils literal notranslate"><span class="pre">Tag.albums</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.artists"><code class="docutils literal notranslate"><span class="pre">Tag.artists</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.collection"><code class="docutils literal notranslate"><span class="pre">Tag.collection</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.collection_name"><code class="docutils literal notranslate"><span class="pre">Tag.collection_name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.count"><code class="docutils literal notranslate"><span class="pre">Tag.count</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.last_updated"><code class="docutils literal notranslate"><span class="pre">Tag.last_updated</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.name"><code class="docutils literal notranslate"><span class="pre">Tag.name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.proportion"><code class="docutils literal notranslate"><span class="pre">Tag.proportion</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.tag_id"><code class="docutils literal notranslate"><span class="pre">Tag.tag_id</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.time_objects"><code class="docutils literal notranslate"><span class="pre">Tag.time_objects</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.to_dict"><code class="docutils literal notranslate"><span class="pre">Tag.to_dict()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.total_time"><code class="docutils literal notranslate"><span class="pre">Tag.total_time</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.total_time_ms"><code class="docutils literal notranslate"><span class="pre">Tag.total_time_ms</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.total_user_scrobbles"><code class="docutils literal notranslate"><span class="pre">Tag.total_user_scrobbles</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.tracks"><code class="docutils literal notranslate"><span class="pre">Tag.tracks</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.tag.Tag.username"><code class="docutils literal notranslate"><span class="pre">Tag.username</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.model.html#module-music.model.user">model.user</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.model.html#music.model.user.User"><code class="docutils literal notranslate"><span class="pre">User</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.Meta"><code class="docutils literal notranslate"><span class="pre">User.Meta</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.access_token"><code class="docutils literal notranslate"><span class="pre">User.access_token</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.check_password"><code class="docutils literal notranslate"><span class="pre">User.check_password()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.collection"><code class="docutils literal notranslate"><span class="pre">User.collection</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.collection_name"><code class="docutils literal notranslate"><span class="pre">User.collection_name</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.email"><code class="docutils literal notranslate"><span class="pre">User.email</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.get_playlist"><code class="docutils literal notranslate"><span class="pre">User.get_playlist()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.get_playlists"><code class="docutils literal notranslate"><span class="pre">User.get_playlists()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.last_keygen"><code class="docutils literal notranslate"><span class="pre">User.last_keygen</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.last_login"><code class="docutils literal notranslate"><span class="pre">User.last_login</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.last_refreshed"><code class="docutils literal notranslate"><span class="pre">User.last_refreshed</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.lastfm_username"><code class="docutils literal notranslate"><span class="pre">User.lastfm_username</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.locked"><code class="docutils literal notranslate"><span class="pre">User.locked</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.password"><code class="docutils literal notranslate"><span class="pre">User.password</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.refresh_token"><code class="docutils literal notranslate"><span class="pre">User.refresh_token</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.spotify_linked"><code class="docutils literal notranslate"><span class="pre">User.spotify_linked</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.to_dict"><code class="docutils literal notranslate"><span class="pre">User.to_dict()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.token_expiry"><code class="docutils literal notranslate"><span class="pre">User.token_expiry</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.type"><code class="docutils literal notranslate"><span class="pre">User.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.username"><code class="docutils literal notranslate"><span class="pre">User.username</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="music.model.html#music.model.user.User.validated"><code class="docutils literal notranslate"><span class="pre">User.validated</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="music.tasks.html">music.tasks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.create_playlist">tasks.create_playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.refresh_lastfm_stats">tasks.refresh_lastfm_stats</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.run_user_playlist">tasks.run_user_playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.update_tag">tasks.update_tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.create_playlist">tasks.create_playlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.create_playlist.create_playlist"><code class="docutils literal notranslate"><span class="pre">create_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.refresh_lastfm_stats">tasks.refresh_lastfm_stats</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_album_stats()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_artist_stats()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats"><code class="docutils literal notranslate"><span class="pre">refresh_lastfm_track_stats()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.run_user_playlist">tasks.run_user_playlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.run_user_playlist.run_user_playlist"><code class="docutils literal notranslate"><span class="pre">run_user_playlist()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="music.tasks.html#module-music.tasks.update_tag">tasks.update_tag</a><ul>
<li class="toctree-l3"><a class="reference internal" href="music.tasks.html#music.tasks.update_tag.update_tag"><code class="docutils literal notranslate"><span class="pre">update_tag()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
@ -182,7 +417,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.tasks" href="music.tasks.html" />
@ -644,7 +645,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|

View File

@ -14,6 +14,7 @@
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="admin script" href="admin.html" />
@ -199,7 +200,7 @@
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|