udata 7.0.4.dev27782__py2.py3-none-any.whl → 7.0.5__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.
- udata/__init__.py +1 -1
- udata/api/__init__.py +1 -1
- udata/core/dataset/api.py +14 -14
- udata/core/dataset/api_fields.py +7 -7
- udata/core/dataset/apiv2.py +3 -3
- udata/core/dataset/rdf.py +43 -1
- udata/core/organization/csv.py +27 -1
- udata/core/organization/models.py +20 -1
- udata/core/organization/tasks.py +61 -1
- udata/core/spatial/commands.py +26 -2
- udata/core/topic/api.py +6 -0
- udata/core/topic/apiv2.py +6 -0
- udata/core/topic/forms.py +5 -0
- udata/core/topic/models.py +3 -5
- udata/forms/fields.py +10 -0
- udata/frontend/csv.py +8 -8
- udata/harvest/actions.py +11 -0
- udata/harvest/api.py +3 -3
- udata/harvest/backends/dcat.py +42 -5
- udata/harvest/tests/dcat/bnodes.xml +16 -2
- udata/harvest/tests/test_dcat_backend.py +87 -1
- udata/settings.py +9 -0
- udata/static/chunks/{11.c0ccea08914b6b41568e.js → 11.a23c110811a9ac943478.js} +3 -3
- udata/static/chunks/{11.c0ccea08914b6b41568e.js.map → 11.a23c110811a9ac943478.js.map} +1 -1
- udata/static/chunks/{13.526a25163ababaa44409.js → 13.0889e093f8664e38568c.js} +2 -2
- udata/static/chunks/{13.526a25163ababaa44409.js.map → 13.0889e093f8664e38568c.js.map} +1 -1
- udata/static/chunks/{16.7901839b4227881947f6.js → 16.f41599478d3e97ad9a30.js} +2 -2
- udata/static/chunks/{16.7901839b4227881947f6.js.map → 16.f41599478d3e97ad9a30.js.map} +1 -1
- udata/static/chunks/{19.471d5a2a08eef6e5338a.js → 19.2b534a26af8b17e9170b.js} +3 -3
- udata/static/chunks/{19.471d5a2a08eef6e5338a.js.map → 19.2b534a26af8b17e9170b.js.map} +1 -1
- udata/static/chunks/{5.534e0531d0e2b150146f.js → 5.7115454a1183e5c12eef.js} +3 -3
- udata/static/chunks/{5.534e0531d0e2b150146f.js.map → 5.7115454a1183e5c12eef.js.map} +1 -1
- udata/static/chunks/{6.e56975229e6065f68d2a.js → 6.16bb24fb8240f2746488.js} +3 -3
- udata/static/chunks/{6.e56975229e6065f68d2a.js.map → 6.16bb24fb8240f2746488.js.map} +1 -1
- udata/static/chunks/{9.534426728626f11f4571.js → 9.3e752966ff14e47e11f2.js} +2 -2
- udata/static/chunks/{9.534426728626f11f4571.js.map → 9.3e752966ff14e47e11f2.js.map} +1 -1
- udata/static/common.js +1 -1
- udata/static/common.js.map +1 -1
- udata/storage/__init__.py +0 -0
- udata/storage/s3.py +54 -0
- udata/templates/mail/badge_added_association.html +33 -0
- udata/templates/mail/badge_added_association.txt +11 -0
- udata/templates/mail/badge_added_company.html +33 -0
- udata/templates/mail/badge_added_company.txt +11 -0
- udata/templates/mail/badge_added_local_authority.html +33 -0
- udata/templates/mail/badge_added_local_authority.txt +11 -0
- udata/tests/api/test_datasets_api.py +27 -0
- udata/tests/api/test_topics_api.py +31 -1
- udata/tests/apiv2/test_topics.py +4 -0
- udata/tests/organization/test_csv_adapter.py +43 -0
- udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
- udata/translations/ar/LC_MESSAGES/udata.po +90 -44
- udata/translations/de/LC_MESSAGES/udata.mo +0 -0
- udata/translations/de/LC_MESSAGES/udata.po +91 -45
- udata/translations/es/LC_MESSAGES/udata.mo +0 -0
- udata/translations/es/LC_MESSAGES/udata.po +90 -44
- udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
- udata/translations/fr/LC_MESSAGES/udata.po +91 -45
- udata/translations/it/LC_MESSAGES/udata.mo +0 -0
- udata/translations/it/LC_MESSAGES/udata.po +90 -44
- udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
- udata/translations/pt/LC_MESSAGES/udata.po +91 -45
- udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
- udata/translations/sr/LC_MESSAGES/udata.po +91 -45
- udata/translations/udata.pot +91 -45
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.dist-info}/METADATA +20 -3
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.dist-info}/RECORD +71 -62
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.dist-info}/LICENSE +0 -0
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.dist-info}/WHEEL +0 -0
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.dist-info}/entry_points.txt +0 -0
- {udata-7.0.4.dev27782.dist-info → udata-7.0.5.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 b=c[a]={exports:{},id:a,loaded:!1};return e[a].call(b.exports,b,b.exports,__webpack_require__),b.loaded=!0,b.exports}var a=window.webpackJsonp;window.webpackJsonp=function(r,f){for(var t,d
|
|
1
|
+
!function(e){function __webpack_require__(a){if(c[a])return c[a].exports;var b=c[a]={exports:{},id:a,loaded:!1};return e[a].call(b.exports,b,b.exports,__webpack_require__),b.loaded=!0,b.exports}var a=window.webpackJsonp;window.webpackJsonp=function(r,f){for(var t,_,d=0,n=[];d<r.length;d++)_=r[d],b[_]&&n.push.apply(n,b[_]),b[_]=0;for(t in f){var i=f[t];switch(typeof i){case"object":e[t]=function(a){var c=a.slice(1),b=a[0];return function(a,r,f){e[b].apply(this,[a,r,f].concat(c))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(a&&a(r,f);n.length;)n.shift().call(null,__webpack_require__);if(f[0])return c[0]=0,__webpack_require__(0)};var c={},b={31:0};__webpack_require__.e=function(e,a){if(0===b[e])return a.call(null,__webpack_require__);if(void 0!==b[e])b[e].push(a);else{b[e]=[a];var c=document.getElementsByTagName("head")[0],r=document.createElement("script");r.type="text/javascript",r.charset="utf-8",r.async=!0,r.src=__webpack_require__.p+"chunks/"+e+"."+{0:"dd9000783a522bc2069d",1:"4a09db78b21075c05a30",2:"95c0fc4f129186dba94b",3:"1ca609753b5a02de0ca3",4:"379d0586872a1bae2ebd",5:"7115454a1183e5c12eef",6:"16bb24fb8240f2746488",7:"2ebc6662cf10a678b2ac",8:"17d1afb591ad1495bd03",9:"3e752966ff14e47e11f2",10:"e97ea231893dc435d6b5",11:"a23c110811a9ac943478",12:"d39612a569bcc3a358a8",13:"0889e093f8664e38568c",14:"cdb85e78de233e6556ff",15:"92b2cef3032ea35da04a",16:"f41599478d3e97ad9a30",17:"13db80c90b998be14e1b",18:"ad41fb75ac4226e1f3ce",19:"2b534a26af8b17e9170b",20:"14a92e5c503f74ff40df",21:"ccbfce6680a2b11a5284",22:"bc79367e5f4c8ad00038",23:"58f008bb10313268bf7d",24:"554ea613112f1ba6c246",25:"bebb170f65c104b18777",26:"9a0fd93accfc31686ed0",27:"dbd31d749f51f362b968",28:"c9c89e04a005ae62b473",29:"a0f8fce10d9e93e23b12",30:"9dc7b1b44817569daec6",32:"9b68f125e2598d22d5b5",33:"70f8e7b1964892a24e67"}[e]+".js",c.appendChild(r)}},__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),b=e[a[0]];return function(e,a,r){b.apply(this,[e,a,r].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 af2fbd64f908b4b6b777"],"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\":\"dd9000783a522bc2069d\",\"1\":\"4a09db78b21075c05a30\",\"2\":\"95c0fc4f129186dba94b\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"379d0586872a1bae2ebd\",\"5\":\"534e0531d0e2b150146f\",\"6\":\"e56975229e6065f68d2a\",\"7\":\"2ebc6662cf10a678b2ac\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"534426728626f11f4571\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"c0ccea08914b6b41568e\",\"12\":\"d39612a569bcc3a358a8\",\"13\":\"526a25163ababaa44409\",\"14\":\"cdb85e78de233e6556ff\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"7901839b4227881947f6\",\"17\":\"13db80c90b998be14e1b\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"471d5a2a08eef6e5338a\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"58f008bb10313268bf7d\",\"24\":\"554ea613112f1ba6c246\",\"25\":\"bebb170f65c104b18777\",\"26\":\"9a0fd93accfc31686ed0\",\"27\":\"dbd31d749f51f362b968\",\"28\":\"c9c89e04a005ae62b473\",\"29\":\"a0f8fce10d9e93e23b12\",\"30\":\"9dc7b1b44817569daec6\",\"32\":\"9b68f125e2598d22d5b5\",\"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\":\"dd9000783a522bc2069d\",\"1\":\"4a09db78b21075c05a30\",\"2\":\"95c0fc4f129186dba94b\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"379d0586872a1bae2ebd\",\"5\":\"534e0531d0e2b150146f\",\"6\":\"e56975229e6065f68d2a\",\"7\":\"2ebc6662cf10a678b2ac\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"534426728626f11f4571\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"c0ccea08914b6b41568e\",\"12\":\"d39612a569bcc3a358a8\",\"13\":\"526a25163ababaa44409\",\"14\":\"cdb85e78de233e6556ff\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"7901839b4227881947f6\",\"17\":\"13db80c90b998be14e1b\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"471d5a2a08eef6e5338a\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"58f008bb10313268bf7d\",\"24\":\"554ea613112f1ba6c246\",\"25\":\"bebb170f65c104b18777\",\"26\":\"9a0fd93accfc31686ed0\",\"27\":\"dbd31d749f51f362b968\",\"28\":\"c9c89e04a005ae62b473\",\"29\":\"a0f8fce10d9e93e23b12\",\"30\":\"9dc7b1b44817569daec6\",\"32\":\"9b68f125e2598d22d5b5\",\"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 af2fbd64f908b4b6b777\n **/"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap 4d6737f13b4fdd696b36"],"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\":\"dd9000783a522bc2069d\",\"1\":\"4a09db78b21075c05a30\",\"2\":\"95c0fc4f129186dba94b\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"379d0586872a1bae2ebd\",\"5\":\"7115454a1183e5c12eef\",\"6\":\"16bb24fb8240f2746488\",\"7\":\"2ebc6662cf10a678b2ac\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"3e752966ff14e47e11f2\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"a23c110811a9ac943478\",\"12\":\"d39612a569bcc3a358a8\",\"13\":\"0889e093f8664e38568c\",\"14\":\"cdb85e78de233e6556ff\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"f41599478d3e97ad9a30\",\"17\":\"13db80c90b998be14e1b\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"2b534a26af8b17e9170b\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"58f008bb10313268bf7d\",\"24\":\"554ea613112f1ba6c246\",\"25\":\"bebb170f65c104b18777\",\"26\":\"9a0fd93accfc31686ed0\",\"27\":\"dbd31d749f51f362b968\",\"28\":\"c9c89e04a005ae62b473\",\"29\":\"a0f8fce10d9e93e23b12\",\"30\":\"9dc7b1b44817569daec6\",\"32\":\"9b68f125e2598d22d5b5\",\"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\":\"dd9000783a522bc2069d\",\"1\":\"4a09db78b21075c05a30\",\"2\":\"95c0fc4f129186dba94b\",\"3\":\"1ca609753b5a02de0ca3\",\"4\":\"379d0586872a1bae2ebd\",\"5\":\"7115454a1183e5c12eef\",\"6\":\"16bb24fb8240f2746488\",\"7\":\"2ebc6662cf10a678b2ac\",\"8\":\"17d1afb591ad1495bd03\",\"9\":\"3e752966ff14e47e11f2\",\"10\":\"e97ea231893dc435d6b5\",\"11\":\"a23c110811a9ac943478\",\"12\":\"d39612a569bcc3a358a8\",\"13\":\"0889e093f8664e38568c\",\"14\":\"cdb85e78de233e6556ff\",\"15\":\"92b2cef3032ea35da04a\",\"16\":\"f41599478d3e97ad9a30\",\"17\":\"13db80c90b998be14e1b\",\"18\":\"ad41fb75ac4226e1f3ce\",\"19\":\"2b534a26af8b17e9170b\",\"20\":\"14a92e5c503f74ff40df\",\"21\":\"ccbfce6680a2b11a5284\",\"22\":\"bc79367e5f4c8ad00038\",\"23\":\"58f008bb10313268bf7d\",\"24\":\"554ea613112f1ba6c246\",\"25\":\"bebb170f65c104b18777\",\"26\":\"9a0fd93accfc31686ed0\",\"27\":\"dbd31d749f51f362b968\",\"28\":\"c9c89e04a005ae62b473\",\"29\":\"a0f8fce10d9e93e23b12\",\"30\":\"9dc7b1b44817569daec6\",\"32\":\"9b68f125e2598d22d5b5\",\"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 4d6737f13b4fdd696b36\n **/"],"sourceRoot":""}
|
|
File without changes
|
udata/storage/s3.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
import boto3
|
|
3
|
+
from flask import current_app
|
|
4
|
+
import json
|
|
5
|
+
|
|
6
|
+
def get_client():
|
|
7
|
+
url = current_app.config.get('S3_URL')
|
|
8
|
+
if url is None:
|
|
9
|
+
raise ValueError('No S3_URL provided')
|
|
10
|
+
|
|
11
|
+
access_key_id = current_app.config.get('S3_ACCESS_KEY_ID')
|
|
12
|
+
if access_key_id is None:
|
|
13
|
+
raise ValueError('No S3_ACCESS_KEY_ID provided')
|
|
14
|
+
|
|
15
|
+
secret_access_key = current_app.config.get('S3_SECRET_ACCESS_KEY')
|
|
16
|
+
if secret_access_key is None:
|
|
17
|
+
raise ValueError('No S3_SECRET_ACCESS_KEY provided')
|
|
18
|
+
|
|
19
|
+
return boto3.client(
|
|
20
|
+
"s3",
|
|
21
|
+
endpoint_url=url,
|
|
22
|
+
aws_access_key_id=access_key_id,
|
|
23
|
+
aws_secret_access_key=secret_access_key,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
def store_bytes(bucket: str, filename: str, bytes: bytes):
|
|
27
|
+
return get_client().put_object(
|
|
28
|
+
Bucket=bucket,
|
|
29
|
+
Key=filename,
|
|
30
|
+
Body=bytes,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def store_as_json(bucket: str, filename: str, value):
|
|
34
|
+
return store_bytes(bucket, filename, bytes(json.dumps(value).encode('UTF-8')))
|
|
35
|
+
|
|
36
|
+
def get_bytes(bucket: str, filename: str) -> Optional[bytes]:
|
|
37
|
+
client = get_client()
|
|
38
|
+
try:
|
|
39
|
+
return client.get_object(Bucket=bucket, Key=filename)['Body'].read()
|
|
40
|
+
except client.exceptions.NoSuchKey:
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
def get_from_json(bucket: str, filename: str) -> Optional[Any]:
|
|
44
|
+
bytes = get_bytes(bucket, filename)
|
|
45
|
+
if bytes is None:
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
return json.loads(bytes.decode('utf-8'))
|
|
49
|
+
|
|
50
|
+
def delete_file(bucket: str, filename: str):
|
|
51
|
+
return get_client().delete_object(
|
|
52
|
+
Bucket=bucket,
|
|
53
|
+
Key=filename,
|
|
54
|
+
)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{% extends 'mail/base.html' %}
|
|
2
|
+
{% from 'mail/button.html' import mail_button %}
|
|
3
|
+
|
|
4
|
+
{% block body %}
|
|
5
|
+
<p style="margin: 0;padding: 0;">{{
|
|
6
|
+
_('%(user)s has identified your organization "%(name)s" as an association',
|
|
7
|
+
user=(
|
|
8
|
+
'<a href="'|safe
|
|
9
|
+
+ url_for('api.user', user=badge.created_by, _external=True)
|
|
10
|
+
+ '">'|safe
|
|
11
|
+
+ badge.created_by.fullname
|
|
12
|
+
+ '</a>'|safe
|
|
13
|
+
),
|
|
14
|
+
name=(
|
|
15
|
+
'<a href="'|safe
|
|
16
|
+
+ organization.external_url
|
|
17
|
+
+ '">'|safe
|
|
18
|
+
+ organization.name|string
|
|
19
|
+
+ '</a>'|safe
|
|
20
|
+
)
|
|
21
|
+
) }}.</p>
|
|
22
|
+
<br/>
|
|
23
|
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
24
|
+
<tr>
|
|
25
|
+
<td align="center">
|
|
26
|
+
{{ mail_button(
|
|
27
|
+
_('See the badge'),
|
|
28
|
+
organization.external_url
|
|
29
|
+
) }}
|
|
30
|
+
</td>
|
|
31
|
+
</tr>
|
|
32
|
+
</table>
|
|
33
|
+
{% endblock %}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{% extends 'mail/base.txt' %}
|
|
2
|
+
|
|
3
|
+
{% block body %}
|
|
4
|
+
{{ _('%(user)s has identified your organization "%(name)s" as an association',
|
|
5
|
+
name=organization.name,
|
|
6
|
+
user=badge.created_by.fullname
|
|
7
|
+
) }}.
|
|
8
|
+
|
|
9
|
+
{{ _('You can see the badge on this page:') }}
|
|
10
|
+
{{ organization.external_url }}
|
|
11
|
+
{% endblock %}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{% extends 'mail/base.html' %}
|
|
2
|
+
{% from 'mail/button.html' import mail_button %}
|
|
3
|
+
|
|
4
|
+
{% block body %}
|
|
5
|
+
<p style="margin: 0;padding: 0;">{{
|
|
6
|
+
_('%(user)s has identified your organization "%(name)s" as a company',
|
|
7
|
+
user=(
|
|
8
|
+
'<a href="'|safe
|
|
9
|
+
+ url_for('api.user', user=badge.created_by, _external=True)
|
|
10
|
+
+ '">'|safe
|
|
11
|
+
+ badge.created_by.fullname
|
|
12
|
+
+ '</a>'|safe
|
|
13
|
+
),
|
|
14
|
+
name=(
|
|
15
|
+
'<a href="'|safe
|
|
16
|
+
+ organization.external_url
|
|
17
|
+
+ '">'|safe
|
|
18
|
+
+ organization.name|string
|
|
19
|
+
+ '</a>'|safe
|
|
20
|
+
)
|
|
21
|
+
) }}.</p>
|
|
22
|
+
<br/>
|
|
23
|
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
24
|
+
<tr>
|
|
25
|
+
<td align="center">
|
|
26
|
+
{{ mail_button(
|
|
27
|
+
_('See the badge'),
|
|
28
|
+
organization.external_url
|
|
29
|
+
) }}
|
|
30
|
+
</td>
|
|
31
|
+
</tr>
|
|
32
|
+
</table>
|
|
33
|
+
{% endblock %}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{% extends 'mail/base.txt' %}
|
|
2
|
+
|
|
3
|
+
{% block body %}
|
|
4
|
+
{{ _('%(user)s has identified your organization "%(name)s" as a company',
|
|
5
|
+
name=organization.name,
|
|
6
|
+
user=badge.created_by.fullname
|
|
7
|
+
) }}.
|
|
8
|
+
|
|
9
|
+
{{ _('You can see the badge on this page:') }}
|
|
10
|
+
{{ organization.external_url }}
|
|
11
|
+
{% endblock %}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{% extends 'mail/base.html' %}
|
|
2
|
+
{% from 'mail/button.html' import mail_button %}
|
|
3
|
+
|
|
4
|
+
{% block body %}
|
|
5
|
+
<p style="margin: 0;padding: 0;">{{
|
|
6
|
+
_('%(user)s has identified your organization "%(name)s" as a local authority',
|
|
7
|
+
user=(
|
|
8
|
+
'<a href="'|safe
|
|
9
|
+
+ url_for('api.user', user=badge.created_by, _external=True)
|
|
10
|
+
+ '">'|safe
|
|
11
|
+
+ badge.created_by.fullname
|
|
12
|
+
+ '</a>'|safe
|
|
13
|
+
),
|
|
14
|
+
name=(
|
|
15
|
+
'<a href="'|safe
|
|
16
|
+
+ organization.external_url
|
|
17
|
+
+ '">'|safe
|
|
18
|
+
+ organization.name|string
|
|
19
|
+
+ '</a>'|safe
|
|
20
|
+
)
|
|
21
|
+
) }}.</p>
|
|
22
|
+
<br/>
|
|
23
|
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
24
|
+
<tr>
|
|
25
|
+
<td align="center">
|
|
26
|
+
{{ mail_button(
|
|
27
|
+
_('See the badge'),
|
|
28
|
+
organization.external_url
|
|
29
|
+
) }}
|
|
30
|
+
</td>
|
|
31
|
+
</tr>
|
|
32
|
+
</table>
|
|
33
|
+
{% endblock %}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{% extends 'mail/base.txt' %}
|
|
2
|
+
|
|
3
|
+
{% block body %}
|
|
4
|
+
{{ _('%(user)s has identified your organization "%(name)s" as a local authority',
|
|
5
|
+
name=organization.name,
|
|
6
|
+
user=badge.created_by.fullname
|
|
7
|
+
) }}.
|
|
8
|
+
|
|
9
|
+
{{ _('You can see the badge on this page:') }}
|
|
10
|
+
{{ organization.external_url }}
|
|
11
|
+
{% endblock %}
|
|
@@ -462,6 +462,33 @@ class DatasetAPITest(APITestCase):
|
|
|
462
462
|
dataset = Dataset.objects.first()
|
|
463
463
|
self.assertEqual(len(dataset.resources), initial_length + 1)
|
|
464
464
|
|
|
465
|
+
def test_dataset_api_update_private(self):
|
|
466
|
+
user = self.login()
|
|
467
|
+
dataset = DatasetFactory(owner=user, private=True)
|
|
468
|
+
data = dataset.to_dict()
|
|
469
|
+
data['description'] = 'new description'
|
|
470
|
+
del data['private']
|
|
471
|
+
|
|
472
|
+
response = self.put(url_for('api.dataset', dataset=dataset), data)
|
|
473
|
+
self.assert200(response)
|
|
474
|
+
dataset.reload()
|
|
475
|
+
self.assertEqual(dataset.description, 'new description')
|
|
476
|
+
self.assertEqual(dataset.private, True)
|
|
477
|
+
|
|
478
|
+
data['private'] = None
|
|
479
|
+
response = self.put(url_for('api.dataset', dataset=dataset), data)
|
|
480
|
+
self.assert200(response)
|
|
481
|
+
dataset.reload()
|
|
482
|
+
self.assertEqual(dataset.private, False)
|
|
483
|
+
|
|
484
|
+
data['private'] = True
|
|
485
|
+
response = self.put(url_for('api.dataset', dataset=dataset), data)
|
|
486
|
+
self.assert200(response)
|
|
487
|
+
dataset.reload()
|
|
488
|
+
self.assertEqual(dataset.private, True)
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
465
492
|
def test_dataset_api_update_new_resource_with_extras(self):
|
|
466
493
|
'''It should update a dataset with a new resource with extras'''
|
|
467
494
|
user = self.login()
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
from flask import url_for
|
|
2
2
|
|
|
3
3
|
from udata.core.organization.factories import OrganizationFactory
|
|
4
|
+
from udata.core.spatial.models import spatial_granularities
|
|
4
5
|
from udata.core.topic.models import Topic
|
|
5
6
|
from udata.core.topic.factories import TopicFactory
|
|
6
7
|
from udata.core.user.factories import UserFactory
|
|
7
8
|
from udata.models import Member, Discussion
|
|
9
|
+
from udata.tests.api.test_datasets_api import SAMPLE_GEOM
|
|
10
|
+
from udata.tests.features.territories import create_geozones_fixtures
|
|
8
11
|
|
|
9
12
|
from . import APITestCase
|
|
10
13
|
|
|
@@ -53,6 +56,8 @@ class TopicsAPITest(APITestCase):
|
|
|
53
56
|
self.assert200(response)
|
|
54
57
|
|
|
55
58
|
data = response.json
|
|
59
|
+
self.assertIn('spatial', data)
|
|
60
|
+
|
|
56
61
|
for dataset, expected in zip(data['datasets'], [d.fetch() for d in topic.datasets]):
|
|
57
62
|
self.assertEqual(dataset['id'], str(expected.id))
|
|
58
63
|
self.assertEqual(dataset['title'], str(expected.title))
|
|
@@ -65,6 +70,9 @@ class TopicsAPITest(APITestCase):
|
|
|
65
70
|
self.assertIsNotNone(reuse['page'])
|
|
66
71
|
self.assertIsNotNone(reuse['uri'])
|
|
67
72
|
|
|
73
|
+
self.assertIsNotNone(data.get('created_at'))
|
|
74
|
+
self.assertIsNotNone(data.get('last_modified'))
|
|
75
|
+
|
|
68
76
|
def test_topic_api_create(self):
|
|
69
77
|
'''It should create a topic from the API'''
|
|
70
78
|
data = TopicFactory.as_dict()
|
|
@@ -97,6 +105,26 @@ class TopicsAPITest(APITestCase):
|
|
|
97
105
|
assert topic.owner is None
|
|
98
106
|
assert topic.organization == org
|
|
99
107
|
|
|
108
|
+
def test_topic_api_create_spatial(self):
|
|
109
|
+
paca, _, _ = create_geozones_fixtures()
|
|
110
|
+
granularity = spatial_granularities[0][0]
|
|
111
|
+
data = TopicFactory.as_dict()
|
|
112
|
+
data['datasets'] = [str(d.id) for d in data['datasets']]
|
|
113
|
+
data['reuses'] = [str(r.id) for r in data['reuses']]
|
|
114
|
+
data['spatial'] = {
|
|
115
|
+
'zones': [paca.id],
|
|
116
|
+
'geom': SAMPLE_GEOM,
|
|
117
|
+
'granularity': granularity,
|
|
118
|
+
}
|
|
119
|
+
self.login()
|
|
120
|
+
response = self.post(url_for('api.topics'), data)
|
|
121
|
+
self.assert201(response)
|
|
122
|
+
self.assertEqual(Topic.objects.count(), 1)
|
|
123
|
+
topic = Topic.objects.first()
|
|
124
|
+
self.assertEqual([str(z) for z in topic.spatial.zones], [paca.id])
|
|
125
|
+
self.assertEqual(topic.spatial.geom, SAMPLE_GEOM)
|
|
126
|
+
self.assertEqual(topic.spatial.granularity, granularity)
|
|
127
|
+
|
|
100
128
|
def test_topic_api_update(self):
|
|
101
129
|
'''It should update a topic from the API'''
|
|
102
130
|
owner = self.login()
|
|
@@ -106,7 +134,9 @@ class TopicsAPITest(APITestCase):
|
|
|
106
134
|
response = self.put(url_for('api.topic', topic=topic), data)
|
|
107
135
|
self.assert200(response)
|
|
108
136
|
self.assertEqual(Topic.objects.count(), 1)
|
|
109
|
-
|
|
137
|
+
topic = Topic.objects.first()
|
|
138
|
+
self.assertEqual(topic.description, 'new description')
|
|
139
|
+
self.assertGreater(topic.last_modified, topic.created_at)
|
|
110
140
|
|
|
111
141
|
def test_topic_api_update_perm(self):
|
|
112
142
|
'''It should not update a topic from the API'''
|
udata/tests/apiv2/test_topics.py
CHANGED
|
@@ -40,6 +40,10 @@ class TopicsAPITest(APITestCase):
|
|
|
40
40
|
topic = TopicFactory()
|
|
41
41
|
topic_response = self.get(url_for('apiv2.topic', topic=topic))
|
|
42
42
|
assert topic_response.status_code == 200
|
|
43
|
+
assert 'spatial' in topic_response.json
|
|
44
|
+
|
|
45
|
+
assert topic_response.json['created_at'] is not None
|
|
46
|
+
assert topic_response.json['last_modified'] is not None
|
|
43
47
|
|
|
44
48
|
response = self.get(topic_response.json['datasets']['href'])
|
|
45
49
|
data = response.json
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from datetime import datetime, timedelta
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from udata.core.dataset.csv import ResourcesCsvAdapter, DatasetCsvAdapter
|
|
6
|
+
from udata.core.dataset.factories import DatasetFactory, ResourceFactory
|
|
7
|
+
from udata.core.dataset.models import Dataset
|
|
8
|
+
from udata.core.organization.csv import OrganizationCsvAdapter
|
|
9
|
+
from udata.core.organization.factories import OrganizationFactory
|
|
10
|
+
from udata.core.organization.models import Organization
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.mark.frontend
|
|
14
|
+
@pytest.mark.usefixtures('clean_db')
|
|
15
|
+
class OrganizationCSVAdapterTest:
|
|
16
|
+
|
|
17
|
+
def test_organization_downloads_counts(self):
|
|
18
|
+
org_with_dataset = OrganizationFactory()
|
|
19
|
+
org_without_dataset = OrganizationFactory()
|
|
20
|
+
|
|
21
|
+
DatasetFactory(organization=org_with_dataset, resources=[
|
|
22
|
+
ResourceFactory(metrics={
|
|
23
|
+
'views': 42,
|
|
24
|
+
}),
|
|
25
|
+
ResourceFactory(metrics={
|
|
26
|
+
'views': 1337,
|
|
27
|
+
}),
|
|
28
|
+
ResourceFactory(),
|
|
29
|
+
])
|
|
30
|
+
DatasetFactory(organization=org_with_dataset, resources=[])
|
|
31
|
+
adapter = OrganizationCsvAdapter(Organization.objects.all())
|
|
32
|
+
|
|
33
|
+
# Build a dict (Org ID to dict of header name to value) from the CSV values and headers to simplify testing below.
|
|
34
|
+
csv = {}
|
|
35
|
+
for row in adapter.rows():
|
|
36
|
+
values = dict(zip(adapter.header(), row))
|
|
37
|
+
csv[values['id']] = values
|
|
38
|
+
|
|
39
|
+
org_values = csv[str(org_with_dataset.id)]
|
|
40
|
+
assert org_values['downloads'] == 1337 + 42
|
|
41
|
+
|
|
42
|
+
org_values = csv[str(org_without_dataset.id)]
|
|
43
|
+
assert org_values['downloads'] == 0
|
|
Binary file
|