udata 8.0.1.dev28882__py2.py3-none-any.whl → 8.0.1.dev28928__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (36) hide show
  1. udata/api/__init__.py +6 -3
  2. udata/api/oauth2.py +2 -1
  3. udata/api_fields.py +254 -0
  4. udata/core/badges/models.py +2 -1
  5. udata/core/dataservices/__init__.py +0 -0
  6. udata/core/dataservices/api.py +84 -0
  7. udata/core/dataservices/models.py +130 -0
  8. udata/core/metrics/models.py +2 -3
  9. udata/core/organization/models.py +3 -1
  10. udata/core/owned.py +39 -2
  11. udata/routing.py +6 -0
  12. udata/static/chunks/{11.7266fef2dddc1db403d9.js → 11.ae54612e36c6d46f85db.js} +3 -3
  13. udata/static/chunks/{11.7266fef2dddc1db403d9.js.map → 11.ae54612e36c6d46f85db.js.map} +1 -1
  14. udata/static/chunks/{13.91b177d7d531fd55cf5d.js → 13.d8ccb992a49875966313.js} +2 -2
  15. udata/static/chunks/{13.91b177d7d531fd55cf5d.js.map → 13.d8ccb992a49875966313.js.map} +1 -1
  16. udata/static/chunks/{16.e866757bab9f6b0a3f1b.js → 16.4565605e68bab129a471.js} +2 -2
  17. udata/static/chunks/{16.e866757bab9f6b0a3f1b.js.map → 16.4565605e68bab129a471.js.map} +1 -1
  18. udata/static/chunks/{19.619b83ac597516dcd03e.js → 19.f993a75d5bfe2382548d.js} +3 -3
  19. udata/static/chunks/{19.619b83ac597516dcd03e.js.map → 19.f993a75d5bfe2382548d.js.map} +1 -1
  20. udata/static/chunks/{5.3dc97ea195d251881552.js → 5.ada3202d02917ce0edea.js} +3 -3
  21. udata/static/chunks/{5.3dc97ea195d251881552.js.map → 5.ada3202d02917ce0edea.js.map} +1 -1
  22. udata/static/chunks/{6.f84539bd4c419b36cc19.js → 6.cad898a38692eda28965.js} +3 -3
  23. udata/static/chunks/{6.f84539bd4c419b36cc19.js.map → 6.cad898a38692eda28965.js.map} +1 -1
  24. udata/static/chunks/{9.07503e7f7ec02919f696.js → 9.d5b992e9ef51921aeb57.js} +2 -2
  25. udata/static/chunks/{9.07503e7f7ec02919f696.js.map → 9.d5b992e9ef51921aeb57.js.map} +1 -1
  26. udata/static/common.js +1 -1
  27. udata/static/common.js.map +1 -1
  28. udata/tests/api/__init__.py +3 -0
  29. udata/tests/api/test_dataservices_api.py +236 -0
  30. udata/tests/plugin.py +5 -0
  31. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/METADATA +2 -1
  32. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/RECORD +36 -31
  33. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/LICENSE +0 -0
  34. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/WHEEL +0 -0
  35. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/entry_points.txt +0 -0
  36. {udata-8.0.1.dev28882.dist-info → udata-8.0.1.dev28928.dist-info}/top_level.txt +0 -0
udata/static/common.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e){function __webpack_require__(a){if(c[a])return c[a].exports;var f=c[a]={exports:{},id:a,loaded:!1};return e[a].call(f.exports,f,f.exports,__webpack_require__),f.loaded=!0,f.exports}var a=window.webpackJsonp;window.webpackJsonp=function(b,r){for(var t,d,_=0,n=[];_<b.length;_++)d=b[_],f[d]&&n.push.apply(n,f[d]),f[d]=0;for(t in r){var i=r[t];switch(typeof i){case"object":e[t]=function(a){var c=a.slice(1),f=a[0];return function(a,b,r){e[f].apply(this,[a,b,r].concat(c))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(a&&a(b,r);n.length;)n.shift().call(null,__webpack_require__);if(r[0])return c[0]=0,__webpack_require__(0)};var c={},f={31:0};__webpack_require__.e=function(e,a){if(0===f[e])return a.call(null,__webpack_require__);if(void 0!==f[e])f[e].push(a);else{f[e]=[a];var c=document.getElementsByTagName("head")[0],b=document.createElement("script");b.type="text/javascript",b.charset="utf-8",b.async=!0,b.src=__webpack_require__.p+"chunks/"+e+"."+{0:"6f1698738c9b0618b673",1:"ff8196d42cab0f031d3f",2:"7c89fae92899be371ed3",3:"1ca609753b5a02de0ca3",4:"95e6a070a0eb2ed08fdd",5:"3dc97ea195d251881552",6:"f84539bd4c419b36cc19",7:"11ac4de064ae59691d49",8:"17d1afb591ad1495bd03",9:"07503e7f7ec02919f696",10:"e97ea231893dc435d6b5",11:"7266fef2dddc1db403d9",12:"59f035a9438e2baf5126",13:"91b177d7d531fd55cf5d",14:"f4037a917d5364cb564b",15:"92b2cef3032ea35da04a",16:"e866757bab9f6b0a3f1b",17:"15ecbcf8f0b2968689e8",18:"ad41fb75ac4226e1f3ce",19:"619b83ac597516dcd03e",20:"14a92e5c503f74ff40df",21:"ccbfce6680a2b11a5284",22:"bc79367e5f4c8ad00038",23:"5486b3fc83b194d55191",24:"e905e3f6ba089a34b07c",25:"e20b4daac9fb2bdceee6",26:"c8f33e73b9117b70aef8",27:"6779f92692327013b446",28:"280c392f19bc9e908abf",29:"daadfa33135efe4e5534",30:"b2464d08ccbeb40ec74e",32:"3251a701a677ab35e980",33:"70f8e7b1964892a24e67"}[e]+".js",c.appendChild(b)}},__webpack_require__.m=e,__webpack_require__.c=c,__webpack_require__.p="/static/"}(function(e){for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a))switch(typeof e[a]){case"function":break;case"object":e[a]=function(a){var c=a.slice(1),f=e[a[0]];return function(e,a,b){f.apply(this,[e,a,b].concat(c))}}(e[a]);break;default:e[a]=e[e[a]]}return e}([]));
1
+ !function(e){function __webpack_require__(a){if(c[a])return c[a].exports;var r=c[a]={exports:{},id:a,loaded:!1};return e[a].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}var a=window.webpackJsonp;window.webpackJsonp=function(f,b){for(var t,d,_=0,n=[];_<f.length;_++)d=f[_],r[d]&&n.push.apply(n,r[d]),r[d]=0;for(t in b){var i=b[t];switch(typeof i){case"object":e[t]=function(a){var c=a.slice(1),r=a[0];return function(a,f,b){e[r].apply(this,[a,f,b].concat(c))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(a&&a(f,b);n.length;)n.shift().call(null,__webpack_require__);if(b[0])return c[0]=0,__webpack_require__(0)};var c={},r={31:0};__webpack_require__.e=function(e,a){if(0===r[e])return a.call(null,__webpack_require__);if(void 0!==r[e])r[e].push(a);else{r[e]=[a];var c=document.getElementsByTagName("head")[0],f=document.createElement("script");f.type="text/javascript",f.charset="utf-8",f.async=!0,f.src=__webpack_require__.p+"chunks/"+e+"."+{0:"6f1698738c9b0618b673",1:"ff8196d42cab0f031d3f",2:"7c89fae92899be371ed3",3:"1ca609753b5a02de0ca3",4:"95e6a070a0eb2ed08fdd",5:"ada3202d02917ce0edea",6:"cad898a38692eda28965",7:"11ac4de064ae59691d49",8:"17d1afb591ad1495bd03",9:"d5b992e9ef51921aeb57",10:"e97ea231893dc435d6b5",11:"ae54612e36c6d46f85db",12:"59f035a9438e2baf5126",13:"d8ccb992a49875966313",14:"f4037a917d5364cb564b",15:"92b2cef3032ea35da04a",16:"4565605e68bab129a471",17:"15ecbcf8f0b2968689e8",18:"ad41fb75ac4226e1f3ce",19:"f993a75d5bfe2382548d",20:"14a92e5c503f74ff40df",21:"ccbfce6680a2b11a5284",22:"bc79367e5f4c8ad00038",23:"5486b3fc83b194d55191",24:"e905e3f6ba089a34b07c",25:"e20b4daac9fb2bdceee6",26:"c8f33e73b9117b70aef8",27:"6779f92692327013b446",28:"280c392f19bc9e908abf",29:"daadfa33135efe4e5534",30:"b2464d08ccbeb40ec74e",32:"3251a701a677ab35e980",33:"70f8e7b1964892a24e67"}[e]+".js",c.appendChild(f)}},__webpack_require__.m=e,__webpack_require__.c=c,__webpack_require__.p="/static/"}(function(e){for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a))switch(typeof e[a]){case"function":break;case"object":e[a]=function(a){var c=a.slice(1),r=e[a[0]];return function(e,a,f){r.apply(this,[e,a,f].concat(c))}}(e[a]);break;default:e[a]=e[e[a]]}return e}([]));
2
2
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap ee03f1fa39a515ac0121"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","parentJsonpFunction","window","chunkIds","moreModules","chunkId","i","callbacks","length","installedChunks","push","apply","_m","args","slice","templateId","a","b","c","this","concat","shift","31","e","callback","undefined","head","document","getElementsByTagName","script","createElement","type","charset","async","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","32","33","appendChild","m","Object","prototype","hasOwnProperty","fn"],"mappings":"CAAS,SAAUA,GCwDnB,QAAAC,qBAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAE,WACAE,GAAAJ,EACAK,QAAA,EAUA,OANAP,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,qBAGAI,EAAAE,QAAA,EAGAF,EAAAD,QA3EA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,GAIA,IADA,GAAAV,GAAAW,EAAAC,EAAA,EAAAC,KACQD,EAAAH,EAAAK,OAAoBF,IAC5BD,EAAAF,EAAAG,GACAG,EAAAJ,IACAE,EAAAG,KAAAC,MAAAJ,EAAAE,EAAAJ,IACAI,EAAAJ,GAAA,CAEA,KAAAX,IAAAU,GAAA,CACA,GAAAQ,GAAAR,EAAAV,EAGA,cAAAkB,IACA,aAEApB,EAAAE,GAAA,SAAAkB,GACA,GAAAC,GAAAD,EAAAE,MAAA,GAAAC,EAAAH,EAAA,EACA,iBAAAI,EAAAC,EAAAC,GACA1B,EAAAuB,GAAAJ,MAAAQ,MAAAH,EAAAC,EAAAC,GAAAE,OAAAP,MAEMD,EACN,MACA,gBAEApB,EAAAE,GAAAkB,CACA,MACA,SAEApB,EAAAE,GAAAF,EAAAoB,IAKA,IADAX,KAAAE,EAAAC,GACAG,EAAAC,QACAD,EAAAc,QAAArB,KAAA,KAAAP,oBACA,IAAAW,EAAA,GAEA,MADAT,GAAA,KACAF,oBAAA,GAKA,IAAAE,MAKAc,GACAa,GAAA,EA6BA7B,qBAAA8B,EAAA,SAAAlB,EAAAmB,GAEA,OAAAf,EAAAJ,GACA,MAAAmB,GAAAxB,KAAA,KAAAP,oBAGA,IAAAgC,SAAAhB,EAAAJ,GACAI,EAAAJ,GAAAK,KAAAc,OACI,CAEJf,EAAAJ,IAAAmB,EACA,IAAAE,GAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,SACAD,GAAAE,KAAA,kBACAF,EAAAG,QAAA,QACAH,EAAAI,OAAA,EAEAJ,EAAAK,IAAAzC,oBAAA0C,EAAA,UAAA9B,EAAA,KAAsE+B,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,wBAAk5B/D,GAAA,MACx9BqB,EAAA2C,YAAAxC,KAKApC,oBAAA6E,EAAA9E,EAGAC,oBAAAyB,EAAAvB,EAGAF,oBAAA0C,EAAA,YDIW,SAAS3C,GAEnB,IAAI,GAAIc,KAAKd,GACZ,GAAG+E,OAAOC,UAAUC,eAAezE,KAAKR,EAASc,GAChD,aAAcd,GAAQc,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJd,EAAQc,GAAM,SAASM,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAI4D,EAAKlF,EAAQoB,EAAG,GACxC,OAAO,UAAUI,EAAEC,EAAEC,GACpBwD,EAAG/D,MAAMQ,MAAOH,EAAEC,EAAEC,GAAGE,OAAOP,MAE9BrB,EAAQc,GACV,MACD,SAECd,EAAQc,GAAKd,EAAQA,EAAQc,IAKhC,MAAOd","file":"common.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tvar _m = moreModules[moduleId];\n/******/\n/******/ \t\t\t// Check if module is deduplicated\n/******/ \t\t\tswitch(typeof _m) {\n/******/ \t\t\tcase \"object\":\n/******/ \t\t\t\t// Module can be created from a template\n/******/ \t\t\t\tmodules[moduleId] = (function(_m) {\n/******/ \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n/******/ \t\t\t\t\treturn function (a,b,c) {\n/******/ \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}(_m));\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tcase \"function\":\n/******/ \t\t\t\t// Normal module\n/******/ \t\t\t\tmodules[moduleId] = _m;\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tdefault:\n/******/ \t\t\t\t// Module is a copy of another module\n/******/ \t\t\t\tmodules[moduleId] = modules[_m];\n/******/ \t\t\t\tbreak;\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/ \t\tif(moreModules[0]) {\n/******/ \t\t\tinstalledModules[0] = 0;\n/******/ \t\t\treturn __webpack_require__(0);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t31:0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n/******/\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n/******/\n/******/ \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"6f1698738c9b0618b673\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"7c89fae92899be371ed3\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"3dc97ea195d251881552\",\"6\":\"f84539bd4c419b36cc19\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"07503e7f7ec02919f696\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"7266fef2dddc1db403d9\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"91b177d7d531fd55cf5d\",\"14\":\"f4037a917d5364cb564b\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"e866757bab9f6b0a3f1b\",\"17\":\"15ecbcf8f0b2968689e8\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"619b83ac597516dcd03e\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"5486b3fc83b194d55191\",\"24\":\"e905e3f6ba089a34b07c\",\"25\":\"e20b4daac9fb2bdceee6\",\"26\":\"c8f33e73b9117b70aef8\",\"27\":\"6779f92692327013b446\",\"28\":\"280c392f19bc9e908abf\",\"29\":\"daadfa33135efe4e5534\",\"30\":\"b2464d08ccbeb40ec74e\",\"32\":\"3251a701a677ab35e980\",\"33\":\"70f8e7b1964892a24e67\"}[chunkId] + \".js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([])));\n\n\n/** WEBPACK FOOTER **\n ** common.js\n **/"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tvar _m = moreModules[moduleId];\n\n \t\t\t// Check if module is deduplicated\n \t\t\tswitch(typeof _m) {\n \t\t\tcase \"object\":\n \t\t\t\t// Module can be created from a template\n \t\t\t\tmodules[moduleId] = (function(_m) {\n \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n \t\t\t\t\treturn function (a,b,c) {\n \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n \t\t\t\t\t};\n \t\t\t\t}(_m));\n \t\t\t\tbreak;\n \t\t\tcase \"function\":\n \t\t\t\t// Normal module\n \t\t\t\tmodules[moduleId] = _m;\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\t// Module is a copy of another module\n \t\t\t\tmodules[moduleId] = modules[_m];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t31:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"6f1698738c9b0618b673\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"7c89fae92899be371ed3\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"3dc97ea195d251881552\",\"6\":\"f84539bd4c419b36cc19\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"07503e7f7ec02919f696\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"7266fef2dddc1db403d9\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"91b177d7d531fd55cf5d\",\"14\":\"f4037a917d5364cb564b\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"e866757bab9f6b0a3f1b\",\"17\":\"15ecbcf8f0b2968689e8\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"619b83ac597516dcd03e\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"5486b3fc83b194d55191\",\"24\":\"e905e3f6ba089a34b07c\",\"25\":\"e20b4daac9fb2bdceee6\",\"26\":\"c8f33e73b9117b70aef8\",\"27\":\"6779f92692327013b446\",\"28\":\"280c392f19bc9e908abf\",\"29\":\"daadfa33135efe4e5534\",\"30\":\"b2464d08ccbeb40ec74e\",\"32\":\"3251a701a677ab35e980\",\"33\":\"70f8e7b1964892a24e67\"}[chunkId] + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ee03f1fa39a515ac0121\n **/"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap d09c37348241e3b2523f"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","parentJsonpFunction","window","chunkIds","moreModules","chunkId","i","callbacks","length","installedChunks","push","apply","_m","args","slice","templateId","a","b","c","this","concat","shift","31","e","callback","undefined","head","document","getElementsByTagName","script","createElement","type","charset","async","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","32","33","appendChild","m","Object","prototype","hasOwnProperty","fn"],"mappings":"CAAS,SAAUA,GCwDnB,QAAAC,qBAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAE,WACAE,GAAAJ,EACAK,QAAA,EAUA,OANAP,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,qBAGAI,EAAAE,QAAA,EAGAF,EAAAD,QA3EA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,GAIA,IADA,GAAAV,GAAAW,EAAAC,EAAA,EAAAC,KACQD,EAAAH,EAAAK,OAAoBF,IAC5BD,EAAAF,EAAAG,GACAG,EAAAJ,IACAE,EAAAG,KAAAC,MAAAJ,EAAAE,EAAAJ,IACAI,EAAAJ,GAAA,CAEA,KAAAX,IAAAU,GAAA,CACA,GAAAQ,GAAAR,EAAAV,EAGA,cAAAkB,IACA,aAEApB,EAAAE,GAAA,SAAAkB,GACA,GAAAC,GAAAD,EAAAE,MAAA,GAAAC,EAAAH,EAAA,EACA,iBAAAI,EAAAC,EAAAC,GACA1B,EAAAuB,GAAAJ,MAAAQ,MAAAH,EAAAC,EAAAC,GAAAE,OAAAP,MAEMD,EACN,MACA,gBAEApB,EAAAE,GAAAkB,CACA,MACA,SAEApB,EAAAE,GAAAF,EAAAoB,IAKA,IADAX,KAAAE,EAAAC,GACAG,EAAAC,QACAD,EAAAc,QAAArB,KAAA,KAAAP,oBACA,IAAAW,EAAA,GAEA,MADAT,GAAA,KACAF,oBAAA,GAKA,IAAAE,MAKAc,GACAa,GAAA,EA6BA7B,qBAAA8B,EAAA,SAAAlB,EAAAmB,GAEA,OAAAf,EAAAJ,GACA,MAAAmB,GAAAxB,KAAA,KAAAP,oBAGA,IAAAgC,SAAAhB,EAAAJ,GACAI,EAAAJ,GAAAK,KAAAc,OACI,CAEJf,EAAAJ,IAAAmB,EACA,IAAAE,GAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,SACAD,GAAAE,KAAA,kBACAF,EAAAG,QAAA,QACAH,EAAAI,OAAA,EAEAJ,EAAAK,IAAAzC,oBAAA0C,EAAA,UAAA9B,EAAA,KAAsE+B,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,wBAAk5B/D,GAAA,MACx9BqB,EAAA2C,YAAAxC,KAKApC,oBAAA6E,EAAA9E,EAGAC,oBAAAyB,EAAAvB,EAGAF,oBAAA0C,EAAA,YDIW,SAAS3C,GAEnB,IAAI,GAAIc,KAAKd,GACZ,GAAG+E,OAAOC,UAAUC,eAAezE,KAAKR,EAASc,GAChD,aAAcd,GAAQc,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJd,EAAQc,GAAM,SAASM,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAI4D,EAAKlF,EAAQoB,EAAG,GACxC,OAAO,UAAUI,EAAEC,EAAEC,GACpBwD,EAAG/D,MAAMQ,MAAOH,EAAEC,EAAEC,GAAGE,OAAOP,MAE9BrB,EAAQc,GACV,MACD,SAECd,EAAQc,GAAKd,EAAQA,EAAQc,IAKhC,MAAOd","file":"common.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tvar _m = moreModules[moduleId];\n/******/\n/******/ \t\t\t// Check if module is deduplicated\n/******/ \t\t\tswitch(typeof _m) {\n/******/ \t\t\tcase \"object\":\n/******/ \t\t\t\t// Module can be created from a template\n/******/ \t\t\t\tmodules[moduleId] = (function(_m) {\n/******/ \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n/******/ \t\t\t\t\treturn function (a,b,c) {\n/******/ \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}(_m));\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tcase \"function\":\n/******/ \t\t\t\t// Normal module\n/******/ \t\t\t\tmodules[moduleId] = _m;\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tdefault:\n/******/ \t\t\t\t// Module is a copy of another module\n/******/ \t\t\t\tmodules[moduleId] = modules[_m];\n/******/ \t\t\t\tbreak;\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/ \t\tif(moreModules[0]) {\n/******/ \t\t\tinstalledModules[0] = 0;\n/******/ \t\t\treturn __webpack_require__(0);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t31:0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n/******/\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n/******/\n/******/ \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"6f1698738c9b0618b673\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"7c89fae92899be371ed3\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"ada3202d02917ce0edea\",\"6\":\"cad898a38692eda28965\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"d5b992e9ef51921aeb57\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"ae54612e36c6d46f85db\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"d8ccb992a49875966313\",\"14\":\"f4037a917d5364cb564b\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"4565605e68bab129a471\",\"17\":\"15ecbcf8f0b2968689e8\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"f993a75d5bfe2382548d\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"5486b3fc83b194d55191\",\"24\":\"e905e3f6ba089a34b07c\",\"25\":\"e20b4daac9fb2bdceee6\",\"26\":\"c8f33e73b9117b70aef8\",\"27\":\"6779f92692327013b446\",\"28\":\"280c392f19bc9e908abf\",\"29\":\"daadfa33135efe4e5534\",\"30\":\"b2464d08ccbeb40ec74e\",\"32\":\"3251a701a677ab35e980\",\"33\":\"70f8e7b1964892a24e67\"}[chunkId] + \".js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([])));\n\n\n/** WEBPACK FOOTER **\n ** common.js\n **/"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tvar _m = moreModules[moduleId];\n\n \t\t\t// Check if module is deduplicated\n \t\t\tswitch(typeof _m) {\n \t\t\tcase \"object\":\n \t\t\t\t// Module can be created from a template\n \t\t\t\tmodules[moduleId] = (function(_m) {\n \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n \t\t\t\t\treturn function (a,b,c) {\n \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n \t\t\t\t\t};\n \t\t\t\t}(_m));\n \t\t\t\tbreak;\n \t\t\tcase \"function\":\n \t\t\t\t// Normal module\n \t\t\t\tmodules[moduleId] = _m;\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\t// Module is a copy of another module\n \t\t\t\tmodules[moduleId] = modules[_m];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t31:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"6f1698738c9b0618b673\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"7c89fae92899be371ed3\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"ada3202d02917ce0edea\",\"6\":\"cad898a38692eda28965\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"d5b992e9ef51921aeb57\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"ae54612e36c6d46f85db\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"d8ccb992a49875966313\",\"14\":\"f4037a917d5364cb564b\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"4565605e68bab129a471\",\"17\":\"15ecbcf8f0b2968689e8\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"f993a75d5bfe2382548d\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"5486b3fc83b194d55191\",\"24\":\"e905e3f6ba089a34b07c\",\"25\":\"e20b4daac9fb2bdceee6\",\"26\":\"c8f33e73b9117b70aef8\",\"27\":\"6779f92692327013b446\",\"28\":\"280c392f19bc9e908abf\",\"29\":\"daadfa33135efe4e5534\",\"30\":\"b2464d08ccbeb40ec74e\",\"32\":\"3251a701a677ab35e980\",\"33\":\"70f8e7b1964892a24e67\"}[chunkId] + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d09c37348241e3b2523f\n **/"],"sourceRoot":""}
@@ -29,5 +29,8 @@ class APITestCase(FrontTestCase):
29
29
  def put(self, url, data=None, json=True, *args, **kwargs):
30
30
  return self.api.put(url, data=data, json=json, *args, **kwargs)
31
31
 
32
+ def patch(self, url, data=None, json=True, *args, **kwargs):
33
+ return self.api.patch(url, data=data, json=json, *args, **kwargs)
34
+
32
35
  def delete(self, url, data=None, *args, **kwargs):
33
36
  return self.api.delete(url, data=data, *args, **kwargs)
@@ -0,0 +1,236 @@
1
+ from pprint import pprint
2
+ from flask import url_for
3
+
4
+ from udata.core.dataservices.models import Dataservice
5
+ from udata.core.dataset.factories import (DatasetFactory, LicenseFactory)
6
+ from udata.i18n import gettext as _
7
+ from udata.core.user.factories import UserFactory
8
+ from udata.core.organization.factories import OrganizationFactory
9
+ from udata.core.organization.models import Member
10
+
11
+ from . import APITestCase
12
+
13
+ class DataserviceAPITest(APITestCase):
14
+ modules = []
15
+
16
+ def test_dataservice_api_create(self):
17
+ user = self.login()
18
+ datasets = DatasetFactory.create_batch(3)
19
+ license = LicenseFactory.create()
20
+
21
+ response = self.post(url_for('api.dataservices'), {
22
+ 'title': 'My API',
23
+ 'base_api_url': 'https://example.org',
24
+ })
25
+ self.assert201(response)
26
+ self.assertEqual(Dataservice.objects.count(), 1)
27
+
28
+ dataservice = Dataservice.objects.first()
29
+
30
+ response = self.get(url_for('api.dataservice', dataservice=dataservice))
31
+ self.assert200(response)
32
+
33
+ self.assertEqual(response.json['title'], 'My API')
34
+ self.assertEqual(response.json['base_api_url'], 'https://example.org')
35
+ self.assertEqual(response.json['owner']['id'], str(user.id))
36
+
37
+ response = self.patch(url_for('api.dataservice', dataservice=dataservice), {
38
+ 'title': 'Updated title',
39
+ 'tags': ['hello', 'world'],
40
+ 'private': True,
41
+ 'datasets': [datasets[0].id, datasets[2].id],
42
+ 'license': license.id,
43
+ 'extras': {
44
+ 'foo': 'bar',
45
+ },
46
+ })
47
+ self.assert200(response)
48
+
49
+ self.assertEqual(response.json['title'], 'Updated title')
50
+ self.assertEqual(response.json['base_api_url'], 'https://example.org')
51
+ self.assertEqual(response.json['tags'], ['hello', 'world'])
52
+ self.assertEqual(response.json['private'], True)
53
+ self.assertEqual(response.json['datasets'][0]['title'], datasets[0].title)
54
+ self.assertEqual(response.json['datasets'][1]['title'], datasets[2].title)
55
+ self.assertEqual(response.json['extras'], {
56
+ 'foo': 'bar',
57
+ })
58
+ self.assertEqual(response.json['license'], license.title)
59
+ self.assertEqual(response.json['self_api_url'], 'http://local.test/api/1/dataservices/updated-title/')
60
+ dataservice.reload()
61
+ self.assertEqual(dataservice.title, 'Updated title')
62
+ self.assertEqual(dataservice.base_api_url, 'https://example.org')
63
+ self.assertEqual(dataservice.tags, ['hello', 'world'])
64
+ self.assertEqual(dataservice.private, True)
65
+ self.assertEqual(dataservice.datasets[0].title, datasets[0].title)
66
+ self.assertEqual(dataservice.datasets[1].title, datasets[2].title)
67
+ self.assertEqual(dataservice.extras, {
68
+ 'foo': 'bar',
69
+ })
70
+ self.assertEqual(dataservice.license.title, license.title)
71
+ self.assertEqual(dataservice.self_api_url(), 'http://local.test/api/1/dataservices/updated-title/')
72
+
73
+ response = self.delete(url_for('api.dataservice', dataservice=dataservice))
74
+ self.assert204(response)
75
+
76
+ self.assertEqual(Dataservice.objects.count(), 1)
77
+
78
+ dataservice.reload()
79
+ self.assertEqual(dataservice.title, 'Updated title')
80
+ self.assertEqual(dataservice.base_api_url, 'https://example.org')
81
+ self.assertIsNotNone(dataservice.deleted_at)
82
+
83
+ # response = self.get(url_for('api.dataservice', dataservice=dataservice))
84
+ # self.assert410(response)
85
+
86
+
87
+ def test_dataservice_api_index(self):
88
+ self.login()
89
+ self.post(url_for('api.dataservices'), {
90
+ 'title': 'B',
91
+ 'base_api_url': 'https://example.org/B',
92
+ })
93
+ self.post(url_for('api.dataservices'), {
94
+ 'title': 'C',
95
+ 'base_api_url': 'https://example.org/C',
96
+ })
97
+ self.post(url_for('api.dataservices'), {
98
+ 'title': 'A',
99
+ 'base_api_url': 'https://example.org/A',
100
+ })
101
+ response = self.post(url_for('api.dataservices'), {
102
+ 'title': 'X',
103
+ 'base_api_url': 'https://example.org/X',
104
+ 'private': True,
105
+ })
106
+
107
+ self.assertEqual(Dataservice.objects.count(), 4)
108
+
109
+ response = self.get(url_for('api.dataservices'))
110
+ self.assert200(response)
111
+
112
+ self.assertEqual(response.json['previous_page'], None)
113
+ self.assertEqual(response.json['next_page'], None)
114
+ self.assertEqual(response.json['page'], 1)
115
+ self.assertEqual(response.json['total'], 3)
116
+ self.assertEqual(len(response.json['data']), 3)
117
+ self.assertEqual(response.json['data'][0]['title'], 'B')
118
+ self.assertEqual(response.json['data'][1]['title'], 'C')
119
+ self.assertEqual(response.json['data'][2]['title'], 'A')
120
+
121
+ response = self.get(url_for('api.dataservices', sort='title'))
122
+ self.assert200(response)
123
+
124
+ self.assertEqual(response.json['previous_page'], None)
125
+ self.assertEqual(response.json['next_page'], None)
126
+ self.assertEqual(response.json['page'], 1)
127
+ self.assertEqual(response.json['total'], 3)
128
+ self.assertEqual(len(response.json['data']), 3)
129
+ self.assertEqual(response.json['data'][0]['title'], 'A')
130
+ self.assertEqual(response.json['data'][1]['title'], 'B')
131
+ self.assertEqual(response.json['data'][2]['title'], 'C')
132
+
133
+ response = self.get(url_for('api.dataservices', sort='-title'))
134
+ self.assert200(response)
135
+
136
+ self.assertEqual(response.json['previous_page'], None)
137
+ self.assertEqual(response.json['next_page'], None)
138
+ self.assertEqual(response.json['page'], 1)
139
+ self.assertEqual(response.json['total'], 3)
140
+ self.assertEqual(len(response.json['data']), 3)
141
+ self.assertEqual(response.json['data'][0]['title'], 'C')
142
+ self.assertEqual(response.json['data'][1]['title'], 'B')
143
+ self.assertEqual(response.json['data'][2]['title'], 'A')
144
+
145
+
146
+ response = self.get(url_for('api.dataservices', page_size=1))
147
+ self.assert200(response)
148
+
149
+ self.assertEqual(response.json['previous_page'], None)
150
+ assert response.json['next_page'].endswith(url_for('api.dataservices', page_size=1, page=2))
151
+ self.assertEqual(response.json['page'], 1)
152
+ self.assertEqual(response.json['total'], 3)
153
+ self.assertEqual(len(response.json['data']), 1)
154
+ self.assertEqual(response.json['data'][0]['title'], 'B')
155
+
156
+ def test_dataservice_api_create_with_validation_error(self):
157
+ self.login()
158
+ response = self.post(url_for('api.dataservices'), {
159
+ 'base_api_url': 'https://example.org',
160
+ })
161
+ self.assert400(response)
162
+ self.assertEqual(Dataservice.objects.count(), 0)
163
+
164
+ def test_dataservice_api_create_with_unkwown_license(self):
165
+ self.login()
166
+ response = self.post(url_for('api.dataservices'), {
167
+ 'title': 'My title',
168
+ 'base_api_url': 'https://example.org',
169
+ 'license': 'unwkown-license',
170
+ })
171
+ self.assert400(response)
172
+ self.assertEqual(response.json['errors']['license'], ["Unknown reference 'unwkown-license'"])
173
+ self.assertEqual(Dataservice.objects.count(), 0)
174
+
175
+
176
+ def test_dataservice_api_create_with_unkwown_contact_point(self):
177
+ self.login()
178
+
179
+ response = self.post(url_for('api.dataservices'), {
180
+ 'title': 'My title',
181
+ 'base_api_url': 'https://example.org',
182
+ 'contact_point': '66212433e42ab56639ad516e',
183
+ })
184
+ self.assert400(response)
185
+ self.assertEqual(response.json['errors']['contact_point'], ["Unknown reference '66212433e42ab56639ad516e'"])
186
+ self.assertEqual(Dataservice.objects.count(), 0)
187
+
188
+
189
+ def test_dataservice_api_create_with_custom_user_or_org(self):
190
+ other = UserFactory()
191
+ other_member = Member(user=other, role='editor')
192
+ other_org = OrganizationFactory(members=[other_member])
193
+
194
+ me = self.login()
195
+ me_member = Member(user=me, role='editor')
196
+ me_org = OrganizationFactory(members=[me_member])
197
+
198
+ response = self.post(url_for('api.dataservices'), {
199
+ 'title': 'My title',
200
+ 'base_api_url': 'https://example.org',
201
+ 'owner': other.id,
202
+ })
203
+ self.assert400(response)
204
+ self.assertEqual(response.json['errors']['owner'], [_("You can only set yourself as owner")])
205
+ self.assertEqual(Dataservice.objects.count(), 0)
206
+
207
+ response = self.post(url_for('api.dataservices'), {
208
+ 'title': 'My title',
209
+ 'base_api_url': 'https://example.org',
210
+ 'organization': other_org.id,
211
+ })
212
+ self.assert400(response)
213
+ self.assertEqual(response.json['errors']['organization'], [_("Permission denied for this organization")])
214
+ self.assertEqual(Dataservice.objects.count(), 0)
215
+
216
+
217
+ response = self.post(url_for('api.dataservices'), {
218
+ 'title': 'My title',
219
+ 'base_api_url': 'https://example.org',
220
+ 'owner': me.id,
221
+ })
222
+ self.assert201(response)
223
+ dataservice = Dataservice.objects(id=response.json['id']).first()
224
+ self.assertEqual(dataservice.owner.id, me.id)
225
+ self.assertEqual(dataservice.organization, None)
226
+
227
+
228
+ response = self.post(url_for('api.dataservices'), {
229
+ 'title': 'My title',
230
+ 'base_api_url': 'https://example.org',
231
+ 'organization': me_org.id,
232
+ })
233
+ self.assert201(response)
234
+ dataservice = Dataservice.objects(id=response.json['id']).first()
235
+ self.assertEqual(dataservice.owner, None)
236
+ self.assertEqual(dataservice.organization.id, me_org.id)
udata/tests/plugin.py CHANGED
@@ -192,6 +192,11 @@ class ApiClient(object):
192
192
  return self.client.put(url, data or {}, *args, **kwargs)
193
193
  return self.perform('put', url, data=data or {}, *args, **kwargs)
194
194
 
195
+ def patch(self, url, data=None, json=True, *args, **kwargs):
196
+ if not json:
197
+ return self.client.patch(url, data or {}, *args, **kwargs)
198
+ return self.perform('patch', url, data=data or {}, *args, **kwargs)
199
+
195
200
  def delete(self, url, data=None, *args, **kwargs):
196
201
  return self.perform('delete', url, data=data or {}, *args, **kwargs)
197
202
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 8.0.1.dev28882
3
+ Version: 8.0.1.dev28928
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -137,6 +137,7 @@ It is collectively taken care of by members of the
137
137
 
138
138
  ## Current (in progress)
139
139
 
140
+ - Add dataservices in beta [#2986](https://github.com/opendatateam/udata/pull/2986)
140
141
  - Remove deprecated `metrics_for` route [#3022](https://github.com/opendatateam/udata/pull/3022)
141
142
  - Fix spatial coverage fetching perfs. Need to schedule `compute-geozones-metrics` [#3018](https://github.com/opendatateam/udata/pull/3018)
142
143
 
@@ -1,6 +1,7 @@
1
1
  tasks/__init__.py,sha256=CnVhb_TV-6nMhxVR6itnBmvuU2OSCs02AfNB4irVBTE,8132
2
2
  tasks/helpers.py,sha256=k_HiuiEJNgQLvWdeHqczPOAcrYpFjEepBeKo7EQzY8M,994
3
3
  udata/__init__.py,sha256=qPn-jr9CTcAEJ6KD95BxAliMbSxwtelLc8fyakV7UO0,101
4
+ udata/api_fields.py,sha256=myHkndhedV3g9cn2FWBu1Hx24Fy-fxaGedEP1ZMOoi0,11506
4
5
  udata/app.py,sha256=6upwrImLaWrSYtsXPW1zH84_oRxp3B6XFuocMe2D6NU,7329
5
6
  udata/assets.py,sha256=aMa-MnAEXVSTavptSn2V8sUE6jL_N0MrYCQ6_QpsuHs,645
6
7
  udata/entrypoints.py,sha256=8bZUvZ8ICO3kZxa8xDUaen6YS_OAGNKHFvaD7d8BOk0,2687
@@ -9,7 +10,7 @@ udata/factories.py,sha256=6en2qdHHoR6rEvNEUeH_0-T-vR7x7GUBGgNEm9vuylE,492
9
10
  udata/i18n.py,sha256=E-JoY57Cv4vgPvChkWjpwZAbuYVI8e6BO6raeu_3_Pw,8352
10
11
  udata/mail.py,sha256=dAMcbEtk5e54alpQezvF5adDrRPgdaT36QEdHD_5v50,2145
11
12
  udata/rdf.py,sha256=QiHcK2iklbtPkl6UFdBxTj0oaiY41en9k-kmbIVJ8Xw,9893
12
- udata/routing.py,sha256=lU1XNL-YQgx1GN3pjKue1tIjHzjO3QdTiF9aaLNLitg,7044
13
+ udata/routing.py,sha256=Qhpf5p97fs1SoJXtDctc1FPk0MeOKLn_C0Z1dP4ZNJA,7234
13
14
  udata/sentry.py,sha256=KiZz0PpmYpZMvykH9UAbHpF4xBY0Q-8DeiEbXEHDUdw,2683
14
15
  udata/settings.py,sha256=5cU5_oiPiuS8RS98F9qfCp37qbjjN_g8ipoyZjDQP0M,17298
15
16
  udata/sitemap.py,sha256=pjtR2lU3gRHvK8l1Lw8B9wrqMMTYC5adUfFh0pUp_Q4,977
@@ -23,11 +24,11 @@ udata/worker.py,sha256=K-Wafye5-uXP4kQlffRKws2J9YbJ6m6n2QjcVsY8Nsg,118
23
24
  udata/wsgi.py,sha256=P7AJvZ5JqY4uRSBOzaFiBniChWIU9RVQ-Y0PN4vCCMY,77
24
25
  udata/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  udata/admin/views.py,sha256=wMlpnC1aINW-6JDk6-kQXhcTYBZH-5wajEuWzVDcIKA,331
26
- udata/api/__init__.py,sha256=BPpjd6jmGm3nAKl3QpB7qIP72_3dAoO__3-X0CHPhzw,11236
27
+ udata/api/__init__.py,sha256=I40g3PLG4s-zGNQfjB8_KQGzfs3ZyUrZdajd20vQ9ks,11388
27
28
  udata/api/commands.py,sha256=oK2p1VdUvULDdYuvYYpYvY_bdkPJy-KfROfoX71oOuA,3277
28
29
  udata/api/errors.py,sha256=Sy_f3WVrNTUPZjCOogIVgocDdUjnKz149KDi4mMA_Lg,240
29
30
  udata/api/fields.py,sha256=l-Fa27-easR86qgof2bk130jq1N1pNUgGmQzok1UI3Q,3094
30
- udata/api/oauth2.py,sha256=ERppP1FtigiAJXO01IjhFFzG8ajPVD6gPcKpBrjHFO4,11726
31
+ udata/api/oauth2.py,sha256=LTtkpkNYrPl_7xf-JmP-TLwrk_RHajnHDFKo-3NPEd8,11780
31
32
  udata/api/parsers.py,sha256=Fo4krCaFao0D1QNqKpjWiFVvKVLd9b_2mon6RbbOXls,1485
32
33
  udata/api/signals.py,sha256=9zcw4NDdpJwhgsS5UyLtnls1w_RfqghYFULza6d4-cw,162
33
34
  udata/auth/__init__.py,sha256=ziR6gzkE1V4__3ynjE-_IPWHzmapOsZIrnaDAjDijsM,1958
@@ -52,7 +53,7 @@ udata/commands/worker.py,sha256=zek8YRxCESrZIULhx9D9RQOPFc4WwhYm2sF7-PPbEKY,4028
52
53
  udata/commands/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
54
  udata/commands/tests/fixtures.py,sha256=h78grSpZDgOwvmezyD3qBpiSnpxaQ9tDeQOr3sB8EiY,1581
54
55
  udata/core/__init__.py,sha256=n7TBP0lkYJl-BLoc67V5fyaawrWmsrWG_mLIF49UFOY,385
55
- udata/core/owned.py,sha256=sLI4UpVuMukMEkC3K9Iwjl6P6Cz25J48M6VZc_-HZRQ,2718
56
+ udata/core/owned.py,sha256=ZOoRacTWHiCgZDEENu_7vRcoemZrNLmVVI3PVLuLK5E,4453
56
57
  udata/core/activity/__init__.py,sha256=4vB92owvzwn2VVxbFWGNcfESb6izDzvbj6lmLH4ssrU,299
57
58
  udata/core/activity/api.py,sha256=ohDEbzhbsmJ6YHQh3Aa8wYctaDQGuwKdg0kjh3lC028,3276
58
59
  udata/core/activity/models.py,sha256=kzy9kcixX3DUo-2YpVjGXVHR4cOZMl7AsPiDBZ52EDs,2118
@@ -64,7 +65,7 @@ udata/core/badges/commands.py,sha256=NMihQH6ABUlkYpR2lNFW4dkeaWOjpijW7voudww8zW4
64
65
  udata/core/badges/factories.py,sha256=rDQC28fKLtYA6l69EqiyOQyN4C2jVj87EdKBEo4sYsw,297
65
66
  udata/core/badges/fields.py,sha256=rpeyZcw5-oU8FZXPnzU9-rGrwW5vCyhwgei7aAR-n3I,255
66
67
  udata/core/badges/forms.py,sha256=8z28_rln9duvJ7IvKx9IFO9DAMe3cU2bv0FQRdiMFEw,511
67
- udata/core/badges/models.py,sha256=cQBpLudR-cRxlbN68z_05UbX0BXRu97n1vMMdat4Ry4,3176
68
+ udata/core/badges/models.py,sha256=GtfqdeyPkve4HZa4mOIhVcHIXr5IOFnASEFqazi-oQg,3229
68
69
  udata/core/badges/permissions.py,sha256=5jFKFG4OlVp0pL0xSa7AGO0Ttn0QMsy9xEY2jTfKVmE,552
69
70
  udata/core/badges/signals.py,sha256=T12kgKO1lmIbdXlKnRmedYRnJzC2PZIMkrtcA1U2mNo,237
70
71
  udata/core/badges/tasks.py,sha256=LA1Sd0B0uUa6OANqmx0t-kDNK99uGePwwtilsdj9Evw,431
@@ -77,6 +78,9 @@ udata/core/contact_point/api_fields.py,sha256=KQADF7Drnd1uT9ZWjLRKQPJh6GdGUXJkYf
77
78
  udata/core/contact_point/factories.py,sha256=ATuV1seBCGKY3CzvPDG5nxfBBqHu-3YtER0_fiQJx6c,248
78
79
  udata/core/contact_point/forms.py,sha256=ggLhSJ1IRn5MclrhydckjAxwr4fFZxgAD4huSSucSsA,598
79
80
  udata/core/contact_point/models.py,sha256=NlNKureCpzgTLJuGviZPjNx-ABYRp4j2L-ur9Gmixao,324
81
+ udata/core/dataservices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
+ udata/core/dataservices/api.py,sha256=j0_fQdq_O3zBqY7PGapmNbeMjb2sS4x8jr3cTM-4i_Q,2803
83
+ udata/core/dataservices/models.py,sha256=G8m-YKHf32DdA-3Q4m-hlQCLZ8ZZUFKaRFD0YZtqvbE,4037
80
84
  udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
85
  udata/core/dataset/actions.py,sha256=3pzBg_qOR-w7fwPpTOKUHXWC9lkjALbOn1UQFmmT-s0,1199
82
86
  udata/core/dataset/activities.py,sha256=qQnHNL0hOB1IGtQl7JsnVOiUsWT0gm-pts9uDyR3bvU,1536
@@ -123,7 +127,7 @@ udata/core/jobs/forms.py,sha256=CB_z8JSyvSSJX1XhohsQ1S3kdOhTMgzsFTofso7AD60,1495
123
127
  udata/core/jobs/models.py,sha256=3vRfBp8e7KqJgKxTSSeMgfsMu07rAz1o_IfsYBFk9o4,1325
124
128
  udata/core/metrics/__init__.py,sha256=Q3nZVl7no0E1ygz7zNJH-KCa-m9FV6wAH2_y6zimcek,397
125
129
  udata/core/metrics/commands.py,sha256=74L6PUJyaTnr4w-_redN9ucY0v-3Vi4QumWHKZ__DYE,5143
126
- udata/core/metrics/models.py,sha256=v0xlLxl2Y9QdILW4DTZ1WzUy2a4XTNepdLNKmb8T8LY,287
130
+ udata/core/metrics/models.py,sha256=k4kgKjAViQ1XO1F6n-iRfF4eT9cHoGqjQP4e8vC2vmk,291
127
131
  udata/core/metrics/signals.py,sha256=Xs_k-9lWzsoZU5Joli-41FNgvIVvbAejkjSFB6DHxh0,176
128
132
  udata/core/metrics/tasks.py,sha256=Z7La3-zPB5j6qJoPKr_MgjNZhqscZCmNLPa711ZBkdY,797
129
133
  udata/core/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -137,7 +141,7 @@ udata/core/organization/csv.py,sha256=x0afMfhWYvx_karwuw5jXqBhMbzkrsiEuAq1wTVurZ
137
141
  udata/core/organization/factories.py,sha256=5BABVcDhEChRhJsDfCDm8WyJG4l9j3H1_OFZa3VtlVs,646
138
142
  udata/core/organization/forms.py,sha256=JXXv4tQGbIbICti7RXLVZdnc6VujATmLhDrHIsFxBME,3550
139
143
  udata/core/organization/metrics.py,sha256=45NDcsFV-oJJQUuq6AyIDXjR-RNubwYWF5-Ke8KrPDY,777
140
- udata/core/organization/models.py,sha256=Y7iFRQY6m87nKZNUMK9qsZJXZ6xzA6t2q_YxAm8K7Dg,8315
144
+ udata/core/organization/models.py,sha256=aLEqb7F1J7I9TKzSrODMB2Ecf7IxMqYmlgrZvLIx1k8,8387
141
145
  udata/core/organization/notifications.py,sha256=j-2LIHZ5y5QuVietWAWOrAqf4v1HMCtSDZ0w7V-z_1c,763
142
146
  udata/core/organization/permissions.py,sha256=cNIPiPgXVW2hvKqbuKHA_62tX2xaT8jiVJ3BEfnsHn0,1299
143
147
  udata/core/organization/rdf.py,sha256=ZSoxyZDj_5g6hv7lbTIy6bIW3xwvQy27rWNgJwtZ6LE,1762
@@ -406,8 +410,8 @@ udata/static/admin.css,sha256=6NjjkctQrJv9lMEiD2WZczfdUwkzZES6tNe-hf-9ws4,185239
406
410
  udata/static/admin.css.map,sha256=ugpn6Zy36BWHvHSkOhwa-GNuXNv_bFPL9ukKVcbHgfU,626560
407
411
  udata/static/admin.js,sha256=pibxMEOZvT_r3wgxy_xxjG_7Cvl5K8dopynuSfTtY5I,1323379
408
412
  udata/static/admin.js.map,sha256=eZi2nYg-FGClH53Kw3LdvYZ0RpgrrdyAgAhZyal_RQ4,8501170
409
- udata/static/common.js,sha256=-SljrgiTIlapiDSvp5NN3t3sRWsAUwmYSeZZQdzam4c,2252
410
- udata/static/common.js.map,sha256=Jzm22-4iWRvB1NLf9Ge7ZhbAMSo6Thhp8NmjSPs58oU,14137
413
+ udata/static/common.js,sha256=xMEKPIXWTgyHz4pB7KzTpqCe_5_zojDd-_yArJrQHNA,2252
414
+ udata/static/common.js.map,sha256=XhVliB0Kd_EBwlQRqgBcb8yxlJN4B8fG8lujxAg12Fw,14137
411
415
  udata/static/fontawesome-webfont.eot,sha256=e_yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk,165742
412
416
  udata/static/fontawesome-webfont.svg,sha256=rWFXkmwWIrpOHQPUePFUE2hSS_xG9R5C_g2UX37zI-Q,444379
413
417
  udata/static/fontawesome-webfont.ttf,sha256=qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg,165548
@@ -426,24 +430,24 @@ udata/static/chunks/1.ff8196d42cab0f031d3f.js,sha256=RoTq8mBpF9zhhmu5d0W6RJEVrv4
426
430
  udata/static/chunks/1.ff8196d42cab0f031d3f.js.map,sha256=wmDYu41OXVox5j-pSTRNBX6jfse9NODaSm1WVQxEzVw,1740240
427
431
  udata/static/chunks/10.e97ea231893dc435d6b5.js,sha256=APxVLHqIJpn5y4rgAcYe-kj2m1_YVKRcHQKYyoOhvDo,416268
428
432
  udata/static/chunks/10.e97ea231893dc435d6b5.js.map,sha256=ImT6Ak-obTIr1giuRa_B0GqYLxVK-k8VqdUInvIOo48,2742986
429
- udata/static/chunks/11.7266fef2dddc1db403d9.js,sha256=cIJhI5xmNKA6Nl5T7xn2rxxCmqYeuIZ5b5qt9ilLEtQ,395591
430
- udata/static/chunks/11.7266fef2dddc1db403d9.js.map,sha256=XOjiAWTnqY2bFlRm5Mnnaf-xUjbxNcGoF7aHwNqerao,2269401
433
+ udata/static/chunks/11.ae54612e36c6d46f85db.js,sha256=edM33scLmOlat4CPze7eP7xXezTaVwPcEKlGz8rCJLI,395591
434
+ udata/static/chunks/11.ae54612e36c6d46f85db.js.map,sha256=rJz027D86BPKfqTjoaeAyGv4p61IpZ9PjXD-Si0lyF4,2269401
431
435
  udata/static/chunks/12.59f035a9438e2baf5126.js,sha256=o6krxp00FhozAq8cFIsn7SARMqSSh-yBvjHrGnrdWG4,420875
432
436
  udata/static/chunks/12.59f035a9438e2baf5126.js.map,sha256=ZUBD8z2T7thgND62On62lLICfQFmbNli10Q0OoKb3k8,2441176
433
- udata/static/chunks/13.91b177d7d531fd55cf5d.js,sha256=8iq8kts4z4ue0xA0CDWTHOItgtzHFEssI7PYQ6R-5hU,420344
434
- udata/static/chunks/13.91b177d7d531fd55cf5d.js.map,sha256=amnIm8RZ0WAJ5ln8iPzvzjx37YyFRZjJQJkTl5nm-5U,2429638
437
+ udata/static/chunks/13.d8ccb992a49875966313.js,sha256=8nYBWHOXPlI8J3yBl5aDWzI2jXFf5JXF0GZsq9wLQ-M,420344
438
+ udata/static/chunks/13.d8ccb992a49875966313.js.map,sha256=QkY2auuLC-qzYPNH9m7bEZtmpTMoEO8HdrQ_s2Fhcl0,2429638
435
439
  udata/static/chunks/14.f4037a917d5364cb564b.js,sha256=jF8I8VCu15NSKUFYWix2PEBQgQk03mVmwS2704s7UjY,289983
436
440
  udata/static/chunks/14.f4037a917d5364cb564b.js.map,sha256=KgqzF6ZQsNMpNmrwPXW5NNNagz0lsJD4pf2zuomh498,1634769
437
441
  udata/static/chunks/15.92b2cef3032ea35da04a.js,sha256=mjInN76Vh4ZdaAeLt9cdDC_KzosZ09oXORoQnIDCDZQ,228520
438
442
  udata/static/chunks/15.92b2cef3032ea35da04a.js.map,sha256=r8-Tpyg4JArOxM9tesc6kfmo9K4dMA4gKeHuJnAjQlc,1574560
439
- udata/static/chunks/16.e866757bab9f6b0a3f1b.js,sha256=XZf7xlZ7qeSkCq7VWFnFk1mxpYomt1KMOji_TvjOKPc,236417
440
- udata/static/chunks/16.e866757bab9f6b0a3f1b.js.map,sha256=8FmJIIsWLGDNO6q4fgfKTDORJeULTjgEOGvQkw1naYE,1288679
443
+ udata/static/chunks/16.4565605e68bab129a471.js,sha256=5ExeZJWD1UM4XZrwFypFUQwZ4zdx9ZOtVgNDyHO1jzw,236417
444
+ udata/static/chunks/16.4565605e68bab129a471.js.map,sha256=TYtvlUXN3A5h83Edvr7ias_UqTZ1HdJKPvwQn26p9H4,1288679
441
445
  udata/static/chunks/17.15ecbcf8f0b2968689e8.js,sha256=A5fGRVBlSJ4eixr7jm3Cokp5i05LDHuKsy7GklSWpUs,134506
442
446
  udata/static/chunks/17.15ecbcf8f0b2968689e8.js.map,sha256=D67oY0dVnoJm0wR0a5dAJ6FzxLfctNO8vJIZ2JpSWHI,680755
443
447
  udata/static/chunks/18.ad41fb75ac4226e1f3ce.js,sha256=4KlM45mqvarK9EoOHtBSMxCrYfCXhbN0gkubnQw_If0,49284
444
448
  udata/static/chunks/18.ad41fb75ac4226e1f3ce.js.map,sha256=gY6K7PmVSGRKhJdspBZcvf50HD6sVue6zIhIE0BcTAw,273610
445
- udata/static/chunks/19.619b83ac597516dcd03e.js,sha256=BYAGmQGlRNW0LuXr6bX1yYWLPszRJJ_p08TyTu0WSEY,203488
446
- udata/static/chunks/19.619b83ac597516dcd03e.js.map,sha256=pe7LzyYPKFSm_mKzOOzkk-bwnrEmKLKAAkEISgMhMVQ,1080613
449
+ udata/static/chunks/19.f993a75d5bfe2382548d.js,sha256=2geAfrdRxFJtt0B_8WritRDrHEVKPRaeRwPxjuuxsTU,203488
450
+ udata/static/chunks/19.f993a75d5bfe2382548d.js.map,sha256=J_peeA37NoCXGo3G8oJXBijDjeT8Az8sdFrEziHa8g0,1080613
447
451
  udata/static/chunks/2.7c89fae92899be371ed3.js,sha256=7fJ6FaMiC4jS9-FBEb-Ztev6HthUTRM-3mchsanKu3s,276330
448
452
  udata/static/chunks/2.7c89fae92899be371ed3.js.map,sha256=BbzNfYeAAMr5-hcAq8rJJJU8JpIyn6RHlEo6pa1bM7k,1554204
449
453
  udata/static/chunks/20.14a92e5c503f74ff40df.js,sha256=5KSbcgzviAJ3tpRfRLPy6JC3zqE50dLijdLjaf9F59s,36688
@@ -474,16 +478,16 @@ udata/static/chunks/33.70f8e7b1964892a24e67.js,sha256=CP8Hb0M4O6jXd5s8_TI1BhyKB4
474
478
  udata/static/chunks/33.70f8e7b1964892a24e67.js.map,sha256=0ejAXya7tMgkLGrybenkpOBCp5PpkIOy_WexGpcFu5k,709305
475
479
  udata/static/chunks/4.95e6a070a0eb2ed08fdd.js,sha256=iYmVG0YYezPCo9myBP4N_Gqe4JGLpgpaVN7cGYhLYQQ,608399
476
480
  udata/static/chunks/4.95e6a070a0eb2ed08fdd.js.map,sha256=pjkKpbqGpGS0sTdZScl66M9D9SUyYoRrcJ6up5C4ww4,3720482
477
- udata/static/chunks/5.3dc97ea195d251881552.js,sha256=MZpC6BoP76jfcGLxsTov33jUUSq2DipJex4P2ZIyWUc,578639
478
- udata/static/chunks/5.3dc97ea195d251881552.js.map,sha256=18R3tuLoQr0A4J4z-VYFAk28Wkaj8hQJBI1kl4u5LnQ,3583218
479
- udata/static/chunks/6.f84539bd4c419b36cc19.js,sha256=jpjwKBv1jqOKwFqxF1mr5qUBDvmTCfRhKhqWfgRjnKM,609115
480
- udata/static/chunks/6.f84539bd4c419b36cc19.js.map,sha256=0jcpGDle1aCYri5HDzgl_N1mzOxgakJ1KNBmiW4X6jU,3780096
481
+ udata/static/chunks/5.ada3202d02917ce0edea.js,sha256=wM2e0ac6j7bHhhlZSJBm-D5L3GL-1hMIEcq_5tAWVJQ,578639
482
+ udata/static/chunks/5.ada3202d02917ce0edea.js.map,sha256=3PxE8wKZ6yEMG2BFkeSXCXZf1e7mHm2GQpU-MrVkXXI,3583218
483
+ udata/static/chunks/6.cad898a38692eda28965.js,sha256=Q8qA27SwC4LvCPg_mLBjdG-12KkQS_OAfqZaf8yl0-o,609115
484
+ udata/static/chunks/6.cad898a38692eda28965.js.map,sha256=bAYJQbU5ZuZWFUc6ccFz4hMShOHYcc4C9Ul-TSed7eQ,3780096
481
485
  udata/static/chunks/7.11ac4de064ae59691d49.js,sha256=KjMccbvUCaMsZLrdKOYyKshY6FrJ5kyZJJ3wqPVMhJ4,152380
482
486
  udata/static/chunks/7.11ac4de064ae59691d49.js.map,sha256=ZEAdz0FOccD8G_EJB4xv7aV5dlbGZfiY9k8EMqWZoiY,789676
483
487
  udata/static/chunks/8.17d1afb591ad1495bd03.js,sha256=ITR8W0odBF4Qc_sYSFSwDn_ROI0SheErQOFCSKxUlig,418247
484
488
  udata/static/chunks/8.17d1afb591ad1495bd03.js.map,sha256=oW0NCN77hHRjGt7zPbIGVG1KXZ9_IZxt-dK_jGlp6ek,2753135
485
- udata/static/chunks/9.07503e7f7ec02919f696.js,sha256=Urnvxi4D2sEnjYV7dhK7NWraENks2ik3UxkNGX1ngj8,222853
486
- udata/static/chunks/9.07503e7f7ec02919f696.js.map,sha256=6XDnt2rs-gVgrwU7yJZt7iN_Ic_sO_DGR6ZkLwl9DX8,1205437
489
+ udata/static/chunks/9.d5b992e9ef51921aeb57.js,sha256=9SbFIVW1IhyIBm_qxIBuuCNi0cv64sNuLddQheglN5I,222853
490
+ udata/static/chunks/9.d5b992e9ef51921aeb57.js.map,sha256=CKUAb5SYfBEMnHtnlcAMO1xnVx8opHQWdbKCzv5GgEE,1205437
487
491
  udata/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
488
492
  udata/storage/s3.py,sha256=Lki8iL9lkZz1fnHuQLpkrvjL2SWkvamKL6aortiEkj4,1573
489
493
  udata/templates/admin.html,sha256=RfX03rUOW7NIlgMYNhFfx0pL-p2j8BtAKvEFUadaIIs,787
@@ -560,7 +564,7 @@ udata/tests/__init__.py,sha256=BezijRRI6dPPiEWWjLsJFLrhhfsTZgcctcxhVfp4j70,2332
560
564
  udata/tests/es-fake-result.json,sha256=z0CX9Gs-NRj49dmtdFvw8ZKsAbMhDt97Na6JX3ucX34,3155
561
565
  udata/tests/helpers.py,sha256=aaifyevJ1Z8CZ8htRrl8OCG5hGcaHfj0lL8iMEKds9w,6022
562
566
  udata/tests/models.py,sha256=_V0smMb1Z6p3aZv6PorzNN-HiNt_B46Ox1fqXrTJEqk,238
563
- udata/tests/plugin.py,sha256=puoSIbE5vL6eum0YAeGhE2ARwxWstC6ua-rXJC9Z5fI,11044
567
+ udata/tests/plugin.py,sha256=DXP0H1Sm2fc-okGSKKBOgH8D8x4fl4_1OVhakgQLz4w,11278
564
568
  udata/tests/schemas.json,sha256=szM1jDpkogfOG4xWbjIGjLgG8l9-ZyE3JKQtecJyD1E,4990
565
569
  udata/tests/test_activity.py,sha256=spWfhueuLze0kD-pAnegiL3_Kv5io155jQuFI4sjN7I,3258
566
570
  udata/tests/test_discussions.py,sha256=zPvKOdcTNGXrvHFp9zqjhKE2fqgUkhb_1F98egXYCL0,31036
@@ -579,10 +583,11 @@ udata/tests/test_topics.py,sha256=r7Y0BW0Z5obld9ASs2Ck9AhykgBtmMedZmL2Bfz_rDw,13
579
583
  udata/tests/test_transfer.py,sha256=Y0adyR3CswK2Vvao7DgpP_19b8K6XwNO2dvbKlmnlD0,8036
580
584
  udata/tests/test_uris.py,sha256=FQJvz7RXkr21tZ7rZp2uwgZUHk88PxhYId-jXSAl9GM,8519
581
585
  udata/tests/test_utils.py,sha256=5awzhJlbnLga0mRXNR2mBGW_kGuAIoQLEZEMQRKuaIM,7944
582
- udata/tests/api/__init__.py,sha256=Tz_WigHLDlnJNKOKzEAnJswkKiLtHlIpCE54-wgocgM,957
586
+ udata/tests/api/__init__.py,sha256=gIIB9OPiSs1A-u1bEIHlOesaCQzJ08SOLPuJd34LesE,1097
583
587
  udata/tests/api/test_auth_api.py,sha256=3Zhn2A29poZIcCJ_R9_-LkR3xOFUTw1aTquiZVXQ2F0,20306
584
588
  udata/tests/api/test_base_api.py,sha256=DRX5nuFIj51GFmMIAxUzoW1yiq1apNgr1vS4U4agzeg,2319
585
589
  udata/tests/api/test_contact_points.py,sha256=MJm8B06iaUqIZCqxll3NViFwUCxwqZZ4u9e9s1h8MgU,1056
590
+ udata/tests/api/test_dataservices_api.py,sha256=eIo0b18BSSRocyf9pTChzDnKotxxLMq8R1tX53JdH_M,9743
586
591
  udata/tests/api/test_datasets_api.py,sha256=zqRtC61NvYUNum4kBTjA1W87JAIobA4k564rm-U6c98,81704
587
592
  udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
588
593
  udata/tests/api/test_follow_api.py,sha256=0h54P_Dfbo07u6tg0Rbai1WWgWb19ZLN2HGv4oLCWfg,3383
@@ -676,9 +681,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=uttB2K8VsqzkEQG-5HfTtFms_3LtV9
676
681
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=8Ql1Lp7Z9KLnvp-qRxw-NhFu1p35Xj-q6Jg9JHsYhcw,43733
677
682
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=US8beNIMPxP5h-zD_jfP1TheDDd4DdRVS5UIiY5XVZ8,28553
678
683
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=TM0yMDvKRljyOzgZZMlTX6OfpF6OC4Ngf_9Zc8n6ayA,50313
679
- udata-8.0.1.dev28882.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
680
- udata-8.0.1.dev28882.dist-info/METADATA,sha256=cEdat6StNS-anDd93aAv8DmBXGhqmqFEHjr-0fBl920,122297
681
- udata-8.0.1.dev28882.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
682
- udata-8.0.1.dev28882.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
683
- udata-8.0.1.dev28882.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
684
- udata-8.0.1.dev28882.dist-info/RECORD,,
684
+ udata-8.0.1.dev28928.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
685
+ udata-8.0.1.dev28928.dist-info/METADATA,sha256=tB-T4SHz3x5TYr-Ztafc3klwqZmf9NdtIQD6Ak1GYzY,122381
686
+ udata-8.0.1.dev28928.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
687
+ udata-8.0.1.dev28928.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
688
+ udata-8.0.1.dev28928.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
689
+ udata-8.0.1.dev28928.dist-info/RECORD,,