This commit is contained in:
Sarsoo 2022-08-26 18:34:19 +00:00
parent bd33691acc
commit f2aa0594eb
60 changed files with 1952 additions and 4032 deletions

View File

@ -1,4 +1,4 @@
# Sphinx build info version 1 # Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 7186c4270e3799a6d05bc88e234018d2 config: d5d0d2dc7e6531bfca30187e22cd5741
tags: 645f666f9bcd5a90fca523b33c5a78b7 tags: 645f666f9bcd5a90fca523b33c5a78b7

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

2
CNAME
View File

@ -1 +1 @@
docs.mixonomer.sarsoo.xyz docs.mixonomer.sarsoo.xyz

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -1,4 +1,4 @@
Music Tools Mixonomer
======================================= =======================================
.. toctree:: .. toctree::
@ -6,16 +6,15 @@ Music Tools
:caption: Contents: :caption: Contents:
Py <src/music> Py <src/music>
Js <src/MusicTools>
Admin Script <src/admin> Admin Script <src/admin>
All Modules <src/modules> All Modules <src/modules>
`Music Tools <https://music.sarsoo.xyz>`_ `Mixonomer <https://mixonomer.sarsoo.xyz>`_
---------------------------------------------- ----------------------------------------------
.. image:: https://github.com/sarsoo/music-tools/workflows/test%20and%20deploy/badge.svg .. image:: https://github.com/sarsoo/Mixonomer/workflows/test%20and%20deploy/badge.svg
Music Tools is a web app for creating smart Spotify playlists. The app is based on `spotframework <https://github.com/Sarsoo/spotframework>`_ and `fmframework <https://github.com/Sarsoo/pyfmframework>`_ for interfacing with Spotify and Last.fm. The app is currently hosted on Google's Cloud Platform. Mixonomer is a web app for creating smart Spotify playlists. The app is based on `spotframework <https://github.com/Sarsoo/spotframework>`_ and `fmframework <https://github.com/Sarsoo/pyfmframework>`_ for interfacing with Spotify and Last.fm. The app is currently hosted on Google's Cloud Platform.
The backend is composed of a Flask web server with a Fireo ORM layer and longer tasks dispatched to Cloud Tasks or Functions. The frontend is a React app with material UI components and Axios for HTTP requests. The backend is composed of a Flask web server with a Fireo ORM layer and longer tasks dispatched to Cloud Tasks or Functions. The frontend is a React app with material UI components and Axios for HTTP requests.

View File

@ -1,34 +0,0 @@
Admin
=================
Router
--------
.. js:autoclass:: Admin
:members:
:private-members:
Lock
------------------
.. js:autoclass:: Lock
:members:
:private-members:
.. js:autofunction:: Row
Functions
--------------------
.. js:autoclass:: Functions
:members:
:private-members:
Tasks
--------------------
.. js:autoclass:: Tasks
:members:
:private-members:
.. js:autofunction:: TaskType

View File

@ -1,17 +0,0 @@
Maths
=================
Bar Chart
-----------------
.. js:autoclass:: BarChart
:members:
:private-members:
Pie Chart
------------------
.. js:autoclass:: PieChart
:members:
:private-members:

View File

@ -1,60 +0,0 @@
Playlist
=================
Router
--------
.. js:autoclass:: Playlists
:members:
:private-members:
For managing playlists list pages for diverting to new playlist page
.. js:autoclass:: PlaylistRouter.View
:members:
:private-members:
Cards List
------------------
.. js:autoclass:: PlaylistsView
:members:
:private-members:
.. js:autoclass:: PlaylistGrid
:members:
:private-members:
.. js:autoclass:: PlaylistCard
:members:
:private-members:
.. js:autofunction:: getPlaylistLink
New Playlist Card
--------------------
.. js:autoclass:: NewPlaylist
:members:
:private-members:
View/Edit Card
------------------
.. js:autoclass:: Edit
:members:
:private-members:
.. js:autofunction:: ReferenceEntry
.. js:autofunction:: Edit.ListBlock
.. js:autofunction:: Edit.BlockGridItem
Stats Card
-----------------------
.. js:autoclass:: Count
:members:
:private-members:

View File

@ -1,34 +0,0 @@
Settings
=================
Router
--------
.. js:autoclass:: Settings
:members:
:private-members:
Change Password
------------------
.. js:autoclass:: ChangePassword
:members:
:private-members:
Spotify Link
------------------
.. js:autoclass:: SpotifyLink
:members:
:private-members:
.. js:autofunction:: AuthButton
.. js:autofunction:: DeAuthButton
Last.fm Username
------------------
.. js:autoclass:: LastFM
:members:
:private-members:

View File

@ -1,37 +0,0 @@
Tag
=================
Router
--------
.. js:autoclass:: TagRouter
:members:
:private-members:
Cards List
------------------
.. js:autoclass:: TagList
:members:
:private-members:
.. js:autofunction:: TagGrid
.. js:autofunction:: TagCard
.. js:autofunction:: getTagLink
New Tag Card
--------------------
.. js:autoclass:: NewTag
:members:
:private-members:
View/Edit Tag
--------------------
.. js:autoclass:: TagView
:members:
:private-members:

View File

@ -1,15 +0,0 @@
React Frontend
===================
.. toctree::
:maxdepth: 4
MusicTools.Playlist
MusicTools.Tag
MusicTools.Maths
MusicTools.Admin
MusicTools.Settings
.. js:autoclass:: MusicTools
:members:
:private-members:

View File

@ -1,8 +1,7 @@
Music Tools Modules Mixonomer Modules
====================== ======================
.. toctree:: .. toctree::
:maxdepth: 4 :maxdepth: 4
music music
MusicTools

View File

@ -0,0 +1,134 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.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": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@ -4,7 +4,7 @@
* *
* Sphinx stylesheet -- basic theme. * Sphinx stylesheet -- basic theme.
* *
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
@ -130,7 +130,7 @@ ul.search li a {
font-weight: bold; font-weight: bold;
} }
ul.search li div.context { ul.search li p.context {
color: #888; color: #888;
margin: 2px 0 0 30px; margin: 2px 0 0 30px;
text-align: left; text-align: left;
@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */ /* -- general body styles --------------------------------------------------- */
div.body { div.body {
min-width: 450px; min-width: 360px;
max-width: 800px; max-width: 800px;
} }
@ -237,16 +237,6 @@ a.headerlink {
visibility: hidden; visibility: hidden;
} }
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink, h1:hover > a.headerlink,
h2:hover > a.headerlink, h2:hover > a.headerlink,
h3:hover > a.headerlink, h3:hover > a.headerlink,
@ -334,13 +324,15 @@ aside.sidebar {
p.sidebar-title { p.sidebar-title {
font-weight: bold; font-weight: bold;
} }
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote { div.admonition, div.topic, blockquote {
clear: left; clear: left;
} }
/* -- topics ---------------------------------------------------------------- */ /* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic { div.topic {
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 7px; padding: 7px;
@ -379,6 +371,8 @@ div.body p.centered {
div.sidebar > :last-child, div.sidebar > :last-child,
aside.sidebar > :last-child, aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child, div.topic > :last-child,
div.admonition > :last-child { div.admonition > :last-child {
margin-bottom: 0; margin-bottom: 0;
@ -386,6 +380,8 @@ div.admonition > :last-child {
div.sidebar::after, div.sidebar::after,
aside.sidebar::after, aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after, div.topic::after,
div.admonition::after, div.admonition::after,
blockquote::after { blockquote::after {
@ -428,10 +424,6 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa; border-bottom: 1px solid #aaa;
} }
table.footnote td, table.footnote th {
border: 0 !important;
}
th { th {
text-align: left; text-align: left;
padding-right: 5px; padding-right: 5px;
@ -508,6 +500,63 @@ table.hlist td {
vertical-align: top; vertical-align: top;
} }
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */ /* -- other body styles ----------------------------------------------------- */
@ -557,20 +606,26 @@ ol.simple p,
ul.simple p { ul.simple p {
margin-bottom: 0; margin-bottom: 0;
} }
aside.footnote > span,
dl.footnote > dt, div.citation > span {
dl.citation > dt {
float: left; float: left;
margin-right: 0.5em;
} }
aside.footnote > span:last-of-type,
dl.footnote > dd, div.citation > span:last-of-type {
dl.citation > dd { padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em; margin-bottom: 0em;
} }
aside.footnote > p:last-of-type:after,
dl.footnote > dd:after, div.citation > p:last-of-type:after {
dl.citation > dd:after {
content: ""; content: "";
clear: both; clear: both;
} }
@ -587,10 +642,6 @@ dl.field-list > dt {
padding-right: 5px; padding-right: 5px;
} }
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd { dl.field-list > dd {
padding-left: 0.5em; padding-left: 0.5em;
margin-top: 0em; margin-top: 0em;
@ -634,14 +685,6 @@ dl.glossary dt {
font-size: 1.1em; font-size: 1.1em;
} }
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.versionmodified { .versionmodified {
font-style: italic; font-style: italic;
} }
@ -682,8 +725,9 @@ dl.glossary dt {
.classifier:before { .classifier:before {
font-style: normal; font-style: normal;
margin: 0.5em; margin: 0 0.5em;
content: ":"; content: ":";
display: inline-block;
} }
abbr, acronym { abbr, acronym {
@ -707,6 +751,7 @@ span.pre {
-ms-hyphens: none; -ms-hyphens: none;
-webkit-hyphens: none; -webkit-hyphens: none;
hyphens: none; hyphens: none;
white-space: nowrap;
} }
div[class*="highlight-"] { div[class*="highlight-"] {
@ -770,8 +815,12 @@ div.code-block-caption code {
table.highlighttable td.linenos, table.highlighttable td.linenos,
span.linenos, span.linenos,
div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none; user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
} }
div.code-block-caption span.caption-number { div.code-block-caption span.caption-number {
@ -786,16 +835,6 @@ div.literal-block-wrapper {
margin: 1em 0; margin: 1em 0;
} }
code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
code.descclassname {
background-color: transparent;
}
code.xref, a code { code.xref, a code {
background-color: transparent; background-color: transparent;
font-weight: bold; font-weight: bold;

View File

@ -2,320 +2,263 @@
* doctools.js * doctools.js
* ~~~~~~~~~~~ * ~~~~~~~~~~~
* *
* Sphinx JavaScript utilities for all documentation. * Base JavaScript utilities for all Sphinx HTML documentation.
* *
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
"use strict";
/** const _ready = (callback) => {
* select a different prefix for underscore if (document.readyState !== "loading") {
*/ callback();
$u = _.noConflict(); } else {
document.addEventListener("DOMContentLoaded", callback);
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
} }
return decodeURIComponent(x.replace(/\+/g, ' '));
}; };
/** /**
* small helper function to urlencode strings * highlight a given string on a node by wrapping it in
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name. * span elements with the given class name.
*/ */
jQuery.fn.highlightText = function(text, className) { const _highlight = (node, addItems, text, className) => {
function highlight(node, addItems) { if (node.nodeType === Node.TEXT_NODE) {
if (node.nodeType === 3) { const val = node.nodeValue;
var val = node.nodeValue; const parent = node.parentNode;
var pos = val.toLowerCase().indexOf(text); const pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && if (
!jQuery(node.parentNode).hasClass(className) && pos >= 0 &&
!jQuery(node.parentNode).hasClass("nohighlight")) { !parent.classList.contains(className) &&
var span; !parent.classList.contains("nohighlight")
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); ) {
if (isInSVG) { let span;
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else { const closestNode = parent.closest("body, svg, foreignObject");
span = document.createElement("span"); const isInSVG = closestNode && closestNode.matches("svg");
span.className = className; if (isInSVG) {
} span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
span.appendChild(document.createTextNode(val.substr(pos, text.length))); } else {
node.parentNode.insertBefore(span, node.parentNode.insertBefore( 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)), document.createTextNode(val.substr(pos + text.length)),
node.nextSibling)); node.nextSibling
node.nodeValue = val.substr(0, pos); )
if (isInSVG) { );
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); node.nodeValue = val.substr(0, pos);
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x; if (isInSVG) {
rect.y.baseVal.value = bbox.y; const rect = document.createElementNS(
rect.width.baseVal.value = bbox.width; "http://www.w3.org/2000/svg",
rect.height.baseVal.value = bbox.height; "rect"
rect.setAttribute('class', className); );
addItems.push({ const bbox = parent.getBBox();
"parent": node.parentNode, rect.x.baseVal.value = bbox.x;
"target": rect}); 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 (!jQuery(node).is("button, select, textarea")) { } else if (node.matches && !node.matches("button, select, textarea")) {
jQuery.each(node.childNodes, function() { node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
highlight(this, addItems);
});
}
} }
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
}; };
const _highlightText = (thisNode, text, className) => {
/* let addItems = [];
* backward compatibility for jQuery.browser _highlight(thisNode, addItems, text, className);
* This will be supported until firefox bug is fixed. addItems.forEach((obj) =>
*/ obj.parent.insertAdjacentElement("beforebegin", obj.target)
if (!jQuery.browser) { );
jQuery.uaMatch = function(ua) { };
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/** /**
* Small JavaScript module for the documentation. * Small JavaScript module for the documentation.
*/ */
var Documentation = { const Documentation = {
init: () => {
init : function() { Documentation.highlightSearchWords();
this.fixFirefoxAnchorBug(); Documentation.initDomainIndexTable();
this.highlightSearchWords(); Documentation.initOnKeyListeners();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
}, },
/** /**
* i18n support * i18n support
*/ */
TRANSLATIONS : {}, TRANSLATIONS: {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE : 'unknown', LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions // gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext) // can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) { gettext: (string) => {
var translated = Documentation.TRANSLATIONS[string]; const translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined') switch (typeof translated) {
return string; case "undefined":
return (typeof translated === 'string') ? translated : translated[0]; return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
}, },
ngettext : function(singular, plural, n) { ngettext: (singular, plural, n) => {
var translated = Documentation.TRANSLATIONS[singular]; const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined') if (typeof translated !== "undefined")
return (n == 1) ? singular : plural; return translated[Documentation.PLURAL_EXPR(n)];
return translated[Documentation.PLURALEXPR(n)]; return n === 1 ? singular : plural;
}, },
addTranslations : function(catalog) { addTranslations: (catalog) => {
for (var key in catalog.messages) Object.assign(Documentation.TRANSLATIONS, catalog.messages);
this.TRANSLATIONS[key] = catalog.messages[key]; Documentation.PLURAL_EXPR = new Function(
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); "n",
this.LOCALE = catalog.locale; `return (${catalog.plural_expr})`
}, );
Documentation.LOCALE = catalog.locale;
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
}, },
/** /**
* highlight the search words provided in the url in the text * highlight the search words provided in the url in the text
*/ */
highlightSearchWords : function() { highlightSearchWords: () => {
var params = $.getQueryParameters(); const highlight =
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; new URLSearchParams(window.location.search).get("highlight") || "";
if (terms.length) { const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
var body = $('div.body'); if (terms.length === 0) return; // nothing to do
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/** // There should never be more than one element matching "div.body"
* init the domain index toggle buttons const divBody = document.querySelectorAll("div.body");
*/ const body = divBody.length ? divBody[0] : document.querySelector("body");
initIndexTable : function() { window.setTimeout(() => {
var togglers = $('img.toggler').click(function() { terms.forEach((term) => _highlightText(body, term, "highlighted"));
var src = $(this).attr('src'); }, 10);
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle(); const searchBox = document.getElementById("searchbox");
if (src.substr(-9) === 'minus.png') if (searchBox === null) return;
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); searchBox.appendChild(
else document
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); .createRange()
}).css('display', ''); .createContextualFragment(
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { '<p class="highlight-link">' +
togglers.click(); '<a href="javascript:Documentation.hideSearchWords()">' +
} Documentation.gettext("Hide Search Matches") +
"</a></p>"
)
);
}, },
/** /**
* helper function to hide the search marks again * helper function to hide the search marks again
*/ */
hideSearchWords : function() { hideSearchWords: () => {
$('#searchbox .highlight-link').fadeOut(300); document
$('span.highlighted').removeClass('highlighted'); .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);
}, },
/** /**
* make the url absolute * helper function to focus on search bar
*/ */
makeURL : function(relativeURL) { focusSearchBar: () => {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; document.querySelectorAll("input[name=q]")[0]?.focus();
}, },
/** /**
* get the current relative url * Initialise the domain index toggle buttons
*/ */
getCurrentURL : function() { initDomainIndexTable: () => {
var path = document.location.pathname; const toggler = (el) => {
var parts = path.split(/\//); const idNumber = el.id.substr(7);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (this === '..') if (el.src.substr(-9) === "minus.png") {
parts.pop(); el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
}); toggledRows.forEach((el) => (el.style.display = "none"));
var url = parts.join('/'); } else {
return path.substring(url.lastIndexOf('/') + 1, path.length - 1); el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
}, },
initOnKeyListeners: function() { initOnKeyListeners: () => {
$(document).keydown(function(event) { // only install a listener if it is really needed
var activeElementType = document.activeElement.tagName; if (
// don't navigate when in search box, textarea, dropdown or button !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey )
&& !event.shiftKey) { return;
switch (event.keyCode) {
case 37: // left const blacklistedElements = new Set([
var prevHref = $('link[rel="prev"]').prop('href'); "TEXTAREA",
if (prevHref) { "INPUT",
window.location.href = prevHref; "SELECT",
return false; "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
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
} }
case 39: // right break;
var nextHref = $('link[rel="next"]').prop('href'); case "ArrowRight":
if (nextHref) { if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
window.location.href = nextHref;
return false; const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
} }
break;
case "Escape":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.hideSearchWords();
event.preventDefault();
} }
} }
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
}); });
} },
}; };
// quick alias for translations // quick alias for translations
_ = Documentation.gettext; const _ = Documentation.gettext;
$(document).ready(function() { _ready(Documentation.init);
Documentation.init();
});

View File

@ -1,12 +1,14 @@
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '', VERSION: '',
LANGUAGE: 'None', LANGUAGE: 'en',
COLLAPSE_INDEX: false, COLLAPSE_INDEX: false,
BUILDER: 'html', BUILDER: 'html',
FILE_SUFFIX: '.html', FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html', LINK_SUFFIX: '.html',
HAS_SOURCE: true, HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt', SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
}; };

View File

@ -1,15 +1,15 @@
/*! /*!
* jQuery JavaScript Library v3.5.1 * jQuery JavaScript Library v3.6.0
* https://jquery.com/ * https://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
* https://sizzlejs.com/ * https://sizzlejs.com/
* *
* Copyright JS Foundation and other contributors * Copyright OpenJS Foundation and other contributors
* Released under the MIT license * Released under the MIT license
* https://jquery.org/license * https://jquery.org/license
* *
* Date: 2020-05-04T22:49Z * Date: 2021-03-02T17:08Z
*/ */
( function( global, factory ) { ( function( global, factory ) {
@ -76,12 +76,16 @@ var support = {};
var isFunction = function isFunction( obj ) { var isFunction = function isFunction( obj ) {
// Support: Chrome <=57, Firefox <=52 // Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements // In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`). // (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function. // We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number"; // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
}; // Plus for old WebKit, typeof returns "function" for HTML collections
// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
return typeof obj === "function" && typeof obj.nodeType !== "number" &&
typeof obj.item !== "function";
};
var isWindow = function isWindow( obj ) { var isWindow = function isWindow( obj ) {
@ -147,7 +151,7 @@ function toType( obj ) {
var var
version = "3.5.1", version = "3.6.0",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
@ -401,7 +405,7 @@ jQuery.extend( {
if ( isArrayLike( Object( arr ) ) ) { if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret, jQuery.merge( ret,
typeof arr === "string" ? typeof arr === "string" ?
[ arr ] : arr [ arr ] : arr
); );
} else { } else {
push.call( ret, arr ); push.call( ret, arr );
@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) {
// Populate the class2type map // Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( _i, name ) { function( _i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase(); class2type[ "[object " + name + "]" ] = name.toLowerCase();
} ); } );
function isArrayLike( obj ) { function isArrayLike( obj ) {
@ -518,14 +522,14 @@ function isArrayLike( obj ) {
} }
var Sizzle = var Sizzle =
/*! /*!
* Sizzle CSS Selector Engine v2.3.5 * Sizzle CSS Selector Engine v2.3.6
* https://sizzlejs.com/ * https://sizzlejs.com/
* *
* Copyright JS Foundation and other contributors * Copyright JS Foundation and other contributors
* Released under the MIT license * Released under the MIT license
* https://js.foundation/ * https://js.foundation/
* *
* Date: 2020-03-14 * Date: 2021-02-16
*/ */
( function( window ) { ( function( window ) {
var i, var i,
@ -1108,8 +1112,8 @@ support = Sizzle.support = {};
* @returns {Boolean} True iff elem is a non-HTML XML node * @returns {Boolean} True iff elem is a non-HTML XML node
*/ */
isXML = Sizzle.isXML = function( elem ) { isXML = Sizzle.isXML = function( elem ) {
var namespace = elem.namespaceURI, var namespace = elem && elem.namespaceURI,
docElem = ( elem.ownerDocument || elem ).documentElement; docElem = elem && ( elem.ownerDocument || elem ).documentElement;
// Support: IE <=8 // Support: IE <=8
// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@ -3024,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
function nodeName( elem, name ) { function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}; }
var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
@ -3997,8 +4001,8 @@ jQuery.extend( {
resolveContexts = Array( i ), resolveContexts = Array( i ),
resolveValues = slice.call( arguments ), resolveValues = slice.call( arguments ),
// the master Deferred // the primary Deferred
master = jQuery.Deferred(), primary = jQuery.Deferred(),
// subordinate callback factory // subordinate callback factory
updateFunc = function( i ) { updateFunc = function( i ) {
@ -4006,30 +4010,30 @@ jQuery.extend( {
resolveContexts[ i ] = this; resolveContexts[ i ] = this;
resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
if ( !( --remaining ) ) { if ( !( --remaining ) ) {
master.resolveWith( resolveContexts, resolveValues ); primary.resolveWith( resolveContexts, resolveValues );
} }
}; };
}; };
// Single- and empty arguments are adopted like Promise.resolve // Single- and empty arguments are adopted like Promise.resolve
if ( remaining <= 1 ) { if ( remaining <= 1 ) {
adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
!remaining ); !remaining );
// Use .then() to unwrap secondary thenables (cf. gh-3000) // Use .then() to unwrap secondary thenables (cf. gh-3000)
if ( master.state() === "pending" || if ( primary.state() === "pending" ||
isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
return master.then(); return primary.then();
} }
} }
// Multiple arguments are aggregated like Promise.all array elements // Multiple arguments are aggregated like Promise.all array elements
while ( i-- ) { while ( i-- ) {
adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
} }
return master.promise(); return primary.promise();
} }
} ); } );
@ -4180,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
for ( ; i < len; i++ ) { for ( ; i < len; i++ ) {
fn( fn(
elems[ i ], key, raw ? elems[ i ], key, raw ?
value : value :
value.call( elems[ i ], i, fn( elems[ i ], key ) ) value.call( elems[ i ], i, fn( elems[ i ], key ) )
); );
} }
} }
@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
} }
var var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() { function returnTrue() {
return true; return true;
@ -5387,8 +5388,8 @@ jQuery.event = {
event = jQuery.event.fix( nativeEvent ), event = jQuery.event.fix( nativeEvent ),
handlers = ( handlers = (
dataPriv.get( this, "events" ) || Object.create( null ) dataPriv.get( this, "events" ) || Object.create( null )
)[ event.type ] || [], )[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {}; special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event // Use the fix-ed jQuery.Event rather than the (read-only) native event
@ -5512,12 +5513,12 @@ jQuery.event = {
get: isFunction( hook ) ? get: isFunction( hook ) ?
function() { function() {
if ( this.originalEvent ) { if ( this.originalEvent ) {
return hook( this.originalEvent ); return hook( this.originalEvent );
} }
} : } :
function() { function() {
if ( this.originalEvent ) { if ( this.originalEvent ) {
return this.originalEvent[ name ]; return this.originalEvent[ name ];
} }
}, },
@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) {
// Cancel the outer synthetic event // Cancel the outer synthetic event
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.preventDefault(); event.preventDefault();
return result.value;
// Support: Chrome 86+
// In Chrome, if an element having a focusout handler is blurred by
// clicking outside of it, it invokes the handler synchronously. If
// that handler calls `.remove()` on the element, the data is cleared,
// leaving `result` undefined. We need to guard against this.
return result && result.value;
} }
// If this is an inner synthetic event for an event with a bubbling surrogate // If this is an inner synthetic event for an event with a bubbling surrogate
@ -5821,34 +5828,7 @@ jQuery.each( {
targetTouches: true, targetTouches: true,
toElement: true, toElement: true,
touches: true, touches: true,
which: true
which: function( event ) {
var button = event.button;
// Add which for key events
if ( event.which == null && rkeyEvent.test( event.type ) ) {
return event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
if ( button & 1 ) {
return 1;
}
if ( button & 2 ) {
return 3;
}
if ( button & 4 ) {
return 2;
}
return 0;
}
return event.which;
}
}, jQuery.event.addProp ); }, jQuery.event.addProp );
jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
return true; return true;
}, },
// Suppress native focus or blur as it's already being fired
// in leverageNative.
_default: function() {
return true;
},
delegateType: delegateType delegateType: delegateType
}; };
} ); } );
@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
// set in CSS while `offset*` properties report correct values. // set in CSS while `offset*` properties report correct values.
// Behavior in IE 9 is more subtle than in newer versions & it passes // Behavior in IE 9 is more subtle than in newer versions & it passes
// some versions of this test; make sure not to make it pass there! // some versions of this test; make sure not to make it pass there!
//
// Support: Firefox 70+
// Only Firefox includes border widths
// in computed dimensions. (gh-4529)
reliableTrDimensions: function() { reliableTrDimensions: function() {
var table, tr, trChild, trStyle; var table, tr, trChild, trStyle;
if ( reliableTrDimensionsVal == null ) { if ( reliableTrDimensionsVal == null ) {
@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
tr = document.createElement( "tr" ); tr = document.createElement( "tr" );
trChild = document.createElement( "div" ); trChild = document.createElement( "div" );
table.style.cssText = "position:absolute;left:-11111px"; table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "border:1px solid";
// Support: Chrome 86+
// Height set through cssText does not get applied.
// Computed height then comes back as 0.
tr.style.height = "1px"; tr.style.height = "1px";
trChild.style.height = "9px"; trChild.style.height = "9px";
// Support: Android 8 Chrome 86+
// In our bodyBackground.html iframe,
// display for all div elements is set to "inline",
// which causes a problem only in Android 8 Chrome 86.
// Ensuring the div is display: block
// gets around this issue.
trChild.style.display = "block";
documentElement documentElement
.appendChild( table ) .appendChild( table )
.appendChild( tr ) .appendChild( tr )
.appendChild( trChild ); .appendChild( trChild );
trStyle = window.getComputedStyle( tr ); trStyle = window.getComputedStyle( tr );
reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
parseInt( trStyle.borderTopWidth, 10 ) +
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
documentElement.removeChild( table ); documentElement.removeChild( table );
} }
@ -7022,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
// Running getBoundingClientRect on a disconnected node // Running getBoundingClientRect on a disconnected node
// in IE throws an error. // in IE throws an error.
( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
swap( elem, cssShow, function() { swap( elem, cssShow, function() {
return getWidthOrHeight( elem, dimension, extra ); return getWidthOrHeight( elem, dimension, extra );
} ) : } ) :
getWidthOrHeight( elem, dimension, extra ); getWidthOrHeight( elem, dimension, extra );
} }
}, },
@ -7084,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
swap( elem, { marginLeft: 0 }, function() { swap( elem, { marginLeft: 0 }, function() {
return elem.getBoundingClientRect().left; return elem.getBoundingClientRect().left;
} ) } )
) + "px"; ) + "px";
} }
} }
); );
@ -7223,7 +7228,7 @@ Tween.propHooks = {
if ( jQuery.fx.step[ tween.prop ] ) { if ( jQuery.fx.step[ tween.prop ] ) {
jQuery.fx.step[ tween.prop ]( tween ); jQuery.fx.step[ tween.prop ]( tween );
} else if ( tween.elem.nodeType === 1 && ( } else if ( tween.elem.nodeType === 1 && (
jQuery.cssHooks[ tween.prop ] || jQuery.cssHooks[ tween.prop ] ||
tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
} else { } else {
@ -7468,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) {
anim.done( function() { anim.done( function() {
/* eslint-enable no-loop-func */ /* eslint-enable no-loop-func */
// The final step of a "hide" animation is actually hiding the element // The final step of a "hide" animation is actually hiding the element
if ( !hidden ) { if ( !hidden ) {
@ -7588,7 +7593,7 @@ function Animation( elem, properties, options ) {
tweens: [], tweens: [],
createTween: function( prop, end ) { createTween: function( prop, end ) {
var tween = jQuery.Tween( elem, animation.opts, prop, end, var tween = jQuery.Tween( elem, animation.opts, prop, end,
animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.opts.specialEasing[ prop ] || animation.opts.easing );
animation.tweens.push( tween ); animation.tweens.push( tween );
return tween; return tween;
}, },
@ -7761,7 +7766,8 @@ jQuery.fn.extend( {
anim.stop( true ); anim.stop( true );
} }
}; };
doAnimation.finish = doAnimation;
doAnimation.finish = doAnimation;
return empty || optall.queue === false ? return empty || optall.queue === false ?
this.each( doAnimation ) : this.each( doAnimation ) :
@ -8401,8 +8407,8 @@ jQuery.fn.extend( {
if ( this.setAttribute ) { if ( this.setAttribute ) {
this.setAttribute( "class", this.setAttribute( "class",
className || value === false ? className || value === false ?
"" : "" :
dataPriv.get( this, "__className__" ) || "" dataPriv.get( this, "__className__" ) || ""
); );
} }
} }
@ -8417,7 +8423,7 @@ jQuery.fn.extend( {
while ( ( elem = this[ i++ ] ) ) { while ( ( elem = this[ i++ ] ) ) {
if ( elem.nodeType === 1 && if ( elem.nodeType === 1 &&
( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
return true; return true;
} }
} }
@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, {
special.bindType || type; special.bindType || type;
// jQuery handler // jQuery handler
handle = ( handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
dataPriv.get( cur, "events" ) || Object.create( null )
)[ event.type ] &&
dataPriv.get( cur, "handle" ); dataPriv.get( cur, "handle" );
if ( handle ) { if ( handle ) {
handle.apply( cur, data ); handle.apply( cur, data );
@ -8856,7 +8860,7 @@ var rquery = ( /\?/ );
// Cross-browser xml parsing // Cross-browser xml parsing
jQuery.parseXML = function( data ) { jQuery.parseXML = function( data ) {
var xml; var xml, parserErrorElem;
if ( !data || typeof data !== "string" ) { if ( !data || typeof data !== "string" ) {
return null; return null;
} }
@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) {
// IE throws on parseFromString with invalid input. // IE throws on parseFromString with invalid input.
try { try {
xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
} catch ( e ) { } catch ( e ) {}
xml = undefined;
}
if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
jQuery.error( "Invalid XML: " + data ); if ( !xml || parserErrorElem ) {
jQuery.error( "Invalid XML: " + (
parserErrorElem ?
jQuery.map( parserErrorElem.childNodes, function( el ) {
return el.textContent;
} ).join( "\n" ) :
data
) );
} }
return xml; return xml;
}; };
@ -8971,16 +8980,14 @@ jQuery.fn.extend( {
// Can add propHook for "elements" to filter or add form elements // Can add propHook for "elements" to filter or add form elements
var elements = jQuery.prop( this, "elements" ); var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this; return elements ? jQuery.makeArray( elements ) : this;
} ) } ).filter( function() {
.filter( function() {
var type = this.type; var type = this.type;
// Use .is( ":disabled" ) so that fieldset[disabled] works // Use .is( ":disabled" ) so that fieldset[disabled] works
return this.name && !jQuery( this ).is( ":disabled" ) && return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !rcheckableType.test( type ) ); ( this.checked || !rcheckableType.test( type ) );
} ) } ).map( function( _i, elem ) {
.map( function( _i, elem ) {
var val = jQuery( this ).val(); var val = jQuery( this ).val();
if ( val == null ) { if ( val == null ) {
@ -9033,7 +9040,8 @@ var
// Anchor tag for parsing the document origin // Anchor tag for parsing the document origin
originAnchor = document.createElement( "a" ); originAnchor = document.createElement( "a" );
originAnchor.href = location.href;
originAnchor.href = location.href;
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) { function addToPrefiltersOrTransports( structure ) {
@ -9414,8 +9422,8 @@ jQuery.extend( {
// Context for global events is callbackContext if it is a DOM node or jQuery collection // Context for global events is callbackContext if it is a DOM node or jQuery collection
globalEventContext = s.context && globalEventContext = s.context &&
( callbackContext.nodeType || callbackContext.jquery ) ? ( callbackContext.nodeType || callbackContext.jquery ) ?
jQuery( callbackContext ) : jQuery( callbackContext ) :
jQuery.event, jQuery.event,
// Deferreds // Deferreds
deferred = jQuery.Deferred(), deferred = jQuery.Deferred(),
@ -9727,8 +9735,10 @@ jQuery.extend( {
response = ajaxHandleResponses( s, jqXHR, responses ); response = ajaxHandleResponses( s, jqXHR, responses );
} }
// Use a noop converter for missing script // Use a noop converter for missing script but not if jsonp
if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { if ( !isSuccess &&
jQuery.inArray( "script", s.dataTypes ) > -1 &&
jQuery.inArray( "json", s.dataTypes ) < 0 ) {
s.converters[ "text script" ] = function() {}; s.converters[ "text script" ] = function() {};
} }
@ -10466,12 +10476,6 @@ jQuery.offset = {
options.using.call( elem, props ); options.using.call( elem, props );
} else { } else {
if ( typeof props.top === "number" ) {
props.top += "px";
}
if ( typeof props.left === "number" ) {
props.left += "px";
}
curElem.css( props ); curElem.css( props );
} }
} }
@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, jQuery.each( {
function( defaultExtra, funcName ) { padding: "inner" + name,
content: type,
"": "outer" + name
}, function( defaultExtra, funcName ) {
// Margin is only for outerHeight, outerWidth // Margin is only for outerHeight, outerWidth
jQuery.fn[ funcName ] = function( margin, value ) { jQuery.fn[ funcName ] = function( margin, value ) {
@ -10726,7 +10733,8 @@ jQuery.fn.extend( {
} }
} ); } );
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + jQuery.each(
( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ), "change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( _i, name ) { function( _i, name ) {
@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
this.on( name, null, data, fn ) : this.on( name, null, data, fn ) :
this.trigger( name ); this.trigger( name );
}; };
} ); }
);

4
_static/jquery.js vendored

File diff suppressed because one or more lines are too long

View File

@ -5,12 +5,12 @@
* This script contains the language-specific data used by searchtools.js, * This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter. * namely the list of stopwords, stemmer, scorer and splitter.
* *
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */ /* Non-minified version is copied as a separate JS file, is available */
@ -197,101 +197,3 @@ var Stemmer = function() {
} }
} }
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

View File

@ -54,6 +54,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ .highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */ .highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ .highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ .highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #990000 } /* Literal.Number.Bin */ .highlight .mb { color: #990000 } /* Literal.Number.Bin */
.highlight .mf { color: #990000 } /* Literal.Number.Float */ .highlight .mf { color: #990000 } /* Literal.Number.Float */

View File

@ -4,22 +4,24 @@
* *
* Sphinx JavaScript utilities for the full-text search. * Sphinx JavaScript utilities for the full-text search.
* *
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details. * :license: BSD, see LICENSE for details.
* *
*/ */
"use strict";
if (!Scorer) { /**
/** * Simple result scoring code.
* Simple result scoring code. */
*/ if (typeof Scorer === "undefined") {
var Scorer = { var Scorer = {
// Implement the following function to further tweak the score for each result // Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score] // The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score. // and returns the new score.
/* /*
score: function(result) { score: result => {
return result[4]; const [docname, title, anchor, descr, score, filename] = result
return score
}, },
*/ */
@ -28,9 +30,11 @@ if (!Scorer) {
// or matches in the last dotted part of the object name // or matches in the last dotted part of the object name
objPartialMatch: 6, objPartialMatch: 6,
// Additive scores depending on the priority of the object // Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults objPrio: {
1: 5, // used to be objectResults 0: 15, // used to be importantResults
2: -5}, // used to be unimportantResults 1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping. // Used when the priority is not in the mapping.
objPrioDefault: 0, objPrioDefault: 0,
@ -39,452 +43,453 @@ if (!Scorer) {
partialTitle: 7, partialTitle: 7,
// query found in terms // query found in terms
term: 5, term: 5,
partialTerm: 2 partialTerm: 2,
}; };
} }
if (!splitQuery) { const _removeChildren = (element) => {
function splitQuery(query) { while (element && element.lastChild) element.removeChild(element.lastChild);
return query.split(/\s+/); };
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, highlightTerms, 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;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
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.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms, highlightTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
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);
setTimeout(
() => _displayNextItem(results, resultCount, highlightTerms, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
} }
/** /**
* Search Module * Search Module
*/ */
var Search = { const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
_index : null, htmlToText: (htmlString) => {
_queued_query : null, const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
_pulse_status : -1, htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
htmlToText : function(htmlString) { if (docContent !== undefined) return docContent.textContent;
var virtualDocument = document.implementation.createHTMLDocument('virtual'); console.warn(
var htmlElement = $(htmlString, virtualDocument); "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
htmlElement.find('.headerlink').remove(); );
docContent = htmlElement.find('[role=main]')[0]; return "";
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
}, },
init : function() { init: () => {
var params = $.getQueryParameters(); const query = new URLSearchParams(window.location.search).get("q");
if (params.q) { document
var query = params.q[0]; .querySelectorAll('input[name="q"]')
$('input[name="q"]')[0].value = query; .forEach((el) => (el.value = query));
this.performSearch(query); if (query) Search.performSearch(query);
}
}, },
loadIndex : function(url) { loadIndex: (url) =>
$.ajax({type: "GET", url: url, data: null, (document.body.appendChild(document.createElement("script")).src = url),
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) { setIndex: (index) => {
var q; Search._index = index;
this._index = index; if (Search._queued_query !== null) {
if ((q = this._queued_query) !== null) { const query = Search._queued_query;
this._queued_query = null; Search._queued_query = null;
Search.query(q); Search.query(query);
} }
}, },
hasIndex : function() { hasIndex: () => Search._index !== null,
return this._index !== null;
},
deferQuery : function(query) { deferQuery: (query) => (Search._queued_query = query),
this._queued_query = query;
},
stopPulse : function() { stopPulse: () => (Search._pulse_status = -1),
this._pulse_status = 0;
},
startPulse : function() { startPulse: () => {
if (this._pulse_status >= 0) if (Search._pulse_status >= 0) return;
return;
function pulse() { const pulse = () => {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4; Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = ''; Search.dots.innerText = ".".repeat(Search._pulse_status);
for (i = 0; i < Search._pulse_status; i++) if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
dotString += '.'; };
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse(); pulse();
}, },
/** /**
* perform a search for something (or wait until index is loaded) * perform a search for something (or wait until index is loaded)
*/ */
performSearch : function(query) { performSearch: (query) => {
// create the required interface elements // create the required interface elements
this.out = $('#search-results'); const searchText = document.createElement("h2");
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); searchText.textContent = _("Searching");
this.dots = $('<span></span>').appendTo(this.title); const searchSummary = document.createElement("p");
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out); searchSummary.classList.add("search-summary");
this.output = $('<ul class="search"/>').appendTo(this.out); searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
$('#search-progress').text(_('Preparing search...')); const out = document.getElementById("search-results");
this.startPulse(); Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick! // index already loaded, the browser was quick!
if (this.hasIndex()) if (Search.hasIndex()) Search.query(query);
this.query(query); else Search.deferQuery(query);
else
this.deferQuery(query);
}, },
/** /**
* execute search (requires search index to be loaded) * execute search (requires search index to be loaded)
*/ */
query : function(query) { query: (query) => {
var i; // stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// stem the searchterms and add them to the correct list // maybe skip this "word"
var stemmer = new Stemmer(); // stopwords array is from language_data.js
var searchterms = []; if (
var excluded = []; stopwords.indexOf(queryTermLower) !== -1 ||
var hlterms = []; queryTerm.match(/^\d+$/)
var tmp = splitQuery(query); )
var objectterms = []; return;
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word // stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase()); let word = stemmer.stemWord(queryTermLower);
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
var toAppend;
// select the correct list // select the correct list
if (word[0] == '-') { if (word[0] === "-") excludedTerms.add(word.substr(1));
toAppend = excluded;
word = word.substr(1);
}
else { else {
toAppend = searchterms; searchTerms.add(word);
hlterms.push(tmp[i].toLowerCase()); highlightTerms.add(queryTermLower);
} }
// only add if not already in the list });
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:'); // console.debug("SEARCH: searching for:");
// console.info('required: ', searchterms); // console.info("required: ", [...searchTerms]);
// console.info('excluded: ', excluded); // console.info("excluded: ", [...excludedTerms]);
// prepare search // array of [docname, title, anchor, descr, score, filename]
var terms = this._index.terms; let results = [];
var titleterms = this._index.titleterms; _removeChildren(document.getElementById("search-progress"));
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object // lookup as object
for (i = 0; i < objectterms.length; i++) { objectTerms.forEach((term) =>
var others = [].concat(objectterms.slice(0, i), results.push(...Search.performObjectSearch(term, objectTerms))
objectterms.slice(i+1, objectterms.length)); );
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext // lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function // let the scorer override scores with a custom scoring function
if (Scorer.score) { if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the // now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then // display function below uses pop() to retrieve items) and then
// alphabetically // alphabetically
results.sort(function(a, b) { results.sort((a, b) => {
var left = a[4]; const leftScore = a[4];
var right = b[4]; const rightScore = b[4];
if (left > right) { if (leftScore === rightScore) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically // same score: sort alphabetically
left = a[1].toLowerCase(); const leftTitle = a[1].toLowerCase();
right = b[1].toLowerCase(); const rightTitle = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0); if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
} }
return leftScore > rightScore ? 1 : -1;
}); });
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging // for debugging
//Search.lastresults = results.slice(); // a copy //Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults); // console.info("search results:", Search.lastresults);
// print the results // print the results
var resultCount = results.length; _displayNextItem(results, results.length, highlightTerms, searchTerms);
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// no source available, just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
}, },
/** /**
* search for object names * search for object names
*/ */
performObjectSearch : function(object, otherterms) { performObjectSearch: (object, objectTerms) => {
var filenames = this._index.filenames; const filenames = Search._index.filenames;
var docnames = this._index.docnames; const docNames = Search._index.docnames;
var objects = this._index.objects; const objects = Search._index.objects;
var objnames = this._index.objnames; const objNames = Search._index.objnames;
var titles = this._index.titles; const titles = Search._index.titles;
var i; const results = [];
var results = [];
for (var prefix in objects) { const objectSearchCallback = (prefix, match) => {
for (var name in objects[prefix]) { const name = match[4]
var fullname = (prefix ? prefix + '.' : '') + name; const fullname = (prefix ? prefix + "." : "") + name;
var fullnameLower = fullname.toLowerCase() const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) > -1) { if (fullnameLower.indexOf(object) < 0) return;
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3]; let score = 0;
if (anchor === '') const parts = fullnameLower.split(".");
anchor = fullname;
else if (anchor == '-') // check for different match types: exact matches of full name or
anchor = objnames[match[1]][1] + '-' + fullname; // "last name" (i.e. last dotted part)
// add custom score for some objects according to scorer if (fullnameLower === object || parts.slice(-1)[0] === object)
if (Scorer.objPrio.hasOwnProperty(match[2])) { score += Scorer.objNameMatch;
score += Scorer.objPrio[match[2]]; else if (parts.slice(-1)[0].indexOf(object) > -1)
} else { score += Scorer.objPartialMatch; // matches in last name
score += Scorer.objPrioDefault;
} const objName = objNames[match[1]][2];
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]); const title = titles[match[0]];
}
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
} }
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results; return results;
}, },
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/** /**
* search for full-text terms in the index * search for full-text terms in the index
*/ */
performTermsSearch : function(searchterms, excluded, terms, titleterms) { performTermsSearch: (searchTerms, excludedTerms) => {
var docnames = this._index.docnames; // prepare search
var filenames = this._index.filenames; const terms = Search._index.terms;
var titles = this._index.titles; const titleTerms = Search._index.titleterms;
const docNames = Search._index.docnames;
const filenames = Search._index.filenames;
const titles = Search._index.titles;
var i, j, file; const scoreMap = new Map();
var fileMap = {}; const fileMap = new Map();
var scoreMap = {};
var results = [];
// perform the search on the required terms // perform the search on the required terms
for (i = 0; i < searchterms.length; i++) { searchTerms.forEach((word) => {
var word = searchterms[i]; const files = [];
var files = []; const arr = [
var _o = [ { files: terms[word], score: Scorer.term },
{files: terms[word], score: Scorer.term}, { files: titleTerms[word], score: Scorer.title },
{files: titleterms[word], score: Scorer.title}
]; ];
// add support for partial matches // add support for partial matches
if (word.length > 2) { if (word.length > 2) {
var word_regex = this.escapeRegExp(word); const escapedWord = _escapeRegExp(word);
for (var w in terms) { Object.keys(terms).forEach((term) => {
if (w.match(word_regex) && !terms[word]) { if (term.match(escapedWord) && !terms[word])
_o.push({files: terms[w], score: Scorer.partialTerm}) arr.push({ files: terms[term], score: Scorer.partialTerm });
} });
} Object.keys(titleTerms).forEach((term) => {
for (var w in titleterms) { if (term.match(escapedWord) && !titleTerms[word])
if (w.match(word_regex) && !titleterms[word]) { arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
_o.push({files: titleterms[w], score: Scorer.partialTitle}) });
}
}
} }
// no match but word was a required one // no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) { if (arr.every((record) => record.files === undefined)) return;
break;
}
// found search word in contents // found search word in contents
$u.each(_o, function(o) { arr.forEach((record) => {
var _files = o.files; if (record.files === undefined) return;
if (_files === undefined)
return
if (_files.length === undefined) let recordFiles = record.files;
_files = [_files]; if (recordFiles.length === undefined) recordFiles = [recordFiles];
files = files.concat(_files); files.push(...recordFiles);
// set score for the word in each file to Scorer.term // set score for the word in each file
for (j = 0; j < _files.length; j++) { recordFiles.forEach((file) => {
file = _files[j]; if (!scoreMap.has(file)) scoreMap.set(file, {});
if (!(file in scoreMap)) scoreMap.get(file)[word] = record.score;
scoreMap[file] = {}; });
scoreMap[file][word] = o.score;
}
}); });
// create the mapping // create the mapping
for (j = 0; j < files.length; j++) { files.forEach((file) => {
file = files[j]; if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
if (file in fileMap && fileMap[file].indexOf(word) === -1) fileMap.get(file).push(word);
fileMap[file].push(word); else fileMap.set(file, [word]);
else });
fileMap[file] = [word]; });
}
}
// now check if the files don't contain excluded terms // now check if the files don't contain excluded terms
for (file in fileMap) { const results = [];
var valid = true; for (const [file, wordList] of fileMap) {
// check if all requirements are matched // check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length // as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if ( if (
fileMap[file].length != searchterms.length && wordList.length !== searchTerms.size &&
fileMap[file].length != filteredTermCount wordList.length !== filteredTermCount
) continue; )
continue;
// ensure that none of the excluded terms is in the search result // ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) { if (
if (terms[excluded[i]] == file || [...excludedTerms].some(
titleterms[excluded[i]] == file || (term) =>
$u.contains(terms[excluded[i]] || [], file) || terms[term] === file ||
$u.contains(titleterms[excluded[i]] || [], file)) { titleTerms[term] === file ||
valid = false; (terms[term] || []).includes(file) ||
break; (titleTerms[term] || []).includes(file)
} )
} )
break;
// if we have still a valid result we can add it to the result list // select one (max) score for the file.
if (valid) { const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// select one (max) score for the file. // add result to the result list
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf... results.push([
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); docNames[file],
results.push([docnames[file], titles[file], '', null, score, filenames[file]]); titles[file],
} "",
null,
score,
filenames[file],
]);
} }
return results; return results;
}, },
@ -492,31 +497,34 @@ var Search = {
/** /**
* helper function to return a node containing the * helper function to return a node containing the
* search summary for a given text. keywords is a list * search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed * of stemmed words, highlightWords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the * words. the first one is used to find the occurrence, the
* latter for highlighting it. * latter for highlighting it.
*/ */
makeSearchSummary : function(htmlText, keywords, hlwords) { makeSearchSummary: (htmlText, keywords, highlightWords) => {
var text = Search.htmlToText(htmlText); const text = Search.htmlToText(htmlText);
var textLower = text.toLowerCase(); if (text === "") return null;
var start = 0;
$.each(keywords, function() { const textLower = text.toLowerCase();
var i = textLower.indexOf(this.toLowerCase()); const actualStartPosition = [...keywords]
if (i > -1) .map((k) => textLower.indexOf(k.toLowerCase()))
start = i; .filter((i) => i > -1)
}); .slice(-1)[0];
start = Math.max(start - 120, 0); const startWithContext = Math.max(actualStartPosition - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) + const top = startWithContext === 0 ? "" : "...";
((start + 240 - text.length) ? '...' : ''); const tail = startWithContext + 240 < text.length ? "..." : "";
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() { let summary = document.createElement("p");
rv = rv.highlightText(this, 'highlighted'); summary.classList.add("context");
}); summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return rv;
} highlightWords.forEach((highlightWord) =>
_highlightText(summary, highlightWord, "highlighted")
);
return summary;
},
}; };
$(document).ready(function() { _ready(Search.init);
Search.init();
});

View File

@ -1,19 +1,19 @@
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define('underscore', factory) : typeof define === 'function' && define.amd ? define('underscore', factory) :
(global = global || self, (function () { (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
var current = global._; var current = global._;
var exports = global._ = factory(); var exports = global._ = factory();
exports.noConflict = function () { global._ = current; return exports; }; exports.noConflict = function () { global._ = current; return exports; };
}())); }()));
}(this, (function () { }(this, (function () {
// Underscore.js 1.12.0 // Underscore.js 1.13.1
// https://underscorejs.org // https://underscorejs.org
// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license. // Underscore may be freely distributed under the MIT license.
// Current version. // Current version.
var VERSION = '1.12.0'; var VERSION = '1.13.1';
// Establish the root object, `window` (`self`) in the browser, `global` // Establish the root object, `window` (`self`) in the browser, `global`
// on the server, or `this` in some virtual machines. We use `self` // on the server, or `this` in some virtual machines. We use `self`
@ -170,7 +170,7 @@
var isArray = nativeIsArray || tagTester('Array'); var isArray = nativeIsArray || tagTester('Array');
// Internal function to check whether `key` is an own property name of `obj`. // Internal function to check whether `key` is an own property name of `obj`.
function has(obj, key) { function has$1(obj, key) {
return obj != null && hasOwnProperty.call(obj, key); return obj != null && hasOwnProperty.call(obj, key);
} }
@ -181,7 +181,7 @@
(function() { (function() {
if (!isArguments(arguments)) { if (!isArguments(arguments)) {
isArguments = function(obj) { isArguments = function(obj) {
return has(obj, 'callee'); return has$1(obj, 'callee');
}; };
} }
}()); }());
@ -268,7 +268,7 @@
// Constructor is a special case. // Constructor is a special case.
var prop = 'constructor'; var prop = 'constructor';
if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
while (nonEnumIdx--) { while (nonEnumIdx--) {
prop = nonEnumerableProps[nonEnumIdx]; prop = nonEnumerableProps[nonEnumIdx];
@ -284,7 +284,7 @@
if (!isObject(obj)) return []; if (!isObject(obj)) return [];
if (nativeKeys) return nativeKeys(obj); if (nativeKeys) return nativeKeys(obj);
var keys = []; var keys = [];
for (var key in obj) if (has(obj, key)) keys.push(key); for (var key in obj) if (has$1(obj, key)) keys.push(key);
// Ahem, IE < 9. // Ahem, IE < 9.
if (hasEnumBug) collectNonEnumProps(obj, keys); if (hasEnumBug) collectNonEnumProps(obj, keys);
return keys; return keys;
@ -318,24 +318,24 @@
// If Underscore is called as a function, it returns a wrapped object that can // If Underscore is called as a function, it returns a wrapped object that can
// be used OO-style. This wrapper holds altered versions of all functions added // be used OO-style. This wrapper holds altered versions of all functions added
// through `_.mixin`. Wrapped objects may be chained. // through `_.mixin`. Wrapped objects may be chained.
function _(obj) { function _$1(obj) {
if (obj instanceof _) return obj; if (obj instanceof _$1) return obj;
if (!(this instanceof _)) return new _(obj); if (!(this instanceof _$1)) return new _$1(obj);
this._wrapped = obj; this._wrapped = obj;
} }
_.VERSION = VERSION; _$1.VERSION = VERSION;
// Extracts the result from a wrapped and chained object. // Extracts the result from a wrapped and chained object.
_.prototype.value = function() { _$1.prototype.value = function() {
return this._wrapped; return this._wrapped;
}; };
// Provide unwrapping proxies for some methods used in engine operations // Provide unwrapping proxies for some methods used in engine operations
// such as arithmetic and JSON stringification. // such as arithmetic and JSON stringification.
_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
_.prototype.toString = function() { _$1.prototype.toString = function() {
return String(this._wrapped); return String(this._wrapped);
}; };
@ -370,8 +370,8 @@
// Internal recursive comparison function for `_.isEqual`. // Internal recursive comparison function for `_.isEqual`.
function deepEq(a, b, aStack, bStack) { function deepEq(a, b, aStack, bStack) {
// Unwrap any wrapped objects. // Unwrap any wrapped objects.
if (a instanceof _) a = a._wrapped; if (a instanceof _$1) a = a._wrapped;
if (b instanceof _) b = b._wrapped; if (b instanceof _$1) b = b._wrapped;
// Compare `[[Class]]` names. // Compare `[[Class]]` names.
var className = toString.call(a); var className = toString.call(a);
if (className !== toString.call(b)) return false; if (className !== toString.call(b)) return false;
@ -463,7 +463,7 @@
while (length--) { while (length--) {
// Deep compare each member // Deep compare each member
key = _keys[length]; key = _keys[length];
if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
} }
} }
// Remove the first object from the stack of traversed objects. // Remove the first object from the stack of traversed objects.
@ -642,15 +642,15 @@
// Normalize a (deep) property `path` to array. // Normalize a (deep) property `path` to array.
// Like `_.iteratee`, this function can be customized. // Like `_.iteratee`, this function can be customized.
function toPath(path) { function toPath$1(path) {
return isArray(path) ? path : [path]; return isArray(path) ? path : [path];
} }
_.toPath = toPath; _$1.toPath = toPath$1;
// Internal wrapper for `_.toPath` to enable minification. // Internal wrapper for `_.toPath` to enable minification.
// Similar to `cb` for `_.iteratee`. // Similar to `cb` for `_.iteratee`.
function toPath$1(path) { function toPath(path) {
return _.toPath(path); return _$1.toPath(path);
} }
// Internal function to obtain a nested property in `obj` along `path`. // Internal function to obtain a nested property in `obj` along `path`.
@ -668,19 +668,19 @@
// `undefined`, return `defaultValue` instead. // `undefined`, return `defaultValue` instead.
// The `path` is normalized through `_.toPath`. // The `path` is normalized through `_.toPath`.
function get(object, path, defaultValue) { function get(object, path, defaultValue) {
var value = deepGet(object, toPath$1(path)); var value = deepGet(object, toPath(path));
return isUndefined(value) ? defaultValue : value; return isUndefined(value) ? defaultValue : value;
} }
// Shortcut function for checking if an object has a given property directly on // Shortcut function for checking if an object has a given property directly on
// itself (in other words, not on a prototype). Unlike the internal `has` // itself (in other words, not on a prototype). Unlike the internal `has`
// function, this public version can also traverse nested properties. // function, this public version can also traverse nested properties.
function has$1(obj, path) { function has(obj, path) {
path = toPath$1(path); path = toPath(path);
var length = path.length; var length = path.length;
for (var i = 0; i < length; i++) { for (var i = 0; i < length; i++) {
var key = path[i]; var key = path[i];
if (!has(obj, key)) return false; if (!has$1(obj, key)) return false;
obj = obj[key]; obj = obj[key];
} }
return !!length; return !!length;
@ -703,7 +703,7 @@
// Creates a function that, when passed an object, will traverse that objects // Creates a function that, when passed an object, will traverse that objects
// properties down the given `path`, specified as an array of keys or indices. // properties down the given `path`, specified as an array of keys or indices.
function property(path) { function property(path) {
path = toPath$1(path); path = toPath(path);
return function(obj) { return function(obj) {
return deepGet(obj, path); return deepGet(obj, path);
}; };
@ -747,12 +747,12 @@
function iteratee(value, context) { function iteratee(value, context) {
return baseIteratee(value, context, Infinity); return baseIteratee(value, context, Infinity);
} }
_.iteratee = iteratee; _$1.iteratee = iteratee;
// The function we call internally to generate a callback. It invokes // The function we call internally to generate a callback. It invokes
// `_.iteratee` if overridden, otherwise `baseIteratee`. // `_.iteratee` if overridden, otherwise `baseIteratee`.
function cb(value, context, argCount) { function cb(value, context, argCount) {
if (_.iteratee !== iteratee) return _.iteratee(value, context); if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
return baseIteratee(value, context, argCount); return baseIteratee(value, context, argCount);
} }
@ -840,7 +840,7 @@
// By default, Underscore uses ERB-style template delimiters. Change the // By default, Underscore uses ERB-style template delimiters. Change the
// following template settings to use alternative delimiters. // following template settings to use alternative delimiters.
var templateSettings = _.templateSettings = { var templateSettings = _$1.templateSettings = {
evaluate: /<%([\s\S]+?)%>/g, evaluate: /<%([\s\S]+?)%>/g,
interpolate: /<%=([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g,
escape: /<%-([\s\S]+?)%>/g escape: /<%-([\s\S]+?)%>/g
@ -868,13 +868,20 @@
return '\\' + escapes[match]; return '\\' + escapes[match];
} }
// In order to prevent third-party code injection through
// `_.templateSettings.variable`, we test it against the following regular
// expression. It is intentionally a bit more liberal than just matching valid
// identifiers, but still prevents possible loopholes through defaults or
// destructuring assignment.
var bareIdentifier = /^\s*(\w|\$)+\s*$/;
// JavaScript micro-templating, similar to John Resig's implementation. // JavaScript micro-templating, similar to John Resig's implementation.
// Underscore templating handles arbitrary delimiters, preserves whitespace, // Underscore templating handles arbitrary delimiters, preserves whitespace,
// and correctly escapes quotes within interpolated code. // and correctly escapes quotes within interpolated code.
// NB: `oldSettings` only exists for backwards compatibility. // NB: `oldSettings` only exists for backwards compatibility.
function template(text, settings, oldSettings) { function template(text, settings, oldSettings) {
if (!settings && oldSettings) settings = oldSettings; if (!settings && oldSettings) settings = oldSettings;
settings = defaults({}, settings, _.templateSettings); settings = defaults({}, settings, _$1.templateSettings);
// Combine delimiters into one regular expression via alternation. // Combine delimiters into one regular expression via alternation.
var matcher = RegExp([ var matcher = RegExp([
@ -903,8 +910,17 @@
}); });
source += "';\n"; source += "';\n";
// If a variable is not specified, place data values in local scope. var argument = settings.variable;
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; if (argument) {
// Insure against third-party code injection. (CVE-2021-23358)
if (!bareIdentifier.test(argument)) throw new Error(
'variable is not a bare identifier: ' + argument
);
} else {
// If a variable is not specified, place data values in local scope.
source = 'with(obj||{}){\n' + source + '}\n';
argument = 'obj';
}
source = "var __t,__p='',__j=Array.prototype.join," + source = "var __t,__p='',__j=Array.prototype.join," +
"print=function(){__p+=__j.call(arguments,'');};\n" + "print=function(){__p+=__j.call(arguments,'');};\n" +
@ -912,18 +928,17 @@
var render; var render;
try { try {
render = new Function(settings.variable || 'obj', '_', source); render = new Function(argument, '_', source);
} catch (e) { } catch (e) {
e.source = source; e.source = source;
throw e; throw e;
} }
var template = function(data) { var template = function(data) {
return render.call(this, data, _); return render.call(this, data, _$1);
}; };
// Provide the compiled source as a convenience for precompilation. // Provide the compiled source as a convenience for precompilation.
var argument = settings.variable || 'obj';
template.source = 'function(' + argument + '){\n' + source + '}'; template.source = 'function(' + argument + '){\n' + source + '}';
return template; return template;
@ -933,7 +948,7 @@
// is invoked with its parent as context. Returns the value of the final // is invoked with its parent as context. Returns the value of the final
// child, or `fallback` if any child is undefined. // child, or `fallback` if any child is undefined.
function result(obj, path, fallback) { function result(obj, path, fallback) {
path = toPath$1(path); path = toPath(path);
var length = path.length; var length = path.length;
if (!length) { if (!length) {
return isFunction$1(fallback) ? fallback.call(obj) : fallback; return isFunction$1(fallback) ? fallback.call(obj) : fallback;
@ -959,7 +974,7 @@
// Start chaining a wrapped Underscore object. // Start chaining a wrapped Underscore object.
function chain(obj) { function chain(obj) {
var instance = _(obj); var instance = _$1(obj);
instance._chain = true; instance._chain = true;
return instance; return instance;
} }
@ -993,7 +1008,7 @@
return bound; return bound;
}); });
partial.placeholder = _; partial.placeholder = _$1;
// Create a function bound to a given object (assigning `this`, and arguments, // Create a function bound to a given object (assigning `this`, and arguments,
// optionally). // optionally).
@ -1012,7 +1027,7 @@
var isArrayLike = createSizePropertyCheck(getLength); var isArrayLike = createSizePropertyCheck(getLength);
// Internal implementation of a recursive `flatten` function. // Internal implementation of a recursive `flatten` function.
function flatten(input, depth, strict, output) { function flatten$1(input, depth, strict, output) {
output = output || []; output = output || [];
if (!depth && depth !== 0) { if (!depth && depth !== 0) {
depth = Infinity; depth = Infinity;
@ -1025,7 +1040,7 @@
if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
// Flatten current level of array or arguments object. // Flatten current level of array or arguments object.
if (depth > 1) { if (depth > 1) {
flatten(value, depth - 1, strict, output); flatten$1(value, depth - 1, strict, output);
idx = output.length; idx = output.length;
} else { } else {
var j = 0, len = value.length; var j = 0, len = value.length;
@ -1042,7 +1057,7 @@
// are the method names to be bound. Useful for ensuring that all callbacks // are the method names to be bound. Useful for ensuring that all callbacks
// defined on an object belong to it. // defined on an object belong to it.
var bindAll = restArguments(function(obj, keys) { var bindAll = restArguments(function(obj, keys) {
keys = flatten(keys, false, false); keys = flatten$1(keys, false, false);
var index = keys.length; var index = keys.length;
if (index < 1) throw new Error('bindAll must be passed function names'); if (index < 1) throw new Error('bindAll must be passed function names');
while (index--) { while (index--) {
@ -1057,7 +1072,7 @@
var memoize = function(key) { var memoize = function(key) {
var cache = memoize.cache; var cache = memoize.cache;
var address = '' + (hasher ? hasher.apply(this, arguments) : key); var address = '' + (hasher ? hasher.apply(this, arguments) : key);
if (!has(cache, address)) cache[address] = func.apply(this, arguments); if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
return cache[address]; return cache[address];
}; };
memoize.cache = {}; memoize.cache = {};
@ -1074,7 +1089,7 @@
// Defers a function, scheduling it to run after the current call stack has // Defers a function, scheduling it to run after the current call stack has
// cleared. // cleared.
var defer = partial(delay, _, 1); var defer = partial(delay, _$1, 1);
// Returns a function, that, when invoked, will only be triggered at most once // Returns a function, that, when invoked, will only be triggered at most once
// during a given window of time. Normally, the throttled function will run // during a given window of time. Normally, the throttled function will run
@ -1420,7 +1435,7 @@
if (isFunction$1(path)) { if (isFunction$1(path)) {
func = path; func = path;
} else { } else {
path = toPath$1(path); path = toPath(path);
contextPath = path.slice(0, -1); contextPath = path.slice(0, -1);
path = path[path.length - 1]; path = path[path.length - 1];
} }
@ -1562,7 +1577,7 @@
// Groups the object's values by a criterion. Pass either a string attribute // Groups the object's values by a criterion. Pass either a string attribute
// to group by, or a function that returns the criterion. // to group by, or a function that returns the criterion.
var groupBy = group(function(result, value, key) { var groupBy = group(function(result, value, key) {
if (has(result, key)) result[key].push(value); else result[key] = [value]; if (has$1(result, key)) result[key].push(value); else result[key] = [value];
}); });
// Indexes the object's values by a criterion, similar to `_.groupBy`, but for // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
@ -1575,7 +1590,7 @@
// either a string attribute to count by, or a function that returns the // either a string attribute to count by, or a function that returns the
// criterion. // criterion.
var countBy = group(function(result, value, key) { var countBy = group(function(result, value, key) {
if (has(result, key)) result[key]++; else result[key] = 1; if (has$1(result, key)) result[key]++; else result[key] = 1;
}); });
// Split a collection into two arrays: one whose elements all pass the given // Split a collection into two arrays: one whose elements all pass the given
@ -1618,7 +1633,7 @@
keys = allKeys(obj); keys = allKeys(obj);
} else { } else {
iteratee = keyInObj; iteratee = keyInObj;
keys = flatten(keys, false, false); keys = flatten$1(keys, false, false);
obj = Object(obj); obj = Object(obj);
} }
for (var i = 0, length = keys.length; i < length; i++) { for (var i = 0, length = keys.length; i < length; i++) {
@ -1636,7 +1651,7 @@
iteratee = negate(iteratee); iteratee = negate(iteratee);
if (keys.length > 1) context = keys[1]; if (keys.length > 1) context = keys[1];
} else { } else {
keys = map(flatten(keys, false, false), String); keys = map(flatten$1(keys, false, false), String);
iteratee = function(value, key) { iteratee = function(value, key) {
return !contains(keys, key); return !contains(keys, key);
}; };
@ -1681,14 +1696,14 @@
// Flatten out an array, either recursively (by default), or up to `depth`. // Flatten out an array, either recursively (by default), or up to `depth`.
// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
function flatten$1(array, depth) { function flatten(array, depth) {
return flatten(array, depth, false); return flatten$1(array, depth, false);
} }
// Take the difference between one array and a number of other arrays. // Take the difference between one array and a number of other arrays.
// Only the elements present in just the first array will remain. // Only the elements present in just the first array will remain.
var difference = restArguments(function(array, rest) { var difference = restArguments(function(array, rest) {
rest = flatten(rest, true, true); rest = flatten$1(rest, true, true);
return filter(array, function(value){ return filter(array, function(value){
return !contains(rest, value); return !contains(rest, value);
}); });
@ -1734,7 +1749,7 @@
// Produce an array that contains the union: each distinct element from all of // Produce an array that contains the union: each distinct element from all of
// the passed-in arrays. // the passed-in arrays.
var union = restArguments(function(arrays) { var union = restArguments(function(arrays) {
return uniq(flatten(arrays, true, true)); return uniq(flatten$1(arrays, true, true));
}); });
// Produce an array that contains every item shared between all the // Produce an array that contains every item shared between all the
@ -1821,26 +1836,26 @@
// Helper function to continue chaining intermediate results. // Helper function to continue chaining intermediate results.
function chainResult(instance, obj) { function chainResult(instance, obj) {
return instance._chain ? _(obj).chain() : obj; return instance._chain ? _$1(obj).chain() : obj;
} }
// Add your own custom functions to the Underscore object. // Add your own custom functions to the Underscore object.
function mixin(obj) { function mixin(obj) {
each(functions(obj), function(name) { each(functions(obj), function(name) {
var func = _[name] = obj[name]; var func = _$1[name] = obj[name];
_.prototype[name] = function() { _$1.prototype[name] = function() {
var args = [this._wrapped]; var args = [this._wrapped];
push.apply(args, arguments); push.apply(args, arguments);
return chainResult(this, func.apply(_, args)); return chainResult(this, func.apply(_$1, args));
}; };
}); });
return _; return _$1;
} }
// Add all mutator `Array` functions to the wrapper. // Add all mutator `Array` functions to the wrapper.
each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
var method = ArrayProto[name]; var method = ArrayProto[name];
_.prototype[name] = function() { _$1.prototype[name] = function() {
var obj = this._wrapped; var obj = this._wrapped;
if (obj != null) { if (obj != null) {
method.apply(obj, arguments); method.apply(obj, arguments);
@ -1855,7 +1870,7 @@
// Add all accessor `Array` functions to the wrapper. // Add all accessor `Array` functions to the wrapper.
each(['concat', 'join', 'slice'], function(name) { each(['concat', 'join', 'slice'], function(name) {
var method = ArrayProto[name]; var method = ArrayProto[name];
_.prototype[name] = function() { _$1.prototype[name] = function() {
var obj = this._wrapped; var obj = this._wrapped;
if (obj != null) obj = method.apply(obj, arguments); if (obj != null) obj = method.apply(obj, arguments);
return chainResult(this, obj); return chainResult(this, obj);
@ -1909,12 +1924,12 @@
clone: clone, clone: clone,
tap: tap, tap: tap,
get: get, get: get,
has: has$1, has: has,
mapObject: mapObject, mapObject: mapObject,
identity: identity, identity: identity,
constant: constant, constant: constant,
noop: noop, noop: noop,
toPath: toPath, toPath: toPath$1,
property: property, property: property,
propertyOf: propertyOf, propertyOf: propertyOf,
matcher: matcher, matcher: matcher,
@ -1997,7 +2012,7 @@
tail: rest, tail: rest,
drop: rest, drop: rest,
compact: compact, compact: compact,
flatten: flatten$1, flatten: flatten,
without: without, without: without,
uniq: uniq, uniq: uniq,
unique: uniq, unique: uniq,
@ -2011,17 +2026,17 @@
range: range, range: range,
chunk: chunk, chunk: chunk,
mixin: mixin, mixin: mixin,
'default': _ 'default': _$1
}; };
// Default Export // Default Export
// Add all of the Underscore functions to the wrapper object. // Add all of the Underscore functions to the wrapper object.
var _$1 = mixin(allExports); var _ = mixin(allExports);
// Legacy Node.js API. // Legacy Node.js API.
_$1._ = _$1; _._ = _;
return _$1; return _;
}))); })));
//# sourceMappingURL=underscore.js.map //# sourceMappingURL=underscore-umd.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,16 +1,17 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &#8212; Music Tools documentation</title> <title>Index &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="#" /> <link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@ -35,13 +36,13 @@
<div class="genindex-jumpbox"> <div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a> <a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a> | <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a> | <a href="#D"><strong>D</strong></a>
| <a href="#E"><strong>E</strong></a> | <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a> | <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a> | <a href="#G"><strong>G</strong></a>
| <a href="#I"><strong>I</strong></a> | <a href="#I"><strong>I</strong></a>
| <a href="#J"><strong>J</strong></a>
| <a href="#L"><strong>L</strong></a> | <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a> | <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a> | <a href="#N"><strong>N</strong></a>
@ -72,13 +73,9 @@
</li> </li>
</ul></li> </ul></li>
<li><a href="src/admin.html#admin.Admin">Admin (class in admin)</a> <li><a href="src/admin.html#admin.Admin">Admin (class in admin)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Admin">Admin() (class)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Admin.html#Admin.handleChange">Admin.handleChange() (Admin method)</a>
</li>
<li><a href="src/music.api.html#music.api.decorators.admin_required">admin_required() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.admin_required">admin_required() (in module music.api.decorators)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.tag.Tag.albums">albums (music.model.tag.Tag attribute)</a> <li><a href="src/music.model.html#music.model.tag.Tag.albums">albums (music.model.tag.Tag attribute)</a>
@ -90,22 +87,6 @@
<li><a href="src/music.model.html#music.model.tag.Tag.artists">artists (music.model.tag.Tag attribute)</a> <li><a href="src/music.model.html#music.model.tag.Tag.artists">artists (music.model.tag.Tag attribute)</a>
</li> </li>
<li><a href="src/music.auth.html#music.auth.auth.auth">auth() (in module music.auth.auth)</a> <li><a href="src/music.auth.html#music.auth.auth.auth">auth() (in module music.auth.auth)</a>
</li>
<li><a href="src/MusicTools.Settings.html#AuthButton">AuthButton() (built-in function)</a>
</li>
</ul></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Maths.html#BarChart">BarChart() (class)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Maths.html#BarChart.componentDidMount">BarChart.componentDidMount() (BarChart method)</a>
</li>
<li><a href="src/MusicTools.Maths.html#BarChart.componentDidUpdate">BarChart.componentDidUpdate() (BarChart method)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@ -114,16 +95,6 @@
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.api.html#music.api.api.change_password">change_password() (in module music.api.api)</a> <li><a href="src/music.api.html#music.api.api.change_password">change_password() (in module music.api.api)</a>
</li>
<li><a href="src/MusicTools.Settings.html#ChangePassword">ChangePassword() (class)</a>
</li>
<li><a href="src/MusicTools.Settings.html#ChangePassword.handleCurrentChange">ChangePassword.handleCurrentChange() (ChangePassword method)</a>
</li>
<li><a href="src/MusicTools.Settings.html#ChangePassword.handleNew2Change">ChangePassword.handleNew2Change() (ChangePassword method)</a>
</li>
<li><a href="src/MusicTools.Settings.html#ChangePassword.handleNewChange">ChangePassword.handleNewChange() (ChangePassword method)</a>
</li>
<li><a href="src/MusicTools.Settings.html#ChangePassword.handleSubmit">ChangePassword.handleSubmit() (ChangePassword method)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.chart_limit">chart_limit (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.chart_limit">chart_limit (music.model.playlist.Playlist attribute)</a>
</li> </li>
@ -174,16 +145,8 @@
<li><a href="src/admin.html#admin.Admin.copy_main_file">copy_main_file() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.copy_main_file">copy_main_file() (admin.Admin method)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.tag.Tag.count">count (music.model.tag.Tag attribute)</a> <li><a href="src/music.model.html#music.model.tag.Tag.count">count (music.model.tag.Tag attribute)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Count">Count() (class)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.spotfm.count">count() (in module music.api.spotfm)</a> <li><a href="src/music.api.html#music.api.spotfm.count">count() (in module music.api.spotfm)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Count.Count">Count.Count (Count attribute)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Count.getUserInfo">Count.getUserInfo() (Count method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Count.updateStats">Count.updateStats() (Count method)</a>
</li> </li>
<li><a href="src/music.html#music.music.create_app">create_app() (in module music.music)</a> <li><a href="src/music.html#music.music.create_app">create_app() (in module music.music)</a>
</li> </li>
@ -202,8 +165,6 @@
<li><a href="src/music.model.html#music.model.playlist.Playlist.day_boundary">day_boundary (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.day_boundary">day_boundary (music.model.playlist.Playlist attribute)</a>
</li> </li>
<li><a href="src/music.auth.html#music.auth.auth.deauth">deauth() (in module music.auth.auth)</a> <li><a href="src/music.auth.html#music.auth.auth.deauth">deauth() (in module music.auth.auth)</a>
</li>
<li><a href="src/MusicTools.Settings.html#DeAuthButton">DeAuthButton() (built-in function)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Sort.default">default (music.model.playlist.Sort attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Sort.default">default (music.model.playlist.Sort attribute)</a>
</li> </li>
@ -223,10 +184,10 @@
</li> </li>
<li><a href="src/admin.html#admin.Admin.do_exit">do_exit() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.do_exit">do_exit() (admin.Admin method)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/admin.html#admin.Admin.do_main_group">do_main_group() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.do_main_group">do_main_group() (admin.Admin method)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/admin.html#admin.Admin.do_playlist">do_playlist() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.do_playlist">do_playlist() (admin.Admin method)</a>
</li> </li>
<li><a href="src/admin.html#admin.Admin.do_playlist_cron">do_playlist_cron() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.do_playlist_cron">do_playlist_cron() (admin.Admin method)</a>
@ -261,40 +222,10 @@
<h2 id="E">E</h2> <h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Playlist.html#Edit">Edit() (class)</a> <li><a href="src/music.model.html#music.model.user.User.email">email (music.model.user.User attribute)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.BlockGridItem">Edit.BlockGridItem() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.componentDidMount">Edit.componentDidMount() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.Edit">Edit.Edit (Edit attribute)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.getPlaylistInfo">Edit.getPlaylistInfo() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.getPlaylists">Edit.getPlaylists() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleAddPart">Edit.handleAddPart() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleAddReference">Edit.handleAddReference() (Edit method)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Playlist.html#Edit.handleCheckChange">Edit.handleCheckChange() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleInputChange">Edit.handleInputChange() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleRemovePart">Edit.handleRemovePart() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleRemoveReference">Edit.handleRemoveReference() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.handleRun">Edit.handleRun() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.ListBlock">Edit.ListBlock() (Edit method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Edit.makeNetworkUpdate">Edit.makeNetworkUpdate() (Edit method)</a>
</li>
<li><a href="src/music.model.html#music.model.user.User.email">email (music.model.user.User attribute)</a>
</li>
<li><a href="src/admin.html#admin.Admin.export_filtered_dependencies">export_filtered_dependencies() (admin.Admin method)</a> <li><a href="src/admin.html#admin.Admin.export_filtered_dependencies">export_filtered_dependencies() (admin.Admin method)</a>
</li> </li>
</ul></td> </ul></td>
@ -304,16 +235,10 @@
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/admin.html#admin.folders_to_ignore">folders_to_ignore (in module admin)</a> <li><a href="src/admin.html#admin.folders_to_ignore">folders_to_ignore (in module admin)</a>
</li>
<li><a href="src/admin.html#admin.Admin.function_deploy">function_deploy() (admin.Admin method)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Admin.html#Functions">Functions() (class)</a> <li><a href="src/admin.html#admin.Admin.function_deploy">function_deploy() (admin.Admin method)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Functions.runAllUsers">Functions.runAllUsers() (Functions method)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Functions.runStats">Functions.runStats() (Functions method)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@ -328,20 +253,16 @@
<li><a href="src/music.db.html#music.db.database.get_authed_spotify_network">get_authed_spotify_network() (in module music.db.database)</a> <li><a href="src/music.db.html#music.db.database.get_authed_spotify_network">get_authed_spotify_network() (in module music.db.database)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.get_playlist">get_playlist() (music.model.user.User method)</a> <li><a href="src/music.model.html#music.model.user.User.get_playlist">get_playlist() (music.model.user.User method)</a>
</li>
<li><a href="src/music.model.html#music.model.user.User.get_playlists">get_playlists() (music.model.user.User method)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.user.User.get_playlists">get_playlists() (music.model.user.User method)</a>
</li>
<li><a href="src/music.db.html#music.db.part_generator.PartGenerator.get_recursive_parts">get_recursive_parts() (music.db.part_generator.PartGenerator method)</a> <li><a href="src/music.db.html#music.db.part_generator.PartGenerator.get_recursive_parts">get_recursive_parts() (music.db.part_generator.PartGenerator method)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.tag.get_tag">get_tag() (in module music.api.tag)</a> <li><a href="src/music.api.html#music.api.tag.get_tag">get_tag() (in module music.api.tag)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.admin.get_tasks">get_tasks() (in module music.api.admin)</a> <li><a href="src/music.api.html#music.api.admin.get_tasks">get_tasks() (in module music.api.admin)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#getPlaylistLink">getPlaylistLink() (built-in function)</a>
</li>
<li><a href="src/MusicTools.Tag.html#getTagLink">getTagLink() (built-in function)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@ -364,16 +285,38 @@
<li><a href="src/admin.html#admin.Admin.intro">intro (admin.Admin attribute)</a> <li><a href="src/admin.html#admin.Admin.intro">intro (admin.Admin attribute)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.decorators.is_basic_authed">is_basic_authed() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.is_basic_authed">is_basic_authed() (in module music.api.decorators)</a>
</li>
<li><a href="src/music.api.html#music.api.decorators.is_jwt_authed">is_jwt_authed() (in module music.api.decorators)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.decorators.is_logged_in">is_logged_in() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.is_logged_in">is_logged_in() (in module music.api.decorators)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
<h2 id="J">J</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.config.Config.jwt_default_length">jwt_default_length (music.model.config.Config attribute)</a>
</li>
<li><a href="src/music.model.html#music.model.config.Config.jwt_max_length">jwt_max_length (music.model.config.Config attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.api.html#music.api.decorators.jwt_required">jwt_required() (in module music.api.decorators)</a>
</li>
<li><a href="src/music.model.html#music.model.config.Config.jwt_secret_key">jwt_secret_key (music.model.config.Config attribute)</a>
</li>
<li><a href="src/music.auth.html#music.auth.auth.jwt_token">jwt_token() (in module music.auth.auth)</a>
</li>
</ul></td>
</tr></table>
<h2 id="L">L</h2> <h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.config.Config.last_fm_client_id">last_fm_client_id (music.model.config.Config attribute)</a> <li><a href="src/music.model.html#music.model.config.Config.last_fm_client_id">last_fm_client_id (music.model.config.Config attribute)</a>
</li>
<li><a href="src/music.model.html#music.model.user.User.last_keygen">last_keygen (music.model.user.User attribute)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.last_login">last_login (music.model.user.User attribute)</a> <li><a href="src/music.model.html#music.model.user.User.last_login">last_login (music.model.user.User attribute)</a>
</li> </li>
@ -385,14 +328,6 @@
<li><a href="src/music.model.html#music.model.tag.Tag.last_updated">(music.model.tag.Tag attribute)</a> <li><a href="src/music.model.html#music.model.tag.Tag.last_updated">(music.model.tag.Tag attribute)</a>
</li> </li>
</ul></li> </ul></li>
<li><a href="src/MusicTools.Settings.html#LastFM">LastFM() (class)</a>
</li>
<li><a href="src/MusicTools.Settings.html#LastFM.getUserInfo">LastFM.getUserInfo() (LastFM method)</a>
</li>
<li><a href="src/MusicTools.Settings.html#LastFM.handleChange">LastFM.handleChange() (LastFM method)</a>
</li>
<li><a href="src/MusicTools.Settings.html#LastFM.handleSubmit">LastFM.handleSubmit() (LastFM method)</a>
</li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_album_count">lastfm_stat_album_count (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_album_count">lastfm_stat_album_count (music.model.playlist.Playlist attribute)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_album_percent">lastfm_stat_album_percent (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_album_percent">lastfm_stat_album_percent (music.model.playlist.Playlist attribute)</a>
@ -401,10 +336,10 @@
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_artist_percent">lastfm_stat_artist_percent (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_artist_percent">lastfm_stat_artist_percent (music.model.playlist.Playlist attribute)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_count">lastfm_stat_count (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_count">lastfm_stat_count (music.model.playlist.Playlist attribute)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_last_refresh">lastfm_stat_last_refresh (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_last_refresh">lastfm_stat_last_refresh (music.model.playlist.Playlist attribute)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_percent">lastfm_stat_percent (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.lastfm_stat_percent">lastfm_stat_percent (music.model.playlist.Playlist attribute)</a>
@ -414,18 +349,14 @@
<li><a href="src/music.api.html#music.api.decorators.lastfm_username_required">lastfm_username_required() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.lastfm_username_required">lastfm_username_required() (in module music.api.decorators)</a>
</li> </li>
<li><a href="src/admin.html#admin.Admin.locals">locals (admin.Admin attribute)</a> <li><a href="src/admin.html#admin.Admin.locals">locals (admin.Admin attribute)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Lock">Lock() (class)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Lock.getUserInfo">Lock.getUserInfo() (Lock method)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Lock.handleLock">Lock.handleLock() (Lock method)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.locked">locked (music.model.user.User attribute)</a> <li><a href="src/music.model.html#music.model.user.User.locked">locked (music.model.user.User attribute)</a>
</li> </li>
<li><a href="src/music.auth.html#music.auth.auth.login">login() (in module music.auth.auth)</a> <li><a href="src/music.auth.html#music.auth.auth.login">login() (in module music.auth.auth)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.decorators.login_or_basic_auth">login_or_basic_auth() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.login_or_basic_auth">login_or_basic_auth() (in module music.api.decorators)</a>
</li>
<li><a href="src/music.api.html#music.api.decorators.login_or_jwt">login_or_jwt() (in module music.api.decorators)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.decorators.login_required">login_required() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.login_required">login_required() (in module music.api.decorators)</a>
</li> </li>
@ -551,6 +482,8 @@
<li><a href="src/music.api.html#module-music.api.player">module</a> <li><a href="src/music.api.html#module-music.api.player">module</a>
</li> </li>
</ul></li> </ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li> <li>
music.api.spotfm music.api.spotfm
@ -558,8 +491,6 @@
<li><a href="src/music.api.html#module-music.api.spotfm">module</a> <li><a href="src/music.api.html#module-music.api.spotfm">module</a>
</li> </li>
</ul></li> </ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li> <li>
music.api.spotify music.api.spotify
@ -707,16 +638,6 @@
<li><a href="src/music.tasks.html#module-music.tasks.update_tag">module</a> <li><a href="src/music.tasks.html#module-music.tasks.update_tag">module</a>
</li> </li>
</ul></li> </ul></li>
<li><a href="src/MusicTools.html#MusicTools">MusicTools() (class)</a>
</li>
<li><a href="src/MusicTools.html#MusicTools.componentDidMount">MusicTools.componentDidMount() (MusicTools method)</a>
</li>
<li><a href="src/MusicTools.html#MusicTools.componentWillUnmount">MusicTools.componentWillUnmount() (MusicTools method)</a>
</li>
<li><a href="src/MusicTools.html#MusicTools.getUserInfo">MusicTools.getUserInfo() (MusicTools method)</a>
</li>
<li><a href="src/MusicTools.html#MusicTools.setOpen">MusicTools.setOpen() (MusicTools method)</a>
</li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.mutable_keys">mutable_keys (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.mutable_keys">mutable_keys (music.model.playlist.Playlist attribute)</a>
</li> </li>
</ul></td> </ul></td>
@ -731,25 +652,13 @@
<li><a href="src/music.model.html#music.model.tag.Tag.name">(music.model.tag.Tag attribute)</a> <li><a href="src/music.model.html#music.model.tag.Tag.name">(music.model.tag.Tag attribute)</a>
</li> </li>
</ul></li> </ul></li>
<li><a href="src/MusicTools.Playlist.html#NewPlaylist">NewPlaylist() (class)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#NewPlaylist.componentDidMount">NewPlaylist.componentDidMount() (NewPlaylist method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#NewPlaylist.handleInputChange">NewPlaylist.handleInputChange() (NewPlaylist method)</a>
</li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Playlist.html#NewPlaylist.handleSubmit">NewPlaylist.handleSubmit() (NewPlaylist method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#NewPlaylist.setDescription">NewPlaylist.setDescription() (NewPlaylist method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#NewTag">NewTag() (class)</a>
</li>
<li><a href="src/MusicTools.Tag.html#NewTag.handleInputChange">NewTag.handleInputChange() (NewTag method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#NewTag.handleSubmit">NewTag.handleSubmit() (NewTag method)</a>
</li>
<li><a href="src/music.api.html#music.api.player.next_track">next_track() (in module music.api.player)</a> <li><a href="src/music.api.html#music.api.player.next_track">next_track() (in module music.api.player)</a>
</li>
<li><a href="src/music.api.html#music.api.decorators.no_cache">no_cache() (in module music.api.decorators)</a>
</li>
<li><a href="src/music.api.html#music.api.decorators.no_locked_users">no_locked_users() (in module music.api.decorators)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@ -770,12 +679,6 @@
<li><a href="src/music.model.html#music.model.playlist.Playlist.parts">parts (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.parts">parts (music.model.playlist.Playlist attribute)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.password">password (music.model.user.User attribute)</a> <li><a href="src/music.model.html#music.model.user.User.password">password (music.model.user.User attribute)</a>
</li>
<li><a href="src/MusicTools.Maths.html#PieChart">PieChart() (class)</a>
</li>
<li><a href="src/MusicTools.Maths.html#PieChart.componentDidMount">PieChart.componentDidMount() (PieChart method)</a>
</li>
<li><a href="src/MusicTools.Maths.html#PieChart.componentDidUpdate">PieChart.componentDidUpdate() (PieChart method)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.player.play">play() (in module music.api.player)</a> <li><a href="src/music.api.html#music.api.player.play">play() (in module music.api.player)</a>
</li> </li>
@ -787,33 +690,13 @@
</li> </li>
<li><a href="src/music.api.html#music.api.api.playlist_get_delete_route">playlist_get_delete_route() (in module music.api.api)</a> <li><a href="src/music.api.html#music.api.api.playlist_get_delete_route">playlist_get_delete_route() (in module music.api.api)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.api.html#music.api.api.playlist_post_put_route">playlist_post_put_route() (in module music.api.api)</a> <li><a href="src/music.api.html#music.api.api.playlist_post_put_route">playlist_post_put_route() (in module music.api.api)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.playlist_references">playlist_references (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.playlist_references">playlist_references (music.model.playlist.Playlist attribute)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.spotfm.playlist_refresh">playlist_refresh() (in module music.api.spotfm)</a> <li><a href="src/music.api.html#music.api.spotfm.playlist_refresh">playlist_refresh() (in module music.api.spotfm)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistCard">PlaylistCard() (class)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Playlist.html#PlaylistGrid">PlaylistGrid() (class)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistRouter.View">PlaylistRouter.View() (class)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistRouter.View.handleChange">PlaylistRouter.View.handleChange() (PlaylistRouter.View method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#Playlists">Playlists() (class)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistsView">PlaylistsView() (class)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistsView.getPlaylists">PlaylistsView.getPlaylists() (PlaylistsView method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistsView.handleDeletePlaylist">PlaylistsView.handleDeletePlaylist() (PlaylistsView method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistsView.handleRunAll">PlaylistsView.handleRunAll() (PlaylistsView method)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#PlaylistsView.handleRunPlaylist">PlaylistsView.handleRunPlaylist() (PlaylistsView method)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.tag.post_tag">post_tag() (in module music.api.tag)</a> <li><a href="src/music.api.html#music.api.tag.post_tag">post_tag() (in module music.api.tag)</a>
</li> </li>
@ -842,8 +725,6 @@
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.playlist.Playlist.recommendation_sample">recommendation_sample (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.recommendation_sample">recommendation_sample (music.model.playlist.Playlist attribute)</a>
</li>
<li><a href="src/MusicTools.Playlist.html#ReferenceEntry">ReferenceEntry() (built-in function)</a>
</li> </li>
<li><a href="src/music.cloud.html#music.cloud.tasks.refresh_all_user_playlist_stats">refresh_all_user_playlist_stats() (in module music.cloud.tasks)</a> <li><a href="src/music.cloud.html#music.cloud.tasks.refresh_all_user_playlist_stats">refresh_all_user_playlist_stats() (in module music.cloud.tasks)</a>
</li> </li>
@ -869,12 +750,10 @@
</li> </li>
<li><a href="src/music.db.html#music.db.part_generator.PartGenerator.reset">reset() (music.db.part_generator.PartGenerator method)</a> <li><a href="src/music.db.html#music.db.part_generator.PartGenerator.reset">reset() (music.db.part_generator.PartGenerator method)</a>
</li> </li>
<li><a href="src/MusicTools.Admin.html#Row">Row() (built-in function)</a> <li><a href="src/admin.html#admin.run">run() (in module admin)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/admin.html#admin.run">run() (in module admin)</a>
</li>
<li><a href="src/music.api.html#music.api.api.run_playlist">run_playlist() (in module music.api.api)</a> <li><a href="src/music.api.html#music.api.api.run_playlist">run_playlist() (in module music.api.api)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.spotfm.run_playlist_album_task">run_playlist_album_task() (in module music.api.spotfm)</a> <li><a href="src/music.api.html#music.api.spotfm.run_playlist_album_task">run_playlist_album_task() (in module music.api.spotfm)</a>
@ -918,10 +797,6 @@
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.model.html#music.model.config.Config.secret_key">secret_key (music.model.config.Config attribute)</a> <li><a href="src/music.model.html#music.model.config.Config.secret_key">secret_key (music.model.config.Config attribute)</a>
</li>
<li><a href="src/MusicTools.Settings.html#Settings">Settings() (class)</a>
</li>
<li><a href="src/MusicTools.Settings.html#Settings.handleChange">Settings.handleChange() (Settings method)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.playlist.Playlist.shuffle">shuffle (music.model.playlist.Playlist attribute)</a> <li><a href="src/music.model.html#music.model.playlist.Playlist.shuffle">shuffle (music.model.playlist.Playlist attribute)</a>
@ -946,10 +821,6 @@
<li><a href="src/music.api.html#music.api.decorators.spotify_link_required">spotify_link_required() (in module music.api.decorators)</a> <li><a href="src/music.api.html#music.api.decorators.spotify_link_required">spotify_link_required() (in module music.api.decorators)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.spotify_linked">spotify_linked (music.model.user.User attribute)</a> <li><a href="src/music.model.html#music.model.user.User.spotify_linked">spotify_linked (music.model.user.User attribute)</a>
</li>
<li><a href="src/MusicTools.Settings.html#SpotifyLink">SpotifyLink() (class)</a>
</li>
<li><a href="src/MusicTools.Settings.html#SpotifyLink.getUserInfo">SpotifyLink.getUserInfo() (SpotifyLink method)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@ -966,52 +837,8 @@
<li><a href="src/music.api.html#music.api.tag.tag_refresh">tag_refresh() (in module music.api.tag)</a> <li><a href="src/music.api.html#music.api.tag.tag_refresh">tag_refresh() (in module music.api.tag)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.tag.tag_route">tag_route() (in module music.api.tag)</a> <li><a href="src/music.api.html#music.api.tag.tag_route">tag_route() (in module music.api.tag)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagCard">TagCard() (built-in function)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagGrid">TagGrid() (built-in function)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagList">TagList() (class)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagList.getTags">TagList.getTags() (TagList method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagList.handleDeleteTag">TagList.handleDeleteTag() (TagList method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagRouter">TagRouter() (class)</a>
</li> </li>
<li><a href="src/music.api.html#music.api.tag.tags">tags() (in module music.api.tag)</a> <li><a href="src/music.api.html#music.api.tag.tags">tags() (in module music.api.tag)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView">TagView() (class)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.componentDidMount">TagView.componentDidMount() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.getTag">TagView.getTag() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.getUserInfo">TagView.getUserInfo() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleAdd">TagView.handleAdd() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleChangeAddType">TagView.handleChangeAddType() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleCheckChange">TagView.handleCheckChange() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleInputChange">TagView.handleInputChange() (TagView method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/MusicTools.Tag.html#TagView.handleRemoveObj">TagView.handleRemoveObj() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleRun">TagView.handleRun() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.handleView">TagView.handleView() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Tag.html#TagView.makeNetworkUpdate">TagView.makeNetworkUpdate() (TagView method)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Tasks">Tasks() (class)</a>
</li>
<li><a href="src/MusicTools.Admin.html#Tasks.getTasks">Tasks.getTasks() (Tasks method)</a>
</li>
<li><a href="src/MusicTools.Admin.html#TaskType">TaskType() (built-in function)</a>
</li> </li>
<li><a href="src/admin.html#admin.test">test() (in module admin)</a> <li><a href="src/admin.html#admin.test">test() (in module admin)</a>
</li> </li>
@ -1025,6 +852,8 @@
<li><a href="src/music.model.html#music.model.user.User.to_dict">(music.model.user.User method)</a> <li><a href="src/music.model.html#music.model.user.User.to_dict">(music.model.user.User method)</a>
</li> </li>
</ul></li> </ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="src/music.auth.html#music.auth.auth.token">token() (in module music.auth.auth)</a> <li><a href="src/music.auth.html#music.auth.auth.token">token() (in module music.auth.auth)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.token_expiry">token_expiry (music.model.user.User attribute)</a> <li><a href="src/music.model.html#music.model.user.User.token_expiry">token_expiry (music.model.user.User attribute)</a>
@ -1068,6 +897,8 @@
<li><a href="src/music.model.html#music.model.user.User">User (class in music.model.user)</a> <li><a href="src/music.model.html#music.model.user.User">User (class in music.model.user)</a>
</li> </li>
<li><a href="src/music.model.html#music.model.user.User.Meta">User.Meta (class in music.model.user)</a> <li><a href="src/music.model.html#music.model.user.User.Meta">User.Meta (class in music.model.user)</a>
</li>
<li><a href="src/music.api.html#music.api.api.user_delete_route">user_delete_route() (in module music.api.api)</a>
</li> </li>
<li><a href="src/music.db.html#music.db.database.DatabaseUser.user_id">user_id (music.db.database.DatabaseUser attribute)</a> <li><a href="src/music.db.html#music.db.database.DatabaseUser.user_id">user_id (music.db.database.DatabaseUser attribute)</a>
</li> </li>
@ -1106,7 +937,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Music Tools</a></h1> <h1 class="logo"><a href="index.html">Mixonomer</a></h1>
@ -1116,10 +947,9 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="src/MusicTools.html">Js</a></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></li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li>
</ul> </ul>
@ -1135,12 +965,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="search.html" method="get"> <form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -1157,7 +987,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div> </div>

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>Music Tools &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <title>Mixonomer &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" /> <link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@ -31,10 +33,10 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-tools"> <section id="mixonomer">
<h1>Music Tools<a class="headerlink" href="#music-tools" title="Permalink to this headline"></a></h1> <h1>Mixonomer<a class="headerlink" href="#mixonomer" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a><ul> <li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a><ul>
<li class="toctree-l2"><a class="reference internal" href="src/music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="src/music.api.html">music.api</a></li>
@ -46,37 +48,28 @@
<li class="toctree-l2"><a class="reference internal" href="src/music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="src/music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="src/MusicTools.html">Js</a><ul>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.Settings.html">Settings</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></li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a><ul> <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> <li class="toctree-l2"><a class="reference internal" href="src/music.html">Flask Backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="src/MusicTools.html">React Frontend</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
<div class="section" id="id2"> <section id="id2">
<h2><a class="reference external" href="https://music.sarsoo.xyz">Music Tools</a><a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2> <h2><a class="reference external" href="https://mixonomer.sarsoo.xyz">Mixonomer</a><a class="headerlink" href="#id2" title="Permalink to this heading"></a></h2>
<img alt="https://github.com/sarsoo/music-tools/workflows/test%20and%20deploy/badge.svg" src="https://github.com/sarsoo/music-tools/workflows/test%20and%20deploy/badge.svg" /><p>Music Tools is a web app for creating smart Spotify playlists. The app is based on <a class="reference external" href="https://github.com/Sarsoo/spotframework">spotframework</a> and <a class="reference external" href="https://github.com/Sarsoo/pyfmframework">fmframework</a> for interfacing with Spotify and Last.fm. The app is currently hosted on Googles Cloud Platform.</p> <img alt="https://github.com/sarsoo/Mixonomer/workflows/test%20and%20deploy/badge.svg" src="https://github.com/sarsoo/Mixonomer/workflows/test%20and%20deploy/badge.svg" /><p>Mixonomer is a web app for creating smart Spotify playlists. The app is based on <a class="reference external" href="https://github.com/Sarsoo/spotframework">spotframework</a> and <a class="reference external" href="https://github.com/Sarsoo/pyfmframework">fmframework</a> for interfacing with Spotify and Last.fm. The app is currently hosted on Googles Cloud Platform.</p>
<p>The backend is composed of a Flask web server with a Fireo ORM layer and longer tasks dispatched to Cloud Tasks or Functions. The frontend is a React app with material UI components and Axios for HTTP requests.</p> <p>The backend is composed of a Flask web server with a Fireo ORM layer and longer tasks dispatched to Cloud Tasks or Functions. The frontend is a React app with material UI components and Axios for HTTP requests.</p>
<img alt="_images/Playlists.png" src="_images/Playlists.png" /> <img alt="_images/Playlists.png" src="_images/Playlists.png" />
</div> </section>
</div> </section>
<div class="section" id="indices-and-tables"> <section id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1> <h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading"></a></h1>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li> <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li> <li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li> <li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
</ul> </ul>
</div> </section>
</div> </div>
@ -85,7 +78,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="#">Music Tools</a></h1> <h1 class="logo"><a href="#">Mixonomer</a></h1>
@ -95,10 +88,9 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="src/MusicTools.html">Js</a></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></li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li>
</ul> </ul>
@ -115,12 +107,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="search.html" method="get"> <form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -137,7 +129,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

Binary file not shown.

View File

@ -1,16 +1,17 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Python Module Index &#8212; Music Tools documentation</title> <title>Python Module Index &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" /> <link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@ -208,7 +209,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Music Tools</a></h1> <h1 class="logo"><a href="index.html">Mixonomer</a></h1>
@ -218,10 +219,9 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="src/MusicTools.html">Js</a></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></li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li>
</ul> </ul>
@ -237,12 +237,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="search.html" method="get"> <form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -259,7 +259,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div> </div>

View File

@ -1,17 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &#8212; Music Tools documentation</title> <title>Search &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script> <script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script> <script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script> <script src="_static/doctools.js"></script>
<script src="_static/searchtools.js"></script> <script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script> <script src="_static/language_data.js"></script>
@ -37,26 +38,35 @@
<div class="body" role="main"> <div class="body" role="main">
<h1 id="search-documentation">Search</h1> <h1 id="search-documentation">Search</h1>
<div id="fallback" class="admonition warning">
<script>$('#fallback').hide();</script> <noscript>
<div class="admonition warning">
<p> <p>
Please activate JavaScript to enable the search Please activate JavaScript to enable the search
functionality. functionality.
</p> </p>
</div> </div>
</noscript>
<p> <p>
Searching for multiple words only shows matches that contain Searching for multiple words only shows matches that contain
all words. all words.
</p> </p>
<form action="" method="get"> <form action="" method="get">
<input type="text" name="q" aria-labelledby="search-documentation" value="" /> <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="search" /> <input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span> <span id="search-progress" style="padding-left: 10px"></span>
</form> </form>
<div id="search-results"> <div id="search-results">
</div> </div>
</div> </div>
@ -64,7 +74,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Music Tools</a></h1> <h1 class="logo"><a href="index.html">Mixonomer</a></h1>
@ -74,10 +84,9 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="src/music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="src/MusicTools.html">Js</a></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></li>
<li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="src/modules.html">All Modules</a></li>
</ul> </ul>
@ -105,7 +114,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div> </div>

File diff suppressed because one or more lines are too long

View File

@ -1,255 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Admin &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Settings" href="MusicTools.Settings.html" />
<link rel="prev" title="Maths" href="MusicTools.Maths.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="admin">
<h1>Admin<a class="headerlink" href="#admin" title="Permalink to this headline"></a></h1>
<div class="section" id="router">
<h2>Router<a class="headerlink" href="#router" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Admin">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Admin</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Admin" title="Permalink to this definition"></a></dt>
<dd><p>Admin router component for hosting cards</p>
<dl class="js function">
<dt id="Admin.handleChange">
<code class="sig-prename descclassname"><span class="pre">Admin.</span></code><code class="sig-name descname"><span class="pre">handleChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">e</span></em>, <em class="sig-param"><span class="pre">newValue</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Admin.handleChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle tab change event</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>e</strong> (<em>*</em>) Event data</p></li>
<li><p><strong>newValue</strong> (<em>*</em>) New tab data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="lock">
<h2>Lock<a class="headerlink" href="#lock" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Lock">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Lock</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Lock" title="Permalink to this definition"></a></dt>
<dd><p>Account lock card component</p>
<dl class="js function">
<dt id="Lock.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">Lock.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Lock.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Make user infor request of API</p>
</dd></dl>
<dl class="js function">
<dt id="Lock.handleLock">
<code class="sig-prename descclassname"><span class="pre">Lock.</span></code><code class="sig-name descname"><span class="pre">handleLock</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em>, <em class="sig-param"><span class="pre">username</span></em>, <em class="sig-param"><span class="pre">to_state</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Lock.handleLock" title="Permalink to this definition"></a></dt>
<dd><p>Make lock request of API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
<li><p><strong>username</strong> (<em>*</em>) Subject username</p></li>
<li><p><strong>to_state</strong> (<em>*</em>) Target lock state</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="js function">
<dt id="Row">
<code class="sig-name descname"><span class="pre">Row</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Row" title="Permalink to this definition"></a></dt>
<dd><p>Grid of account cards with lock buttons</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Card component wrapped in grid cell</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="functions">
<h2>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Functions">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Functions</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Functions" title="Permalink to this definition"></a></dt>
<dd><p>Admin functions card component</p>
<dl class="js function">
<dt id="Functions.runAllUsers">
<code class="sig-prename descclassname"><span class="pre">Functions.</span></code><code class="sig-name descname"><span class="pre">runAllUsers</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Functions.runAllUsers" title="Permalink to this definition"></a></dt>
<dd><p>Make run all playlists request of API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Functions.runStats">
<code class="sig-prename descclassname"><span class="pre">Functions.</span></code><code class="sig-name descname"><span class="pre">runStats</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Functions.runStats" title="Permalink to this definition"></a></dt>
<dd><p>Make run stats request of API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="tasks">
<h2>Tasks<a class="headerlink" href="#tasks" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Tasks">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Tasks</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Tasks" title="Permalink to this definition"></a></dt>
<dd><p>Running tasks card component</p>
<dl class="js function">
<dt id="Tasks.getTasks">
<code class="sig-prename descclassname"><span class="pre">Tasks.</span></code><code class="sig-name descname"><span class="pre">getTasks</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Tasks.getTasks" title="Permalink to this definition"></a></dt>
<dd><p>Get tasks from API</p>
</dd></dl>
</dd></dl>
<dl class="js function">
<dt id="TaskType">
<code class="sig-name descname"><span class="pre">TaskType</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TaskType" title="Permalink to this definition"></a></dt>
<dd><p>Grid of task cards</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Card compnent wrapped in grid cell</p>
</dd>
</dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="reference internal" href="MusicTools.html">Js</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="MusicTools.html">React Frontend</a><ul>
<li>Previous: <a href="MusicTools.Maths.html" title="previous chapter">Maths</a></li>
<li>Next: <a href="MusicTools.Settings.html" title="next chapter">Settings</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.Admin.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,162 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Maths &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Admin" href="MusicTools.Admin.html" />
<link rel="prev" title="Tag" href="MusicTools.Tag.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="maths">
<h1>Maths<a class="headerlink" href="#maths" title="Permalink to this headline"></a></h1>
<div class="section" id="bar-chart">
<h2>Bar Chart<a class="headerlink" href="#bar-chart" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="BarChart">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">BarChart</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#BarChart" title="Permalink to this definition"></a></dt>
<dd><p>Bar chart component using Chart.js</p>
<dl class="js function">
<dt id="BarChart.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">BarChart.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BarChart.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Load data from react properties</p>
</dd></dl>
<dl class="js function">
<dt id="BarChart.componentDidUpdate">
<code class="sig-prename descclassname"><span class="pre">BarChart.</span></code><code class="sig-name descname"><span class="pre">componentDidUpdate</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BarChart.componentDidUpdate" title="Permalink to this definition"></a></dt>
<dd><p>Re-apply data to chart on update</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="pie-chart">
<h2>Pie Chart<a class="headerlink" href="#pie-chart" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="PieChart">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">PieChart</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PieChart" title="Permalink to this definition"></a></dt>
<dd><p>Pie chart component using Chart.js</p>
<dl class="js function">
<dt id="PieChart.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">PieChart.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#PieChart.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Load data from react properties</p>
</dd></dl>
<dl class="js function">
<dt id="PieChart.componentDidUpdate">
<code class="sig-prename descclassname"><span class="pre">PieChart.</span></code><code class="sig-name descname"><span class="pre">componentDidUpdate</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#PieChart.componentDidUpdate" title="Permalink to this definition"></a></dt>
<dd><p>Re-apply data to chart on update</p>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="reference internal" href="MusicTools.html">Js</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="MusicTools.html">React Frontend</a><ul>
<li>Previous: <a href="MusicTools.Tag.html" title="previous chapter">Tag</a></li>
<li>Next: <a href="MusicTools.Admin.html" title="next chapter">Admin</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.Maths.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,538 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Playlist &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Tag" href="MusicTools.Tag.html" />
<link rel="prev" title="React Frontend" href="MusicTools.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="playlist">
<h1>Playlist<a class="headerlink" href="#playlist" title="Permalink to this headline"></a></h1>
<div class="section" id="router">
<h2>Router<a class="headerlink" href="#router" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Playlists">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Playlists</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Playlists" title="Permalink to this definition"></a></dt>
<dd><p>Router for playlist lists page, includes new playlist page</p>
</dd></dl>
<p>For managing playlists list pages for diverting to new playlist page</p>
<dl class="js class">
<dt id="PlaylistRouter.View">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">PlaylistRouter.</span></code><code class="sig-name descname"><span class="pre">View</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistRouter.View" title="Permalink to this definition"></a></dt>
<dd><p>Playlist view structure with tabs for view/editing and statistics</p>
<dl class="js function">
<dt id="PlaylistRouter.View.handleChange">
<code class="sig-prename descclassname"><span class="pre">PlaylistRouter.View.</span></code><code class="sig-name descname"><span class="pre">handleChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">e</span></em>, <em class="sig-param"><span class="pre">newValue</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistRouter.View.handleChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle tab change event</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>e</strong> (<em>*</em>) Event args</p></li>
<li><p><strong>newValue</strong> (<em>*</em>) New tab object</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="cards-list">
<h2>Cards List<a class="headerlink" href="#cards-list" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="PlaylistsView">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">PlaylistsView</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistsView" title="Permalink to this definition"></a></dt>
<dd><p>Top-level object for hosting playlist card grid with new/run all buttons</p>
<p>Trigger loading playlist data during init</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Component properties</p></li>
</ul>
</dd>
</dl>
<dl class="js function">
<dt id="PlaylistsView.getPlaylists">
<code class="sig-prename descclassname"><span class="pre">PlaylistsView.</span></code><code class="sig-name descname"><span class="pre">getPlaylists</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistsView.getPlaylists" title="Permalink to this definition"></a></dt>
<dd><p>Get playlist data from API and set state with results</p>
</dd></dl>
<dl class="js function">
<dt id="PlaylistsView.handleDeletePlaylist">
<code class="sig-prename descclassname"><span class="pre">PlaylistsView.</span></code><code class="sig-name descname"><span class="pre">handleDeletePlaylist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">name</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistsView.handleDeletePlaylist" title="Permalink to this definition"></a></dt>
<dd><p>Post delete playlist action to API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> (<em>*</em>) Playlist name to delete</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="PlaylistsView.handleRunAll">
<code class="sig-prename descclassname"><span class="pre">PlaylistsView.</span></code><code class="sig-name descname"><span class="pre">handleRunAll</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistsView.handleRunAll" title="Permalink to this definition"></a></dt>
<dd><p>Post run all playlists action to API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="PlaylistsView.handleRunPlaylist">
<code class="sig-prename descclassname"><span class="pre">PlaylistsView.</span></code><code class="sig-name descname"><span class="pre">handleRunPlaylist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">name</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistsView.handleRunPlaylist" title="Permalink to this definition"></a></dt>
<dd><p>Post run playlist action to API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> (<em>*</em>) Playlist name to run</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="js class">
<dt id="PlaylistGrid">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">PlaylistGrid</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistGrid" title="Permalink to this definition"></a></dt>
<dd><p>Playlist grid component for new/run all buttons and playlist cards</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Component properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Grid component</p>
</dd>
</dl>
</dd></dl>
<dl class="js class">
<dt id="PlaylistCard">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">PlaylistCard</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#PlaylistCard" title="Permalink to this definition"></a></dt>
<dd><p>Playlist card component with view/run/delete buttons</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Component properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Playlist card component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="getPlaylistLink">
<code class="sig-name descname"><span class="pre">getPlaylistLink</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">playlistName</span></em><span class="sig-paren">)</span><a class="headerlink" href="#getPlaylistLink" title="Permalink to this definition"></a></dt>
<dd><p>Get URL for playlist given name</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>playlistName</strong> (<em>*</em>) Subject playlist name</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>URL string</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="new-playlist-card">
<h2>New Playlist Card<a class="headerlink" href="#new-playlist-card" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="NewPlaylist">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">NewPlaylist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewPlaylist" title="Permalink to this definition"></a></dt>
<dd><p>New playlist card</p>
<dl class="js function">
<dt id="NewPlaylist.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">NewPlaylist.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#NewPlaylist.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Set initial state of playlist type description</p>
</dd></dl>
<dl class="js function">
<dt id="NewPlaylist.handleInputChange">
<code class="sig-prename descclassname"><span class="pre">NewPlaylist.</span></code><code class="sig-name descname"><span class="pre">handleInputChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewPlaylist.handleInputChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle input changes by setting state</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="NewPlaylist.handleSubmit">
<code class="sig-prename descclassname"><span class="pre">NewPlaylist.</span></code><code class="sig-name descname"><span class="pre">handleSubmit</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewPlaylist.handleSubmit" title="Permalink to this definition"></a></dt>
<dd><p>Validate input and make new playlist API request</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="NewPlaylist.setDescription">
<code class="sig-prename descclassname"><span class="pre">NewPlaylist.</span></code><code class="sig-name descname"><span class="pre">setDescription</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewPlaylist.setDescription" title="Permalink to this definition"></a></dt>
<dd><p>Set playlist type description</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>value</strong> (<em>*</em>) Playlist type string to match</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="view-edit-card">
<h2>View/Edit Card<a class="headerlink" href="#view-edit-card" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Edit">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Edit</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Edit" title="Permalink to this definition"></a></dt>
<dd><p>Main view/edit card for playlists</p>
<dl class="js attribute">
<dt id="Edit.Edit">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">Edit</span></code><a class="headerlink" href="#Edit.Edit" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="js function">
<dt id="Edit.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Edit.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Get playlist info and all playlists from API, sort and set state</p>
</dd></dl>
<dl class="js function">
<dt id="Edit.getPlaylistInfo">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">getPlaylistInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Edit.getPlaylistInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get API playlist info request</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Playlist info request</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.getPlaylists">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">getPlaylists</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Edit.getPlaylists" title="Permalink to this definition"></a></dt>
<dd><p>Get API list of playlist infos request</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Playlists info request</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleAddPart">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleAddPart</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleAddPart" title="Permalink to this definition"></a></dt>
<dd><p>Handle adding new watched Spotify playlist name string</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleAddReference">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleAddReference</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleAddReference" title="Permalink to this definition"></a></dt>
<dd><p>Handle adding new watched music tools playlist reference</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleCheckChange">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleCheckChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleCheckChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle checkbox state changes, make API requests</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleInputChange">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleInputChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleInputChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle input box state changes, make API requests</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleRemovePart">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleRemovePart</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">id</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleRemovePart" title="Permalink to this definition"></a></dt>
<dd><p>Handle removing watched Spotify playlist name string</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>id</strong> (<em>*</em>) Subject playlist name</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleRemoveReference">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleRemoveReference</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">id</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleRemoveReference" title="Permalink to this definition"></a></dt>
<dd><p>Handle removing watched music tools playlist reference</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>id</strong> (<em>*</em>) Subject playlist name</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.handleRun">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">handleRun</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.handleRun" title="Permalink to this definition"></a></dt>
<dd><p>Handle refreshing playlist action, checks for spotify link</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.makeNetworkUpdate">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">makeNetworkUpdate</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">changes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.makeNetworkUpdate" title="Permalink to this definition"></a></dt>
<dd><p>Send playlist info updates to API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>changes</strong> (<em>*</em>) Dictionary of changes to make</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="js function">
<dt id="ReferenceEntry">
<code class="sig-name descname"><span class="pre">ReferenceEntry</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ReferenceEntry" title="Permalink to this definition"></a></dt>
<dd><p>Smart playlist entry in dropbox</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties containing name</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Dropbox option component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.ListBlock">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">ListBlock</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.ListBlock" title="Permalink to this definition"></a></dt>
<dd><p>Grid of cards for smart/Spotify playlist names with delete button</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Grid component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="Edit.BlockGridItem">
<code class="sig-prename descclassname"><span class="pre">Edit.</span></code><code class="sig-name descname"><span class="pre">BlockGridItem</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Edit.BlockGridItem" title="Permalink to this definition"></a></dt>
<dd><p>Smart/Spotify playlist card including name and delete button</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Card component wrapped in grid cell</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="stats-card">
<h2>Stats Card<a class="headerlink" href="#stats-card" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Count">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Count</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Count" title="Permalink to this definition"></a></dt>
<dd><p>Playlist count tab for presenting listening stats</p>
<dl class="js attribute">
<dt id="Count.Count">
<code class="sig-prename descclassname"><span class="pre">Count.</span></code><code class="sig-name descname"><span class="pre">Count</span></code><a class="headerlink" href="#Count.Count" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="js function">
<dt id="Count.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">Count.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Count.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get playlist info with stats from API and set state if user has Last.fm username</p>
</dd></dl>
<dl class="js function">
<dt id="Count.updateStats">
<code class="sig-prename descclassname"><span class="pre">Count.</span></code><code class="sig-name descname"><span class="pre">updateStats</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Count.updateStats" title="Permalink to this definition"></a></dt>
<dd><p>Make stats refresh request of API</p>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="reference internal" href="MusicTools.html">Js</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="MusicTools.html">React Frontend</a><ul>
<li>Previous: <a href="MusicTools.html" title="previous chapter">React Frontend</a></li>
<li>Next: <a href="MusicTools.Tag.html" title="next chapter">Tag</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.Playlist.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,292 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Settings &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.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" />
<link rel="prev" title="Admin" href="MusicTools.Admin.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="settings">
<h1>Settings<a class="headerlink" href="#settings" title="Permalink to this headline"></a></h1>
<div class="section" id="router">
<h2>Router<a class="headerlink" href="#router" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="Settings">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Settings</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Settings" title="Permalink to this definition"></a></dt>
<dd><p>Settings card tabs structure for hosting password/spotify linked/last.fm username tabs</p>
<dl class="js function">
<dt id="Settings.handleChange">
<code class="sig-prename descclassname"><span class="pre">Settings.</span></code><code class="sig-name descname"><span class="pre">handleChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">e</span></em>, <em class="sig-param"><span class="pre">newValue</span></em><span class="sig-paren">)</span><a class="headerlink" href="#Settings.handleChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle tab change event</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>e</strong> (<em>*</em>) Event args</p></li>
<li><p><strong>newValue</strong> (<em>*</em>) New tab object</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="change-password">
<h2>Change Password<a class="headerlink" href="#change-password" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="ChangePassword">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">ChangePassword</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ChangePassword" title="Permalink to this definition"></a></dt>
<dd><p>Change password card</p>
<dl class="js function">
<dt id="ChangePassword.handleCurrentChange">
<code class="sig-prename descclassname"><span class="pre">ChangePassword.</span></code><code class="sig-name descname"><span class="pre">handleCurrentChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ChangePassword.handleCurrentChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle current pw state change</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="ChangePassword.handleNew2Change">
<code class="sig-prename descclassname"><span class="pre">ChangePassword.</span></code><code class="sig-name descname"><span class="pre">handleNew2Change</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ChangePassword.handleNew2Change" title="Permalink to this definition"></a></dt>
<dd><p>Handle new again pw state change</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="ChangePassword.handleNewChange">
<code class="sig-prename descclassname"><span class="pre">ChangePassword.</span></code><code class="sig-name descname"><span class="pre">handleNewChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ChangePassword.handleNewChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle new pw state change</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="ChangePassword.handleSubmit">
<code class="sig-prename descclassname"><span class="pre">ChangePassword.</span></code><code class="sig-name descname"><span class="pre">handleSubmit</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#ChangePassword.handleSubmit" title="Permalink to this definition"></a></dt>
<dd><p>Handle submit button click, validate input, make network request</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="spotify-link">
<h2>Spotify Link<a class="headerlink" href="#spotify-link" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="SpotifyLink">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">SpotifyLink</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#SpotifyLink" title="Permalink to this definition"></a></dt>
<dd><p>Spotify account link settings card</p>
<dl class="js function">
<dt id="SpotifyLink.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">SpotifyLink.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#SpotifyLink.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get user info from API and set spotify link status to state</p>
</dd></dl>
</dd></dl>
<dl class="js function">
<dt id="AuthButton">
<code class="sig-name descname"><span class="pre">AuthButton</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#AuthButton" title="Permalink to this definition"></a></dt>
<dd><p>Authenticate Spotify account button component</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Button component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="DeAuthButton">
<code class="sig-name descname"><span class="pre">DeAuthButton</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#DeAuthButton" title="Permalink to this definition"></a></dt>
<dd><p>Deauthenticate Spotify account button component</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Button component</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="last-fm-username">
<h2>Last.fm Username<a class="headerlink" href="#last-fm-username" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="LastFM">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">LastFM</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#LastFM" title="Permalink to this definition"></a></dt>
<dd><p>Last.fm username setting card</p>
<dl class="js function">
<dt id="LastFM.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">LastFM.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#LastFM.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get user info from API, set current username to state</p>
</dd></dl>
<dl class="js function">
<dt id="LastFM.handleChange">
<code class="sig-prename descclassname"><span class="pre">LastFM.</span></code><code class="sig-name descname"><span class="pre">handleChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#LastFM.handleChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle input box state change</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="LastFM.handleSubmit">
<code class="sig-prename descclassname"><span class="pre">LastFM.</span></code><code class="sig-name descname"><span class="pre">handleSubmit</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#LastFM.handleSubmit" title="Permalink to this definition"></a></dt>
<dd><p>Handle submit button, post API change request</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="reference internal" href="MusicTools.html">Js</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="MusicTools.html">React Frontend</a><ul>
<li>Previous: <a href="MusicTools.Admin.html" title="previous chapter">Admin</a></li>
<li>Next: <a href="admin.html" title="next chapter">admin script</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.Settings.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,381 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tag &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Maths" href="MusicTools.Maths.html" />
<link rel="prev" title="Playlist" href="MusicTools.Playlist.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="tag">
<h1>Tag<a class="headerlink" href="#tag" title="Permalink to this headline"></a></h1>
<div class="section" id="router">
<h2>Router<a class="headerlink" href="#router" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="TagRouter">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">TagRouter</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#TagRouter" title="Permalink to this definition"></a></dt>
<dd><p>Tag router for directing between tag list and new</p>
</dd></dl>
</div>
<div class="section" id="cards-list">
<h2>Cards List<a class="headerlink" href="#cards-list" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="TagList">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">TagList</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagList" title="Permalink to this definition"></a></dt>
<dd><p>Tag card list component</p>
<dl class="js function">
<dt id="TagList.getTags">
<code class="sig-prename descclassname"><span class="pre">TagList.</span></code><code class="sig-name descname"><span class="pre">getTags</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#TagList.getTags" title="Permalink to this definition"></a></dt>
<dd><p>Get tags info from API</p>
</dd></dl>
<dl class="js function">
<dt id="TagList.handleDeleteTag">
<code class="sig-prename descclassname"><span class="pre">TagList.</span></code><code class="sig-name descname"><span class="pre">handleDeleteTag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">tag_id</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagList.handleDeleteTag" title="Permalink to this definition"></a></dt>
<dd><p>Make delete tag request of API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>tag_id</strong> (<em>*</em>) Tag ID</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event Data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="js function">
<dt id="TagGrid">
<code class="sig-name descname"><span class="pre">TagGrid</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagGrid" title="Permalink to this definition"></a></dt>
<dd><p>Tag card grid component</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Grid component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagCard">
<code class="sig-name descname"><span class="pre">TagCard</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagCard" title="Permalink to this definition"></a></dt>
<dd><p>Tag card component</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>props</strong> (<em>*</em>) Properties</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Card component</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="getTagLink">
<code class="sig-name descname"><span class="pre">getTagLink</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">tagName</span></em><span class="sig-paren">)</span><a class="headerlink" href="#getTagLink" title="Permalink to this definition"></a></dt>
<dd><p>Map tag name to URL</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>tagName</strong> (<em>*</em>) Subject tag name</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Tag URL</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="new-tag-card">
<h2>New Tag Card<a class="headerlink" href="#new-tag-card" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="NewTag">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">NewTag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewTag" title="Permalink to this definition"></a></dt>
<dd><p>New tag card component</p>
<dl class="js function">
<dt id="NewTag.handleInputChange">
<code class="sig-prename descclassname"><span class="pre">NewTag.</span></code><code class="sig-name descname"><span class="pre">handleInputChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewTag.handleInputChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle tag id input box state changes</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="NewTag.handleSubmit">
<code class="sig-prename descclassname"><span class="pre">NewTag.</span></code><code class="sig-name descname"><span class="pre">handleSubmit</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#NewTag.handleSubmit" title="Permalink to this definition"></a></dt>
<dd><p>Validate input, make new tag API request</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="view-edit-tag">
<h2>View/Edit Tag<a class="headerlink" href="#view-edit-tag" title="Permalink to this headline"></a></h2>
<dl class="js class">
<dt id="TagView">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">TagView</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView" title="Permalink to this definition"></a></dt>
<dd><p>Tag View card</p>
<dl class="js function">
<dt id="TagView.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#TagView.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Get tag info from API on load</p>
</dd></dl>
<dl class="js function">
<dt id="TagView.getTag">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">getTag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">error_toast=true</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.getTag" title="Permalink to this definition"></a></dt>
<dd><p>Get tag info from API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>error_toast</strong> (<em>*</em>) Whether to show toast on network error</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#TagView.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get user info from API</p>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleAdd">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleAdd</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleAdd" title="Permalink to this definition"></a></dt>
<dd><p>Validate input, make tag part add request of API</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Nothing</p>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleChangeAddType">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleChangeAddType</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">type</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleChangeAddType" title="Permalink to this definition"></a></dt>
<dd><p>Handle adding type drop down change</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>type</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleCheckChange">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleCheckChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleCheckChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle checkbox state changes, make network updates</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleInputChange">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleInputChange</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleInputChange" title="Permalink to this definition"></a></dt>
<dd><p>Handle input box state changes</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleRemoveObj">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleRemoveObj</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">music_obj</span></em>, <em class="sig-param"><span class="pre">addType</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleRemoveObj" title="Permalink to this definition"></a></dt>
<dd><p>Handle remove watched part</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>music_obj</strong> (<em>*</em>) Subject object to remove</p></li>
<li><p><strong>addType</strong> (<em>*</em>) Object type (tracks/albums/artists)</p></li>
<li><p><strong>event</strong> (<em>*</em>) Event data</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleRun">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleRun</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleRun" title="Permalink to this definition"></a></dt>
<dd><p>Validate input and make tag refresh update of API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.handleView">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">handleView</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">music_obj</span></em>, <em class="sig-param"><span class="pre">addType</span></em>, <em class="sig-param"><span class="pre">event</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.handleView" title="Permalink to this definition"></a></dt>
<dd><p>Open a tag element in Last.fm</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>music_obj</strong> (<em>*</em>) Tag element to be viewed</p></li>
<li><p><strong>addType</strong> (<em>*</em>) Tag type, artist, album etc</p></li>
<li><p><strong>event</strong> (<em>*</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="js function">
<dt id="TagView.makeNetworkUpdate">
<code class="sig-prename descclassname"><span class="pre">TagView.</span></code><code class="sig-name descname"><span class="pre">makeNetworkUpdate</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">changes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#TagView.makeNetworkUpdate" title="Permalink to this definition"></a></dt>
<dd><p>Put tag info changes to API</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>changes</strong> (<em>*</em>) Dictionary of changes to submit</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="reference internal" href="MusicTools.html">Js</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="MusicTools.html">React Frontend</a><ul>
<li>Previous: <a href="MusicTools.Playlist.html" title="previous chapter">Playlist</a></li>
<li>Next: <a href="MusicTools.Maths.html" title="next chapter">Maths</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.Tag.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,193 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>React Frontend &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Playlist" href="MusicTools.Playlist.html" />
<link rel="prev" title="music.tasks" href="music.tasks.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="react-frontend">
<h1>React Frontend<a class="headerlink" href="#react-frontend" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html#router">Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html#cards-list">Cards List</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html#new-playlist-card">New Playlist Card</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html#view-edit-card">View/Edit Card</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html#stats-card">Stats Card</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.Tag.html">Tag</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html#router">Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html#cards-list">Cards List</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html#new-tag-card">New Tag Card</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html#view-edit-tag">View/Edit Tag</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.Maths.html">Maths</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html#bar-chart">Bar Chart</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html#pie-chart">Pie Chart</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.Admin.html">Admin</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html#router">Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html#lock">Lock</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html#functions">Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html#tasks">Tasks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.Settings.html">Settings</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html#router">Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html#change-password">Change Password</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html#spotify-link">Spotify Link</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html#last-fm-username">Last.fm Username</a></li>
</ul>
</li>
</ul>
</div>
<dl class="js class">
<dt id="MusicTools">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">MusicTools</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">props</span></em><span class="sig-paren">)</span><a class="headerlink" href="#MusicTools" title="Permalink to this definition"></a></dt>
<dd><p>Root component for app</p>
<dl class="js function">
<dt id="MusicTools.componentDidMount">
<code class="sig-prename descclassname"><span class="pre">MusicTools.</span></code><code class="sig-name descname"><span class="pre">componentDidMount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#MusicTools.componentDidMount" title="Permalink to this definition"></a></dt>
<dd><p>Get user info from API on load</p>
</dd></dl>
<dl class="js function">
<dt id="MusicTools.componentWillUnmount">
<code class="sig-prename descclassname"><span class="pre">MusicTools.</span></code><code class="sig-name descname"><span class="pre">componentWillUnmount</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#MusicTools.componentWillUnmount" title="Permalink to this definition"></a></dt>
<dd><p>Cancel get user info request</p>
</dd></dl>
<dl class="js function">
<dt id="MusicTools.getUserInfo">
<code class="sig-prename descclassname"><span class="pre">MusicTools.</span></code><code class="sig-name descname"><span class="pre">getUserInfo</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#MusicTools.getUserInfo" title="Permalink to this definition"></a></dt>
<dd><p>Get user info from API</p>
</dd></dl>
<dl class="js function">
<dt id="MusicTools.setOpen">
<code class="sig-prename descclassname"><span class="pre">MusicTools.</span></code><code class="sig-name descname"><span class="pre">setOpen</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="pre">bool</span></em><span class="sig-paren">)</span><a class="headerlink" href="#MusicTools.setOpen" title="Permalink to this definition"></a></dt>
<dd><p>Set whether side app drawer is open</p>
<dl class="field-list simple">
<dt class="field-odd">Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>bool</strong> (<em>*</em>) Open state of side drawer</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1>
<h3>Navigation</h3>
<p class="caption"><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="#">Js</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="music.tasks.html" title="previous chapter">music.tasks</a></li>
<li>Next: <a href="MusicTools.Playlist.html" title="next chapter">Playlist</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Sarsoo.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/src/MusicTools.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,21 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>admin script &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>admin script &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Music Tools Modules" href="modules.html" /> <link rel="next" title="Mixonomer Modules" href="modules.html" />
<link rel="prev" title="Settings" href="MusicTools.Settings.html" /> <link rel="prev" title="music.tasks" href="music.tasks.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" /> <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -32,149 +34,149 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="module-admin"> <section id="module-admin">
<span id="admin-script"></span><h1>admin script<a class="headerlink" href="#module-admin" title="Permalink to this headline"></a></h1> <span id="admin-script"></span><h1>admin script<a class="headerlink" href="#module-admin" title="Permalink to this heading"></a></h1>
<dl class="py class"> <dl class="py class">
<dt id="admin.Admin"> <dt class="sig sig-object py" id="admin.Admin">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">admin.</span></code><code class="sig-name descname"><span class="pre">Admin</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">completekey</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'tab'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stdin</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stdout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">admin.</span></span><span class="sig-name descname"><span class="pre">Admin</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">completekey</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'tab'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stdin</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stdout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">cmd.Cmd</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></p>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.compile_frontend"> <dt class="sig sig-object py" id="admin.Admin.compile_frontend">
<code class="sig-name descname"><span class="pre">compile_frontend</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.compile_frontend" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">compile_frontend</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.compile_frontend" title="Permalink to this definition"></a></dt>
<dd><p>Compile sass to css and run npm build task</p> <dd><p>Compile sass to css and run npm build task</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.copy_main_file"> <dt class="sig sig-object py" id="admin.Admin.copy_main_file">
<code class="sig-name descname"><span class="pre">copy_main_file</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.copy_main_file" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">copy_main_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.copy_main_file" title="Permalink to this definition"></a></dt>
<dd><p>Copy main.{path}.py file corresponding to Python build stage</p> <dd><p>Copy main.{path}.py file corresponding to Python build stage</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.deploy_function"> <dt class="sig sig-object py" id="admin.Admin.deploy_function">
<code class="sig-name descname"><span class="pre">deploy_function</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">60</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'europe-west2'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.deploy_function" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">deploy_function</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">60</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">region</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'europe-west2'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.deploy_function" title="Permalink to this definition"></a></dt>
<dd><p>Deploy function with required environment variables</p> <dd><p>Deploy function with required environment variables</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_app"> <dt class="sig sig-object py" id="admin.Admin.do_app">
<code class="sig-name descname"><span class="pre">do_app</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_app" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_app</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_app" title="Permalink to this definition"></a></dt>
<dd><p>Compile front-end and deploy to App Engine</p> <dd><p>Compile front-end and deploy to App Engine</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_cron_functions"> <dt class="sig sig-object py" id="admin.Admin.do_cron_functions">
<code class="sig-name descname"><span class="pre">do_cron_functions</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_cron_functions" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_cron_functions</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_cron_functions" title="Permalink to this definition"></a></dt>
<dd><p>Deploy background functions including cron job scheduling for update actions (run_all_playlists, run_all_playlist_stats, run_all_tags)</p> <dd><p>Deploy background functions including cron job scheduling for update actions (run_all_playlists, run_all_playlist_stats, run_all_tags)</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_docs"> <dt class="sig sig-object py" id="admin.Admin.do_docs">
<code class="sig-name descname"><span class="pre">do_docs</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_docs" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_docs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_docs" title="Permalink to this definition"></a></dt>
<dd><p>Compile documentation using sphinx</p> <dd><p>Compile documentation using sphinx</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_exit"> <dt class="sig sig-object py" id="admin.Admin.do_exit">
<code class="sig-name descname"><span class="pre">do_exit</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_exit" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_exit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_exit" title="Permalink to this definition"></a></dt>
<dd><p>Exit script</p> <dd><p>Exit script</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_main_group"> <dt class="sig sig-object py" id="admin.Admin.do_main_group">
<code class="sig-name descname"><span class="pre">do_main_group</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_main_group" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_main_group</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_main_group" title="Permalink to this definition"></a></dt>
<dd><p>Compile front-end and deploy to App Engine. Deploy primary functions (run_user_playlist, update_tag)</p> <dd><p>Compile front-end and deploy to App Engine. Deploy primary functions (run_user_playlist, update_tag)</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_playlist"> <dt class="sig sig-object py" id="admin.Admin.do_playlist">
<code class="sig-name descname"><span class="pre">do_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist" title="Permalink to this definition"></a></dt>
<dd><p>Deploy run_user_playlist function</p> <dd><p>Deploy run_user_playlist function</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_playlist_cron"> <dt class="sig sig-object py" id="admin.Admin.do_playlist_cron">
<code class="sig-name descname"><span class="pre">do_playlist_cron</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist_cron" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_playlist_cron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist_cron" title="Permalink to this definition"></a></dt>
<dd><p>Deploy run_all_playlists function</p> <dd><p>Deploy run_all_playlists function</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_playlist_stats_cron"> <dt class="sig sig-object py" id="admin.Admin.do_playlist_stats_cron">
<code class="sig-name descname"><span class="pre">do_playlist_stats_cron</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist_stats_cron" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_playlist_stats_cron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_playlist_stats_cron" title="Permalink to this definition"></a></dt>
<dd><p>Deploy run_all_playlist_stats function</p> <dd><p>Deploy run_all_playlist_stats function</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_prepare_local_stage"> <dt class="sig sig-object py" id="admin.Admin.do_prepare_local_stage">
<code class="sig-name descname"><span class="pre">do_prepare_local_stage</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_prepare_local_stage" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_prepare_local_stage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_prepare_local_stage" title="Permalink to this definition"></a></dt>
<dd><p>Prepare local working directory for deployment using static sarsoolib injections</p> <dd><p>Prepare local working directory for deployment using static sarsoolib injections</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_pydepend"> <dt class="sig sig-object py" id="admin.Admin.do_pydepend">
<code class="sig-name descname"><span class="pre">do_pydepend</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_pydepend" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_pydepend</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_pydepend" title="Permalink to this definition"></a></dt>
<dd><p>Generate and export requirements.txt from Poetry manifest</p> <dd><p>Generate and export requirements.txt from Poetry manifest</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_rename"> <dt class="sig sig-object py" id="admin.Admin.do_rename">
<code class="sig-name descname"><span class="pre">do_rename</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_rename" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_rename</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_rename" title="Permalink to this definition"></a></dt>
<dd><p>Rename playlist in firestore</p> <dd><p>Rename playlist in firestore</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_run"> <dt class="sig sig-object py" id="admin.Admin.do_run">
<code class="sig-name descname"><span class="pre">do_run</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_run" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_run</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_run" title="Permalink to this definition"></a></dt>
<dd><p>Run Flask app</p> <dd><p>Run Flask app</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_sass"> <dt class="sig sig-object py" id="admin.Admin.do_sass">
<code class="sig-name descname"><span class="pre">do_sass</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_sass" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_sass</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_sass" title="Permalink to this definition"></a></dt>
<dd><p>Compile sass to css</p> <dd><p>Compile sass to css</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_set_project"> <dt class="sig sig-object py" id="admin.Admin.do_set_project">
<code class="sig-name descname"><span class="pre">do_set_project</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_set_project" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_set_project</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_set_project" title="Permalink to this definition"></a></dt>
<dd><p>Set project setting in gcloud console</p> <dd><p>Set project setting in gcloud console</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_tag"> <dt class="sig sig-object py" id="admin.Admin.do_tag">
<code class="sig-name descname"><span class="pre">do_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_tag" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_tag" title="Permalink to this definition"></a></dt>
<dd><p>Deploy update_tag function</p> <dd><p>Deploy update_tag function</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_tags_cron"> <dt class="sig sig-object py" id="admin.Admin.do_tags_cron">
<code class="sig-name descname"><span class="pre">do_tags_cron</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_tags_cron" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_tags_cron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_tags_cron" title="Permalink to this definition"></a></dt>
<dd><p>Deploy run_all_tags function</p> <dd><p>Deploy run_all_tags function</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_test"> <dt class="sig sig-object py" id="admin.Admin.do_test">
<code class="sig-name descname"><span class="pre">do_test</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_test" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_test</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_test" title="Permalink to this definition"></a></dt>
<dd><p>Run Python unit tests</p> <dd><p>Run Python unit tests</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.do_watchsass"> <dt class="sig sig-object py" id="admin.Admin.do_watchsass">
<code class="sig-name descname"><span class="pre">do_watchsass</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_watchsass" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">do_watchsass</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.do_watchsass" title="Permalink to this definition"></a></dt>
<dd><p>Run sass compiler with watch argument to begin watching source folder for changes</p> <dd><p>Run sass compiler with watch argument to begin watching source folder for changes</p>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.export_filtered_dependencies"> <dt class="sig sig-object py" id="admin.Admin.export_filtered_dependencies">
<code class="sig-name descname"><span class="pre">export_filtered_dependencies</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.export_filtered_dependencies" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">export_filtered_dependencies</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.export_filtered_dependencies" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="admin.Admin.function_deploy"> <dt class="sig sig-object py" id="admin.Admin.function_deploy">
<code class="sig-name descname"><span class="pre">function_deploy</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">main</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">function_id</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.function_deploy" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">function_deploy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">main</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">function_id</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#admin.Admin.function_deploy" title="Permalink to this definition"></a></dt>
<dd><p>Deploy Cloud Function, copy main file and initiate gcloud command</p> <dd><p>Deploy Cloud Function, copy main file and initiate gcloud command</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>main</strong> (<em>str</em>) main path</p></li> <li><p><strong>main</strong> (<em>str</em>) main path</p></li>
<li><p><strong>function_id</strong> (<em>str</em>) function id to deploy to</p></li> <li><p><strong>function_id</strong> (<em>str</em>) function id to deploy to</p></li>
@ -184,30 +186,30 @@
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="admin.Admin.intro"> <dt class="sig sig-object py" id="admin.Admin.intro">
<code class="sig-name descname"><span class="pre">intro</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'Music</span> <span class="pre">Tools</span> <span class="pre">Admin...</span> <span class="pre">?</span> <span class="pre">for</span> <span class="pre">help'</span></em><a class="headerlink" href="#admin.Admin.intro" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">intro</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'Mixonomer</span> <span class="pre">Admin...</span> <span class="pre">?</span> <span class="pre">for</span> <span class="pre">help'</span></em><a class="headerlink" href="#admin.Admin.intro" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="admin.Admin.locals"> <dt class="sig sig-object py" id="admin.Admin.locals">
<code class="sig-name descname"><span class="pre">locals</span></code><em class="property"> <span class="pre">=</span> <span class="pre">['spotframework',</span> <span class="pre">'fmframework',</span> <span class="pre">'spotfm']</span></em><a class="headerlink" href="#admin.Admin.locals" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">locals</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['spotframework',</span> <span class="pre">'fmframework',</span> <span class="pre">'spotfm']</span></em><a class="headerlink" href="#admin.Admin.locals" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="admin.Admin.prompt"> <dt class="sig sig-object py" id="admin.Admin.prompt">
<code class="sig-name descname"><span class="pre">prompt</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'&gt;</span> <span class="pre">'</span></em><a class="headerlink" href="#admin.Admin.prompt" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">prompt</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'&gt;</span> <span class="pre">'</span></em><a class="headerlink" href="#admin.Admin.prompt" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="admin.docs"> <dt class="sig sig-object py" id="admin.docs">
<code class="sig-prename descclassname"><span class="pre">admin.</span></code><code class="sig-name descname"><span class="pre">docs</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.docs" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">admin.</span></span><span class="sig-name descname"><span class="pre">docs</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.docs" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py data"> <dl class="py data">
<dt id="admin.folders_to_ignore"> <dt class="sig sig-object py" id="admin.folders_to_ignore">
<code class="sig-prename descclassname"><span class="pre">admin.</span></code><code class="sig-name descname"><span class="pre">folders_to_ignore</span></code><em class="property"> <span class="pre">=</span> <span class="pre">['venv',</span> <span class="pre">'docs',</span> <span class="pre">'.git',</span> <span class="pre">'.idea',</span> <span class="pre">'node_modules']</span></em><a class="headerlink" href="#admin.folders_to_ignore" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">admin.</span></span><span class="sig-name descname"><span class="pre">folders_to_ignore</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['venv',</span> <span class="pre">'docs',</span> <span class="pre">'.git',</span> <span class="pre">'.idea',</span> <span class="pre">'node_modules']</span></em><a class="headerlink" href="#admin.folders_to_ignore" title="Permalink to this definition"></a></dt>
<dd><p>COMPONENTS:</p> <dd><p>COMPONENTS:</p>
<ul> <ul>
<li><p>App Engine</p></li> <li><p>App Engine</p></li>
@ -224,16 +226,16 @@ run_all_tags</p>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="admin.run"> <dt class="sig sig-object py" id="admin.run">
<code class="sig-prename descclassname"><span class="pre">admin.</span></code><code class="sig-name descname"><span class="pre">run</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.run" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">admin.</span></span><span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.run" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="admin.test"> <dt class="sig sig-object py" id="admin.test">
<code class="sig-prename descclassname"><span class="pre">admin.</span></code><code class="sig-name descname"><span class="pre">test</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.test" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">admin.</span></span><span class="sig-name descname"><span class="pre">test</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#admin.test" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
</div> </div>
@ -242,7 +244,7 @@ run_all_tags</p>
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -252,10 +254,9 @@ run_all_tags</p>
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</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></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li>
</ul> </ul>
@ -264,8 +265,8 @@ run_all_tags</p>
<h3>Related Topics</h3> <h3>Related Topics</h3>
<ul> <ul>
<li><a href="../index.html">Documentation overview</a><ul> <li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="MusicTools.Settings.html" title="previous chapter">Settings</a></li> <li>Previous: <a href="music.tasks.html" title="previous chapter">music.tasks</a></li>
<li>Next: <a href="modules.html" title="next chapter">Music Tools Modules</a></li> <li>Next: <a href="modules.html" title="next chapter">Mixonomer Modules</a></li>
</ul></li> </ul></li>
</ul> </ul>
</div> </div>
@ -273,12 +274,12 @@ run_all_tags</p>
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -295,7 +296,7 @@ run_all_tags</p>
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>Music Tools Modules &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>Mixonomer Modules &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -31,8 +33,8 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-tools-modules"> <section id="mixonomer-modules">
<h1>Music Tools Modules<a class="headerlink" href="#music-tools-modules" title="Permalink to this headline"></a></h1> <h1>Mixonomer Modules<a class="headerlink" href="#mixonomer-modules" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="music.html">Flask Backend</a><ul> <li class="toctree-l1"><a class="reference internal" href="music.html">Flask Backend</a><ul>
@ -84,46 +86,9 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">React Frontend</a><ul>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Playlist.html">Playlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Playlist.html#router">Router</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Playlist.html#cards-list">Cards List</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Playlist.html#new-playlist-card">New Playlist Card</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Playlist.html#view-edit-card">View/Edit Card</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Playlist.html#stats-card">Stats Card</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Tag.html">Tag</a><ul>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Tag.html#router">Router</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Tag.html#cards-list">Cards List</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Tag.html#new-tag-card">New Tag Card</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Tag.html#view-edit-tag">View/Edit Tag</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Maths.html">Maths</a><ul>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Maths.html#bar-chart">Bar Chart</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Maths.html#pie-chart">Pie Chart</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Admin.html">Admin</a><ul>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Admin.html#router">Router</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Admin.html#lock">Lock</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Admin.html#functions">Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Admin.html#tasks">Tasks</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.Settings.html">Settings</a><ul>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Settings.html#router">Router</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Settings.html#change-password">Change Password</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Settings.html#spotify-link">Spotify Link</a></li>
<li class="toctree-l3"><a class="reference internal" href="MusicTools.Settings.html#last-fm-username">Last.fm Username</a></li>
</ul>
</li>
</ul>
</li>
</ul> </ul>
</div> </div>
</div> </section>
</div> </div>
@ -132,7 +97,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -142,14 +107,12 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="music.html">Py</a></li> <li class="toctree-l1"><a class="reference internal" href="music.html">Py</a></li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">All Modules</a><ul> <li class="toctree-l1 current"><a class="current reference internal" href="#">All Modules</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.html">Flask Backend</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html">Flask Backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="MusicTools.html">React Frontend</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -166,12 +129,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -188,7 +151,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.api &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.api &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -32,284 +34,314 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-api"> <section id="music-api">
<h1>music.api<a class="headerlink" href="#music-api" title="Permalink to this headline"></a></h1> <h1>music.api<a class="headerlink" href="#music-api" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.api"> <section id="module-music.api">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.api" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.api" title="Permalink to this heading"></a></h2>
<p>Flask blueprints for loading the app endpoints</p> <p>Flask blueprints for loading the app endpoints</p>
</div> </section>
<div class="section" id="module-music.api.admin"> <section id="module-music.api.admin">
<span id="api-admin"></span><h2>api.admin<a class="headerlink" href="#module-music.api.admin" title="Permalink to this headline"></a></h2> <span id="api-admin"></span><h2>api.admin<a class="headerlink" href="#module-music.api.admin" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.api.admin.get_tasks"> <dt class="sig sig-object py" id="music.api.admin.get_tasks">
<code class="sig-prename descclassname"><span class="pre">music.api.admin.</span></code><code class="sig-name descname"><span class="pre">get_tasks</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.admin.get_tasks" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.admin.</span></span><span class="sig-name descname"><span class="pre">get_tasks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.admin.get_tasks" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
<div class="section" id="module-music.api.api"> <section id="module-music.api.api">
<span id="api-api"></span><h2>api.api<a class="headerlink" href="#module-music.api.api" title="Permalink to this headline"></a></h2> <span id="api-api"></span><h2>api.api<a class="headerlink" href="#module-music.api.api" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.all_playlists_route"> <dt class="sig sig-object py" id="music.api.api.all_playlists_route">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">all_playlists_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.all_playlists_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">all_playlists_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.all_playlists_route" title="Permalink to this definition"></a></dt>
<dd><p>Retrieve all playlists for a given user</p> <dd><p>Retrieve all playlists for a given user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>user</strong> (<em>[</em><em>type</em><em>]</em><em>, </em><em>optional</em>) [description]. Defaults to None.</p> <dd class="field-odd"><p><strong>user</strong> (<em>[</em><em>type</em><em>]</em><em>, </em><em>optional</em>) [description]. Defaults to None.</p>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>All playlists for given user</p> <dd class="field-even"><p>All playlists for given user</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>HTTP Response</p> <dd class="field-odd"><p>HTTP Response</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.all_users_route"> <dt class="sig sig-object py" id="music.api.api.all_users_route">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">all_users_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.all_users_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">all_users_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.all_users_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.change_password"> <dt class="sig sig-object py" id="music.api.api.change_password">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">change_password</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.change_password" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">change_password</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.change_password" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.image"> <dt class="sig sig-object py" id="music.api.api.image">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">image</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.image" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">image</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.image" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.playlist_get_delete_route"> <dt class="sig sig-object py" id="music.api.api.playlist_get_delete_route">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">playlist_get_delete_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.playlist_get_delete_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">playlist_get_delete_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.playlist_get_delete_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.playlist_post_put_route"> <dt class="sig sig-object py" id="music.api.api.playlist_post_put_route">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">playlist_post_put_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.playlist_post_put_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">playlist_post_put_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.playlist_post_put_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.run_playlist"> <dt class="sig sig-object py" id="music.api.api.run_playlist">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">run_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_playlist" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">run_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_playlist" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.run_playlist_task"> <dt class="sig sig-object py" id="music.api.api.run_playlist_task">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">run_playlist_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_playlist_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">run_playlist_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_playlist_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.run_user"> <dt class="sig sig-object py" id="music.api.api.run_user">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">run_user</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_user" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">run_user</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_user" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.run_user_task"> <dt class="sig sig-object py" id="music.api.api.run_user_task">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">run_user_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_user_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">run_user_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_user_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.run_users"> <dt class="sig sig-object py" id="music.api.api.run_users">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">run_users</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_users" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">run_users</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.run_users" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.api.user_route"> <dt class="sig sig-object py" id="music.api.api.user_delete_route">
<code class="sig-prename descclassname"><span class="pre">music.api.api.</span></code><code class="sig-name descname"><span class="pre">user_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.user_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">user_delete_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.user_delete_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.decorators">
<span id="api-decorators"></span><h2>api.decorators<a class="headerlink" href="#module-music.api.decorators" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.decorators.admin_required">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">admin_required</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.admin_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.check_dict"> <dt class="sig sig-object py" id="music.api.api.user_route">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">check_dict</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request_params</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.check_dict" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.api.</span></span><span class="sig-name descname"><span class="pre">user_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.api.user_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.decorators">
<span id="api-decorators"></span><h2>api.decorators<a class="headerlink" href="#module-music.api.decorators" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.decorators.admin_required">
<span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">admin_required</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.admin_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.cloud_task"> <dt class="sig sig-object py" id="music.api.decorators.check_dict">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">cloud_task</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.cloud_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">check_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request_params</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">expected_args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.check_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.gae_cron"> <dt class="sig sig-object py" id="music.api.decorators.cloud_task">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">gae_cron</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.gae_cron" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">cloud_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.cloud_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.is_basic_authed"> <dt class="sig sig-object py" id="music.api.decorators.gae_cron">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">is_basic_authed</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.is_basic_authed" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">gae_cron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.gae_cron" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.is_logged_in"> <dt class="sig sig-object py" id="music.api.decorators.is_basic_authed">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">is_logged_in</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.is_logged_in" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">is_basic_authed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.is_basic_authed" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.lastfm_username_required"> <dt class="sig sig-object py" id="music.api.decorators.is_jwt_authed">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">lastfm_username_required</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.lastfm_username_required" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">is_jwt_authed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.is_jwt_authed" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.login_or_basic_auth"> <dt class="sig sig-object py" id="music.api.decorators.is_logged_in">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">login_or_basic_auth</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.login_or_basic_auth" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">is_logged_in</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.is_logged_in" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.login_required"> <dt class="sig sig-object py" id="music.api.decorators.jwt_required">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">login_required</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.login_required" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">jwt_required</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.jwt_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.spotify_link_required"> <dt class="sig sig-object py" id="music.api.decorators.lastfm_username_required">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">spotify_link_required</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.spotify_link_required" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">lastfm_username_required</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.lastfm_username_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.validate_args"> <dt class="sig sig-object py" id="music.api.decorators.login_or_basic_auth">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">validate_args</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">expected_args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.validate_args" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">login_or_basic_auth</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.login_or_basic_auth" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.decorators.validate_json"> <dt class="sig sig-object py" id="music.api.decorators.login_or_jwt">
<code class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></code><code class="sig-name descname"><span class="pre">validate_json</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">expected_args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.validate_json" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">login_or_jwt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.login_or_jwt" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.fm">
<span id="api-fm"></span><h2>api.fm<a class="headerlink" href="#module-music.api.fm" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.fm.daily_scrobbles">
<code class="sig-prename descclassname"><span class="pre">music.api.fm.</span></code><code class="sig-name descname"><span class="pre">daily_scrobbles</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.fm.daily_scrobbles" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.player">
<span id="api-player"></span><h2>api.player<a class="headerlink" href="#module-music.api.player" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.player.next_track">
<code class="sig-prename descclassname"><span class="pre">music.api.player.</span></code><code class="sig-name descname"><span class="pre">next_track</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.next_track" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.player.play"> <dt class="sig sig-object py" id="music.api.decorators.login_required">
<code class="sig-prename descclassname"><span class="pre">music.api.player.</span></code><code class="sig-name descname"><span class="pre">play</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.play" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">login_required</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.login_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.player.shuffle"> <dt class="sig sig-object py" id="music.api.decorators.no_cache">
<code class="sig-prename descclassname"><span class="pre">music.api.player.</span></code><code class="sig-name descname"><span class="pre">shuffle</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.shuffle" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">no_cache</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.no_cache" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.player.volume"> <dt class="sig sig-object py" id="music.api.decorators.no_locked_users">
<code class="sig-prename descclassname"><span class="pre">music.api.player.</span></code><code class="sig-name descname"><span class="pre">volume</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.volume" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">no_locked_users</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.no_locked_users" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.spotfm">
<span id="api-spotfm"></span><h2>api.spotfm<a class="headerlink" href="#module-music.api.spotfm" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.spotfm.count">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">count</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.playlist_refresh"> <dt class="sig sig-object py" id="music.api.decorators.spotify_link_required">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">playlist_refresh</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.playlist_refresh" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">spotify_link_required</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.spotify_link_required" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_playlist_album_task"> <dt class="sig sig-object py" id="music.api.decorators.validate_args">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_playlist_album_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_album_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">validate_args</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">expected_args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.validate_args" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_playlist_artist_task"> <dt class="sig sig-object py" id="music.api.decorators.validate_json">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_playlist_artist_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_artist_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.decorators.</span></span><span class="sig-name descname"><span class="pre">validate_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">expected_args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.decorators.validate_json" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.fm">
<span id="api-fm"></span><h2>api.fm<a class="headerlink" href="#module-music.api.fm" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.fm.daily_scrobbles">
<span class="sig-prename descclassname"><span class="pre">music.api.fm.</span></span><span class="sig-name descname"><span class="pre">daily_scrobbles</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.fm.daily_scrobbles" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.player">
<span id="api-player"></span><h2>api.player<a class="headerlink" href="#module-music.api.player" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.player.next_track">
<span class="sig-prename descclassname"><span class="pre">music.api.player.</span></span><span class="sig-name descname"><span class="pre">next_track</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.next_track" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_playlist_track_task"> <dt class="sig sig-object py" id="music.api.player.play">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_playlist_track_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_track_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.player.</span></span><span class="sig-name descname"><span class="pre">play</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.play" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_user"> <dt class="sig sig-object py" id="music.api.player.shuffle">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_user</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_user" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.player.</span></span><span class="sig-name descname"><span class="pre">shuffle</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.shuffle" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_user_task"> <dt class="sig sig-object py" id="music.api.player.volume">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_user_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_user_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.player.</span></span><span class="sig-name descname"><span class="pre">volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.player.volume" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.spotfm">
<span id="api-spotfm"></span><h2>api.spotfm<a class="headerlink" href="#module-music.api.spotfm" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.spotfm.count">
<span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">count</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.spotfm.run_users"> <dt class="sig sig-object py" id="music.api.spotfm.playlist_refresh">
<code class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></code><code class="sig-name descname"><span class="pre">run_users</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_users" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">playlist_refresh</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.playlist_refresh" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.spotify">
<span id="api-spotify"></span><h2>api.spotify<a class="headerlink" href="#module-music.api.spotify" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.spotify.sort">
<code class="sig-prename descclassname"><span class="pre">music.api.spotify.</span></code><code class="sig-name descname"><span class="pre">sort</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotify.sort" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-music.api.tag">
<span id="api-tag"></span><h2>api.tag<a class="headerlink" href="#module-music.api.tag" title="Permalink to this headline"></a></h2>
<dl class="py function">
<dt id="music.api.tag.delete_tag">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">delete_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.delete_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.get_tag"> <dt class="sig sig-object py" id="music.api.spotfm.run_playlist_album_task">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">get_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.get_tag" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_playlist_album_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_album_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.post_tag"> <dt class="sig sig-object py" id="music.api.spotfm.run_playlist_artist_task">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">post_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.post_tag" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_playlist_artist_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_artist_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.put_tag"> <dt class="sig sig-object py" id="music.api.spotfm.run_playlist_track_task">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">put_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.put_tag" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_playlist_track_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_playlist_track_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.run_tag_task"> <dt class="sig sig-object py" id="music.api.spotfm.run_user">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">run_tag_task</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.run_tag_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_user</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_user" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.tag_refresh"> <dt class="sig sig-object py" id="music.api.spotfm.run_user_task">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">tag_refresh</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tag_refresh" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_user_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_user_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.tag_route"> <dt class="sig sig-object py" id="music.api.spotfm.run_users">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">tag_route</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tag_route" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.spotfm.</span></span><span class="sig-name descname"><span class="pre">run_users</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotfm.run_users" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.spotify">
<span id="api-spotify"></span><h2>api.spotify<a class="headerlink" href="#module-music.api.spotify" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.spotify.sort">
<span class="sig-prename descclassname"><span class="pre">music.api.spotify.</span></span><span class="sig-name descname"><span class="pre">sort</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.spotify.sort" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-music.api.tag">
<span id="api-tag"></span><h2>api.tag<a class="headerlink" href="#module-music.api.tag" title="Permalink to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.delete_tag">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">delete_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.delete_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.api.tag.tags"> <dt class="sig sig-object py" id="music.api.tag.get_tag">
<code class="sig-prename descclassname"><span class="pre">music.api.tag.</span></code><code class="sig-name descname"><span class="pre">tags</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tags" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">get_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.get_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> <dl class="py function">
</div> <dt class="sig sig-object py" id="music.api.tag.post_tag">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">post_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.post_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.put_tag">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">put_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.put_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.run_tag_task">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">run_tag_task</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.run_tag_task" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.tag_refresh">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">tag_refresh</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tag_refresh" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.tag_route">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">tag_route</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tag_route" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.api.tag.tags">
<span class="sig-prename descclassname"><span class="pre">music.api.tag.</span></span><span class="sig-name descname"><span class="pre">tags</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">auth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.api.tag.tags" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</section>
</section>
</div> </div>
@ -318,7 +350,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -328,7 +360,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">music.api</a></li> <li class="toctree-l2 current"><a class="current reference internal" href="#">music.api</a></li>
@ -340,9 +372,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -360,12 +394,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -382,7 +416,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.auth &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.auth &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -32,55 +34,69 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-auth"> <section id="music-auth">
<h1>music.auth<a class="headerlink" href="#music-auth" title="Permalink to this headline"></a></h1> <h1>music.auth<a class="headerlink" href="#music-auth" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.auth"> <section id="module-music.auth">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.auth" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.auth" title="Permalink to this heading"></a></h2>
<p>Security related endpoints including login/logout and reset password</p> <p>Security related endpoints including login/logout and reset password</p>
</div> </section>
<div class="section" id="module-music.auth.auth"> <section id="module-music.auth.auth">
<span id="auth-auth"></span><h2>auth.auth<a class="headerlink" href="#module-music.auth.auth" title="Permalink to this headline"></a></h2> <span id="auth-auth"></span><h2>auth.auth<a class="headerlink" href="#module-music.auth.auth" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.auth"> <dt class="sig sig-object py" id="music.auth.auth.auth">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">auth</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.auth" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">auth</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.auth" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.deauth"> <dt class="sig sig-object py" id="music.auth.auth.deauth">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">deauth</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.deauth" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">deauth</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.deauth" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.login"> <dt class="sig sig-object py" id="music.auth.auth.jwt_token">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">login</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.login" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">jwt_token</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.jwt_token" title="Permalink to this definition"></a></dt>
<dd><p>Login route allowing retrieval of HTML page and submission of results</p> <dd><p>Generate JWT</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>Home page redirect for GET, login request on POST</p> <dd class="field-odd"><p>token request on POST</p>
</dd> </dd>
<dt class="field-even">Return type</dt> <dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>HTTP Response</p> <dd class="field-even"><p>HTTP Response</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.logout"> <dt class="sig sig-object py" id="music.auth.auth.login">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">logout</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.logout" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">login</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.login" title="Permalink to this definition"></a></dt>
<dd><p>Login route allowing retrieval of HTML page and submission of results</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>Home page redirect for GET, login request on POST</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>HTTP Response</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="music.auth.auth.logout">
<span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">logout</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.logout" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.register"> <dt class="sig sig-object py" id="music.auth.auth.register">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">register</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.register" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">register</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.register" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.auth.auth.token"> <dt class="sig sig-object py" id="music.auth.auth.token">
<code class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></code><code class="sig-name descname"><span class="pre">token</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.token" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.auth.auth.</span></span><span class="sig-name descname"><span class="pre">token</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.auth.auth.token" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -89,7 +105,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -99,7 +115,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -111,9 +127,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -131,12 +149,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -153,7 +171,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.cloud &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.cloud &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -32,30 +34,30 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-cloud"> <section id="music-cloud">
<h1>music.cloud<a class="headerlink" href="#music-cloud" title="Permalink to this headline"></a></h1> <h1>music.cloud<a class="headerlink" href="#music-cloud" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.cloud"> <section id="module-music.cloud">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.cloud" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.cloud" title="Permalink to this heading"></a></h2>
<p>Infrastucture code include handing off tasks to Cloud Tasks or Cloud Functions</p> <p>Infrastucture code include handing off tasks to Cloud Tasks or Cloud Functions</p>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.offload_or_run_user_playlist"> <dt class="sig sig-object py" id="music.cloud.offload_or_run_user_playlist">
<code class="sig-prename descclassname"><span class="pre">music.cloud.</span></code><code class="sig-name descname"><span class="pre">offload_or_run_user_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.offload_or_run_user_playlist" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.</span></span><span class="sig-name descname"><span class="pre">offload_or_run_user_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.offload_or_run_user_playlist" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.queue_run_user_playlist"> <dt class="sig sig-object py" id="music.cloud.queue_run_user_playlist">
<code class="sig-prename descclassname"><span class="pre">music.cloud.</span></code><code class="sig-name descname"><span class="pre">queue_run_user_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.queue_run_user_playlist" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.</span></span><span class="sig-name descname"><span class="pre">queue_run_user_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.queue_run_user_playlist" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
<div class="section" id="module-music.cloud.function"> <section id="module-music.cloud.function">
<span id="cloud-function"></span><h2>cloud.function<a class="headerlink" href="#module-music.cloud.function" title="Permalink to this headline"></a></h2> <span id="cloud-function"></span><h2>cloud.function<a class="headerlink" href="#module-music.cloud.function" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.function.run_user_playlist_function"> <dt class="sig sig-object py" id="music.cloud.function.run_user_playlist_function">
<code class="sig-prename descclassname"><span class="pre">music.cloud.function.</span></code><code class="sig-name descname"><span class="pre">run_user_playlist_function</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">None</span><a class="headerlink" href="#music.cloud.function.run_user_playlist_function" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.function.</span></span><span class="sig-name descname"><span class="pre">run_user_playlist_function</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#music.cloud.function.run_user_playlist_function" title="Permalink to this definition"></a></dt>
<dd><p>Queue serverless playlist update for user</p> <dd><p>Queue serverless playlist update for user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) Subject username</p></li> <li><p><strong>username</strong> (<em>str</em>) Subject username</p></li>
<li><p><strong>playlist_name</strong> (<em>str</em>) Subject tag ID</p></li> <li><p><strong>playlist_name</strong> (<em>str</em>) Subject tag ID</p></li>
@ -65,11 +67,11 @@
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.function.update_tag"> <dt class="sig sig-object py" id="music.cloud.function.update_tag">
<code class="sig-prename descclassname"><span class="pre">music.cloud.function.</span></code><code class="sig-name descname"><span class="pre">update_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">None</span><a class="headerlink" href="#music.cloud.function.update_tag" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.function.</span></span><span class="sig-name descname"><span class="pre">update_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#music.cloud.function.update_tag" title="Permalink to this definition"></a></dt>
<dd><p>Queue serverless tag update for user</p> <dd><p>Queue serverless tag update for user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) Subject username</p></li> <li><p><strong>username</strong> (<em>str</em>) Subject username</p></li>
<li><p><strong>tag_id</strong> (<em>str</em>) Subject tag ID</p></li> <li><p><strong>tag_id</strong> (<em>str</em>) Subject tag ID</p></li>
@ -78,22 +80,22 @@
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.cloud.tasks"> <section id="module-music.cloud.tasks">
<span id="cloud-tasks"></span><h2>cloud.tasks<a class="headerlink" href="#module-music.cloud.tasks" title="Permalink to this headline"></a></h2> <span id="cloud-tasks"></span><h2>cloud.tasks<a class="headerlink" href="#module-music.cloud.tasks" title="Permalink to this heading"></a></h2>
<p>Functions for creating GCP Cloud Tasks for long running operatings</p> <p>Functions for creating GCP Cloud Tasks for long running operatings</p>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.refresh_all_user_playlist_stats"> <dt class="sig sig-object py" id="music.cloud.tasks.refresh_all_user_playlist_stats">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">refresh_all_user_playlist_stats</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_all_user_playlist_stats" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">refresh_all_user_playlist_stats</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_all_user_playlist_stats" title="Permalink to this definition"></a></dt>
<dd><p>“Create user playlist stats refresh task for all users</p> <dd><p>“Create user playlist stats refresh task for all users</p>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.refresh_playlist_task"> <dt class="sig sig-object py" id="music.cloud.tasks.refresh_playlist_task">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">refresh_playlist_task</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_playlist_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">refresh_playlist_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_playlist_task" title="Permalink to this definition"></a></dt>
<dd><p>Create user playlist stats refresh tasks</p> <dd><p>Create user playlist stats refresh tasks</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li> <li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li>
<li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li> <li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li>
@ -104,22 +106,22 @@
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.refresh_user_playlist_stats"> <dt class="sig sig-object py" id="music.cloud.tasks.refresh_user_playlist_stats">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">refresh_user_playlist_stats</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_user_playlist_stats" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">refresh_user_playlist_stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_user_playlist_stats" title="Permalink to this definition"></a></dt>
<dd><p>Refresh all playlist stats for given user, environment dependent</p> <dd><p>Refresh all playlist stats for given user, environment dependent</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>username</strong> (<em>str</em>) Subject users username</p> <dd class="field-odd"><p><strong>username</strong> (<em>str</em>) Subject users username</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.refresh_user_stats_task"> <dt class="sig sig-object py" id="music.cloud.tasks.refresh_user_stats_task">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">refresh_user_stats_task</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_user_stats_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">refresh_user_stats_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.refresh_user_stats_task" title="Permalink to this definition"></a></dt>
<dd><p>Create user playlist stats refresh task</p> <dd><p>Create user playlist stats refresh task</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li> <li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li>
<li><p><strong>delay</strong> (<em>int</em><em>, </em><em>optional</em>) Seconds to delay execution by. Defaults to 0.</p></li> <li><p><strong>delay</strong> (<em>int</em><em>, </em><em>optional</em>) Seconds to delay execution by. Defaults to 0.</p></li>
@ -129,11 +131,11 @@
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.run_user_playlist_task"> <dt class="sig sig-object py" id="music.cloud.tasks.run_user_playlist_task">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">run_user_playlist_task</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.run_user_playlist_task" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">run_user_playlist_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delay</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.run_user_playlist_task" title="Permalink to this definition"></a></dt>
<dd><p>Create tasks for a users given playlist</p> <dd><p>Create tasks for a users given playlist</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li> <li><p><strong>username</strong> (<em>str</em>) Subject users username</p></li>
<li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li> <li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li>
@ -144,30 +146,30 @@
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.update_all_user_playlists"> <dt class="sig sig-object py" id="music.cloud.tasks.update_all_user_playlists">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">update_all_user_playlists</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_all_user_playlists" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">update_all_user_playlists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_all_user_playlists" title="Permalink to this definition"></a></dt>
<dd><p>Create user playlist refresh task for all users</p> <dd><p>Create user playlist refresh task for all users</p>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.update_all_user_tags"> <dt class="sig sig-object py" id="music.cloud.tasks.update_all_user_tags">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">update_all_user_tags</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_all_user_tags" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">update_all_user_tags</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_all_user_tags" title="Permalink to this definition"></a></dt>
<dd><p>Create user tag refresh task for all users</p> <dd><p>Create user tag refresh task for all users</p>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.cloud.tasks.update_playlists"> <dt class="sig sig-object py" id="music.cloud.tasks.update_playlists">
<code class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></code><code class="sig-name descname"><span class="pre">update_playlists</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_playlists" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.cloud.tasks.</span></span><span class="sig-name descname"><span class="pre">update_playlists</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.cloud.tasks.update_playlists" title="Permalink to this definition"></a></dt>
<dd><p>Refresh all playlists for given user, environment dependent</p> <dd><p>Refresh all playlists for given user, environment dependent</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>username</strong> (<em>str</em>) Subject users username</p> <dd class="field-odd"><p><strong>username</strong> (<em>str</em>) Subject users username</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -176,7 +178,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -186,7 +188,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -198,9 +200,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -218,12 +222,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -240,7 +244,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.db &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.db &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -32,129 +34,129 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-db"> <section id="music-db">
<h1>music.db<a class="headerlink" href="#music-db" title="Permalink to this headline"></a></h1> <h1>music.db<a class="headerlink" href="#music-db" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.db"> <section id="module-music.db">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.db" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.db" title="Permalink to this heading"></a></h2>
<p>Database interfacing components aside from the music.model ORM layer</p> <p>Database interfacing components aside from the music.model ORM layer</p>
</div> </section>
<div class="section" id="module-music.db.database"> <section id="module-music.db.database">
<span id="db-database"></span><h2>db.database<a class="headerlink" href="#module-music.db.database" title="Permalink to this headline"></a></h2> <span id="db-database"></span><h2>db.database<a class="headerlink" href="#module-music.db.database" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.db.database.DatabaseUser"> <dt class="sig sig-object py" id="music.db.database.DatabaseUser">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.db.database.</span></code><code class="sig-name descname"><span class="pre">DatabaseUser</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_secret</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">access_token</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refresh_token</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.database.DatabaseUser" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.db.database.</span></span><span class="sig-name descname"><span class="pre">DatabaseUser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_secret</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">access_token</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refresh_token</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.database.DatabaseUser" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">spotframework.net.user.NetworkUser</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">NetworkUser</span></code></p>
<p>Adding Music Tools username to spotframework network user</p> <p>Adding Mixonomer username to spotframework network user</p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.db.database.DatabaseUser.user_id"> <dt class="sig sig-object py" id="music.db.database.DatabaseUser.user_id">
<code class="sig-name descname"><span class="pre">user_id</span></code><em class="property"><span class="pre">:</span> <span class="pre">str</span></em><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.db.database.DatabaseUser.user_id" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">user_id</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.db.database.DatabaseUser.user_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.db.database.get_authed_lastfm_network"> <dt class="sig sig-object py" id="music.db.database.get_authed_lastfm_network">
<code class="sig-prename descclassname"><span class="pre">music.db.database.</span></code><code class="sig-name descname"><span class="pre">get_authed_lastfm_network</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">fmframework.net.network.Network</span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#music.db.database.get_authed_lastfm_network" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.db.database.</span></span><span class="sig-name descname"><span class="pre">get_authed_lastfm_network</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Network</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#music.db.database.get_authed_lastfm_network" title="Permalink to this definition"></a></dt>
<dd><p>Get an authenticated fmframework network for a given user</p> <dd><p>Get an authenticated fmframework network for a given user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user to retrieve a network for</p> <dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user to retrieve a network for</p>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Authenticated fmframework network</p> <dd class="field-even"><p>Authenticated fmframework network</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Optional[FmNetwork]</p> <dd class="field-odd"><p>Optional[FmNetwork]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.db.database.get_authed_spotify_network"> <dt class="sig sig-object py" id="music.db.database.get_authed_spotify_network">
<code class="sig-prename descclassname"><span class="pre">music.db.database.</span></code><code class="sig-name descname"><span class="pre">get_authed_spotify_network</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">spotframework.net.network.Network</span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#music.db.database.get_authed_spotify_network" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.db.database.</span></span><span class="sig-name descname"><span class="pre">get_authed_spotify_network</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Network</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#music.db.database.get_authed_spotify_network" title="Permalink to this definition"></a></dt>
<dd><p>Get an authenticated spotframework network for a given user</p> <dd><p>Get an authenticated spotframework network for a given user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user to retrieve a network for</p> <dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user to retrieve a network for</p>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Authenticated spotframework network</p> <dd class="field-even"><p>Authenticated spotframework network</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Optional[SpotifyNetwork]</p> <dd class="field-odd"><p>Optional[SpotifyNetwork]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.db.database.refresh_token_database_callback"> <dt class="sig sig-object py" id="music.db.database.refresh_token_database_callback">
<code class="sig-prename descclassname"><span class="pre">music.db.database.</span></code><code class="sig-name descname"><span class="pre">refresh_token_database_callback</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">None</span><a class="headerlink" href="#music.db.database.refresh_token_database_callback" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.db.database.</span></span><span class="sig-name descname"><span class="pre">refresh_token_database_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#music.db.database.refresh_token_database_callback" title="Permalink to this definition"></a></dt>
<dd><p>Callback for handling when a spotframework network updates user credemtials</p> <dd><p>Callback for handling when a spotframework network updates user credemtials</p>
<p>Used to store newly authenticated credentials</p> <p>Used to store newly authenticated credentials</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p> <dd class="field-odd"><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.db.part_generator"> <section id="module-music.db.part_generator">
<span id="db-part-generator"></span><h2>db.part_generator<a class="headerlink" href="#module-music.db.part_generator" title="Permalink to this headline"></a></h2> <span id="db-part-generator"></span><h2>db.part_generator<a class="headerlink" href="#module-music.db.part_generator" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.db.part_generator.PartGenerator"> <dt class="sig sig-object py" id="music.db.part_generator.PartGenerator">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.db.part_generator.</span></code><code class="sig-name descname"><span class="pre">PartGenerator</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.db.part_generator.</span></span><span class="sig-name descname"><span class="pre">PartGenerator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Resolve a playlists components from other referenced smart playlists</p> <p>Resolve a playlists components from other referenced smart playlists</p>
<dl class="py method"> <dl class="py method">
<dt id="music.db.part_generator.PartGenerator.get_recursive_parts"> <dt class="sig sig-object py" id="music.db.part_generator.PartGenerator.get_recursive_parts">
<code class="sig-name descname"><span class="pre">get_recursive_parts</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#music.db.part_generator.PartGenerator.get_recursive_parts" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">get_recursive_parts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#music.db.part_generator.PartGenerator.get_recursive_parts" title="Permalink to this definition"></a></dt>
<dd><p>Resolve and return a playlists component Spotify playlist names</p> <dd><p>Resolve and return a playlists component Spotify playlist names</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>) Subject smart playlist name</p> <dd class="field-odd"><p><strong>name</strong> (<em>str</em>) Subject smart playlist name</p>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Resolved list of component playlists</p> <dd class="field-even"><p>Resolved list of component playlists</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>List[str]</p> <dd class="field-odd"><p>List[str]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.db.part_generator.PartGenerator.process_reference_by_name"> <dt class="sig sig-object py" id="music.db.part_generator.PartGenerator.process_reference_by_name">
<code class="sig-name descname"><span class="pre">process_reference_by_name</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">None</span><a class="headerlink" href="#music.db.part_generator.PartGenerator.process_reference_by_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">process_reference_by_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#music.db.part_generator.PartGenerator.process_reference_by_name" title="Permalink to this definition"></a></dt>
<dd><p>Resolve a smart playlist by name, recurses into process_reference_by_reference</p> <dd><p>Resolve a smart playlist by name, recurses into process_reference_by_reference</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>) Subject playlist name</p> <dd class="field-odd"><p><strong>name</strong> (<em>str</em>) Subject playlist name</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.db.part_generator.PartGenerator.process_reference_by_reference"> <dt class="sig sig-object py" id="music.db.part_generator.PartGenerator.process_reference_by_reference">
<code class="sig-name descname"><span class="pre">process_reference_by_reference</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ref</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">google.cloud.firestore_v1.document.DocumentReference</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator.process_reference_by_reference" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">process_reference_by_reference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ref</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DocumentReference</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator.process_reference_by_reference" title="Permalink to this definition"></a></dt>
<dd><p>Recursive resolution function for walking a playlists dependencies by DocumentReference</p> <dd><p>Recursive resolution function for walking a playlists dependencies by DocumentReference</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>ref</strong> (<em>DocumentReference</em>) Subject Firestore document for resolving</p> <dd class="field-odd"><p><strong>ref</strong> (<em>DocumentReference</em>) Subject Firestore document for resolving</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.db.part_generator.PartGenerator.reset"> <dt class="sig sig-object py" id="music.db.part_generator.PartGenerator.reset">
<code class="sig-name descname"><span class="pre">reset</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator.reset" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">reset</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.db.part_generator.PartGenerator.reset" title="Permalink to this definition"></a></dt>
<dd><p>Reset internal state for resolved playlists</p> <dd><p>Reset internal state for resolved playlists</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -163,7 +165,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -173,7 +175,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -185,9 +187,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -205,12 +209,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -227,7 +231,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,21 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>Flask Backend &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>Flask Backend &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
<link rel="next" title="music.api" href="music.api.html" /> <link rel="next" title="music.api" href="music.api.html" />
<link rel="prev" title="Music Tools" href="../index.html" /> <link rel="prev" title="Mixonomer" href="../index.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" /> <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -32,8 +34,8 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="flask-backend"> <section id="flask-backend">
<h1>Flask Backend<a class="headerlink" href="#flask-backend" title="Permalink to this headline"></a></h1> <h1>Flask Backend<a class="headerlink" href="#flask-backend" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="music.api.html">music.api</a><ul> <li class="toctree-l1"><a class="reference internal" href="music.api.html">music.api</a><ul>
@ -83,31 +85,31 @@
</li> </li>
</ul> </ul>
</div> </div>
<div class="section" id="module-music"> <section id="module-music">
<span id="music-root-module"></span><h2>music Root Module<a class="headerlink" href="#module-music" title="Permalink to this headline"></a></h2> <span id="music-root-module"></span><h2>music Root Module<a class="headerlink" href="#module-music" title="Permalink to this heading"></a></h2>
<p>Root module containing Music Tools backend</p> <p>Root module containing Mixonomer backend</p>
<p>Top level module with functions for creating app with loaded blueprints and initialising the logging stack</p> <p>Top level module with functions for creating app with loaded blueprints and initialising the logging stack</p>
<dl class="py function"> <dl class="py function">
<dt id="music.init_log"> <dt class="sig sig-object py" id="music.init_log">
<code class="sig-prename descclassname"><span class="pre">music.</span></code><code class="sig-name descname"><span class="pre">init_log</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cloud</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">console</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.init_log" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.</span></span><span class="sig-name descname"><span class="pre">init_log</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cloud</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">console</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.init_log" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<span class="target" id="module-music.music"></span><dl class="py function"> <span class="target" id="module-music.music"></span><dl class="py function">
<dt id="music.music.create_app"> <dt class="sig sig-object py" id="music.music.create_app">
<code class="sig-prename descclassname"><span class="pre">music.music.</span></code><code class="sig-name descname"><span class="pre">create_app</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.music.create_app" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.music.</span></span><span class="sig-name descname"><span class="pre">create_app</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.music.create_app" title="Permalink to this definition"></a></dt>
<dd><p>Generate and retrieve a ready-to-run flask app</p> <dd><p>Generate and retrieve a ready-to-run flask app</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>Music Tools app</p> <dd class="field-odd"><p>Mixonomer app</p>
</dd> </dd>
<dt class="field-even">Return type</dt> <dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>Flask App</p> <dd class="field-even"><p>Flask App</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -116,7 +118,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -126,7 +128,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Py</a><ul> <li class="toctree-l1 current"><a class="current reference internal" href="#">Py</a><ul>
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -138,16 +140,18 @@
<li class="toctree-l2"><a class="reference internal" href="#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
<h3>Related Topics</h3> <h3>Related Topics</h3>
<ul> <ul>
<li><a href="../index.html">Documentation overview</a><ul> <li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../index.html" title="previous chapter">Music Tools</a></li> <li>Previous: <a href="../index.html" title="previous chapter">Mixonomer</a></li>
<li>Next: <a href="music.api.html" title="next chapter">music.api</a></li> <li>Next: <a href="music.api.html" title="next chapter">music.api</a></li>
</ul></li> </ul></li>
</ul> </ul>
@ -156,12 +160,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -178,7 +182,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,16 +1,18 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.model &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.model &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
@ -32,522 +34,542 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-model"> <section id="music-model">
<h1>music.model<a class="headerlink" href="#music-model" title="Permalink to this headline"></a></h1> <h1>music.model<a class="headerlink" href="#music-model" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.model"> <section id="module-music.model">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.model" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.model" title="Permalink to this heading"></a></h2>
<p>ORM layer containing the data model</p> <p>ORM layer containing the data model</p>
</div> </section>
<div class="section" id="module-music.model.config"> <section id="module-music.model.config">
<span id="model-config"></span><h2>model.config<a class="headerlink" href="#module-music.model.config" title="Permalink to this headline"></a></h2> <span id="model-config"></span><h2>model.config<a class="headerlink" href="#module-music.model.config" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.model.config.Config"> <dt class="sig sig-object py" id="music.model.config.Config">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.model.config.</span></code><code class="sig-name descname"><span class="pre">Config</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.config.Config" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.model.config.</span></span><span class="sig-name descname"><span class="pre">Config</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.config.Config" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">fireo.models.model.Model</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code></p>
<p>Service-level config data structure for app keys and settings</p> <p>Service-level config data structure for app keys and settings</p>
<dl class="py class"> <dl class="py class">
<dt id="music.model.config.Config.Meta"> <dt class="sig sig-object py" id="music.model.config.Config.Meta">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Meta</span></code><a class="headerlink" href="#music.model.config.Config.Meta" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Meta</span></span><a class="headerlink" href="#music.model.config.Config.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.Meta.collection_name"> <dt class="sig sig-object py" id="music.model.config.Config.Meta.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'config'</span></em><a class="headerlink" href="#music.model.config.Config.Meta.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'config'</span></em><a class="headerlink" href="#music.model.config.Config.Meta.collection_name" title="Permalink to this definition"></a></dt>
<dd><p>Set correct path in Firestore</p> <dd><p>Set correct path in Firestore</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.collection"> <dt class="sig sig-object py" id="music.model.config.Config.collection">
<code class="sig-name descname"><span class="pre">collection</span></code><em class="property"><span class="pre">:</span> <span class="pre">fireo.managers.managers.Manager</span></em><em class="property"> <span class="pre">=</span> <span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.config.Config.collection" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Manager</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.config.Config.collection" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.collection_name"> <dt class="sig sig-object py" id="music.model.config.Config.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'config'</span></em><a class="headerlink" href="#music.model.config.Config.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'config'</span></em><a class="headerlink" href="#music.model.config.Config.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.last_fm_client_id"> <dt class="sig sig-object py" id="music.model.config.Config.jwt_default_length">
<code class="sig-name descname"><span class="pre">last_fm_client_id</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.last_fm_client_id" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">jwt_default_length</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.jwt_default_length" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.playlist_cloud_operating_mode"> <dt class="sig sig-object py" id="music.model.config.Config.jwt_max_length">
<code class="sig-name descname"><span class="pre">playlist_cloud_operating_mode</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.playlist_cloud_operating_mode" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">jwt_max_length</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.jwt_max_length" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="music.model.config.Config.jwt_secret_key">
<span class="sig-name descname"><span class="pre">jwt_secret_key</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.jwt_secret_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="music.model.config.Config.last_fm_client_id">
<span class="sig-name descname"><span class="pre">last_fm_client_id</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.last_fm_client_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="music.model.config.Config.playlist_cloud_operating_mode">
<span class="sig-name descname"><span class="pre">playlist_cloud_operating_mode</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.playlist_cloud_operating_mode" title="Permalink to this definition"></a></dt>
<dd><p>Determines whether playlist and tag update operations are done by Cloud Tasks or Functions</p> <dd><p>Determines whether playlist and tag update operations are done by Cloud Tasks or Functions</p>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.secret_key"> <dt class="sig sig-object py" id="music.model.config.Config.secret_key">
<code class="sig-name descname"><span class="pre">secret_key</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.secret_key" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">secret_key</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.secret_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.spotify_client_id"> <dt class="sig sig-object py" id="music.model.config.Config.spotify_client_id">
<code class="sig-name descname"><span class="pre">spotify_client_id</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.spotify_client_id" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">spotify_client_id</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.spotify_client_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.config.Config.spotify_client_secret"> <dt class="sig sig-object py" id="music.model.config.Config.spotify_client_secret">
<code class="sig-name descname"><span class="pre">spotify_client_secret</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.spotify_client_secret" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">spotify_client_secret</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.config.Config.spotify_client_secret" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.model.playlist"> <section id="module-music.model.playlist">
<span id="model-playlist"></span><h2>model.playlist<a class="headerlink" href="#module-music.model.playlist" title="Permalink to this headline"></a></h2> <span id="model-playlist"></span><h2>model.playlist<a class="headerlink" href="#module-music.model.playlist" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.model.playlist.Playlist"> <dt class="sig sig-object py" id="music.model.playlist.Playlist">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.model.playlist.</span></code><code class="sig-name descname"><span class="pre">Playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Playlist" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.model.playlist.</span></span><span class="sig-name descname"><span class="pre">Playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Playlist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">fireo.models.model.Model</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code></p>
<p>Smart playlist</p> <p>Smart playlist</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>Model</strong> (<em>[</em><em>type</em><em>]</em>) [description]</p> <dd class="field-odd"><p><strong>Model</strong> (<em>[</em><em>type</em><em>]</em>) [description]</p>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>[description]</p> <dd class="field-even"><p>[description]</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>[type]</p> <dd class="field-odd"><p>[type]</p>
</dd> </dd>
</dl> </dl>
<dl class="py class"> <dl class="py class">
<dt id="music.model.playlist.Playlist.Meta"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.Meta">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Meta</span></code><a class="headerlink" href="#music.model.playlist.Playlist.Meta" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Meta</span></span><a class="headerlink" href="#music.model.playlist.Playlist.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.Meta.collection_name"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.Meta.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'playlists'</span></em><a class="headerlink" href="#music.model.playlist.Playlist.Meta.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'playlists'</span></em><a class="headerlink" href="#music.model.playlist.Playlist.Meta.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.add_last_month"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.add_last_month">
<code class="sig-name descname"><span class="pre">add_last_month</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.add_last_month" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">add_last_month</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.add_last_month" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.add_this_month"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.add_this_month">
<code class="sig-name descname"><span class="pre">add_this_month</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.add_this_month" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">add_this_month</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.add_this_month" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.chart_limit"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.chart_limit">
<code class="sig-name descname"><span class="pre">chart_limit</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.chart_limit" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">chart_limit</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.chart_limit" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.chart_range"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.chart_range">
<code class="sig-name descname"><span class="pre">chart_range</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.chart_range" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">chart_range</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.chart_range" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.collection"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.collection">
<code class="sig-name descname"><span class="pre">collection</span></code><em class="property"><span class="pre">:</span> <span class="pre">fireo.managers.managers.Manager</span></em><em class="property"> <span class="pre">=</span> <span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.playlist.Playlist.collection" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Manager</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.playlist.Playlist.collection" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.collection_name"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'playlists'</span></em><a class="headerlink" href="#music.model.playlist.Playlist.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'playlists'</span></em><a class="headerlink" href="#music.model.playlist.Playlist.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.day_boundary"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.day_boundary">
<code class="sig-name descname"><span class="pre">day_boundary</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.day_boundary" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">day_boundary</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.day_boundary" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.description_overwrite"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.description_overwrite">
<code class="sig-name descname"><span class="pre">description_overwrite</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.description_overwrite" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">description_overwrite</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.description_overwrite" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.description_suffix"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.description_suffix">
<code class="sig-name descname"><span class="pre">description_suffix</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.description_suffix" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">description_suffix</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.description_suffix" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.include_library_tracks"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.include_library_tracks">
<code class="sig-name descname"><span class="pre">include_library_tracks</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_library_tracks" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">include_library_tracks</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_library_tracks" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.include_recommendations"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.include_recommendations">
<code class="sig-name descname"><span class="pre">include_recommendations</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_recommendations" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">include_recommendations</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_recommendations" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.include_spotify_owned"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.include_spotify_owned">
<code class="sig-name descname"><span class="pre">include_spotify_owned</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_spotify_owned" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">include_spotify_owned</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.include_spotify_owned" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.last_updated"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.last_updated">
<code class="sig-name descname"><span class="pre">last_updated</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.last_updated" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">last_updated</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.last_updated" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_album_count"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_album_count">
<code class="sig-name descname"><span class="pre">lastfm_stat_album_count</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_album_count" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_album_count</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_album_count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_album_percent"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_album_percent">
<code class="sig-name descname"><span class="pre">lastfm_stat_album_percent</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_album_percent" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_album_percent</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_album_percent" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_artist_count"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_artist_count">
<code class="sig-name descname"><span class="pre">lastfm_stat_artist_count</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_artist_count" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_artist_count</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_artist_count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_artist_percent"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_artist_percent">
<code class="sig-name descname"><span class="pre">lastfm_stat_artist_percent</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_artist_percent" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_artist_percent</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_artist_percent" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_count"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_count">
<code class="sig-name descname"><span class="pre">lastfm_stat_count</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_count" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_count</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_last_refresh"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_last_refresh">
<code class="sig-name descname"><span class="pre">lastfm_stat_last_refresh</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_last_refresh" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_last_refresh</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_last_refresh" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.lastfm_stat_percent"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.lastfm_stat_percent">
<code class="sig-name descname"><span class="pre">lastfm_stat_percent</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_percent" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_stat_percent</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.lastfm_stat_percent" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.mutable_keys"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.mutable_keys">
<code class="sig-name descname"><span class="pre">mutable_keys</span></code><em class="property"> <span class="pre">=</span> <span class="pre">['type',</span> <span class="pre">'include_recommendations',</span> <span class="pre">'recommendation_sample',</span> <span class="pre">'include_library_tracks',</span> <span class="pre">'parts',</span> <span class="pre">'playlist_references',</span> <span class="pre">'shuffle',</span> <span class="pre">'sort',</span> <span class="pre">'description_overwrite',</span> <span class="pre">'description_suffix',</span> <span class="pre">'add_last_month',</span> <span class="pre">'add_this_month',</span> <span class="pre">'day_boundary',</span> <span class="pre">'include_spotify_owned',</span> <span class="pre">'chart_range',</span> <span class="pre">'chart_limit']</span></em><a class="headerlink" href="#music.model.playlist.Playlist.mutable_keys" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">mutable_keys</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['type',</span> <span class="pre">'include_recommendations',</span> <span class="pre">'recommendation_sample',</span> <span class="pre">'include_library_tracks',</span> <span class="pre">'parts',</span> <span class="pre">'playlist_references',</span> <span class="pre">'shuffle',</span> <span class="pre">'sort',</span> <span class="pre">'description_overwrite',</span> <span class="pre">'description_suffix',</span> <span class="pre">'add_last_month',</span> <span class="pre">'add_this_month',</span> <span class="pre">'day_boundary',</span> <span class="pre">'include_spotify_owned',</span> <span class="pre">'chart_range',</span> <span class="pre">'chart_limit']</span></em><a class="headerlink" href="#music.model.playlist.Playlist.mutable_keys" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.name"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.name">
<code class="sig-name descname"><span class="pre">name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.parts"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.parts">
<code class="sig-name descname"><span class="pre">parts</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.parts" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">parts</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.parts" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.playlist_references"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.playlist_references">
<code class="sig-name descname"><span class="pre">playlist_references</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.playlist_references" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">playlist_references</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.playlist_references" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.recommendation_sample"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.recommendation_sample">
<code class="sig-name descname"><span class="pre">recommendation_sample</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.recommendation_sample" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">recommendation_sample</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.recommendation_sample" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.shuffle"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.shuffle">
<code class="sig-name descname"><span class="pre">shuffle</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.shuffle" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">shuffle</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.shuffle" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.sort"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.sort">
<code class="sig-name descname"><span class="pre">sort</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.sort" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">sort</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.sort" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.playlist.Playlist.to_dict"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.to_dict">
<code class="sig-name descname"><span class="pre">to_dict</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Playlist.to_dict" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">to_dict</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Playlist.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Convert model into dict</p> <dd><p>Convert model into dict</p>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.type"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.type">
<code class="sig-name descname"><span class="pre">type</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.type" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Playlist.uri"> <dt class="sig sig-object py" id="music.model.playlist.Playlist.uri">
<code class="sig-name descname"><span class="pre">uri</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.uri" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">uri</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.playlist.Playlist.uri" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py class"> <dl class="py class">
<dt id="music.model.playlist.Sort"> <dt class="sig sig-object py" id="music.model.playlist.Sort">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.model.playlist.</span></code><code class="sig-name descname"><span class="pre">Sort</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Sort" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.model.playlist.</span></span><span class="sig-name descname"><span class="pre">Sort</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.playlist.Sort" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></p>
<p>An enumeration.</p> <p>An enumeration.</p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Sort.default"> <dt class="sig sig-object py" id="music.model.playlist.Sort.default">
<code class="sig-name descname"><span class="pre">default</span></code><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#music.model.playlist.Sort.default" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">default</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1</span></em><a class="headerlink" href="#music.model.playlist.Sort.default" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Sort.release_date"> <dt class="sig sig-object py" id="music.model.playlist.Sort.release_date">
<code class="sig-name descname"><span class="pre">release_date</span></code><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#music.model.playlist.Sort.release_date" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">release_date</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">3</span></em><a class="headerlink" href="#music.model.playlist.Sort.release_date" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.playlist.Sort.shuffle"> <dt class="sig sig-object py" id="music.model.playlist.Sort.shuffle">
<code class="sig-name descname"><span class="pre">shuffle</span></code><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#music.model.playlist.Sort.shuffle" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">shuffle</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#music.model.playlist.Sort.shuffle" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.model.tag"> <section id="module-music.model.tag">
<span id="model-tag"></span><h2>model.tag<a class="headerlink" href="#module-music.model.tag" title="Permalink to this headline"></a></h2> <span id="model-tag"></span><h2>model.tag<a class="headerlink" href="#module-music.model.tag" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.model.tag.Tag"> <dt class="sig sig-object py" id="music.model.tag.Tag">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.model.tag.</span></code><code class="sig-name descname"><span class="pre">Tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.tag.Tag" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.model.tag.</span></span><span class="sig-name descname"><span class="pre">Tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.tag.Tag" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">fireo.models.model.Model</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code></p>
<dl class="py class"> <dl class="py class">
<dt id="music.model.tag.Tag.Meta"> <dt class="sig sig-object py" id="music.model.tag.Tag.Meta">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Meta</span></code><a class="headerlink" href="#music.model.tag.Tag.Meta" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Meta</span></span><a class="headerlink" href="#music.model.tag.Tag.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.Meta.collection_name"> <dt class="sig sig-object py" id="music.model.tag.Tag.Meta.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'tags'</span></em><a class="headerlink" href="#music.model.tag.Tag.Meta.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'tags'</span></em><a class="headerlink" href="#music.model.tag.Tag.Meta.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.albums"> <dt class="sig sig-object py" id="music.model.tag.Tag.albums">
<code class="sig-name descname"><span class="pre">albums</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.albums" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">albums</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.albums" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.artists"> <dt class="sig sig-object py" id="music.model.tag.Tag.artists">
<code class="sig-name descname"><span class="pre">artists</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.artists" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">artists</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.artists" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.collection"> <dt class="sig sig-object py" id="music.model.tag.Tag.collection">
<code class="sig-name descname"><span class="pre">collection</span></code><em class="property"><span class="pre">:</span> <span class="pre">fireo.managers.managers.Manager</span></em><em class="property"> <span class="pre">=</span> <span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.tag.Tag.collection" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Manager</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.tag.Tag.collection" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.collection_name"> <dt class="sig sig-object py" id="music.model.tag.Tag.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'tags'</span></em><a class="headerlink" href="#music.model.tag.Tag.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'tags'</span></em><a class="headerlink" href="#music.model.tag.Tag.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.count"> <dt class="sig sig-object py" id="music.model.tag.Tag.count">
<code class="sig-name descname"><span class="pre">count</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.count" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">count</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.count" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.last_updated"> <dt class="sig sig-object py" id="music.model.tag.Tag.last_updated">
<code class="sig-name descname"><span class="pre">last_updated</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.last_updated" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">last_updated</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.last_updated" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.name"> <dt class="sig sig-object py" id="music.model.tag.Tag.name">
<code class="sig-name descname"><span class="pre">name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.proportion"> <dt class="sig sig-object py" id="music.model.tag.Tag.proportion">
<code class="sig-name descname"><span class="pre">proportion</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.proportion" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">proportion</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.proportion" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.tag_id"> <dt class="sig sig-object py" id="music.model.tag.Tag.tag_id">
<code class="sig-name descname"><span class="pre">tag_id</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.tag_id" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">tag_id</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.tag_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.time_objects"> <dt class="sig sig-object py" id="music.model.tag.Tag.time_objects">
<code class="sig-name descname"><span class="pre">time_objects</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.time_objects" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">time_objects</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.time_objects" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.tag.Tag.to_dict"> <dt class="sig sig-object py" id="music.model.tag.Tag.to_dict">
<code class="sig-name descname"><span class="pre">to_dict</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.tag.Tag.to_dict" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">to_dict</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.tag.Tag.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Convert model into dict</p> <dd><p>Convert model into dict</p>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.total_time"> <dt class="sig sig-object py" id="music.model.tag.Tag.total_time">
<code class="sig-name descname"><span class="pre">total_time</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_time" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">total_time</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_time" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.total_time_ms"> <dt class="sig sig-object py" id="music.model.tag.Tag.total_time_ms">
<code class="sig-name descname"><span class="pre">total_time_ms</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_time_ms" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">total_time_ms</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_time_ms" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.total_user_scrobbles"> <dt class="sig sig-object py" id="music.model.tag.Tag.total_user_scrobbles">
<code class="sig-name descname"><span class="pre">total_user_scrobbles</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_user_scrobbles" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">total_user_scrobbles</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.total_user_scrobbles" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.tracks"> <dt class="sig sig-object py" id="music.model.tag.Tag.tracks">
<code class="sig-name descname"><span class="pre">tracks</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.tracks" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">tracks</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.tracks" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.tag.Tag.username"> <dt class="sig sig-object py" id="music.model.tag.Tag.username">
<code class="sig-name descname"><span class="pre">username</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.username" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">username</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.tag.Tag.username" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.model.user"> <section id="module-music.model.user">
<span id="model-user"></span><h2>model.user<a class="headerlink" href="#module-music.model.user" title="Permalink to this headline"></a></h2> <span id="model-user"></span><h2>model.user<a class="headerlink" href="#module-music.model.user" title="Permalink to this heading"></a></h2>
<dl class="py class"> <dl class="py class">
<dt id="music.model.user.User"> <dt class="sig sig-object py" id="music.model.user.User">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">music.model.user.</span></code><code class="sig-name descname"><span class="pre">User</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">music.model.user.</span></span><span class="sig-name descname"><span class="pre">User</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">fireo.models.model.Model</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code></p>
<dl class="py class"> <dl class="py class">
<dt id="music.model.user.User.Meta"> <dt class="sig sig-object py" id="music.model.user.User.Meta">
<em class="property"><span class="pre">class</span> </em><code class="sig-name descname"><span class="pre">Meta</span></code><a class="headerlink" href="#music.model.user.User.Meta" title="Permalink to this definition"></a></dt> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Meta</span></span><a class="headerlink" href="#music.model.user.User.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.Meta.collection_name"> <dt class="sig sig-object py" id="music.model.user.User.Meta.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'spotify_users'</span></em><a class="headerlink" href="#music.model.user.User.Meta.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'spotify_users'</span></em><a class="headerlink" href="#music.model.user.User.Meta.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.access_token"> <dt class="sig sig-object py" id="music.model.user.User.access_token">
<code class="sig-name descname"><span class="pre">access_token</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.access_token" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">access_token</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.access_token" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.user.User.check_password"> <dt class="sig sig-object py" id="music.model.user.User.check_password">
<code class="sig-name descname"><span class="pre">check_password</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">password</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.check_password" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">check_password</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">password</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.check_password" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.collection"> <dt class="sig sig-object py" id="music.model.user.User.collection">
<code class="sig-name descname"><span class="pre">collection</span></code><em class="property"><span class="pre">:</span> <span class="pre">fireo.managers.managers.Manager</span></em><em class="property"> <span class="pre">=</span> <span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.user.User.collection" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Manager</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;fireo.managers.managers.Manager</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#music.model.user.User.collection" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.collection_name"> <dt class="sig sig-object py" id="music.model.user.User.collection_name">
<code class="sig-name descname"><span class="pre">collection_name</span></code><em class="property"> <span class="pre">=</span> <span class="pre">'spotify_users'</span></em><a class="headerlink" href="#music.model.user.User.collection_name" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">collection_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'spotify_users'</span></em><a class="headerlink" href="#music.model.user.User.collection_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.email"> <dt class="sig sig-object py" id="music.model.user.User.email">
<code class="sig-name descname"><span class="pre">email</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.email" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">email</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.email" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.user.User.get_playlist"> <dt class="sig sig-object py" id="music.model.user.User.get_playlist">
<code class="sig-name descname"><span class="pre">get_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">single_return</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.get_playlist" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">get_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">single_return</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.get_playlist" title="Permalink to this definition"></a></dt>
<dd><p>Get a users playlist by name with smart case sensitivity</p> <dd><p>Get a users playlist by name with smart case sensitivity</p>
<p>Will return an exact match if possible, otherwise will return the first case-insensitive match</p> <p>Will return an exact match if possible, otherwise will return the first case-insensitive match</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li> <li><p><strong>playlist_name</strong> (<em>str</em>) Subject playlist name</p></li>
<li><p><strong>single_return</strong> (<em>bool</em><em>, </em><em>optional</em>) Return the best match, otherwise return (&lt;exact&gt;, &lt;all matches&gt;). &lt;exact&gt; will be None if not found. Defaults to True.</p></li> <li><p><strong>single_return</strong> (<em>bool</em><em>, </em><em>optional</em>) Return the best match, otherwise return (&lt;exact&gt;, &lt;all matches&gt;). &lt;exact&gt; will be None if not found. Defaults to True.</p></li>
<li><p><strong>raise_error</strong> (<em>bool</em><em>, </em><em>optional</em>) Raise a NameError if nothing found. Defaults to True.</p></li> <li><p><strong>raise_error</strong> (<em>bool</em><em>, </em><em>optional</em>) Raise a NameError if nothing found. Defaults to True.</p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-even">Raises</dt> <dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>NameError</strong> If no matching playlists found</p> <dd class="field-even"><p><strong>NameError</strong> If no matching playlists found</p>
</dd> </dd>
<dt class="field-odd">Returns</dt> <dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>Found users playlists</p> <dd class="field-odd"><p>Found users playlists</p>
</dd> </dd>
<dt class="field-even">Return type</dt> <dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>Optional[<a class="reference internal" href="#music.model.playlist.Playlist" title="music.model.playlist.Playlist">Playlist</a>] or (&lt;exact&gt;, &lt;all matches&gt;)</p> <dd class="field-even"><p>Optional[<a class="reference internal" href="#music.model.playlist.Playlist" title="music.model.playlist.Playlist">Playlist</a>] or (&lt;exact&gt;, &lt;all matches&gt;)</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.user.User.get_playlists"> <dt class="sig sig-object py" id="music.model.user.User.get_playlists">
<code class="sig-name descname"><span class="pre">get_playlists</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.get_playlists" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">get_playlists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.get_playlists" title="Permalink to this definition"></a></dt>
<dd><p>Get all playlists for a user</p> <dd><p>Get all playlists for a user</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>List of users playlists</p> <dd class="field-odd"><p>List of users playlists</p>
</dd> </dd>
<dt class="field-even">Return type</dt> <dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>List[<a class="reference internal" href="#music.model.playlist.Playlist" title="music.model.playlist.Playlist">Playlist</a>]</p> <dd class="field-even"><p>List[<a class="reference internal" href="#music.model.playlist.Playlist" title="music.model.playlist.Playlist">Playlist</a>]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.last_login"> <dt class="sig sig-object py" id="music.model.user.User.last_keygen">
<code class="sig-name descname"><span class="pre">last_login</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.last_login" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">last_keygen</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.last_keygen" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.last_refreshed"> <dt class="sig sig-object py" id="music.model.user.User.last_login">
<code class="sig-name descname"><span class="pre">last_refreshed</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.last_refreshed" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">last_login</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.last_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.lastfm_username"> <dt class="sig sig-object py" id="music.model.user.User.last_refreshed">
<code class="sig-name descname"><span class="pre">lastfm_username</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.lastfm_username" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">last_refreshed</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.last_refreshed" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.locked"> <dt class="sig sig-object py" id="music.model.user.User.lastfm_username">
<code class="sig-name descname"><span class="pre">locked</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.locked" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">lastfm_username</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.lastfm_username" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.password"> <dt class="sig sig-object py" id="music.model.user.User.locked">
<code class="sig-name descname"><span class="pre">password</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.password" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">locked</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.locked" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.refresh_token"> <dt class="sig sig-object py" id="music.model.user.User.password">
<code class="sig-name descname"><span class="pre">refresh_token</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.refresh_token" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">password</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.password" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.spotify_linked"> <dt class="sig sig-object py" id="music.model.user.User.refresh_token">
<code class="sig-name descname"><span class="pre">spotify_linked</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.spotify_linked" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">refresh_token</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.refresh_token" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="music.model.user.User.spotify_linked">
<span class="sig-name descname"><span class="pre">spotify_linked</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.spotify_linked" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py method"> <dl class="py method">
<dt id="music.model.user.User.to_dict"> <dt class="sig sig-object py" id="music.model.user.User.to_dict">
<code class="sig-name descname"><span class="pre">to_dict</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.to_dict" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">to_dict</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#music.model.user.User.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Convert model into dict</p> <dd><p>Convert model into dict</p>
</dd></dl> </dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.token_expiry"> <dt class="sig sig-object py" id="music.model.user.User.token_expiry">
<code class="sig-name descname"><span class="pre">token_expiry</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.token_expiry" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">token_expiry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.token_expiry" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.type"> <dt class="sig sig-object py" id="music.model.user.User.type">
<code class="sig-name descname"><span class="pre">type</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.type" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.username"> <dt class="sig sig-object py" id="music.model.user.User.username">
<code class="sig-name descname"><span class="pre">username</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.username" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">username</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.username" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py attribute"> <dl class="py attribute">
<dt id="music.model.user.User.validated"> <dt class="sig sig-object py" id="music.model.user.User.validated">
<code class="sig-name descname"><span class="pre">validated</span></code><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.validated" title="Permalink to this definition"></a></dt> <span class="sig-name descname"><span class="pre">validated</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#music.model.user.User.validated" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</dd></dl> </dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -556,7 +578,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -566,7 +588,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -578,9 +600,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -598,12 +622,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -620,7 +644,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |

View File

@ -1,20 +1,22 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>music.tasks &#8212; Music Tools documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <title>music.tasks &#8212; Mixonomer documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script> <script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script> <script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script> <script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
<link rel="next" title="React Frontend" href="MusicTools.html" /> <link rel="next" title="admin script" href="admin.html" />
<link rel="prev" title="music.model" href="music.model.html" /> <link rel="prev" title="music.model" href="music.model.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" /> <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -32,62 +34,62 @@
<div class="body" role="main"> <div class="body" role="main">
<div class="section" id="music-tasks"> <section id="music-tasks">
<h1>music.tasks<a class="headerlink" href="#music-tasks" title="Permalink to this headline"></a></h1> <h1>music.tasks<a class="headerlink" href="#music-tasks" title="Permalink to this heading"></a></h1>
<div class="section" id="module-music.tasks"> <section id="module-music.tasks">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.tasks" title="Permalink to this headline"></a></h2> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-music.tasks" title="Permalink to this heading"></a></h2>
<p>Long running operations of the app including playlist generation and tag update functions</p> <p>Long running operations of the app including playlist generation and tag update functions</p>
</div> </section>
<div class="section" id="module-music.tasks.create_playlist"> <section id="module-music.tasks.create_playlist">
<span id="tasks-create-playlist"></span><h2>tasks.create_playlist<a class="headerlink" href="#module-music.tasks.create_playlist" title="Permalink to this headline"></a></h2> <span id="tasks-create-playlist"></span><h2>tasks.create_playlist<a class="headerlink" href="#module-music.tasks.create_playlist" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.create_playlist.create_playlist"> <dt class="sig sig-object py" id="music.tasks.create_playlist.create_playlist">
<code class="sig-prename descclassname"><span class="pre">music.tasks.create_playlist.</span></code><code class="sig-name descname"><span class="pre">create_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">spotframework.model.playlist.FullPlaylist</span><span class="p"><span class="pre">]</span></span><a class="headerlink" href="#music.tasks.create_playlist.create_playlist" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.create_playlist.</span></span><span class="sig-name descname"><span class="pre">create_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">FullPlaylist</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#music.tasks.create_playlist.create_playlist" title="Permalink to this definition"></a></dt>
<dd><p>Create a new playlist on the users Spotify account</p> <dd><p>Create a new playlist on the users Spotify account</p>
<p>For creating new playlists, create and return a new playlist object</p> <p>For creating new playlists, create and return a new playlist object</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p></li> <li><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p></li>
<li><p><strong>name</strong> (<em>str</em>) Name of new playlist</p></li> <li><p><strong>name</strong> (<em>str</em>) Name of new playlist</p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>New playlist object if created</p> <dd class="field-even"><p>New playlist object if created</p>
</dd> </dd>
<dt class="field-odd">Return type</dt> <dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Optional[FullPlaylist]</p> <dd class="field-odd"><p>Optional[FullPlaylist]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.tasks.refresh_lastfm_stats"> <section id="module-music.tasks.refresh_lastfm_stats">
<span id="tasks-refresh-lastfm-stats"></span><h2>tasks.refresh_lastfm_stats<a class="headerlink" href="#module-music.tasks.refresh_lastfm_stats" title="Permalink to this headline"></a></h2> <span id="tasks-refresh-lastfm-stats"></span><h2>tasks.refresh_lastfm_stats<a class="headerlink" href="#module-music.tasks.refresh_lastfm_stats" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats"> <dt class="sig sig-object py" id="music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats">
<code class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></code><code class="sig-name descname"><span class="pre">refresh_lastfm_album_stats</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></span><span class="sig-name descname"><span class="pre">refresh_lastfm_album_stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_album_stats" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats"> <dt class="sig sig-object py" id="music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats">
<code class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></code><code class="sig-name descname"><span class="pre">refresh_lastfm_artist_stats</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></span><span class="sig-name descname"><span class="pre">refresh_lastfm_artist_stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_artist_stats" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats"> <dt class="sig sig-object py" id="music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats">
<code class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></code><code class="sig-name descname"><span class="pre">refresh_lastfm_track_stats</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.refresh_lastfm_stats.</span></span><span class="sig-name descname"><span class="pre">refresh_lastfm_track_stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.refresh_lastfm_stats.refresh_lastfm_track_stats" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
<div class="section" id="module-music.tasks.run_user_playlist"> <section id="module-music.tasks.run_user_playlist">
<span id="tasks-run-user-playlist"></span><h2>tasks.run_user_playlist<a class="headerlink" href="#module-music.tasks.run_user_playlist" title="Permalink to this headline"></a></h2> <span id="tasks-run-user-playlist"></span><h2>tasks.run_user_playlist<a class="headerlink" href="#module-music.tasks.run_user_playlist" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.run_user_playlist.run_user_playlist"> <dt class="sig sig-object py" id="music.tasks.run_user_playlist.run_user_playlist">
<code class="sig-prename descclassname"><span class="pre">music.tasks.run_user_playlist.</span></code><code class="sig-name descname"><span class="pre">run_user_playlist</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">music.model.user.User</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist" title="music.model.playlist.Playlist"><span class="pre">music.model.playlist.Playlist</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotnet</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">spotframework.net.network.Network</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fmnet</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">fmframework.net.network.Network</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> &#x2192; <span class="pre">None</span><a class="headerlink" href="#music.tasks.run_user_playlist.run_user_playlist" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.run_user_playlist.</span></span><span class="sig-name descname"><span class="pre">run_user_playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><span class="pre">User</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="music.model.html#music.model.playlist.Playlist" title="music.model.playlist.Playlist"><span class="pre">Playlist</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Network</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fmnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Network</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#music.tasks.run_user_playlist.run_user_playlist" title="Permalink to this definition"></a></dt>
<dd><p>Generate and upadate a users smart playlist</p> <dd><p>Generate and upadate a users smart playlist</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p></li> <li><p><strong>user</strong> (<a class="reference internal" href="music.model.html#music.model.user.User" title="music.model.user.User"><em>User</em></a>) Subject user</p></li>
<li><p><strong>playlist</strong> (<a class="reference internal" href="music.model.html#music.model.playlist.Playlist" title="music.model.playlist.Playlist"><em>Playlist</em></a>) Users subject playlist</p></li> <li><p><strong>playlist</strong> (<a class="reference internal" href="music.model.html#music.model.playlist.Playlist" title="music.model.playlist.Playlist"><em>Playlist</em></a>) Users subject playlist</p></li>
@ -95,7 +97,7 @@
<li><p><strong>fmnet</strong> (<em>Network</em><em>, </em><em>optional</em>) Fmframework network for Last.fm operations. Defaults to None.</p></li> <li><p><strong>fmnet</strong> (<em>Network</em><em>, </em><em>optional</em>) Fmframework network for Last.fm operations. Defaults to None.</p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-even">Raises</dt> <dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple"> <dd class="field-even"><ul class="simple">
<li><p><strong>NameError</strong> No user provided</p></li> <li><p><strong>NameError</strong> No user provided</p></li>
<li><p><strong>NameError</strong> No playlist provided</p></li> <li><p><strong>NameError</strong> No playlist provided</p></li>
@ -104,25 +106,25 @@
<li><p><strong>e</strong> spotframework error when retrieving user playlists</p></li> <li><p><strong>e</strong> spotframework error when retrieving user playlists</p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-odd">Returns</dt> <dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>[description]</p> <dd class="field-odd"><p>[description]</p>
</dd> </dd>
<dt class="field-even">Return type</dt> <dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>[type]</p> <dd class="field-even"><p>[type]</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
</div> </section>
<div class="section" id="module-music.tasks.update_tag"> <section id="module-music.tasks.update_tag">
<span id="tasks-update-tag"></span><h2>tasks.update_tag<a class="headerlink" href="#module-music.tasks.update_tag" title="Permalink to this headline"></a></h2> <span id="tasks-update-tag"></span><h2>tasks.update_tag<a class="headerlink" href="#module-music.tasks.update_tag" title="Permalink to this heading"></a></h2>
<dl class="py function"> <dl class="py function">
<dt id="music.tasks.update_tag.update_tag"> <dt class="sig sig-object py" id="music.tasks.update_tag.update_tag">
<code class="sig-prename descclassname"><span class="pre">music.tasks.update_tag.</span></code><code class="sig-name descname"><span class="pre">update_tag</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotnet</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fmnet</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.update_tag.update_tag" title="Permalink to this definition"></a></dt> <span class="sig-prename descclassname"><span class="pre">music.tasks.update_tag.</span></span><span class="sig-name descname"><span class="pre">update_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotnet</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fmnet</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#music.tasks.update_tag.update_tag" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd></dd></dl>
</div> </section>
</div> </section>
</div> </div>
@ -131,7 +133,7 @@
</div> </div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Music Tools</a></h1> <h1 class="logo"><a href="../index.html">Mixonomer</a></h1>
@ -141,7 +143,7 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current"> <li class="toctree-l1 current"><a class="reference internal" href="music.html">Py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li> <li class="toctree-l2"><a class="reference internal" href="music.api.html">music.api</a></li>
@ -153,9 +155,11 @@
<li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li> <li class="toctree-l2"><a class="reference internal" href="music.html#module-music">music Root Module</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="MusicTools.html">Js</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li> <li class="toctree-l1"><a class="reference internal" href="admin.html">Admin Script</a></li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">All Modules</a></li> <li class="toctree-l1 current"><a class="reference internal" href="modules.html">All Modules</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="music.html">Flask Backend</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">
@ -164,7 +168,7 @@
<li><a href="../index.html">Documentation overview</a><ul> <li><a href="../index.html">Documentation overview</a><ul>
<li><a href="music.html">Flask Backend</a><ul> <li><a href="music.html">Flask Backend</a><ul>
<li>Previous: <a href="music.model.html" title="previous chapter">music.model</a></li> <li>Previous: <a href="music.model.html" title="previous chapter">music.model</a></li>
<li>Next: <a href="MusicTools.html" title="next chapter">React Frontend</a></li> <li>Next: <a href="admin.html" title="next chapter">admin script</a></li>
</ul></li> </ul></li>
</ul></li> </ul></li>
</ul> </ul>
@ -173,12 +177,12 @@
<h3 id="searchlabel">Quick search</h3> <h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper"> <div class="searchformwrapper">
<form class="search" action="../search.html" method="get"> <form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" /> <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" /> <input type="submit" value="Go" />
</form> </form>
</div> </div>
</div> </div>
<script>$('#searchbox').show(0);</script> <script>document.getElementById('searchbox').style.display = "block"</script>
@ -195,7 +199,7 @@
&copy;2021, Sarsoo. &copy;2021, Sarsoo.
| |
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.4</a> Powered by <a href="http://sphinx-doc.org/">Sphinx 5.1.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
| |