diff --git a/.gitignore b/.gitignore index 38baf4f..fdad6f1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ dist/ pdpyras.egg-info/ docs/.buildinfo tmp/ +.DS_Store diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bd1dd6e..d047faa 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,7 @@ +**2019-10-01: version 3.1.2** + +* Fixed regression bug / departure from documentation (#17): the ``payload`` parameter does not merge with but rather completely replaces the default payload + **2019-04-05: version 3.1.1** * Changed behavior of HTTP retry that caused issues with some internal tools: raising ``PDClientError`` in the event of non-transient HTTP error, in the ``request`` method, versus returning the request object and logging it. The previous behavior was: diff --git a/docs/_static/ajax-loader.gif b/docs/_static/ajax-loader.gif deleted file mode 100644 index 61faf8c..0000000 Binary files a/docs/_static/ajax-loader.gif and /dev/null differ diff --git a/docs/_static/basic.css b/docs/_static/basic.css index 104f076..ea6972d 100644 --- a/docs/_static/basic.css +++ b/docs/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -231,6 +231,16 @@ a.headerlink { visibility: hidden; } +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -279,6 +289,12 @@ img.align-center, .figure.align-center, object.align-center { margin-right: auto; } +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + .align-left { text-align: left; } @@ -287,6 +303,10 @@ img.align-center, .figure.align-center, object.align-center { text-align: center; } +.align-default { + text-align: center; +} + .align-right { text-align: right; } @@ -358,6 +378,11 @@ table.align-center { margin-right: auto; } +table.align-default { + margin-left: auto; + margin-right: auto; +} + table caption span.caption-number { font-style: italic; } @@ -391,6 +416,16 @@ table.citation td { border-bottom: none; } +th > p:first-child, +td > p:first-child { + margin-top: 0px; +} + +th > p:last-child, +td > p:last-child { + margin-bottom: 0px; +} + /* -- figures --------------------------------------------------------------- */ div.figure { @@ -460,11 +495,58 @@ ol.upperroman { list-style: upper-roman; } +li > p:first-child { + margin-top: 0px; +} + +li > p:last-child { + margin-bottom: 0px; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + dl { margin-bottom: 15px; } -dd p { +dd > p:first-child { margin-top: 0px; } @@ -537,6 +619,12 @@ dl.glossary dt { font-style: oblique; } +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + abbr, acronym { border-bottom: dotted 1px; cursor: help; diff --git a/docs/_static/comment-bright.png b/docs/_static/comment-bright.png deleted file mode 100644 index 15e27ed..0000000 Binary files a/docs/_static/comment-bright.png and /dev/null differ diff --git a/docs/_static/comment-close.png b/docs/_static/comment-close.png deleted file mode 100644 index 4d91bcf..0000000 Binary files a/docs/_static/comment-close.png and /dev/null differ diff --git a/docs/_static/comment.png b/docs/_static/comment.png deleted file mode 100644 index dfbc0cb..0000000 Binary files a/docs/_static/comment.png and /dev/null differ diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js index ffadbec..b33f87f 100644 --- a/docs/_static/doctools.js +++ b/docs/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -87,14 +87,13 @@ jQuery.fn.highlightText = function(text, className) { node.nextSibling)); node.nodeValue = val.substr(0, pos); if (isInSVG) { - var bbox = span.getBBox(); var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.x.baseVal.value = bbox.x; + 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); - var parentOfText = node.parentNode.parentNode; addItems.push({ "parent": node.parentNode, "target": rect}); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 990819e..17590d2 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,296 +1,10 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '3.1.1', + VERSION: '3.1.2', LANGUAGE: 'None', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SEARCH_LANGUAGE_STOP_WORDS: ["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 JS is _stemmer.js if file is provided */ -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - - - - - -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; -} - - + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/docs/_static/down-pressed.png b/docs/_static/down-pressed.png deleted file mode 100644 index 5756c8c..0000000 Binary files a/docs/_static/down-pressed.png and /dev/null differ diff --git a/docs/_static/down.png b/docs/_static/down.png deleted file mode 100644 index 1b3bdad..0000000 Binary files a/docs/_static/down.png and /dev/null differ diff --git a/docs/_static/jquery-3.2.1.js b/docs/_static/jquery-3.4.1.js similarity index 89% rename from docs/_static/jquery-3.2.1.js rename to docs/_static/jquery-3.4.1.js index d2d8ca4..773ad95 100644 --- a/docs/_static/jquery-3.2.1.js +++ b/docs/_static/jquery-3.4.1.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v3.2.1 + * jQuery JavaScript Library v3.4.1 * https://jquery.com/ * * Includes Sizzle.js @@ -9,7 +9,7 @@ * Released under the MIT license * https://jquery.org/license * - * Date: 2017-03-20T18:59Z + * Date: 2019-05-01T21:04Z */ ( function( global, factory ) { @@ -71,16 +71,70 @@ var ObjectFunctionString = fnToString.call( Object ); var support = {}; +var isFunction = function isFunction( obj ) { + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; - function DOMEval( code, doc ) { + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { doc = doc || document; - var script = doc.createElement( "script" ); + var i, val, + script = doc.createElement( "script" ); script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } doc.head.appendChild( script ).parentNode.removeChild( script ); } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global // unguarded in another place, it seems safer to define global only for this module @@ -88,7 +142,7 @@ var support = {}; var - version = "3.2.1", + version = "3.4.1", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -100,16 +154,7 @@ var // Support: Android <=4.0 only // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; jQuery.fn = jQuery.prototype = { @@ -209,7 +254,7 @@ jQuery.extend = jQuery.fn.extend = function() { } // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + if ( typeof target !== "object" && !isFunction( target ) ) { target = {}; } @@ -226,25 +271,28 @@ jQuery.extend = jQuery.fn.extend = function() { // Extend the base object for ( name in options ) { - src = target[ name ]; copy = options[ name ]; + // Prevent Object.prototype pollution // Prevent never-ending loop - if ( target === copy ) { + if ( name === "__proto__" || target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; - if ( copyIsArray ) { - copyIsArray = false; - clone = src && Array.isArray( src ) ? src : []; - + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; + clone = src; } + copyIsArray = false; // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); @@ -275,28 +323,6 @@ jQuery.extend( { noop: function() {}, - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - isPlainObject: function( obj ) { var proto, Ctor; @@ -319,9 +345,6 @@ jQuery.extend( { }, isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 var name; for ( name in obj ) { @@ -330,27 +353,9 @@ jQuery.extend( { return true; }, - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + globalEval: function( code, options ) { + DOMEval( code, { nonce: options && options.nonce } ); }, each: function( obj, callback ) { @@ -473,37 +478,6 @@ jQuery.extend( { // A global GUID counter for objects guid: 1, - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support @@ -526,9 +500,9 @@ function isArrayLike( obj ) { // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); + type = toType( obj ); - if ( type === "function" || jQuery.isWindow( obj ) ) { + if ( isFunction( obj ) || isWindow( obj ) ) { return false; } @@ -537,14 +511,14 @@ function isArrayLike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.3 + * Sizzle CSS Selector Engine v2.3.4 * https://sizzlejs.com/ * - * Copyright jQuery Foundation and other contributors + * Copyright JS Foundation and other contributors * Released under the MIT license - * http://jquery.org/license + * https://js.foundation/ * - * Date: 2016-08-08 + * Date: 2019-04-08 */ (function( window ) { @@ -578,6 +552,7 @@ var i, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), + nonnativeSelectorCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; @@ -639,8 +614,7 @@ var i, rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), @@ -661,6 +635,7 @@ var i, whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, + rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, @@ -715,9 +690,9 @@ var i, setDocument(); }, - disabledAncestor = addCombinator( + inDisabledFieldset = addCombinator( function( elem ) { - return elem.disabled === true && ("form" in elem || "label" in elem); + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; }, { dir: "parentNode", next: "legend" } ); @@ -830,18 +805,22 @@ function Sizzle( selector, context, results, seed ) { // Take advantage of querySelectorAll if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; + !nonnativeSelectorCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) && - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 + // Support: IE 8 only // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { + (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && rdescend.test( selector ) ) { // Capture the context ID, setting it first if necessary if ( (nid = context.getAttribute( "id" )) ) { @@ -863,17 +842,16 @@ function Sizzle( selector, context, results, seed ) { context; } - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); } } } @@ -1037,7 +1015,7 @@ function createDisabledPseudo( disabled ) { // Where there is no isDisabled, check manually /* jshint -W018 */ elem.isDisabled !== !disabled && - disabledAncestor( elem ) === disabled; + inDisabledFieldset( elem ) === disabled; } return elem.disabled === disabled; @@ -1094,10 +1072,13 @@ support = Sizzle.support = {}; * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; + var namespace = elem.namespaceURI, + docElem = (elem.ownerDocument || elem).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); }; /** @@ -1519,11 +1500,8 @@ Sizzle.matchesSelector = function( elem, expr ) { setDocument( elem ); } - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ expr + " " ] && + !nonnativeSelectorCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { @@ -1537,7 +1515,9 @@ Sizzle.matchesSelector = function( elem, expr ) { elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch (e) {} + } catch (e) { + nonnativeSelectorCache( expr, true ); + } } return Sizzle( expr, document, null, [ elem ] ).length > 0; @@ -1996,7 +1976,7 @@ Expr = Sizzle.selectors = { "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; }; }), @@ -2135,7 +2115,11 @@ Expr = Sizzle.selectors = { }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } @@ -2848,11 +2832,9 @@ var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>| -var risSimple = /^.[^:#\[\.,]*$/; - // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { + if ( isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) !== not; } ); @@ -2872,16 +2854,8 @@ function winnow( elements, qualifier, not ) { } ); } - // Simple selector that can be filtered directly, removing non-Elements - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - // Complex selector, compare the two sets, removing non-Elements - qualifier = jQuery.filter( qualifier, elements ); - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; - } ); + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); } jQuery.filter = function( expr, elems, not ) { @@ -3002,7 +2976,7 @@ var rootjQuery, for ( match in context ) { // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { + if ( isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes @@ -3045,7 +3019,7 @@ var rootjQuery, // HANDLE: $(function) // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { + } else if ( isFunction( selector ) ) { return root.ready !== undefined ? root.ready( selector ) : @@ -3195,18 +3169,18 @@ jQuery.each( { return siblings( elem.firstChild ); }, contents: function( elem ) { - if ( nodeName( elem, "iframe" ) ) { - return elem.contentDocument; - } + if ( typeof elem.contentDocument !== "undefined" ) { + return elem.contentDocument; + } - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } - return jQuery.merge( [], elem.childNodes ); + return jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { @@ -3360,11 +3334,11 @@ jQuery.Callbacks = function( options ) { ( function add( args ) { jQuery.each( args, function( _, arg ) { - if ( jQuery.isFunction( arg ) ) { + if ( isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } - } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + } else if ( arg && arg.length && toType( arg ) !== "string" ) { // Inspect recursively add( arg ); @@ -3479,11 +3453,11 @@ function adoptValue( value, resolve, reject, noValue ) { try { // Check for promise aspect first to privilege synchronous behavior - if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + if ( value && isFunction( ( method = value.promise ) ) ) { method.call( value ).done( resolve ).fail( reject ); // Other thenables - } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + } else if ( value && isFunction( ( method = value.then ) ) ) { method.call( value, resolve, reject ); // Other non-thenables @@ -3541,14 +3515,14 @@ jQuery.extend( { jQuery.each( tuples, function( i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; // deferred.progress(function() { bind to newDefer or newDefer.notify }) // deferred.done(function() { bind to newDefer or newDefer.resolve }) // deferred.fail(function() { bind to newDefer or newDefer.reject }) deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { + if ( returned && isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) @@ -3602,7 +3576,7 @@ jQuery.extend( { returned.then; // Handle a returned thenable - if ( jQuery.isFunction( then ) ) { + if ( isFunction( then ) ) { // Special processors (notify) just wait for resolution if ( special ) { @@ -3698,7 +3672,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onProgress ) ? + isFunction( onProgress ) ? onProgress : Identity, newDefer.notifyWith @@ -3710,7 +3684,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onFulfilled ) ? + isFunction( onFulfilled ) ? onFulfilled : Identity ) @@ -3721,7 +3695,7 @@ jQuery.extend( { resolve( 0, newDefer, - jQuery.isFunction( onRejected ) ? + isFunction( onRejected ) ? onRejected : Thrower ) @@ -3761,8 +3735,15 @@ jQuery.extend( { // fulfilled_callbacks.disable tuples[ 3 - i ][ 2 ].disable, + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock ); } @@ -3832,7 +3813,7 @@ jQuery.extend( { // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( master.state() === "pending" || - jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { return master.then(); } @@ -3960,7 +3941,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { bulk = key == null; // Sets many values - if ( jQuery.type( key ) === "object" ) { + if ( toType( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); @@ -3970,7 +3951,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { } else if ( value !== undefined ) { chainable = true; - if ( !jQuery.isFunction( value ) ) { + if ( !isFunction( value ) ) { raw = true; } @@ -4012,6 +3993,23 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { return len ? fn( elems[ 0 ], key ) : emptyGet; }; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} var acceptData = function( owner ) { // Accepts only: @@ -4074,14 +4072,14 @@ Data.prototype = { // Handle: [ owner, key, value ] args // Always use camelCase key (gh-2257) if ( typeof data === "string" ) { - cache[ jQuery.camelCase( data ) ] = value; + cache[ camelCase( data ) ] = value; // Handle: [ owner, { properties } ] args } else { // Copy the properties one-by-one to the cache object for ( prop in data ) { - cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + cache[ camelCase( prop ) ] = data[ prop ]; } } return cache; @@ -4091,7 +4089,7 @@ Data.prototype = { this.cache( owner ) : // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; }, access: function( owner, key, value ) { @@ -4139,9 +4137,9 @@ Data.prototype = { // If key is an array of keys... // We always set camelCase keys, so remove that. - key = key.map( jQuery.camelCase ); + key = key.map( camelCase ); } else { - key = jQuery.camelCase( key ); + key = camelCase( key ); // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace @@ -4287,7 +4285,7 @@ jQuery.fn.extend( { if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice( 5 ) ); + name = camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } @@ -4491,6 +4489,26 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } var isHiddenWithinTree = function( elem, el ) { // isHiddenWithinTree might be called from jQuery#filter function; @@ -4505,7 +4523,7 @@ var isHiddenWithinTree = function( elem, el ) { // Support: Firefox <=43 - 45 // Disconnected elements can have computed display: none, so first confirm that elem is // in the document. - jQuery.contains( elem.ownerDocument, elem ) && + isAttached( elem ) && jQuery.css( elem, "display" ) === "none"; }; @@ -4534,8 +4552,7 @@ var swap = function( elem, options, callback, args ) { function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, + var adjusted, scale, maxIterations = 20, currentValue = tween ? function() { @@ -4548,35 +4565,39 @@ function adjustCSS( elem, prop, valueParts, tween ) { unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches - initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; - // Make sure we update the tween properties later on - valueParts = valueParts || []; - // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; - do { - - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; + while ( maxIterations-- ) { - // Adjust and apply - initialInUnit = initialInUnit / scale; + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; } if ( valueParts ) { @@ -4692,9 +4713,9 @@ jQuery.fn.extend( { } ); var rcheckableType = ( /^(?:checkbox|radio)$/i ); -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); @@ -4764,7 +4785,7 @@ function setGlobalEval( elems, refElements ) { var rhtml = /<|&#?\w+;/; function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, + var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, @@ -4776,7 +4797,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { if ( elem || elem === 0 ) { // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { + if ( toType( elem ) === "object" ) { // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit @@ -4828,13 +4849,13 @@ function buildFragment( elems, context, scripts, selection, ignored ) { continue; } - contains = jQuery.contains( elem.ownerDocument, elem ); + attached = isAttached( elem ); // Append to fragment tmp = getAll( fragment.appendChild( elem ), "script" ); // Preserve script evaluation history - if ( contains ) { + if ( attached ) { setGlobalEval( tmp ); } @@ -4877,8 +4898,6 @@ function buildFragment( elems, context, scripts, selection, ignored ) { div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; } )(); -var documentElement = document.documentElement; - var @@ -4894,8 +4913,19 @@ function returnFalse() { return false; } +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + // Support: IE <=9 only -// See #13393 for more info +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 function safeActiveElement() { try { return document.activeElement; @@ -5195,9 +5225,10 @@ jQuery.event = { while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; @@ -5286,7 +5317,7 @@ jQuery.event = { enumerable: true, configurable: true, - get: jQuery.isFunction( hook ) ? + get: isFunction( hook ) ? function() { if ( this.originalEvent ) { return hook( this.originalEvent ); @@ -5321,39 +5352,51 @@ jQuery.event = { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, - focus: { + click: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); } + + // Return false to allow normal processing in the caller + return false; }, - delegateType: "focusout" - }, - click: { + trigger: function( data ) { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { - this.click(); - return false; + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); } + + // Return non-false to allow normal event-path propagation + return true; }, - // For cross-browser consistency, don't fire native .click() on links + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack _default: function( event ) { - return nodeName( event.target, "a" ); + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); } }, @@ -5370,6 +5413,93 @@ jQuery.event = { } }; +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + jQuery.removeEvent = function( elem, type, handle ) { // This "if" is needed for plain objects @@ -5421,7 +5551,7 @@ jQuery.Event = function( src, props ) { } // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); + this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed this[ jQuery.expando ] = true; @@ -5482,6 +5612,7 @@ jQuery.each( { shiftKey: true, view: true, "char": true, + code: true, charCode: true, key: true, keyCode: true, @@ -5528,6 +5659,33 @@ jQuery.each( { } }, jQuery.event.addProp ); +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout @@ -5620,14 +5778,13 @@ var /* eslint-enable */ - // Support: IE <=10 - 11, Edge 12 - 13 + // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g; // Prefer a tbody over its parent table for containing new rows @@ -5635,7 +5792,7 @@ function manipulationTarget( elem, content ) { if ( nodeName( elem, "table" ) && nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - return jQuery( ">tbody", elem )[ 0 ] || elem; + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; } return elem; @@ -5647,10 +5804,8 @@ function disableScript( elem ) { return elem; } function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); } else { elem.removeAttribute( "type" ); } @@ -5716,15 +5871,15 @@ function domManip( collection, args, callback, ignored ) { l = collection.length, iNoClone = l - 1, value = args[ 0 ], - isFunction = jQuery.isFunction( value ); + valueIsFunction = isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || + if ( valueIsFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); - if ( isFunction ) { + if ( valueIsFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); @@ -5778,14 +5933,16 @@ function domManip( collection, args, callback, ignored ) { !dataPriv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - if ( node.src ) { + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + } ); } } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); } } } @@ -5807,7 +5964,7 @@ function remove( elem, selector, keepData ) { } if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + if ( keepData && isAttached( node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); @@ -5825,7 +5982,7 @@ jQuery.extend( { clone: function( elem, dataAndEvents, deepDataAndEvents ) { var i, l, srcElements, destElements, clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); + inPage = isAttached( elem ); // Fix IE cloning issues if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && @@ -6065,8 +6222,6 @@ jQuery.each( { return this.pushStack( ret ); }; } ); -var rmargin = ( /^margin/ ); - var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); var getStyles = function( elem ) { @@ -6083,6 +6238,8 @@ var getStyles = function( elem ) { return view.getComputedStyle( elem ); }; +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + ( function() { @@ -6096,25 +6253,35 @@ var getStyles = function( elem ) { return; } + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); var divStyle = window.getComputedStyle( div ); pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - // Support: Android 4.0 - 4.3 only + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; documentElement.removeChild( container ); @@ -6123,7 +6290,12 @@ var getStyles = function( elem ) { div = null; } - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6138,26 +6310,26 @@ var getStyles = function( elem ) { div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, boxSizingReliable: function() { computeStyleTests(); return boxSizingReliableVal; }, - pixelMarginRight: function() { + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { computeStyleTests(); - return pixelMarginRightVal; + return pixelPositionVal; }, reliableMarginLeft: function() { computeStyleTests(); return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; } } ); } )(); @@ -6180,7 +6352,7 @@ function curCSS( elem, name, computed ) { if ( computed ) { ret = computed.getPropertyValue( name ) || computed[ name ]; - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + if ( ret === "" && !isAttached( elem ) ) { ret = jQuery.style( elem, name ); } @@ -6189,7 +6361,7 @@ function curCSS( elem, name, computed ) { // but width seems to be reliably pixels. // This is against the CSSOM draft spec: // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { // Remember the original values width = style.width; @@ -6236,30 +6408,13 @@ function addGetHookIf( conditionFn, hookFn ) { } -var +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property +// Return a vendor-prefixed property or undefined function vendorPropName( name ) { - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - // Check for vendor prefixed names var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), i = cssPrefixes.length; @@ -6272,16 +6427,33 @@ function vendorPropName( name ) { } } -// Return a property mapped along what jQuery.cssProps suggests or to -// a vendor prefixed property. +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property function finalPropName( name ) { - var ret = jQuery.cssProps[ name ]; - if ( !ret ) { - ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; } - return ret; + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; } + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + function setPositiveNumber( elem, value, subtract ) { // Any relative (+/-) values have already been @@ -6294,87 +6466,137 @@ function setPositiveNumber( elem, value, subtract ) { value; } -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; } for ( ; i < 4; i += 2 ) { - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } - if ( isBorderBox ) { + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" } else { - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } - return val; + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; } -function getWidthOrHeight( elem, name, extra ) { +function getWidthOrHeight( elem, dimension, extra ) { // Start with computed style - var valueIsBorderBox, - styles = getStyles( elem ), - val = curCSS( elem, name, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - // Computed unit is not pixels. Stop here and return. + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. if ( rnumnonpx.test( val ) ) { - return val; + if ( !extra ) { + return val; + } + val = "auto"; } - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - // Fall back to offsetWidth/Height when value is "auto" + // Fall back to offsetWidth/offsetHeight when value is "auto" // This happens for inline elements with no explicit setting (gh-3571) - if ( val === "auto" ) { - val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + // Support: IE 9-11 only + // Also use offsetWidth/offsetHeight for when box sizing is unreliable + // We use getClientRects() to check for hidden/disconnected. + // In those cases, the computed value can be trusted to be border-box + if ( ( !support.boxSizingReliable() && isBorderBox || + val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } } - // Normalize "", auto, and prepare for extra + // Normalize "" and auto val = parseFloat( val ) || 0; - // Use the active box-sizing model to add/subtract irrelevant styles + // Adjust for the element's box model return ( val + - augmentWidthOrHeight( + boxModelAdjustment( elem, - name, + dimension, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, - styles + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val ) ) + "px"; } @@ -6404,6 +6626,13 @@ jQuery.extend( { "flexGrow": true, "flexShrink": true, "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, "lineHeight": true, "opacity": true, "order": true, @@ -6415,9 +6644,7 @@ jQuery.extend( { // Add in properties whose names you wish to fix before // setting or getting the value - cssProps: { - "float": "cssFloat" - }, + cssProps: {}, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { @@ -6429,7 +6656,7 @@ jQuery.extend( { // Make sure that we're working with the right name var ret, type, hooks, - origName = jQuery.camelCase( name ), + origName = camelCase( name ), isCustomProp = rcustomProp.test( name ), style = elem.style; @@ -6461,7 +6688,9 @@ jQuery.extend( { } // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); } @@ -6497,7 +6726,7 @@ jQuery.extend( { css: function( elem, name, extra, styles ) { var val, num, hooks, - origName = jQuery.camelCase( name ), + origName = camelCase( name ), isCustomProp = rcustomProp.test( name ); // Make sure that we're working with the right name. We don't @@ -6535,8 +6764,8 @@ jQuery.extend( { } } ); -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -6552,29 +6781,52 @@ jQuery.each( [ "height", "width" ], function( i, name ) { // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); + return getWidthOrHeight( elem, dimension, extra ); } ) : - getWidthOrHeight( elem, name, extra ); + getWidthOrHeight( elem, dimension, extra ); } }, set: function( elem, value, extra ) { var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( - elem, - name, - extra, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 ); + } // Convert to pixels if value adjustment is needed if ( subtract && ( matches = rcssNum.exec( value ) ) && ( matches[ 3 ] || "px" ) !== "px" ) { - elem.style[ name ] = value; - value = jQuery.css( elem, name ); + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); } return setPositiveNumber( elem, value, subtract ); @@ -6618,7 +6870,7 @@ jQuery.each( { } }; - if ( !rmargin.test( prefix ) ) { + if ( prefix !== "margin" ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } } ); @@ -6728,9 +6980,9 @@ Tween.propHooks = { // Use .style if available and use plain properties where available. if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { tween.elem[ tween.prop ] = tween.now; @@ -6789,7 +7041,7 @@ function createFxNow() { window.setTimeout( function() { fxNow = undefined; } ); - return ( fxNow = jQuery.now() ); + return ( fxNow = Date.now() ); } // Generate parameters to create a standard animation @@ -6893,9 +7145,10 @@ function defaultPrefilter( elem, props, opts ) { // Restrict "overflow" and "display" styles during box animations if ( isBox && elem.nodeType === 1 ) { - // Support: IE <=9 - 11, Edge 12 - 13 + // Support: IE <=9 - 11, Edge 12 - 15 // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; // Identify a display type, preferring old show/hide data over the CSS cascade @@ -7003,7 +7256,7 @@ function propFilter( props, specialEasing ) { // camelCase, specialEasing and expand cssHook pass for ( index in props ) { - name = jQuery.camelCase( index ); + name = camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( Array.isArray( value ) ) { @@ -7128,9 +7381,9 @@ function Animation( elem, properties, options ) { for ( ; index < length; index++ ) { result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { + if ( isFunction( result.stop ) ) { jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); + result.stop.bind( result ); } return result; } @@ -7138,7 +7391,7 @@ function Animation( elem, properties, options ) { jQuery.map( props, createTween, animation ); - if ( jQuery.isFunction( animation.opts.start ) ) { + if ( isFunction( animation.opts.start ) ) { animation.opts.start.call( elem, animation ); } @@ -7171,7 +7424,7 @@ jQuery.Animation = jQuery.extend( Animation, { }, tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { + if ( isFunction( props ) ) { callback = props; props = [ "*" ]; } else { @@ -7203,9 +7456,9 @@ jQuery.Animation = jQuery.extend( Animation, { jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, + isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + easing: fn && easing || easing && !isFunction( easing ) && easing }; // Go to the end state if fx are off @@ -7232,7 +7485,7 @@ jQuery.speed = function( speed, easing, fn ) { opt.old = opt.complete; opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { + if ( isFunction( opt.old ) ) { opt.old.call( this ); } @@ -7396,7 +7649,7 @@ jQuery.fx.tick = function() { i = 0, timers = jQuery.timers; - fxNow = jQuery.now(); + fxNow = Date.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; @@ -7749,7 +8002,7 @@ jQuery.each( [ // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace function stripAndCollapse( value ) { var tokens = value.match( rnothtmlwhite ) || []; return tokens.join( " " ); @@ -7760,20 +8013,30 @@ function getClass( elem ) { return elem.getAttribute && elem.getAttribute( "class" ) || ""; } +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + jQuery.fn.extend( { addClass: function( value ) { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); } ); } - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; + classes = classesToArray( value ); + if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); @@ -7802,7 +8065,7 @@ jQuery.fn.extend( { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); } ); @@ -7812,9 +8075,9 @@ jQuery.fn.extend( { return this.attr( "class", "" ); } - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; + classes = classesToArray( value ); + if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); @@ -7844,13 +8107,14 @@ jQuery.fn.extend( { }, toggleClass: function( value, stateVal ) { - var type = typeof value; + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); - if ( typeof stateVal === "boolean" && type === "string" ) { + if ( typeof stateVal === "boolean" && isValidValue ) { return stateVal ? this.addClass( value ) : this.removeClass( value ); } - if ( jQuery.isFunction( value ) ) { + if ( isFunction( value ) ) { return this.each( function( i ) { jQuery( this ).toggleClass( value.call( this, i, getClass( this ), stateVal ), @@ -7862,12 +8126,12 @@ jQuery.fn.extend( { return this.each( function() { var className, i, self, classNames; - if ( type === "string" ) { + if ( isValidValue ) { // Toggle individual class names i = 0; self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; + classNames = classesToArray( value ); while ( ( className = classNames[ i++ ] ) ) { @@ -7926,7 +8190,7 @@ var rreturn = /\r/g; jQuery.fn.extend( { val: function( value ) { - var hooks, ret, isFunction, + var hooks, ret, valueIsFunction, elem = this[ 0 ]; if ( !arguments.length ) { @@ -7955,7 +8219,7 @@ jQuery.fn.extend( { return; } - isFunction = jQuery.isFunction( value ); + valueIsFunction = isFunction( value ); return this.each( function( i ) { var val; @@ -7964,7 +8228,7 @@ jQuery.fn.extend( { return; } - if ( isFunction ) { + if ( valueIsFunction ) { val = value.call( this, i, jQuery( this ).val() ); } else { val = value; @@ -8106,18 +8370,24 @@ jQuery.each( [ "radio", "checkbox" ], function() { // Return jQuery for attributes-only inclusion -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; jQuery.extend( jQuery.event, { trigger: function( event, data, elem, onlyHandlers ) { - var i, cur, tmp, bubbleType, ontype, handle, special, + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - cur = tmp = elem = elem || document; + cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { @@ -8169,7 +8439,7 @@ jQuery.extend( jQuery.event, { // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { @@ -8189,7 +8459,7 @@ jQuery.extend( jQuery.event, { // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - + lastElement = cur; event.type = i > 1 ? bubbleType : special.bindType || type; @@ -8221,7 +8491,7 @@ jQuery.extend( jQuery.event, { // Call a native DOM method on the target with the same name as the event. // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; @@ -8232,7 +8502,17 @@ jQuery.extend( jQuery.event, { // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + jQuery.event.triggered = undefined; if ( tmp ) { @@ -8278,31 +8558,6 @@ jQuery.fn.extend( { } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - // Support: Firefox <=44 // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 @@ -8346,7 +8601,7 @@ if ( !support.focusin ) { } var location = window.location; -var nonce = jQuery.now(); +var nonce = Date.now(); var rquery = ( /\?/ ); @@ -8404,7 +8659,7 @@ function buildParams( prefix, obj, traditional, add ) { } } ); - } else if ( !traditional && jQuery.type( obj ) === "object" ) { + } else if ( !traditional && toType( obj ) === "object" ) { // Serialize object item. for ( name in obj ) { @@ -8426,7 +8681,7 @@ jQuery.param = function( a, traditional ) { add = function( key, valueOrFunction ) { // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? + var value = isFunction( valueOrFunction ) ? valueOrFunction() : valueOrFunction; @@ -8434,6 +8689,10 @@ jQuery.param = function( a, traditional ) { encodeURIComponent( value == null ? "" : value ); }; + if ( a == null ) { + return ""; + } + // If an array was passed in, assume that it is an array of form elements. if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { @@ -8544,7 +8803,7 @@ function addToPrefiltersOrTransports( structure ) { i = 0, dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - if ( jQuery.isFunction( func ) ) { + if ( isFunction( func ) ) { // For each dataType in the dataTypeExpression while ( ( dataType = dataTypes[ i++ ] ) ) { @@ -8936,12 +9195,14 @@ jQuery.extend( { if ( !responseHeaders ) { responseHeaders = {}; while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); } } - match = responseHeaders[ key.toLowerCase() ]; + match = responseHeaders[ key.toLowerCase() + " " ]; } - return match == null ? null : match; + return match == null ? null : match.join( ", " ); }, // Raw string @@ -9016,7 +9277,7 @@ jQuery.extend( { if ( s.crossDomain == null ) { urlAnchor = document.createElement( "a" ); - // Support: IE <=8 - 11, Edge 12 - 13 + // Support: IE <=8 - 11, Edge 12 - 15 // IE throws exception on accessing the href property if url is malformed, // e.g. http://example.com:80x/ try { @@ -9074,8 +9335,8 @@ jQuery.extend( { // Remember the hash so we can put it back uncached = s.url.slice( cacheURL.length ); - // If data is available, append data to url - if ( s.data ) { + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; // #9682: remove data so that it's not used in an eventual retry @@ -9312,7 +9573,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { + if ( isFunction( data ) ) { type = type || callback; callback = data; data = undefined; @@ -9330,7 +9591,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { } ); -jQuery._evalUrl = function( url ) { +jQuery._evalUrl = function( url, options ) { return jQuery.ajax( { url: url, @@ -9340,7 +9601,16 @@ jQuery._evalUrl = function( url ) { cache: true, async: false, global: false, - "throws": true + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options ); + } } ); }; @@ -9350,7 +9620,7 @@ jQuery.fn.extend( { var wrap; if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { + if ( isFunction( html ) ) { html = html.call( this[ 0 ] ); } @@ -9376,7 +9646,7 @@ jQuery.fn.extend( { }, wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { + if ( isFunction( html ) ) { return this.each( function( i ) { jQuery( this ).wrapInner( html.call( this, i ) ); } ); @@ -9396,10 +9666,10 @@ jQuery.fn.extend( { }, wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); + var htmlIsFunction = isFunction( html ); return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); } ); }, @@ -9491,7 +9761,8 @@ jQuery.ajaxTransport( function( options ) { return function() { if ( callback ) { callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); @@ -9531,7 +9802,7 @@ jQuery.ajaxTransport( function( options ) { // Listen to events xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); // Support: IE 9 only // Use onreadystatechange to replace onabort @@ -9622,24 +9893,21 @@ jQuery.ajaxPrefilter( "script", function( s ) { // Bind script tag hack transport jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { var script, callback; return { send: function( _, complete ) { - script = jQuery( " + @@ -58,7 +57,7 @@

A

  • api_call_counts (pdpyras.APISession attribute)
  • -
  • api_key (pdpyras.PDSession attribute) +
  • api_key() (pdpyras.PDSession property)
  • @@ -236,17 +235,17 @@

    T

    @@ -281,7 +280,7 @@

    U

    ©2018, PagerDuty Inc.. | - Powered by Sphinx 1.8.2 + Powered by Sphinx 2.2.0 & Alabaster 0.7.12 diff --git a/docs/index.html b/docs/index.html index 7a4e388..7750166 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,18 +1,17 @@ - + - - - PDPYRAS: PagerDuty Python REST API Sessions — PagerDuty Python REST API Sessions 3.1.1 documentation + + PDPYRAS: PagerDuty Python REST API Sessions — PagerDuty Python REST API Sessions 3.1.2 documentation + @@ -36,8 +35,8 @@

    PDPYRAS: PagerDuty Python REST API Sessionscircleci-build

    About

    @@ -52,16 +51,16 @@

    About

    Features

      -
    • Efficient API access through automatic HTTP connection pooling and -persistence
    • -
    • Tested in / support for Python 2.7 through 3.7
    • -
    • Automatic cooldown/reattempt for rate limiting and transient network problems
    • -
    • Inclusion of required HTTP Request Headers for PagerDuty REST API requests
    • -
    • Bulk data retrieval and iteration over resource index endpoints with -automatic pagination
    • -
    • Individual object retrieval by name
    • -
    • API request profiling
    • -
    • Bonus Events API client
    • +
    • Efficient API access through automatic HTTP connection pooling and +persistence

    • +
    • Tested in / support for Python 2.7 through 3.7

    • +
    • Automatic cooldown/reattempt for rate limiting and transient network problems

    • +
    • Inclusion of required HTTP Request Headers for PagerDuty REST API requests

    • +
    • Bulk data retrieval and iteration over resource index endpoints with +automatic pagination

    • +
    • Individual object retrieval by name

    • +
    • API request profiling

    • +
    • Bonus Events API client

    @@ -106,13 +105,14 @@

    Copyright

    Warranty

    -
    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.

    +THE SOFTWARE.

    +

    @@ -211,13 +211,13 @@

    General Concepts

    URLs

      -
    • There is no need to include the API base URL. Any path relative to the web +
    • There is no need to include the API base URL. Any path relative to the web root, leading slash or no, is automatically appended to the base URL when constructing an API request, i.e. one can specify users/PABC123 or -/users/PABC123 instead of https://api.pagerduty.com/users/PABC123.

    • -
    • One can also pass the full URL of an API endpoint and it will still work, i.e. +/users/PABC123 instead of https://api.pagerduty.com/users/PABC123.

    • +
    • One can also pass the full URL of an API endpoint and it will still work, i.e. the self property of any object can be used, and there is no need to strip -out the API base URL.

    • +out the API base URL.

    @@ -228,28 +228,30 @@

    Request and Response Bodies -
  • Data is represented as dictionary or list objects, and should have a -structure that mirrors that of the API schema:

    Please note: as of yet, merging incidents is not supported by rput. For this and other unsupported endpoints, you will need to call put directly, @@ -542,16 +544,16 @@

    Events API Usagepdpyras.EventsAPISession. It has most of the same features as pdpyras.APISession:

      -
    • Connection persistence
    • -
    • Automatic cooldown and retry in the event of rate limiting or a transient network error
    • -
    • Setting all required headers
    • -
    • Configurable HTTP retry logic
    • +
    • Connection persistence

    • +
    • Automatic cooldown and retry in the event of rate limiting or a transient network error

    • +
    • Setting all required headers

    • +
    • Configurable HTTP retry logic

    To transmit alerts and perform actions through the events API, one would use:

    To instantiate a session object, pass the constructor the routing key:

    import pdpyras
    @@ -592,44 +594,44 @@ 

    Generic API Clientpdpyras.EventsAPISession.

    -class pdpyras.PDSession(api_key, name=None)
    +class pdpyras.PDSession(api_key, name=None)

    Base class for making HTTP requests to PagerDuty APIs.

    Instances of this class are essentially the same as requests.Session objects, but with a few modifications:

      -
    • The client will reattempt the request with configurable, auto-increasing -cooldown/retry intervals if encountering a network error or rate limit
    • -
    • When making requests, headers specified ad-hoc in calls to HTTP verb -functions will not replace, but will be merged with, default headers.
    • -
    • The request URL, if it doesn’t already start with the REST API base URL, -will be prepended with the default REST API base URL.
    • -
    • It will only perform requests with methods as given in the +
    • The client will reattempt the request with configurable, auto-increasing +cooldown/retry intervals if encountering a network error or rate limit

    • +
    • When making requests, headers specified ad-hoc in calls to HTTP verb +functions will not replace, but will be merged with, default headers.

    • +
    • The request URL, if it doesn’t already start with the REST API base URL, +will be prepended with the default REST API base URL.

    • +
    • It will only perform requests with methods as given in the permitted_methods list, and will raise PDClientError for -any other HTTP methods.

    • +any other HTTP methods.

    -
    +
    -api_key
    +property api_key

    API Key property getter.

    Returns the _api_key attribute’s value.

    -log = None
    +log = None

    A logging.Logger object for printing messages.

    -max_http_attempts = 10
    +max_http_attempts = 10

    The number of times that the client will retry after error statuses, for any that are defined greater than zero in retry.

    -max_network_attempts = 3
    +max_network_attempts = 3

    The number of times that connecting to the API will be attempted before treating the failure as non-transient; a PDClientError exception will be raised if this happens.

    @@ -637,33 +639,30 @@

    Generic API Client
    -parent = None
    +parent = None

    The super object (requests.Session)

    -postprocess(response)
    +postprocess(response)

    Perform supplemental actions immediately after receiving a response.

    -prepare_headers(method)
    +prepare_headers(method)

    Append special additional per-request headers.

    - --- - - - -
    Parameters:method – The HTTP method, in upper case.
    +
    +
    Parameters
    +

    method – The HTTP method, in upper case.

    +
    +
    -raise_if_http_error = True
    +raise_if_http_error = True

    Raise an exception upon receiving an error response from the server.

    This affects iteration (in the REST API) as well as the generic request method itself.

    @@ -678,47 +677,43 @@

    Generic API Client
    -request(method, url, **kwargs)
    +request(method, url, **kwargs)

    Make a generic PagerDuty API request.

    - --- - - - - - - - -
    Parameters:
      -
    • method (str) – The request method to use. Case-insensitive. May be one of get, put, -post or delete.
    • -
    • url (str) – The path/URL to request. If it does not start with the base URL, the -base URL will be prepended.
    • -
    • **kwargs

      Additional keyword arguments to pass to requests.Session.request

      -
    • +
      +
      Parameters
      +
        +
      • method (str) – The request method to use. Case-insensitive. May be one of get, put, +post or delete.

      • +
      • url (str) – The path/URL to request. If it does not start with the base URL, the +base URL will be prepended.

      • +
      • **kwargs

        Additional keyword arguments to pass to requests.Session.request

        +

      -
    Returns:

    the HTTP response object

    -
    Return type:

    requests.Response

    -
    +
    +
    Returns
    +

    the HTTP response object

    +
    +
    Return type
    +

    requests.Response

    +
    +

    -retry = None
    +retry = None

    A dict defining the retry behavior for each HTTP response status code.

    Each key in this dictionary represents a HTTP response code. The behavior is specified by the value at each key as follows:

      -
    • -1 to retry infinitely
    • -
    • 0 to return the requests.Response object and exit (which is the -default behavior)
    • -
    • n, where n > 0, to retry n times (or up +
    • -1 to retry infinitely

    • +
    • 0 to return the requests.Response object and exit (which is the +default behavior)

    • +
    • n, where n > 0, to retry n times (or up to max_http_attempts total for all statuses, whichever is encountered first), and raise a PDClientError after that many attempts. For each successive attempt, the wait time will increase by a -factor of sleep_timer_base.

    • +factor of sleep_timer_base.

    The default behavior is to retry infinitely on a 429, and return the response in any other case (assuming a HTTP response was received from the @@ -727,7 +722,7 @@

    Generic API Client
    -set_api_key(api_key)
    +set_api_key(api_key)

    Set the API key/token.

    Child classes should implement this method to do special things like setting default headers.

    @@ -737,7 +732,7 @@

    Generic API Client
    -sleep_timer = 1.5
    +sleep_timer = 1.5

    Default initial cooldown time factor for rate limiting and network errors.

    Each time that the request makes a followup request, there will be a delay in seconds equal to this number times sleep_timer_base to the power @@ -746,20 +741,20 @@

    Generic API Client
    -sleep_timer_base = 2
    +sleep_timer_base = 2

    After each retry, the time to sleep before reattempting the API connection and request will increase by a factor of this amount.

    -
    +
    -trunc_key
    +property trunc_key

    Truncated key for secure display/identification purposes.

    -
    +
    -user_agent
    +property user_agent

    Unique user-agent header for making requests

    @@ -772,139 +767,127 @@

    REST API Client
    -class pdpyras.APISession(api_key, name=None, default_from=None)
    +class pdpyras.APISession(api_key, name=None, default_from=None)

    Reusable PagerDuty REST API session objects for making API requests.

    Includes some convenience functions as well, i.e. rget, find and iter_all, to eliminate some repetitive tasks associated with making API calls.

    Inherits from PDSession.

    - --- - - - - - -
    Parameters:
      -
    • api_key – REST API access token to use for HTTP requests
    • -
    • name (str or None) – Optional name identifier for logging. If unspecified or None, it -will be the last four characters of the REST API token.
    • -
    • default_from (str or None) – Email address of a valid PagerDuty user to use in API requests by -default as the From header (see: HTTP Request Headers)
    • +
      +
      Parameters
      +
        +
      • api_key – REST API access token to use for HTTP requests

      • +
      • name (str or None) – Optional name identifier for logging. If unspecified or None, it +will be the last four characters of the REST API token.

      • +
      • default_from (str or None) – Email address of a valid PagerDuty user to use in API requests by +default as the From header (see: HTTP Request Headers)

      -
    Members:
    +
    +
    Members
    +

    +

    -rdelete(self, path, **kw)
    +rdelete(self, path, **kw)
    -rget(self, path, **kw)
    +rget(self, path, **kw)
    -rpost(self, path, **kw)
    +rpost(self, path, **kw)
    -rput(self, path, **kw)
    +rput(self, path, **kw)
    -api_call_counts = None
    +api_call_counts = None

    A dict object recording the number of API calls per endpoint

    -api_time = None
    +api_time = None

    A dict object recording the total time of API calls to each endpoint

    -default_from = None
    +default_from = None

    The default value to use as the From request header

    -default_page_size = 100
    +default_page_size = 100

    This will be the default number of results requested in each page when iterating/querying an index (the limit parameter). See: pagination.

    -dict_all(path, **kw)
    +dict_all(path, **kw)

    Returns a dictionary of all objects from a given index endpoint.

    With the exception of by, all keyword arguments passed to this method are also passed to iter_all; see the documentation on that method for further details.

    - --- - - - -
    Parameters:
      -
    • path – The index endpoint URL to use.
    • -
    • by – The attribute of each object to use for the key values of the +
      +
      Parameters
      +
        +
      • path – The index endpoint URL to use.

      • +
      • by – The attribute of each object to use for the key values of the dictionary. This is id by default. Please note, there is no uniqueness validation, so if you use an attribute that is not distinct for the data set, this function will omit some data in the -results.

      • -
      • params – Additional URL parameters to include.
      • -
      • paginate – If True, use pagination to get through all available results. If +results.

      • +
      • params – Additional URL parameters to include.

      • +
      • paginate – If True, use pagination to get through all available results. If False, ignore / don’t page through more than the first 100 results. Useful for special index endpoints that don’t fully support pagination yet, i.e. “nested” endpoints like -/users/{id}/contact_methods and /services/{id}/integrations

      • +/users/{id}/contact_methods and /services/{id}/integrations

      -
    +
    +
    -find(resource, query, attribute='name', params=None)
    +find(resource, query, attribute='name', params=None)

    Finds an object of a given resource exactly matching a query.

    Will query a given resource index endpoint using the query parameter supported by most indexes.

    Returns a dict if a result is found. The structure will be that of an entry in the index endpoint schema’s array of results. Otherwise, it will return None if no result is found or an error is encountered.

    - --- - - - - - -
    Parameters:
      -
    • resource (str) – The name of the resource endpoint to query, i.e. -escalation_policies
    • -
    • query (str) – The string to query for in the the index.
    • -
    • attribute (str) – The property of each result to compare against the query value when +
      +
      Parameters
      +
        +
      • resource (str) – The name of the resource endpoint to query, i.e. +escalation_policies

      • +
      • query (str) – The string to query for in the the index.

      • +
      • attribute (str) – The property of each result to compare against the query value when searching for an exact match. By default it is name, but when -searching for user by email (for example) it can be set to email

      • -
      • params (dict or None) – Optional additional parameters to use when querying.
      • +searching for user by email (for example) it can be set to email

        +
      • params (dict or None) – Optional additional parameters to use when querying.

      -
    Return type:

    dict

    -
    +
    +
    Return type
    +

    dict

    +
    +
    -iter_all(path, params=None, paginate=True, item_hook=None, total=False)
    +iter_all(path, params=None, paginate=True, item_hook=None, total=False)

    Iterator for the contents of an index endpoint or query.

    Automatically paginates and yields the results in each page, until all matching results have been yielded or a HTTP error response is received.

    @@ -912,119 +895,101 @@

    REST API Client/users endpoint, each yielded value will be an entry of the users array property in the response; see: List Users

    - --- - - - - - - - -
    Parameters:
      -
    • path (str) – The index endpoint URL to use.
    • -
    • params (dict or None) – Additional URL parameters to include.
    • -
    • paginate (bool) – If True, use pagination to get through all available results. If +
      +
      Parameters
      +
        +
      • path (str) – The index endpoint URL to use.

      • +
      • params (dict or None) – Additional URL parameters to include.

      • +
      • paginate (bool) – If True, use pagination to get through all available results. If False, ignore / don’t page through more than the first 100 results. Useful for special index endpoints that don’t fully support pagination yet, i.e. “nested” endpoints like (as of this writing): -/users/{id}/contact_methods and /services/{id}/integrations

      • -
      • item_hook – Callable object that will be invoked for each iteration, i.e. for +/users/{id}/contact_methods and /services/{id}/integrations

      • +
      • item_hook – Callable object that will be invoked for each iteration, i.e. for printing progress. It will be called with three parameters: a dict representing a given result in the iteration, the number of the -item, and the total number of items in the series.

      • -
      • total (bool) – If True, the total parameter will be included in API calls, and +item, and the total number of items in the series.

      • +
      • total (bool) – If True, the total parameter will be included in API calls, and the value for the third parameter to the item hook will be the total count of records that match the query. Leaving this as False confers a small performance advantage, as the API in this case does not have -to compute the total count of results in the query.

      • +to compute the total count of results in the query.

      -
    Yields:

    Results from the index endpoint.

    -
    Return type:

    dict

    -
    +

    +
    Yields
    +

    Results from the index endpoint.

    +
    +
    Return type
    +

    dict

    +
    +
    -list_all(path, **kw)
    +list_all(path, **kw)

    Returns a list of all objects from a given index endpoint.

    All keyword arguments passed to this function are also passed directly to iter_all; see the documentation on that method for details.

    - --- - - - -
    Parameters:path – The index endpoint URL to use.
    +
    +
    Parameters
    +

    path – The index endpoint URL to use.

    +
    +
    -postprocess(response, suffix=None)
    +postprocess(response, suffix=None)

    Records performance information about the API call.

    This method is called automatically by request() for all requests, and can be extended in child classes.

    - --- - - - -
    Parameters:
      -
    • method (str) – Method of the request
    • -
    • response (requests.Response) – Response object
    • -
    • suffix (str or None) – Optional suffix to append to the key
    • +
      +
      Parameters
      +
        +
      • method (str) – Method of the request

      • +
      • response (requests.Response) – Response object

      • +
      • suffix (str or None) – Optional suffix to append to the key

      -
    +
    +
    -prepare_headers(method)
    +prepare_headers(method)

    Append special additional per-request headers.

    - --- - - - -
    Parameters:method – The HTTP method, in upper case.
    +
    +
    Parameters
    +

    method – The HTTP method, in upper case.

    +
    +
    -profiler_key(method, path, suffix=None)
    +profiler_key(method, path, suffix=None)

    Generates a fixed-format key to classify a request, i.e. for profiling.

    Returns a string that will have all instances of IDs replaced with {id}, and will begin with the method in lower case followed by a colon, i.e. get:escalation_policies/{id}

    - --- - - - - - -
    Parameters:
      -
    • method (str) – The request method
    • -
    • path (str) – The path/URI to classify
    • -
    • suffix (str) – Optional suffix to append to the key
    • +
      +
      Parameters
      +
        +
      • method (str) – The request method

      • +
      • path (str) – The path/URI to classify

      • +
      • suffix (str) – Optional suffix to append to the key

      -
    Return type:

    str

    -
    +
    +
    Return type
    +

    str

    +
    +
    -set_api_key(api_key)
    +set_api_key(api_key)

    Set the API key/token.

    Child classes should implement this method to do special things like setting default headers.

    @@ -1032,41 +997,38 @@

    REST API Client +
    -subdomain
    +property subdomain

    Subdomain of the PagerDuty account of the API access token.

    - --- - - - -
    Type:str or None
    +
    +
    Type
    +

    str or None

    +
    +
    -
    +
    -total_call_count
    +property total_call_count

    The total number of API calls made by this instance.

    -
    +
    -total_call_time
    +property total_call_time

    The total time spent making API calls.

    -
    +
    -trunc_token
    +property trunc_token

    Truncated token for secure display/identification purposes.

    -url = 'https://api.pagerduty.com'
    +url = 'https://api.pagerduty.com'

    Base URL of the REST API

    @@ -1079,115 +1041,98 @@

    Events API Clientpdpyras.PDSession.

    -class pdpyras.EventsAPISession(api_key, name=None)
    +class pdpyras.EventsAPISession(api_key, name=None)

    Session class for submitting events to the PagerDuty v2 Events API.

    Provides methods for submitting events to the Events API.

    Inherits from PDSession.

    -acknowledge(dedup_key)
    +acknowledge(dedup_key)

    Acknowledge an alert via Events API.

    - --- - - - -
    Parameters:dedup_key – The deduplication key of the alert to set to the acknowledged state.
    +
    +
    Parameters
    +

    dedup_key – The deduplication key of the alert to set to the acknowledged state.

    +
    +
    -prepare_headers(method)
    +prepare_headers(method)

    Add user agent and content type headers for Events API requests.

    -resolve(dedup_key)
    +resolve(dedup_key)

    Resolve an alert via Events API.

    - --- - - - -
    Parameters:dedup_key – The deduplication key of the alert to resolve.
    +
    +
    Parameters
    +

    dedup_key – The deduplication key of the alert to resolve.

    +
    +
    -send_event(action, dedup_key=None, **properties)
    +send_event(action, dedup_key=None, **properties)

    Send an event to the v2 Events API.

    See: https://v2.developer.pagerduty.com/docs/send-an-event-events-api-v2

    - --- - - - - - -
    Parameters:
      -
    • action (str) – The action to perform through the Events API: trigger, acknowledge -or resolve.
    • -
    • dedup_key (str) – The deduplication key; used for determining event uniqueness and -associating actions with existing incidents.
    • -
    • **properties – Additional properties to set, i.e. if action is trigger -this would include payload
    • +
      +
      Parameters
      +
        +
      • action (str) – The action to perform through the Events API: trigger, acknowledge +or resolve.

      • +
      • dedup_key (str) – The deduplication key; used for determining event uniqueness and +associating actions with existing incidents.

      • +
      • **properties – Additional properties to set, i.e. if action is trigger +this would include payload

      -
    Returns:

    The deduplication key of the incident, if any.

    -
    +
    +
    Returns
    +

    The deduplication key of the incident, if any.

    +
    +
    -set_api_key(api_key)
    +set_api_key(api_key)

    Sets the routing key in the X-Routing-Key header.

    - --- - - - -
    Parameters:api_key (str) – The routing key to use for this session.
    +
    +
    Parameters
    +

    api_key (str) – The routing key to use for this session.

    +
    +
    -trigger(summary, source, dedup_key=None, severity='critical', payload=None, custom_details=None, images=None, links=None)
    +trigger(summary, source, dedup_key=None, severity='critical', payload=None, custom_details=None, images=None, links=None)

    Trigger an incident

    - --- - - - - - -
    Parameters:
      -
    • summary (str) – Summary / brief description of what is wrong.
    • -
    • source (str) – A human-readable name identifying the system that is affected.
    • -
    • dedup_key (str) – The deduplication key; used for determining event uniqueness and -associating actions with existing incidents.
    • -
    • severity (str) – Alert severity. Sets the payload.severity property.
    • -
    • payload (dict) – Set the payload directly. Can be used in conjunction with other +
      +
      Parameters
      +
        +
      • summary (str) – Summary / brief description of what is wrong.

      • +
      • source (str) – A human-readable name identifying the system that is affected.

      • +
      • dedup_key (str) – The deduplication key; used for determining event uniqueness and +associating actions with existing incidents.

      • +
      • severity (str) – Alert severity. Sets the payload.severity property.

      • +
      • payload (dict) – Set the payload directly. Can be used in conjunction with other parameters that also set payload properties; these properties will be merged into the default payload, and any properties in this parameter will take precedence except with regard to -custom_details.

      • -
      • custom_details (dict) – The payload.custom_details property of the payload. Will -override the property set in the payload parameter if given.
      • -
      • images (list) – Set the images property of the event.
      • -
      • links (list) – Set the links property of the event.
      • +custom_details.

        +
      • custom_details (dict) – The payload.custom_details property of the payload. Will +override the property set in the payload parameter if given.

      • +
      • images (list) – Set the images property of the event.

      • +
      • links (list) – Set the links property of the event.

      -
    Return type:

    str

    -
    +
    +
    Return type
    +

    str

    +
    +

    @@ -1197,11 +1142,11 @@

    Events API Client

    -class pdpyras.PDClientError(message, response=None)
    +class pdpyras.PDClientError(message, response=None)

    General API errors base class.

    -response = None
    +response = None

    The HTTP response object, if a response was successfully received.

    In the case of network errors, this property will be None.

    @@ -1213,57 +1158,55 @@

    Errors

    Functions

    -pdpyras.auto_json(method)
    +pdpyras.auto_json(method)

    Function decorator that makes methods return the full response JSON

    -pdpyras.last_4(secret)
    +pdpyras.last_4(secret)

    Returns an abbreviation of the input

    -pdpyras.object_type(r_name)
    +pdpyras.object_type(r_name)

    Derives an object type (i.e. user) from a resource name (i.e. users)

    - --- - - - - - - - -
    Parameters:r_name – Resource name, i.e. would be users for the resource index URL -https://api.pagerduty.com/users
    Returns:The object type name; usually the type property of an instance -of the given resource.
    Return type:str
    +
    +
    Parameters
    +

    r_name – Resource name, i.e. would be users for the resource index URL +https://api.pagerduty.com/users

    +
    +
    Returns
    +

    The object type name; usually the type property of an instance +of the given resource.

    +
    +
    Return type
    +

    str

    +
    +
    -pdpyras.raise_on_error(r)
    +pdpyras.raise_on_error(r)

    Raise an exception if a HTTP error response has error status.

    - --- - - - - - - - -
    Parameters:r (requests.Response) – Response object corresponding to the response received.
    Returns:The response object, if its status was success
    Return type:requests.Response
    +
    +
    Parameters
    +

    r (requests.Response) – Response object corresponding to the response received.

    +
    +
    Returns
    +

    The response object, if its status was success

    +
    +
    Return type
    +

    requests.Response

    +
    +
    -pdpyras.resource_envelope(method)
    +pdpyras.resource_envelope(method)

    Convenience and consistency decorator for HTTP verb functions.

    This makes the request methods GET, POST and PUT always return a dictionary object representing the resource at the envelope property (i.e. @@ -1283,43 +1226,40 @@

    Errors assuming nothing went wrong in the whole process).

    These methods are APISession.rget, APISession.rpost and APISession.rput.

    - --- - - - - - -
    Parameters:method – Method being decorated. Must take one positional argument +
    +
    Parameters
    +

    method – Method being decorated. Must take one positional argument after self that is the URL/path to the resource, and must return an object of class requests.Response, and be named after the HTTP method -but with “r” prepended.

    Returns:A callable object; the reformed method
    +but with “r” prepended.

    +

    +
    Returns
    +

    A callable object; the reformed method

    +
    +

    -pdpyras.resource_name(obj_type)
    +pdpyras.resource_name(obj_type)

    Transforms an object type into a resource name

    - --- - - - - - - - -
    Parameters:obj_type – The object type, i.e. user or user_reference
    Returns:The name of the resource, i.e. the last part of the URL for the -resource’s index URL
    Return type:str
    +
    +
    Parameters
    +

    obj_type – The object type, i.e. user or user_reference

    +
    +
    Returns
    +

    The name of the resource, i.e. the last part of the URL for the +resource’s index URL

    +
    +
    Return type
    +

    str

    +
    +
    -pdpyras.tokenize_url_path(url, baseurl='https://api.pagerduty.com')
    +pdpyras.tokenize_url_path(url, baseurl='https://api.pagerduty.com')

    Classifies a URL according to some global patterns in the API.

    If the URL is to access a specific individual resource by ID, the node type will be identified as {id}, whereas if it is an index, it will be @@ -1327,48 +1267,44 @@

    Errors

    For instance, https://api.pagerduty.com/users would be classified as ("users", "{index}"), and https://api.pagerduty.com/users/PABC123 would be classified as ("users", "{id}")

    - --- - - - - - -
    Parameters:
      -
    • url (str) – The URL (or path) to be classified; the function should accept either
    • -
    • baseurl (str) – API base URL
    • +
      +
      Parameters
      +
        +
      • url (str) – The URL (or path) to be classified; the function should accept either

      • +
      • baseurl (str) – API base URL

      -
    Return type:

    tuple

    -
    +

    +
    Return type
    +

    tuple

    +
    +
    -pdpyras.try_decoding(r)
    +pdpyras.try_decoding(r)

    JSON-decode a response body and raise PDClientError if it fails.

    - --- - - - -
    Parameters:rrequests.Response object
    +
    +
    Parameters
    +

    rrequests.Response object

    +
    +

    Changelog

    +

    2019-10-01: version 3.1.2

    +
      +
    • Fixed regression bug / departure from documentation (#17): the payload parameter does not merge with but rather completely replaces the default payload

    • +

    2019-04-05: version 3.1.1

    @@ -1484,7 +1420,7 @@

    Table of Contents

    ©2018, PagerDuty Inc.. | - Powered by Sphinx 1.8.2 + Powered by Sphinx 2.2.0 & Alabaster 0.7.12 | diff --git a/docs/objects.inv b/docs/objects.inv index 659b251..cf729ee 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html index 9d906b6..0524cb9 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -1,18 +1,17 @@ - + - - - Python Module Index — PagerDuty Python REST API Sessions 3.1.1 documentation + + Python Module Index — PagerDuty Python REST API Sessions 3.1.2 documentation + @@ -71,7 +70,7 @@

    Python Module Index

    ©2018, PagerDuty Inc.. | - Powered by Sphinx 1.8.2 + Powered by Sphinx 2.2.0 & Alabaster 0.7.12
  • diff --git a/docs/search.html b/docs/search.html index 34b1d61..dd9a2ad 100644 --- a/docs/search.html +++ b/docs/search.html @@ -1,12 +1,10 @@ - + - - - Search — PagerDuty Python REST API Sessions 3.1.1 documentation + + Search — PagerDuty Python REST API Sessions 3.1.2 documentation @@ -14,14 +12,11 @@ + - - - + @@ -55,7 +50,7 @@

    Search

    containing fewer words won't appear in the result list.

    - +
    @@ -78,7 +73,7 @@

    Search

    ©2018, PagerDuty Inc.. | - Powered by Sphinx 1.8.2 + Powered by Sphinx 2.2.0 & Alabaster 0.7.12 diff --git a/docs/searchindex.js b/docs/searchindex.js index 6fdc1d0..9cdc726 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":1,sphinx:55},filenames:["index.rst"],objects:{"":{pdpyras:[0,0,0,"-"]},"pdpyras.APISession":{api_call_counts:[0,2,1,""],api_time:[0,2,1,""],default_from:[0,2,1,""],default_page_size:[0,2,1,""],dict_all:[0,3,1,""],find:[0,3,1,""],iter_all:[0,3,1,""],list_all:[0,3,1,""],postprocess:[0,3,1,""],prepare_headers:[0,3,1,""],profiler_key:[0,3,1,""],rdelete:[0,3,1,""],rget:[0,3,1,""],rpost:[0,3,1,""],rput:[0,3,1,""],set_api_key:[0,3,1,""],subdomain:[0,2,1,""],total_call_count:[0,2,1,""],total_call_time:[0,2,1,""],trunc_token:[0,2,1,""],url:[0,2,1,""]},"pdpyras.EventsAPISession":{acknowledge:[0,3,1,""],prepare_headers:[0,3,1,""],resolve:[0,3,1,""],send_event:[0,3,1,""],set_api_key:[0,3,1,""],trigger:[0,3,1,""]},"pdpyras.PDClientError":{response:[0,2,1,""]},"pdpyras.PDSession":{api_key:[0,2,1,""],log:[0,2,1,""],max_http_attempts:[0,2,1,""],max_network_attempts:[0,2,1,""],parent:[0,2,1,""],postprocess:[0,3,1,""],prepare_headers:[0,3,1,""],raise_if_http_error:[0,2,1,""],request:[0,3,1,""],retry:[0,2,1,""],set_api_key:[0,3,1,""],sleep_timer:[0,2,1,""],sleep_timer_base:[0,2,1,""],trunc_key:[0,2,1,""],user_agent:[0,2,1,""]},pdpyras:{APISession:[0,1,1,""],EventsAPISession:[0,1,1,""],PDClientError:[0,1,1,""],PDSession:[0,1,1,""],auto_json:[0,4,1,""],last_4:[0,4,1,""],object_type:[0,4,1,""],raise_on_error:[0,4,1,""],resource_envelope:[0,4,1,""],resource_name:[0,4,1,""],tokenize_url_path:[0,4,1,""],try_decoding:[0,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"0123456789abcdef0123456789abcdef":0,"101st":0,"201st":0,"break":0,"case":0,"catch":0,"class":0,"default":0,"final":0,"import":0,"new":0,"return":0,"super":0,"transient":0,"true":0,"try":0,"while":0,AND:0,Added:0,BUT:0,FOR:0,For:0,IDs:0,NOT:0,Not:0,One:0,THE:0,The:0,There:0,These:0,USE:0,Useful:0,WITH:0,Will:0,With:0,_all:0,_api_kei:0,abbrevi:0,abc123:0,abov:0,absolut:0,accept:0,accord:0,account:0,acknowledg:0,action:0,add:0,added:0,adding:0,addit:0,address:0,admin:0,advanc:0,advantag:0,affect:0,after:0,against:0,agent:0,alert:0,algorithm:0,all:0,allow:0,along:0,alreadi:0,also:0,altern:0,although:0,altogeth:0,alwai:0,amount:0,analyt:0,ani:0,anoth:0,api_call_count:0,api_kei:0,api_tim:0,api_token:0,apisess:0,append:0,appli:0,applic:0,approach:0,appropri:0,argument:0,aris:0,around:0,arrai:0,assert:0,assign:0,associ:0,assum:0,asynchron:0,attempt:0,attribut:0,author:0,auto:0,auto_json:0,automat:0,avail:0,avoid:0,back:0,base:0,baseurl:0,becaus:0,becom:0,been:0,befor:0,begin:0,behav:0,behavior:0,being:0,beta:0,between:0,bit:0,bob:0,bonu:0,bool:0,born:0,both:0,brief:0,bug:0,bulk:0,bulletproof:0,busi:0,call:0,callabl:0,can:0,cannot:0,care:0,carri:0,caus:0,cautiou:0,certain:0,chang:0,charact:0,charg:0,check:0,child:0,claim:0,classifi:0,code:0,colon:0,com:0,commit:0,common:0,commonli:0,compar:0,comparison:0,compil:0,complet:0,comput:0,condit:0,conduc:0,confer:0,configur:0,conjunct:0,connect:0,consid:0,consist:0,constitut:0,constrain:0,construct:0,constructor:0,contact_method:0,contain:0,content:0,contract:0,conveni:0,cooldown:0,copi:0,correspond:0,could:0,count:0,coverag:0,creation:0,critic:0,custom:0,custom_detail:0,damag:0,dav:0,dave:0,david:0,deal:0,decod:0,decor:0,dedup:0,dedup_kei:0,dedupl:0,deem:0,def:0,default_from:0,default_page_s:0,defin:0,delai:0,demitri:0,depend:0,deriv:0,descript:0,design:0,desir:0,detail:0,determin:0,dict:0,dict_al:0,dictionari:0,differ:0,directli:0,directori:0,discov:0,displai:0,distinct:0,distinguish:0,distribut:0,doc:0,document:0,doe:0,doesn:0,don:0,done:0,download:0,due:0,duplic:0,dure:0,dusti:0,each:0,easi:0,easili:0,effect:0,effici:0,effort:0,either:0,elabor:0,elif:0,elimin:0,els:0,email:0,encapsul:0,enclos:0,encod:0,encount:0,end:0,enforc:0,ensur:0,entiti:0,entri:0,envelop:0,equal:0,escal:0,escalation_polici:0,essenti:0,etc:0,eventsapisess:0,ever:0,everyth:0,exact:0,exactli:0,exampl:0,example35:0,except:0,exist:0,exit:0,expect:0,experiment:0,express:0,extend:0,factor:0,fail:0,failur:0,fals:0,far:0,faulti:0,fetch:0,few:0,file:0,filter:0,find:0,finish:0,fire:0,first:0,first_100_dav:0,fit:0,fix:0,flow:0,focu:0,follow:0,followup:0,format:0,forward:0,found:0,four:0,free:0,frequent:0,from:0,full:0,fulli:0,furnish:0,further:0,furthermor:0,get:0,getter:0,github:0,give:0,given:0,global:0,goal:0,going:0,grant:0,greater:0,halt:0,happen:0,hard:0,has:0,have:0,header:0,help:0,here:0,herebi:0,higher:0,hoc:0,holder:0,hook:0,how:0,howev:0,human:0,hundr:0,identif:0,identifi:0,ignor:0,imag:0,immedi:0,impact:0,implement:0,impli:0,incid:0,incident_refer:0,includ:0,inclus:0,incorrect:0,increas:0,increment:0,indefinit:0,index:0,individu:0,infinit:0,inform:0,inherit:0,initi:0,innermost:0,input:0,insensit:0,insert:0,instanc:0,instanti:0,instead:0,insul:0,integr:0,intend:0,intern:0,interrupt:0,interv:0,introduc:0,introduct:0,invok:0,isinst:0,issu:0,item:0,item_hook:0,iter_al:0,its:0,itself:0,jane:0,jget:0,job:0,jpost:0,jput:0,json:0,just:0,kei:0,key1:0,key2:0,keyerror:0,keyword:0,kind:0,kwarg:0,last:0,last_4:0,later:0,lead:0,leav:0,length:0,let:0,liabil:0,liabl:0,librari:0,licens:0,lies:0,light:0,like:0,limit:0,link:0,list:0,list_al:0,littl:0,local:0,log:0,log_entri:0,logger:0,login:0,longer:0,lower:0,made:0,mai:0,make:0,mani:0,manual:0,match:0,max_http_attempt:0,max_network_attempt:0,maximum:0,mean:0,member:0,merchant:0,merg:0,messag:0,method:0,metric:0,minim:0,minimum:0,mirror:0,mit:0,modif:0,modifi:0,modul:0,more:0,moreov:0,morgan:0,most:0,multipl:0,must:0,name:0,namespac:0,natur:0,necess:0,need:0,nest:0,net:0,network:0,next:0,node:0,non:0,none:0,noninfring:0,note:0,notebook:0,noth:0,notic:0,notification_rul:0,now:0,number:0,obj_typ:0,object:0,object_typ:0,obtain:0,obvious:0,occur:0,odd:0,offset:0,old:0,omit:0,one:0,onli:0,onu:0,oper:0,option:0,order:0,origin:0,other:0,otherwis:0,our:0,ourselv:0,out:0,over:0,overal:0,overkil:0,overrid:0,own:0,pabc123:0,page:0,pagin:0,parallel:0,param:0,paramet:0,parent:0,part:0,particular:0,pass:0,path:0,pattern:0,paus:0,payload:0,pdclienterror:0,pdef456:0,pdsession:0,per:0,perform:0,permiss:0,permit:0,permitted_method:0,persist:0,person:0,pertain:0,phij789:0,pi86now:0,pip:0,pjkl678:0,place:0,plain:0,pleas:0,plu:0,pnoexst:0,polici:0,pool:0,portion:0,posit:0,possibl:0,post:0,postprocess:0,power:0,practic:0,pre:0,preced:0,predict:0,prepare_head:0,prepend:0,prerequisit:0,presenc:0,previou:0,print:0,prioriti:0,problem:0,process:0,profil:0,profiler_kei:0,program:0,progress:0,project:0,promote_to_admin:0,properti:0,provid:0,publish:0,pull:0,purpos:0,put:0,pzyx321:0,queri:0,question:0,r_name:0,rais:0,raise_if_http_error:0,raise_on_error:0,rang:0,rank:0,rate:0,rather:0,rdelet:0,readabl:0,real:0,reason:0,reattempt:0,receiv:0,recommend:0,record:0,refactor:0,refer:0,reform:0,reinvent:0,rel:0,remov:0,renam:0,repeat:0,repetit:0,replac:0,report:0,repositori:0,repres:0,reproduc:0,reqeust:0,requir:0,rescind:0,resolv:0,resourc:0,resource_envelop:0,resource_nam:0,respect:0,respond:0,restrict:0,result:0,retriev:0,reusabl:0,rget:0,right:0,role:0,root:0,rout:0,routing_kei:0,rpost:0,rput:0,rule:0,safeguard:0,sai:0,same:0,sane:0,save:0,schema:0,search:0,second:0,secret:0,secur:0,see:0,self:0,sell:0,send:0,send_ev:0,seri:0,serial:0,serv:0,server:0,servic:0,session_id:0,set:0,set_api_kei:0,setter:0,sever:0,shall:0,shift:0,should:0,similar:0,similarli:0,simpl:0,simpler:0,simpli:0,simultan:0,singl:0,skip:0,slash:0,sleep:0,sleep_tim:0,sleep_timer_bas:0,small:0,softwar:0,some:0,someth:0,sort:0,sought:0,sourc:0,specif:0,specifi:0,spent:0,standard:0,start:0,state:0,statu:0,status:0,status_cod:0,still:0,str:0,string:0,strip:0,structur:0,subdomain:0,subject:0,sublicens:0,submit:0,substanti:0,success:0,successfulli:0,succinct:0,succinctli:0,suffix:0,summari:0,superpow:0,supersed:0,supplement:0,suppli:0,sure:0,synchron:0,system:0,take:0,taken:0,task:0,tear:0,tediou:0,test:0,test_pdpyra:0,than:0,thei:0,them:0,themselv:0,thi:0,thing:0,third:0,thread:0,three:0,through:0,throught:0,thu:0,time:0,token:0,tokenize_url_path:0,toler:0,too:0,tool:0,tort:0,total:0,total_call_count:0,total_call_tim:0,transform:0,transmit:0,treat:0,trigger:0,trunc_kei:0,trunc_token:0,truncat:0,try_decod:0,tupl:0,turn:0,two:0,type:0,uid:0,ultim:0,unauthor:0,under:0,underli:0,uniqu:0,unless:0,unpack:0,unspecifi:0,unsupport:0,until:0,unwrap:0,updated_incid:0,updated_us:0,upon:0,upper:0,uri:0,urllib3:0,use:0,used:0,user:0,user_ag:0,user_id:0,user_refer:0,user_sess:0,uses:0,using:0,usual:0,valid:0,valu:0,value1:0,value2:0,verb:0,veri:0,version:0,versu:0,via:0,wai:0,wait:0,want:0,wasn:0,web:0,welcom:0,well:0,went:0,were:0,what:0,wheel:0,when:0,whenev:0,where:0,wherea:0,whether:0,which:0,whichev:0,whitelist:0,whole:0,whom:0,whose:0,wise:0,within:0,without:0,word:0,work:0,would:0,wrap:0,write:0,wrong:0,yet:0,yield:0,you:0,your:0,yuck:0,zero:0},titles:["PDPYRAS: PagerDuty Python REST API Sessions"],titleterms:{"abstract":0,"function":0,Using:0,about:0,access:0,api:0,basic:0,bodi:0,changelog:0,client:0,concept:0,contribut:0,copyright:0,creat:0,data:0,delet:0,develop:0,disclaim:0,endpoint:0,error:0,event:0,featur:0,gener:0,guid:0,handl:0,histori:0,http:0,instal:0,interfac:0,iter:0,logic:0,manag:0,multi:0,pagerduti:0,pdpyra:0,python:0,read:0,regard:0,request:0,respons:0,rest:0,retri:0,session:0,special:0,support:0,updat:0,url:0,usag:0,warranti:0}}) \ No newline at end of file +Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,sphinx:56},filenames:["index.rst"],objects:{"":{pdpyras:[0,0,0,"-"]},"pdpyras.APISession":{api_call_counts:[0,2,1,""],api_time:[0,2,1,""],default_from:[0,2,1,""],default_page_size:[0,2,1,""],dict_all:[0,3,1,""],find:[0,3,1,""],iter_all:[0,3,1,""],list_all:[0,3,1,""],postprocess:[0,3,1,""],prepare_headers:[0,3,1,""],profiler_key:[0,3,1,""],rdelete:[0,3,1,""],rget:[0,3,1,""],rpost:[0,3,1,""],rput:[0,3,1,""],set_api_key:[0,3,1,""],subdomain:[0,3,1,""],total_call_count:[0,3,1,""],total_call_time:[0,3,1,""],trunc_token:[0,3,1,""],url:[0,2,1,""]},"pdpyras.EventsAPISession":{acknowledge:[0,3,1,""],prepare_headers:[0,3,1,""],resolve:[0,3,1,""],send_event:[0,3,1,""],set_api_key:[0,3,1,""],trigger:[0,3,1,""]},"pdpyras.PDClientError":{response:[0,2,1,""]},"pdpyras.PDSession":{api_key:[0,3,1,""],log:[0,2,1,""],max_http_attempts:[0,2,1,""],max_network_attempts:[0,2,1,""],parent:[0,2,1,""],postprocess:[0,3,1,""],prepare_headers:[0,3,1,""],raise_if_http_error:[0,2,1,""],request:[0,3,1,""],retry:[0,2,1,""],set_api_key:[0,3,1,""],sleep_timer:[0,2,1,""],sleep_timer_base:[0,2,1,""],trunc_key:[0,3,1,""],user_agent:[0,3,1,""]},pdpyras:{APISession:[0,1,1,""],EventsAPISession:[0,1,1,""],PDClientError:[0,1,1,""],PDSession:[0,1,1,""],auto_json:[0,4,1,""],last_4:[0,4,1,""],object_type:[0,4,1,""],raise_on_error:[0,4,1,""],resource_envelope:[0,4,1,""],resource_name:[0,4,1,""],tokenize_url_path:[0,4,1,""],try_decoding:[0,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:method","4":"py:function"},terms:{"0123456789abcdef0123456789abcdef":0,"101st":0,"201st":0,"break":0,"case":0,"catch":0,"class":0,"default":0,"final":0,"import":0,"new":0,"return":0,"super":0,"transient":0,"true":0,"try":0,"while":0,AND:0,Added:0,BUT:0,FOR:0,For:0,IDs:0,NOT:0,Not:0,One:0,THE:0,The:0,There:0,These:0,USE:0,Useful:0,WITH:0,Will:0,With:0,_all:0,_api_kei:0,abbrevi:0,abc123:0,abov:0,absolut:0,accept:0,accord:0,account:0,acknowledg:0,action:0,add:0,added:0,adding:0,addit:0,address:0,admin:0,advanc:0,advantag:0,affect:0,after:0,against:0,agent:0,alert:0,algorithm:0,all:0,allow:0,along:0,alreadi:0,also:0,altern:0,although:0,altogeth:0,alwai:0,amount:0,analyt:0,ani:0,anoth:0,api_call_count:0,api_kei:0,api_tim:0,api_token:0,apisess:0,append:0,appli:0,applic:0,approach:0,appropri:0,argument:0,aris:0,around:0,arrai:0,assert:0,assign:0,associ:0,assum:0,asynchron:0,attempt:0,attribut:0,author:0,auto:0,auto_json:0,automat:0,avail:0,avoid:0,back:0,base:0,baseurl:0,becaus:0,becom:0,been:0,befor:0,begin:0,behav:0,behavior:0,being:0,beta:0,between:0,bit:0,bob:0,bonu:0,bool:0,born:0,both:0,brief:0,bug:0,bulk:0,bulletproof:0,busi:0,call:0,callabl:0,can:0,cannot:0,care:0,carri:0,caus:0,cautiou:0,certain:0,chang:0,charact:0,charg:0,check:0,child:0,claim:0,classifi:0,code:0,colon:0,com:0,commit:0,common:0,commonli:0,compar:0,comparison:0,compil:0,complet:0,comput:0,condit:0,conduc:0,confer:0,configur:0,conjunct:0,connect:0,consid:0,consist:0,constitut:0,constrain:0,construct:0,constructor:0,contact_method:0,contain:0,content:0,contract:0,conveni:0,cooldown:0,copi:0,correspond:0,could:0,count:0,coverag:0,creation:0,critic:0,custom:0,custom_detail:0,damag:0,dav:0,dave:0,david:0,deal:0,decod:0,decor:0,dedup:0,dedup_kei:0,dedupl:0,deem:0,def:0,default_from:0,default_page_s:0,defin:0,delai:0,demitri:0,departur:0,depend:0,deriv:0,descript:0,design:0,desir:0,detail:0,determin:0,dict:0,dict_al:0,dictionari:0,differ:0,directli:0,directori:0,discov:0,displai:0,distinct:0,distinguish:0,distribut:0,doc:0,document:0,doe:0,doesn:0,don:0,done:0,download:0,due:0,duplic:0,dure:0,dusti:0,each:0,easi:0,easili:0,effect:0,effici:0,effort:0,either:0,elabor:0,elif:0,elimin:0,els:0,email:0,encapsul:0,enclos:0,encod:0,encount:0,end:0,enforc:0,ensur:0,entiti:0,entri:0,envelop:0,equal:0,escal:0,escalation_polici:0,essenti:0,etc:0,eventsapisess:0,ever:0,everyth:0,exact:0,exactli:0,exampl:0,example35:0,except:0,exist:0,exit:0,expect:0,experiment:0,express:0,extend:0,factor:0,fail:0,failur:0,fals:0,far:0,faulti:0,fetch:0,few:0,file:0,filter:0,find:0,finish:0,fire:0,first:0,first_100_dav:0,fit:0,fix:0,flow:0,focu:0,follow:0,followup:0,format:0,forward:0,found:0,four:0,free:0,frequent:0,from:0,full:0,fulli:0,furnish:0,further:0,furthermor:0,get:0,getter:0,github:0,give:0,given:0,global:0,goal:0,going:0,grant:0,greater:0,halt:0,happen:0,hard:0,has:0,have:0,header:0,help:0,here:0,herebi:0,higher:0,hoc:0,holder:0,hook:0,how:0,howev:0,human:0,hundr:0,identif:0,identifi:0,ignor:0,imag:0,immedi:0,impact:0,implement:0,impli:0,incid:0,incident_refer:0,includ:0,inclus:0,incorrect:0,increas:0,increment:0,indefinit:0,index:0,individu:0,infinit:0,inform:0,inherit:0,initi:0,innermost:0,input:0,insensit:0,insert:0,instanc:0,instanti:0,instead:0,insul:0,integr:0,intend:0,intern:0,interrupt:0,interv:0,introduc:0,introduct:0,invok:0,isinst:0,issu:0,item:0,item_hook:0,iter_al:0,its:0,itself:0,jane:0,jget:0,job:0,jpost:0,jput:0,json:0,just:0,kei:0,key1:0,key2:0,keyerror:0,keyword:0,kind:0,kwarg:0,last:0,last_4:0,later:0,lead:0,leav:0,length:0,let:0,liabil:0,liabl:0,librari:0,licens:0,lies:0,light:0,like:0,limit:0,link:0,list:0,list_al:0,littl:0,local:0,log:0,log_entri:0,logger:0,login:0,longer:0,lower:0,made:0,mai:0,make:0,mani:0,manual:0,match:0,max_http_attempt:0,max_network_attempt:0,maximum:0,mean:0,member:0,merchant:0,merg:0,messag:0,method:0,metric:0,minim:0,minimum:0,mirror:0,mit:0,modif:0,modifi:0,modul:0,more:0,moreov:0,morgan:0,most:0,multipl:0,must:0,name:0,namespac:0,natur:0,necess:0,need:0,nest:0,net:0,network:0,next:0,node:0,non:0,none:0,noninfring:0,note:0,notebook:0,noth:0,notic:0,notification_rul:0,now:0,number:0,obj_typ:0,object:0,object_typ:0,obtain:0,obvious:0,occur:0,odd:0,offset:0,old:0,omit:0,one:0,onli:0,onu:0,oper:0,option:0,order:0,origin:0,other:0,otherwis:0,our:0,ourselv:0,out:0,over:0,overal:0,overkil:0,overrid:0,own:0,pabc123:0,page:0,pagin:0,parallel:0,param:0,paramet:0,parent:0,part:0,particular:0,pass:0,path:0,pattern:0,paus:0,payload:0,pdclienterror:0,pdef456:0,pdsession:0,per:0,perform:0,permiss:0,permit:0,permitted_method:0,persist:0,person:0,pertain:0,phij789:0,pi86now:0,pip:0,pjkl678:0,place:0,plain:0,pleas:0,plu:0,pnoexst:0,polici:0,pool:0,portion:0,posit:0,possibl:0,post:0,postprocess:0,power:0,practic:0,pre:0,preced:0,predict:0,prepare_head:0,prepend:0,prerequisit:0,presenc:0,previou:0,print:0,prioriti:0,problem:0,process:0,profil:0,profiler_kei:0,program:0,progress:0,project:0,promote_to_admin:0,properti:0,provid:0,publish:0,pull:0,purpos:0,put:0,pzyx321:0,queri:0,question:0,r_name:0,rais:0,raise_if_http_error:0,raise_on_error:0,rang:0,rank:0,rate:0,rather:0,rdelet:0,readabl:0,real:0,reason:0,reattempt:0,receiv:0,recommend:0,record:0,refactor:0,refer:0,reform:0,regress:0,reinvent:0,rel:0,remov:0,renam:0,repeat:0,repetit:0,replac:0,report:0,repositori:0,repres:0,reproduc:0,reqeust:0,requir:0,rescind:0,resolv:0,resourc:0,resource_envelop:0,resource_nam:0,respect:0,respond:0,restrict:0,result:0,retriev:0,reusabl:0,rget:0,right:0,role:0,root:0,rout:0,routing_kei:0,rpost:0,rput:0,rule:0,safeguard:0,sai:0,same:0,sane:0,save:0,schema:0,search:0,second:0,secret:0,secur:0,see:0,self:0,sell:0,send:0,send_ev:0,seri:0,serial:0,serv:0,server:0,servic:0,session_id:0,set:0,set_api_kei:0,setter:0,sever:0,shall:0,shift:0,should:0,similar:0,similarli:0,simpl:0,simpler:0,simpli:0,simultan:0,singl:0,skip:0,slash:0,sleep:0,sleep_tim:0,sleep_timer_bas:0,small:0,softwar:0,some:0,someth:0,sort:0,sought:0,sourc:0,specif:0,specifi:0,spent:0,standard:0,start:0,state:0,statu:0,status:0,status_cod:0,still:0,str:0,string:0,strip:0,structur:0,subdomain:0,subject:0,sublicens:0,submit:0,substanti:0,success:0,successfulli:0,succinct:0,succinctli:0,suffix:0,summari:0,superpow:0,supersed:0,supplement:0,suppli:0,sure:0,synchron:0,system:0,take:0,taken:0,task:0,tear:0,tediou:0,test:0,test_pdpyra:0,than:0,thei:0,them:0,themselv:0,thi:0,thing:0,third:0,thread:0,three:0,through:0,throught:0,thu:0,time:0,token:0,tokenize_url_path:0,toler:0,too:0,tool:0,tort:0,total:0,total_call_count:0,total_call_tim:0,transform:0,transmit:0,treat:0,trigger:0,trunc_kei:0,trunc_token:0,truncat:0,try_decod:0,tupl:0,turn:0,two:0,type:0,uid:0,ultim:0,unauthor:0,under:0,underli:0,uniqu:0,unless:0,unpack:0,unspecifi:0,unsupport:0,until:0,unwrap:0,updated_incid:0,updated_us:0,upon:0,upper:0,uri:0,urllib3:0,use:0,used:0,user:0,user_ag:0,user_id:0,user_refer:0,user_sess:0,uses:0,using:0,usual:0,valid:0,valu:0,value1:0,value2:0,verb:0,veri:0,version:0,versu:0,via:0,wai:0,wait:0,want:0,wasn:0,web:0,welcom:0,well:0,went:0,were:0,what:0,wheel:0,when:0,whenev:0,where:0,wherea:0,whether:0,which:0,whichev:0,whitelist:0,whole:0,whom:0,whose:0,wise:0,within:0,without:0,word:0,work:0,would:0,wrap:0,write:0,wrong:0,yet:0,yield:0,you:0,your:0,yuck:0,zero:0},titles:["PDPYRAS: PagerDuty Python REST API Sessions"],titleterms:{"abstract":0,"function":0,Using:0,about:0,access:0,api:0,basic:0,bodi:0,changelog:0,client:0,concept:0,contribut:0,copyright:0,creat:0,data:0,delet:0,develop:0,disclaim:0,endpoint:0,error:0,event:0,featur:0,gener:0,guid:0,handl:0,histori:0,http:0,instal:0,interfac:0,iter:0,logic:0,manag:0,multi:0,pagerduti:0,pdpyra:0,python:0,read:0,regard:0,request:0,respons:0,rest:0,retri:0,session:0,special:0,support:0,updat:0,url:0,usag:0,warranti:0}}) \ No newline at end of file diff --git a/pdpyras.py b/pdpyras.py index b3d3b93..3766b54 100644 --- a/pdpyras.py +++ b/pdpyras.py @@ -17,7 +17,7 @@ else: string_types = basestring -__version__ = '3.1.1' +__version__ = '3.1.2' # These are API resource endpoints/methods for which multi-update is supported diff --git a/setup.py b/setup.py index 9410c97..379872d 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -__version__ = '3.1.1' +__version__ = '3.1.2' if __name__ == '__main__': setup(