udata 8.0.1__py2.py3-none-any.whl → 8.0.1.dev28882__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.
- udata/__init__.py +1 -1
- udata/api/__init__.py +3 -6
- udata/api/oauth2.py +1 -2
- udata/core/badges/models.py +1 -2
- udata/core/dataset/apiv2.py +0 -2
- udata/core/dataset/models.py +0 -1
- udata/core/dataset/rdf.py +1 -21
- udata/core/metrics/models.py +3 -2
- udata/core/organization/api_fields.py +3 -28
- udata/core/organization/models.py +1 -3
- udata/core/owned.py +2 -39
- udata/core/spatial/api.py +4 -4
- udata/core/user/api.py +7 -11
- udata/core/user/models.py +2 -13
- udata/harvest/backends/dcat.py +8 -14
- udata/harvest/tests/dcat/catalog.xml +0 -1
- udata/harvest/tests/test_dcat_backend.py +0 -3
- udata/routing.py +0 -6
- udata/settings.py +1 -4
- udata/static/admin.css +2 -2
- udata/static/admin.css.map +1 -1
- udata/static/chunks/{0.93c3ae13b5b94753ee80.js → 0.6f1698738c9b0618b673.js} +3 -3
- udata/static/chunks/0.6f1698738c9b0618b673.js.map +1 -0
- udata/static/chunks/{14.e64890872b31c55fcdf7.js → 14.f4037a917d5364cb564b.js} +2 -2
- udata/static/chunks/14.f4037a917d5364cb564b.js.map +1 -0
- udata/static/chunks/{2.614b3e73b072982fd9b1.js → 2.7c89fae92899be371ed3.js} +2 -2
- udata/static/chunks/2.7c89fae92899be371ed3.js.map +1 -0
- udata/static/chunks/{5.48417db6b33328fa9d6a.js → 5.3dc97ea195d251881552.js} +2 -2
- udata/static/chunks/5.3dc97ea195d251881552.js.map +1 -0
- udata/static/common.js +1 -1
- udata/static/common.js.map +1 -1
- udata/tests/api/__init__.py +0 -3
- udata/tests/api/test_organizations_api.py +5 -78
- udata/tests/api/test_user_api.py +13 -47
- udata/tests/plugin.py +0 -5
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.dist-info}/METADATA +3 -12
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.dist-info}/RECORD +41 -46
- udata/api_fields.py +0 -254
- udata/core/dataservices/__init__.py +0 -0
- udata/core/dataservices/api.py +0 -84
- udata/core/dataservices/models.py +0 -130
- udata/static/chunks/0.93c3ae13b5b94753ee80.js.map +0 -1
- udata/static/chunks/14.e64890872b31c55fcdf7.js.map +0 -1
- udata/static/chunks/2.614b3e73b072982fd9b1.js.map +0 -1
- udata/static/chunks/5.48417db6b33328fa9d6a.js.map +0 -1
- udata/tests/api/test_dataservices_api.py +0 -236
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.dist-info}/LICENSE +0 -0
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.dist-info}/WHEEL +0 -0
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.dist-info}/entry_points.txt +0 -0
- {udata-8.0.1.dist-info → udata-8.0.1.dev28882.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:"
|
|
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}([]));
|
|
2
2
|
//# sourceMappingURL=common.js.map
|
udata/static/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap ede79b8cd6024fb06864"],"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\":\"93c3ae13b5b94753ee80\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"614b3e73b072982fd9b1\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"48417db6b33328fa9d6a\",\"6\":\"f84539bd4c419b36cc19\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"07503e7f7ec02919f696\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"7266fef2dddc1db403d9\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"91b177d7d531fd55cf5d\",\"14\":\"e64890872b31c55fcdf7\",\"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\":\"fa73a4eb8875b89f452f\",\"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\":\"93c3ae13b5b94753ee80\",\"1\":\"ff8196d42cab0f031d3f\",\"2\":\"614b3e73b072982fd9b1\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"95e6a070a0eb2ed08fdd\",\"5\":\"48417db6b33328fa9d6a\",\"6\":\"f84539bd4c419b36cc19\",\"7\":\"11ac4de064ae59691d49\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"07503e7f7ec02919f696\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"7266fef2dddc1db403d9\",\"12\":\"59f035a9438e2baf5126\",\"13\":\"91b177d7d531fd55cf5d\",\"14\":\"e64890872b31c55fcdf7\",\"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\":\"fa73a4eb8875b89f452f\",\"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 ede79b8cd6024fb06864\n **/"],"sourceRoot":""}
|
|
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":""}
|
udata/tests/api/__init__.py
CHANGED
|
@@ -29,8 +29,5 @@ 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
|
-
|
|
35
32
|
def delete(self, url, data=None, *args, **kwargs):
|
|
36
33
|
return self.api.delete(url, data=data, *args, **kwargs)
|
|
@@ -191,7 +191,8 @@ class MembershipAPITest:
|
|
|
191
191
|
user = api.login()
|
|
192
192
|
data = {'comment': 'a comment'}
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
api_url = url_for('api.request_membership', org=organization)
|
|
195
|
+
response = api.post(api_url, data)
|
|
195
196
|
assert201(response)
|
|
196
197
|
|
|
197
198
|
organization.reload()
|
|
@@ -208,13 +209,14 @@ class MembershipAPITest:
|
|
|
208
209
|
assert request.handled_by is None
|
|
209
210
|
assert request.refusal_comment is None
|
|
210
211
|
|
|
211
|
-
def
|
|
212
|
+
def test_request_existing_pending_membership(self, api):
|
|
212
213
|
user = api.login()
|
|
213
214
|
previous_request = MembershipRequest(user=user, comment='previous')
|
|
214
215
|
organization = OrganizationFactory(requests=[previous_request])
|
|
215
216
|
data = {'comment': 'a comment'}
|
|
216
217
|
|
|
217
|
-
|
|
218
|
+
api_url = url_for('api.request_membership', org=organization)
|
|
219
|
+
response = api.post(api_url, data)
|
|
218
220
|
assert200(response)
|
|
219
221
|
|
|
220
222
|
organization.reload()
|
|
@@ -231,81 +233,6 @@ class MembershipAPITest:
|
|
|
231
233
|
assert request.handled_by is None
|
|
232
234
|
assert request.refusal_comment is None
|
|
233
235
|
|
|
234
|
-
def test_get_membership_requests(self, api):
|
|
235
|
-
user = api.login()
|
|
236
|
-
applicant = UserFactory(email="thibaud@example.org")
|
|
237
|
-
membership_request = MembershipRequest(user=applicant, comment='test')
|
|
238
|
-
member = Member(user=user, role='admin')
|
|
239
|
-
organization = OrganizationFactory(
|
|
240
|
-
members=[member], requests=[membership_request])
|
|
241
|
-
|
|
242
|
-
response = api.get(url_for('api.request_membership', org=organization))
|
|
243
|
-
assert200(response)
|
|
244
|
-
|
|
245
|
-
assert len(response.json) == 1
|
|
246
|
-
assert response.json[0]['comment'] == 'test'
|
|
247
|
-
assert response.json[0]['user']['email'] == 'thibaud@example.org' # Can see email of applicant
|
|
248
|
-
|
|
249
|
-
def test_only_org_member_can_get_membership_requests(self, api):
|
|
250
|
-
api.login()
|
|
251
|
-
applicant = UserFactory(email="thibaud@example.org")
|
|
252
|
-
membership_request = MembershipRequest(user=applicant, comment='test')
|
|
253
|
-
organization = OrganizationFactory(
|
|
254
|
-
members=[], requests=[membership_request])
|
|
255
|
-
|
|
256
|
-
response = api.get(url_for('api.request_membership', org=organization))
|
|
257
|
-
assert403(response)
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
def test_get_members_with_or_without_email(self, api):
|
|
261
|
-
admin = Member(user=UserFactory(email="admin@example.org"), role='admin', since="2024-04-14")
|
|
262
|
-
editor = Member(user=UserFactory(email="editor@example.org"), role='editor')
|
|
263
|
-
other = UserFactory(email="other@example.org")
|
|
264
|
-
|
|
265
|
-
organization = OrganizationFactory(members=[admin, editor])
|
|
266
|
-
|
|
267
|
-
# Admin can see emails
|
|
268
|
-
api.login(admin.user)
|
|
269
|
-
response = api.get(url_for('api.organization', org=organization))
|
|
270
|
-
assert200(response)
|
|
271
|
-
|
|
272
|
-
members = response.json['members']
|
|
273
|
-
assert len(members) == 2
|
|
274
|
-
assert members[0]['role'] == 'admin'
|
|
275
|
-
assert members[0]['since'] == '2024-04-14T00:00:00+00:00'
|
|
276
|
-
assert members[0]['user']['email'] == 'admin@example.org'
|
|
277
|
-
|
|
278
|
-
assert members[1]['role'] == 'editor'
|
|
279
|
-
assert members[1]['user']['email'] == 'editor@example.org'
|
|
280
|
-
|
|
281
|
-
# Editor can see emails
|
|
282
|
-
api.login(editor.user)
|
|
283
|
-
response = api.get(url_for('api.organization', org=organization))
|
|
284
|
-
assert200(response)
|
|
285
|
-
|
|
286
|
-
members = response.json['members']
|
|
287
|
-
assert len(members) == 2
|
|
288
|
-
assert members[0]['role'] == 'admin'
|
|
289
|
-
assert members[0]['since'] == '2024-04-14T00:00:00+00:00'
|
|
290
|
-
assert members[0]['user']['email'] == 'admin@example.org'
|
|
291
|
-
|
|
292
|
-
assert members[1]['role'] == 'editor'
|
|
293
|
-
assert members[1]['user']['email'] == 'editor@example.org'
|
|
294
|
-
|
|
295
|
-
# Others cannot see emails
|
|
296
|
-
api.login(other)
|
|
297
|
-
response = api.get(url_for('api.organization', org=organization))
|
|
298
|
-
assert200(response)
|
|
299
|
-
|
|
300
|
-
members = response.json['members']
|
|
301
|
-
assert len(members) == 2
|
|
302
|
-
assert members[0]['role'] == 'admin'
|
|
303
|
-
assert members[0]['since'] == '2024-04-14T00:00:00+00:00'
|
|
304
|
-
assert members[0]['user']['email'] is None
|
|
305
|
-
|
|
306
|
-
assert members[1]['role'] == 'editor'
|
|
307
|
-
assert members[1]['user']['email'] is None
|
|
308
|
-
|
|
309
236
|
def test_accept_membership(self, api):
|
|
310
237
|
user = api.login()
|
|
311
238
|
applicant = UserFactory()
|
udata/tests/api/test_user_api.py
CHANGED
|
@@ -4,7 +4,7 @@ from udata.core import storages
|
|
|
4
4
|
from udata.core.user.factories import AdminFactory, UserFactory
|
|
5
5
|
from udata.models import Follow
|
|
6
6
|
from udata.utils import faker
|
|
7
|
-
from udata.tests.helpers import
|
|
7
|
+
from udata.tests.helpers import create_test_image
|
|
8
8
|
|
|
9
9
|
from . import APITestCase
|
|
10
10
|
|
|
@@ -153,8 +153,6 @@ class UserAPITest(APITestCase):
|
|
|
153
153
|
|
|
154
154
|
def test_user_api_full_text_search_first_name(self):
|
|
155
155
|
'''It should find users based on first name'''
|
|
156
|
-
self.login(AdminFactory())
|
|
157
|
-
|
|
158
156
|
for i in range(4):
|
|
159
157
|
UserFactory(
|
|
160
158
|
first_name='test-{0}'.format(i) if i % 2 else faker.word())
|
|
@@ -166,8 +164,6 @@ class UserAPITest(APITestCase):
|
|
|
166
164
|
|
|
167
165
|
def test_user_api_full_text_search_last_name(self):
|
|
168
166
|
'''It should find users based on last name'''
|
|
169
|
-
self.login(AdminFactory())
|
|
170
|
-
|
|
171
167
|
for i in range(4):
|
|
172
168
|
UserFactory(
|
|
173
169
|
last_name='test-{0}'.format(i) if i % 2 else faker.word())
|
|
@@ -179,8 +175,6 @@ class UserAPITest(APITestCase):
|
|
|
179
175
|
|
|
180
176
|
def test_user_api_full_text_search_unicode(self):
|
|
181
177
|
'''It should find user with special characters'''
|
|
182
|
-
self.login(AdminFactory())
|
|
183
|
-
|
|
184
178
|
for i in range(4):
|
|
185
179
|
UserFactory(
|
|
186
180
|
first_name='test-{0}'.format(i) if i % 2 else faker.word())
|
|
@@ -195,17 +189,14 @@ class UserAPITest(APITestCase):
|
|
|
195
189
|
|
|
196
190
|
def test_find_users_api_no_match(self):
|
|
197
191
|
'''It should not find user if no match'''
|
|
198
|
-
self.login(AdminFactory())
|
|
199
192
|
UserFactory.create_batch(3)
|
|
200
193
|
|
|
201
194
|
response = self.get(url_for('api.users', q='xxxxxx'))
|
|
202
195
|
self.assert200(response)
|
|
203
196
|
self.assertEqual(len(response.json['data']), 0)
|
|
204
197
|
|
|
205
|
-
def
|
|
198
|
+
def test_users(self):
|
|
206
199
|
'''It should provide a list of users'''
|
|
207
|
-
self.login(AdminFactory(email="thibaud@example.org"))
|
|
208
|
-
|
|
209
200
|
user = UserFactory(
|
|
210
201
|
about=faker.paragraph(),
|
|
211
202
|
website=faker.url(),
|
|
@@ -213,25 +204,14 @@ class UserAPITest(APITestCase):
|
|
|
213
204
|
metrics={'datasets': 10, 'followers': 1, 'following': 0, 'reuses': 2})
|
|
214
205
|
response = self.get(url_for('api.users'))
|
|
215
206
|
self.assert200(response)
|
|
216
|
-
|
|
217
|
-
self.assertEqual(
|
|
218
|
-
self.assertEqual(
|
|
219
|
-
self.assertEqual(
|
|
220
|
-
self.assertEqual(
|
|
221
|
-
self.assertEqual(
|
|
222
|
-
self.assertEqual(
|
|
223
|
-
self.assertEqual(
|
|
224
|
-
self.assertEqual(users[0]['metrics'], user.metrics)
|
|
225
|
-
|
|
226
|
-
def test_users_forbidden(self):
|
|
227
|
-
UserFactory()
|
|
228
|
-
|
|
229
|
-
response = self.get(url_for('api.users'))
|
|
230
|
-
self.assert401(response)
|
|
231
|
-
|
|
232
|
-
self.login()
|
|
233
|
-
response = self.get(url_for('api.users'))
|
|
234
|
-
self.assert403(response)
|
|
207
|
+
[json] = response.json['data']
|
|
208
|
+
self.assertEqual(json['id'], str(user.id))
|
|
209
|
+
self.assertEqual(json['slug'], user.slug)
|
|
210
|
+
self.assertEqual(json['first_name'], user.first_name)
|
|
211
|
+
self.assertEqual(json['last_name'], user.last_name)
|
|
212
|
+
self.assertEqual(json['website'], user.website)
|
|
213
|
+
self.assertEqual(json['about'], user.about)
|
|
214
|
+
self.assertEqual(json['metrics'], user.metrics)
|
|
235
215
|
|
|
236
216
|
def test_get_user(self):
|
|
237
217
|
'''It should get a user'''
|
|
@@ -355,29 +335,15 @@ class UserAPITest(APITestCase):
|
|
|
355
335
|
{'file': (file, 'test.png')},
|
|
356
336
|
json=False,
|
|
357
337
|
)
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
self.assert204(response)
|
|
362
|
-
self.assertEquals(len(mails), 1)
|
|
363
|
-
|
|
338
|
+
response = self.delete(url_for('api.user', user=other_user))
|
|
339
|
+
self.assertEqual(list(storages.avatars.list_files()), [])
|
|
340
|
+
self.assert204(response)
|
|
364
341
|
other_user.reload()
|
|
365
342
|
response = self.delete(url_for('api.user', user=other_user))
|
|
366
343
|
self.assert410(response)
|
|
367
344
|
response = self.delete(url_for('api.user', user=user))
|
|
368
345
|
self.assert403(response)
|
|
369
346
|
|
|
370
|
-
def test_delete_user_without_notify(self):
|
|
371
|
-
user = AdminFactory()
|
|
372
|
-
self.login(user)
|
|
373
|
-
other_user = UserFactory()
|
|
374
|
-
|
|
375
|
-
with capture_mails() as mails:
|
|
376
|
-
response = self.delete(url_for('api.user', user=other_user, no_mail=True))
|
|
377
|
-
self.assert204(response)
|
|
378
|
-
self.assertEqual(len(mails), 0)
|
|
379
|
-
|
|
380
|
-
|
|
381
347
|
def test_contact_points(self):
|
|
382
348
|
user = AdminFactory()
|
|
383
349
|
self.login(user)
|
udata/tests/plugin.py
CHANGED
|
@@ -192,11 +192,6 @@ 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
|
-
|
|
200
195
|
def delete(self, url, data=None, *args, **kwargs):
|
|
201
196
|
return self.perform('delete', url, data=data or {}, *args, **kwargs)
|
|
202
197
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: udata
|
|
3
|
-
Version: 8.0.1
|
|
3
|
+
Version: 8.0.1.dev28882
|
|
4
4
|
Summary: Open data portal
|
|
5
5
|
Home-page: https://github.com/opendatateam/udata
|
|
6
6
|
Author: Opendata Team
|
|
@@ -131,23 +131,14 @@ for publishing udata's roadmap and for building consensus around it.
|
|
|
131
131
|
It is collectively taken care of by members of the
|
|
132
132
|
[OpenDataTeam](https://github.com/opendatateam).
|
|
133
133
|
|
|
134
|
-
[readthedocs-url]: https://udata.readthedocs.io/en/
|
|
134
|
+
[readthedocs-url]: https://udata.readthedocs.io/en/latest/
|
|
135
135
|
|
|
136
136
|
# Changelog
|
|
137
137
|
|
|
138
|
-
##
|
|
138
|
+
## Current (in progress)
|
|
139
139
|
|
|
140
|
-
- Add dataservices in beta [#2986](https://github.com/opendatateam/udata/pull/2986)
|
|
141
140
|
- Remove deprecated `metrics_for` route [#3022](https://github.com/opendatateam/udata/pull/3022)
|
|
142
141
|
- Fix spatial coverage fetching perfs. Need to schedule `compute-geozones-metrics` [#3018](https://github.com/opendatateam/udata/pull/3018)
|
|
143
|
-
- Delete a user without sending mail [#3031](https://github.com/opendatateam/udata/pull/3031)
|
|
144
|
-
- Convert known HVD categories used as theme to keywords [#3014](https://github.com/opendatateam/udata/pull/3014)
|
|
145
|
-
- Allow for series in CSW ISO 19139 DCAT backend [#3028](https://github.com/opendatateam/udata/pull/3028)
|
|
146
|
-
- Add `email` to membership request list API response, add `since` to org members API responses, add `email` to members of org on show org endpoint for org's admins and editors [#3038](https://github.com/opendatateam/udata/pull/3038)
|
|
147
|
-
- Add `resources_downloads` to datasets metrics [#3042](https://github.com/opendatateam/udata/pull/3042)
|
|
148
|
-
- Fix do not override resources extras on admin during update [#3043](https://github.com/opendatateam/udata/pull/3043)
|
|
149
|
-
- Endpoint /users is now protected by admin permissions [#3047](https://github.com/opendatateam/udata/pull/3047)
|
|
150
|
-
- Fix trailing `/` inside `GeoZone` routes not redirecting. Disallow `/` inside `GeoZone` ids [#3045](https://github.com/opendatateam/udata/pull/3045)
|
|
151
142
|
|
|
152
143
|
## 8.0.0 (2024-04-23)
|
|
153
144
|
|