udata 10.8.2.dev37076__py2.py3-none-any.whl → 10.8.3__py2.py3-none-any.whl

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

Potentially problematic release.


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

Files changed (59) hide show
  1. udata/__init__.py +1 -1
  2. udata/core/activity/models.py +23 -1
  3. udata/core/dataset/api_fields.py +2 -0
  4. udata/core/dataset/apiv2.py +4 -0
  5. udata/core/dataset/constants.py +1 -0
  6. udata/core/dataset/csv.py +1 -0
  7. udata/core/dataset/forms.py +6 -0
  8. udata/core/dataset/metrics.py +34 -0
  9. udata/core/dataset/models.py +10 -0
  10. udata/core/dataset/tasks.py +0 -11
  11. udata/core/metrics/__init__.py +1 -0
  12. udata/core/metrics/commands.py +3 -0
  13. udata/core/organization/csv.py +9 -26
  14. udata/core/organization/metrics.py +2 -0
  15. udata/core/organization/models.py +14 -9
  16. udata/core/user/metrics.py +2 -0
  17. udata/harvest/backends/dcat.py +161 -165
  18. udata/harvest/tests/dcat/catalog.xml +1 -0
  19. udata/harvest/tests/test_dcat_backend.py +19 -6
  20. udata/settings.py +1 -1
  21. udata/static/chunks/{13.2d06442dd9a05d9777b5.js → 13.d9c1735d14038b94c17e.js} +2 -2
  22. udata/static/chunks/{13.2d06442dd9a05d9777b5.js.map → 13.d9c1735d14038b94c17e.js.map} +1 -1
  23. udata/static/chunks/{17.e8e4caaad5cb0cc0bacc.js → 17.81c57c0dedf812e43013.js} +2 -2
  24. udata/static/chunks/{17.e8e4caaad5cb0cc0bacc.js.map → 17.81c57c0dedf812e43013.js.map} +1 -1
  25. udata/static/chunks/{19.f03a102365af4315f9db.js → 19.8d03c06efcac6884bebe.js} +3 -3
  26. udata/static/chunks/{19.f03a102365af4315f9db.js.map → 19.8d03c06efcac6884bebe.js.map} +1 -1
  27. udata/static/chunks/{5.0fa1408dae4e76b87b2e.js → 5.343ca020a2d38cec1a14.js} +3 -3
  28. udata/static/chunks/{5.0fa1408dae4e76b87b2e.js.map → 5.343ca020a2d38cec1a14.js.map} +1 -1
  29. udata/static/chunks/{6.d663709d877baa44a71e.js → 6.a3b07de9dd2ca2d24e85.js} +3 -3
  30. udata/static/chunks/{6.d663709d877baa44a71e.js.map → 6.a3b07de9dd2ca2d24e85.js.map} +1 -1
  31. udata/static/chunks/{8.778091d55cd8ea39af6b.js → 8.b966402f5d680d4bdf4a.js} +2 -2
  32. udata/static/chunks/{8.778091d55cd8ea39af6b.js.map → 8.b966402f5d680d4bdf4a.js.map} +1 -1
  33. udata/static/common.js +1 -1
  34. udata/static/common.js.map +1 -1
  35. udata/tests/dataset/test_dataset_model.py +63 -1
  36. udata/tests/organization/test_csv_adapter.py +3 -15
  37. udata/tests/reuse/test_reuse_model.py +6 -4
  38. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  39. udata/translations/ar/LC_MESSAGES/udata.po +62 -54
  40. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  41. udata/translations/de/LC_MESSAGES/udata.po +62 -54
  42. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  43. udata/translations/es/LC_MESSAGES/udata.po +62 -54
  44. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  45. udata/translations/fr/LC_MESSAGES/udata.po +62 -54
  46. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  47. udata/translations/it/LC_MESSAGES/udata.po +62 -54
  48. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  49. udata/translations/pt/LC_MESSAGES/udata.po +62 -54
  50. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  51. udata/translations/sr/LC_MESSAGES/udata.po +62 -54
  52. udata/translations/udata.pot +63 -56
  53. udata/utils.py +16 -0
  54. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/METADATA +15 -3
  55. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/RECORD +59 -58
  56. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/LICENSE +0 -0
  57. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/WHEEL +0 -0
  58. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/entry_points.txt +0 -0
  59. {udata-10.8.2.dev37076.dist-info → udata-10.8.3.dist-info}/top_level.txt +0 -0
udata/static/common.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e){function __webpack_require__(c){if(a[c])return a[c].exports;var r=a[c]={exports:{},id:c,loaded:!1};return e[c].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}var c=window.webpackJsonp;window.webpackJsonp=function(f,d){for(var t,b,_=0,n=[];_<f.length;_++)b=f[_],r[b]&&n.push.apply(n,r[b]),r[b]=0;for(t in d){var i=d[t];switch(typeof i){case"object":e[t]=function(c){var a=c.slice(1),r=c[0];return function(c,f,d){e[r].apply(this,[c,f,d].concat(a))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(c&&c(f,d);n.length;)n.shift().call(null,__webpack_require__);if(d[0])return a[0]=0,__webpack_require__(0)};var a={},r={31:0};__webpack_require__.e=function(e,c){if(0===r[e])return c.call(null,__webpack_require__);if(void 0!==r[e])r[e].push(c);else{r[e]=[c];var a=document.getElementsByTagName("head")[0],f=document.createElement("script");f.type="text/javascript",f.charset="utf-8",f.async=!0,f.src=__webpack_require__.p+"chunks/"+e+"."+{0:"4dd4f378428d1eed85c8",1:"0a96f54313c89e541ccb",2:"c67aa76cc078c193aed5",3:"174a03e48d267820919b",4:"98dca3045c034c154d5f",5:"0fa1408dae4e76b87b2e",6:"d663709d877baa44a71e",7:"896bbffe39433bb598f7",8:"778091d55cd8ea39af6b",9:"033d7e190ca9e226a5d0",10:"8ca60413647062717b1e",11:"b6f741fcc366abfad9c4",12:"1be61e0201691821bff6",13:"2d06442dd9a05d9777b5",14:"bc3f6bc0a67517e7b30f",15:"2f5d8e3d4aa4c46188d7",16:"aaa39ef2d7e82594efc8",17:"e8e4caaad5cb0cc0bacc",18:"56444ebd2456a4ba2201",19:"f03a102365af4315f9db",20:"3d4e02d1205a3c9e26c5",21:"af1610ce169cf6d1cf4e",22:"6a69068a7dd9d767dea1",23:"663b89b79d755a70deef",24:"d149cf025cbbca231d88",25:"1fafd6424761185cc14b",26:"402064cda3665d56f7fc",27:"997802f273a0c88f7b6d",28:"e68c475c6ca1e2eec92c",29:"2f4a04c61d75f2ef18ab",30:"e97e10c9246818e2b4b2",32:"03cc9867716dd58b9302",33:"011b367beb543774f950"}[e]+".js",a.appendChild(f)}},__webpack_require__.m=e,__webpack_require__.c=a,__webpack_require__.p="/static/"}(function(e){for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c))switch(typeof e[c]){case"function":break;case"object":e[c]=function(c){var a=c.slice(1),r=e[c[0]];return function(e,c,f){r.apply(this,[e,c,f].concat(a))}}(e[c]);break;default:e[c]=e[e[c]]}return e}([]));
1
+ !function(e){function __webpack_require__(c){if(a[c])return a[c].exports;var r=a[c]={exports:{},id:c,loaded:!1};return e[c].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}var c=window.webpackJsonp;window.webpackJsonp=function(d,f){for(var t,b,_=0,n=[];_<d.length;_++)b=d[_],r[b]&&n.push.apply(n,r[b]),r[b]=0;for(t in f){var i=f[t];switch(typeof i){case"object":e[t]=function(c){var a=c.slice(1),r=c[0];return function(c,d,f){e[r].apply(this,[c,d,f].concat(a))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(c&&c(d,f);n.length;)n.shift().call(null,__webpack_require__);if(f[0])return a[0]=0,__webpack_require__(0)};var a={},r={31:0};__webpack_require__.e=function(e,c){if(0===r[e])return c.call(null,__webpack_require__);if(void 0!==r[e])r[e].push(c);else{r[e]=[c];var a=document.getElementsByTagName("head")[0],d=document.createElement("script");d.type="text/javascript",d.charset="utf-8",d.async=!0,d.src=__webpack_require__.p+"chunks/"+e+"."+{0:"4dd4f378428d1eed85c8",1:"0a96f54313c89e541ccb",2:"c67aa76cc078c193aed5",3:"174a03e48d267820919b",4:"98dca3045c034c154d5f",5:"343ca020a2d38cec1a14",6:"a3b07de9dd2ca2d24e85",7:"896bbffe39433bb598f7",8:"b966402f5d680d4bdf4a",9:"033d7e190ca9e226a5d0",10:"8ca60413647062717b1e",11:"b6f741fcc366abfad9c4",12:"1be61e0201691821bff6",13:"d9c1735d14038b94c17e",14:"bc3f6bc0a67517e7b30f",15:"2f5d8e3d4aa4c46188d7",16:"aaa39ef2d7e82594efc8",17:"81c57c0dedf812e43013",18:"56444ebd2456a4ba2201",19:"8d03c06efcac6884bebe",20:"3d4e02d1205a3c9e26c5",21:"af1610ce169cf6d1cf4e",22:"6a69068a7dd9d767dea1",23:"663b89b79d755a70deef",24:"d149cf025cbbca231d88",25:"1fafd6424761185cc14b",26:"402064cda3665d56f7fc",27:"997802f273a0c88f7b6d",28:"e68c475c6ca1e2eec92c",29:"2f4a04c61d75f2ef18ab",30:"e97e10c9246818e2b4b2",32:"03cc9867716dd58b9302",33:"011b367beb543774f950"}[e]+".js",a.appendChild(d)}},__webpack_require__.m=e,__webpack_require__.c=a,__webpack_require__.p="/static/"}(function(e){for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c))switch(typeof e[c]){case"function":break;case"object":e[c]=function(c){var a=c.slice(1),r=e[c[0]];return function(e,c,d){r.apply(this,[e,c,d].concat(a))}}(e[c]);break;default:e[c]=e[e[c]]}return e}([]));
2
2
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap 44a61f162b1337addb9e"],"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\":\"4dd4f378428d1eed85c8\",\"1\":\"0a96f54313c89e541ccb\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"98dca3045c034c154d5f\",\"5\":\"0fa1408dae4e76b87b2e\",\"6\":\"d663709d877baa44a71e\",\"7\":\"896bbffe39433bb598f7\",\"8\":\"778091d55cd8ea39af6b\",\"9\":\"033d7e190ca9e226a5d0\",\"10\":\"8ca60413647062717b1e\",\"11\":\"b6f741fcc366abfad9c4\",\"12\":\"1be61e0201691821bff6\",\"13\":\"2d06442dd9a05d9777b5\",\"14\":\"bc3f6bc0a67517e7b30f\",\"15\":\"2f5d8e3d4aa4c46188d7\",\"16\":\"aaa39ef2d7e82594efc8\",\"17\":\"e8e4caaad5cb0cc0bacc\",\"18\":\"56444ebd2456a4ba2201\",\"19\":\"f03a102365af4315f9db\",\"20\":\"3d4e02d1205a3c9e26c5\",\"21\":\"af1610ce169cf6d1cf4e\",\"22\":\"6a69068a7dd9d767dea1\",\"23\":\"663b89b79d755a70deef\",\"24\":\"d149cf025cbbca231d88\",\"25\":\"1fafd6424761185cc14b\",\"26\":\"402064cda3665d56f7fc\",\"27\":\"997802f273a0c88f7b6d\",\"28\":\"e68c475c6ca1e2eec92c\",\"29\":\"2f4a04c61d75f2ef18ab\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"03cc9867716dd58b9302\",\"33\":\"011b367beb543774f950\"}[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\":\"4dd4f378428d1eed85c8\",\"1\":\"0a96f54313c89e541ccb\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"98dca3045c034c154d5f\",\"5\":\"0fa1408dae4e76b87b2e\",\"6\":\"d663709d877baa44a71e\",\"7\":\"896bbffe39433bb598f7\",\"8\":\"778091d55cd8ea39af6b\",\"9\":\"033d7e190ca9e226a5d0\",\"10\":\"8ca60413647062717b1e\",\"11\":\"b6f741fcc366abfad9c4\",\"12\":\"1be61e0201691821bff6\",\"13\":\"2d06442dd9a05d9777b5\",\"14\":\"bc3f6bc0a67517e7b30f\",\"15\":\"2f5d8e3d4aa4c46188d7\",\"16\":\"aaa39ef2d7e82594efc8\",\"17\":\"e8e4caaad5cb0cc0bacc\",\"18\":\"56444ebd2456a4ba2201\",\"19\":\"f03a102365af4315f9db\",\"20\":\"3d4e02d1205a3c9e26c5\",\"21\":\"af1610ce169cf6d1cf4e\",\"22\":\"6a69068a7dd9d767dea1\",\"23\":\"663b89b79d755a70deef\",\"24\":\"d149cf025cbbca231d88\",\"25\":\"1fafd6424761185cc14b\",\"26\":\"402064cda3665d56f7fc\",\"27\":\"997802f273a0c88f7b6d\",\"28\":\"e68c475c6ca1e2eec92c\",\"29\":\"2f4a04c61d75f2ef18ab\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"03cc9867716dd58b9302\",\"33\":\"011b367beb543774f950\"}[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 44a61f162b1337addb9e\n **/"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap be0920b17b8c939794e4"],"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\":\"4dd4f378428d1eed85c8\",\"1\":\"0a96f54313c89e541ccb\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"98dca3045c034c154d5f\",\"5\":\"343ca020a2d38cec1a14\",\"6\":\"a3b07de9dd2ca2d24e85\",\"7\":\"896bbffe39433bb598f7\",\"8\":\"b966402f5d680d4bdf4a\",\"9\":\"033d7e190ca9e226a5d0\",\"10\":\"8ca60413647062717b1e\",\"11\":\"b6f741fcc366abfad9c4\",\"12\":\"1be61e0201691821bff6\",\"13\":\"d9c1735d14038b94c17e\",\"14\":\"bc3f6bc0a67517e7b30f\",\"15\":\"2f5d8e3d4aa4c46188d7\",\"16\":\"aaa39ef2d7e82594efc8\",\"17\":\"81c57c0dedf812e43013\",\"18\":\"56444ebd2456a4ba2201\",\"19\":\"8d03c06efcac6884bebe\",\"20\":\"3d4e02d1205a3c9e26c5\",\"21\":\"af1610ce169cf6d1cf4e\",\"22\":\"6a69068a7dd9d767dea1\",\"23\":\"663b89b79d755a70deef\",\"24\":\"d149cf025cbbca231d88\",\"25\":\"1fafd6424761185cc14b\",\"26\":\"402064cda3665d56f7fc\",\"27\":\"997802f273a0c88f7b6d\",\"28\":\"e68c475c6ca1e2eec92c\",\"29\":\"2f4a04c61d75f2ef18ab\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"03cc9867716dd58b9302\",\"33\":\"011b367beb543774f950\"}[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\":\"4dd4f378428d1eed85c8\",\"1\":\"0a96f54313c89e541ccb\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"98dca3045c034c154d5f\",\"5\":\"343ca020a2d38cec1a14\",\"6\":\"a3b07de9dd2ca2d24e85\",\"7\":\"896bbffe39433bb598f7\",\"8\":\"b966402f5d680d4bdf4a\",\"9\":\"033d7e190ca9e226a5d0\",\"10\":\"8ca60413647062717b1e\",\"11\":\"b6f741fcc366abfad9c4\",\"12\":\"1be61e0201691821bff6\",\"13\":\"d9c1735d14038b94c17e\",\"14\":\"bc3f6bc0a67517e7b30f\",\"15\":\"2f5d8e3d4aa4c46188d7\",\"16\":\"aaa39ef2d7e82594efc8\",\"17\":\"81c57c0dedf812e43013\",\"18\":\"56444ebd2456a4ba2201\",\"19\":\"8d03c06efcac6884bebe\",\"20\":\"3d4e02d1205a3c9e26c5\",\"21\":\"af1610ce169cf6d1cf4e\",\"22\":\"6a69068a7dd9d767dea1\",\"23\":\"663b89b79d755a70deef\",\"24\":\"d149cf025cbbca231d88\",\"25\":\"1fafd6424761185cc14b\",\"26\":\"402064cda3665d56f7fc\",\"27\":\"997802f273a0c88f7b6d\",\"28\":\"e68c475c6ca1e2eec92c\",\"29\":\"2f4a04c61d75f2ef18ab\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"03cc9867716dd58b9302\",\"33\":\"011b367beb543774f950\"}[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 be0920b17b8c939794e4\n **/"],"sourceRoot":""}
@@ -9,6 +9,9 @@ from mongoengine import ValidationError as MongoEngineValidationError
9
9
  from mongoengine import post_save
10
10
 
11
11
  from udata.app import cache
12
+ from udata.core import metrics
13
+ from udata.core.dataservices.factories import DataserviceFactory
14
+ from udata.core.dataservices.models import Dataservice
12
15
  from udata.core.dataset.activities import (
13
16
  UserAddedResourceToDataset,
14
17
  UserCreatedDataset,
@@ -30,8 +33,10 @@ from udata.core.dataset.factories import (
30
33
  ResourceSchemaMockData,
31
34
  )
32
35
  from udata.core.dataset.models import HarvestDatasetMetadata, HarvestResourceMetadata
36
+ from udata.core.followers.signals import on_follow, on_unfollow
37
+ from udata.core.reuse.factories import ReuseFactory, VisibleReuseFactory
33
38
  from udata.core.user.factories import UserFactory
34
- from udata.models import Dataset, License, ResourceSchema, Schema, db
39
+ from udata.models import Dataset, Follow, License, ResourceSchema, Reuse, Schema, db
35
40
  from udata.tests.helpers import assert_emit, assert_equal_dates, assert_not_emit
36
41
  from udata.utils import faker
37
42
 
@@ -399,6 +404,63 @@ class DatasetModelTest:
399
404
  dataset.save()
400
405
  mock_deleted.assert_called()
401
406
 
407
+ def test_dataset_metrics(self):
408
+ # We need to init metrics module
409
+ metrics.init_app(current_app)
410
+
411
+ dataset = DatasetFactory()
412
+
413
+ # Add related elements
414
+ with assert_emit(Reuse.on_create):
415
+ reuse = VisibleReuseFactory(datasets=[dataset])
416
+ ReuseFactory()
417
+ with assert_emit(Dataservice.on_create):
418
+ dataservice = DataserviceFactory(datasets=[dataset])
419
+ with assert_emit(on_follow):
420
+ follow = Follow.objects.create(
421
+ following=dataset, follower=UserFactory(), since=datetime.utcnow()
422
+ )
423
+
424
+ dataset.reload()
425
+ assert dataset.get_metrics()["reuses"] == 1
426
+ assert dataset.get_metrics()["dataservices"] == 1
427
+ assert dataset.get_metrics()["followers"] == 1
428
+
429
+ # Delete related elements
430
+ with assert_emit(Reuse.on_delete):
431
+ reuse.deleted = datetime.utcnow()
432
+ reuse.save()
433
+ with assert_emit(Dataservice.on_delete):
434
+ dataservice.deleted_at = datetime.utcnow()
435
+ dataservice.save()
436
+ with assert_emit(on_unfollow):
437
+ follow.until = datetime.utcnow()
438
+ follow.save()
439
+
440
+ dataset.reload()
441
+ assert dataset.get_metrics()["reuses"] == 0
442
+ assert dataset.get_metrics()["dataservices"] == 0
443
+ assert dataset.get_metrics()["followers"] == 0
444
+
445
+ # Attach and then detach related elements
446
+ reuse = VisibleReuseFactory(datasets=[dataset])
447
+ dataservice = DataserviceFactory(datasets=[dataset])
448
+
449
+ dataset.reload()
450
+ assert dataset.get_metrics()["reuses"] == 1
451
+ assert dataset.get_metrics()["dataservices"] == 1
452
+
453
+ with assert_emit(Reuse.on_update):
454
+ reuse.datasets = []
455
+ reuse.save()
456
+ with assert_emit(Dataservice.on_update):
457
+ dataservice.datasets = []
458
+ dataservice.save()
459
+
460
+ dataset.reload()
461
+ assert dataset.get_metrics()["reuses"] == 0
462
+ assert dataset.get_metrics()["dataservices"] == 0
463
+
402
464
 
403
465
  class ResourceModelTest:
404
466
  def test_url_is_required(self):
@@ -1,6 +1,6 @@
1
1
  import pytest
2
2
 
3
- from udata.core.dataset.factories import DatasetFactory, ResourceFactory
3
+ from udata.core.dataset.factories import DatasetFactory
4
4
  from udata.core.organization.csv import OrganizationCsvAdapter
5
5
  from udata.core.organization.factories import OrganizationFactory
6
6
  from udata.core.organization.models import Organization
@@ -15,21 +15,9 @@ class OrganizationCSVAdapterTest:
15
15
 
16
16
  DatasetFactory(
17
17
  organization=org_with_dataset,
18
- resources=[
19
- ResourceFactory(
20
- metrics={
21
- "views": 42,
22
- }
23
- ),
24
- ResourceFactory(
25
- metrics={
26
- "views": 1337,
27
- }
28
- ),
29
- ResourceFactory(),
30
- ],
18
+ metrics={"resources_downloads": 1337},
31
19
  )
32
- DatasetFactory(organization=org_with_dataset, resources=[])
20
+ DatasetFactory(organization=org_with_dataset, metrics={"resources_downloads": 42})
33
21
  adapter = OrganizationCsvAdapter(Organization.objects.all())
34
22
 
35
23
  # Build a dict (Org ID to dict of header name to value) from the CSV values and headers to simplify testing below.
@@ -1,8 +1,9 @@
1
1
  from datetime import datetime
2
2
 
3
3
  import pytest
4
+ from flask import current_app
4
5
 
5
- from udata.core.dataset import tasks as dataset_tasks
6
+ from udata.core import metrics
6
7
  from udata.core.dataset.factories import DatasetFactory
7
8
  from udata.core.discussions.factories import DiscussionFactory
8
9
  from udata.core.organization.factories import OrganizationFactory
@@ -69,6 +70,9 @@ class ReuseModelTest(TestCase, DBTestMixin):
69
70
  reuse.save()
70
71
 
71
72
  def test_reuse_metrics(self):
73
+ # We need to init metrics module
74
+ metrics.init_app(current_app)
75
+
72
76
  dataset = DatasetFactory()
73
77
  reuse = VisibleReuseFactory()
74
78
  DiscussionFactory(subject=reuse)
@@ -83,17 +87,15 @@ class ReuseModelTest(TestCase, DBTestMixin):
83
87
  reuse.datasets.append(dataset)
84
88
  reuse.save()
85
89
 
86
- reuse.count_datasets()
87
90
  assert reuse.get_metrics()["datasets"] == 2
88
91
 
89
- dataset.count_reuses()
92
+ dataset.reload()
90
93
  assert dataset.get_metrics()["reuses"] == 1
91
94
 
92
95
  with assert_emit(Reuse.on_update):
93
96
  reuse.datasets.remove(dataset)
94
97
  reuse.save()
95
98
 
96
- dataset_tasks.update_datasets_reuses_metrics()
97
99
  dataset.reload()
98
100
  assert dataset.get_metrics()["reuses"] == 0
99
101
 
Binary file
@@ -2,8 +2,8 @@ msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: udata\n"
4
4
  "Report-Msgid-Bugs-To: i18n@opendata.team\n"
5
- "POT-Creation-Date: 2025-07-28 16:59+0200\n"
6
- "PO-Revision-Date: 2025-07-28 15:31\n"
5
+ "POT-Creation-Date: 2025-08-20 12:14+0200\n"
6
+ "PO-Revision-Date: 2025-08-20 10:16\n"
7
7
  "Last-Translator: Open Data Team <i18n@opendata.team>\n"
8
8
  "Language: ar\n"
9
9
  "Language-Team: Arabic\n"
@@ -51,7 +51,7 @@ msgstr ""
51
51
  msgid "Invalid URL \"{url}\": {reason}"
52
52
  msgstr ""
53
53
 
54
- #: udata/tests/api/test_datasets_api.py:1129 udata/tests/test_model.py:403
54
+ #: udata/tests/api/test_datasets_api.py:1125 udata/tests/test_model.py:403
55
55
  #: udata/uris.py:57
56
56
  #, python-brace-format
57
57
  msgid "Invalid URL \"{url}\""
@@ -238,8 +238,8 @@ msgstr ""
238
238
  msgid "The organization web contact form"
239
239
  msgstr ""
240
240
 
241
- #: udata/core/contact_point/forms.py:20 udata/core/dataset/forms.py:116
242
- #: udata/core/dataset/forms.py:179 udata/core/discussions/forms.py:13
241
+ #: udata/core/contact_point/forms.py:20 udata/core/dataset/forms.py:117
242
+ #: udata/core/dataset/forms.py:185 udata/core/discussions/forms.py:13
243
243
  #: udata/core/discussions/forms.py:29 udata/core/topic/forms.py:14
244
244
  #: udata/harvest/forms.py:87
245
245
  msgid "Publish as"
@@ -289,12 +289,12 @@ msgstr ""
289
289
  msgid "dataservice"
290
290
  msgstr ""
291
291
 
292
- #: udata/core/dataservices/models.py:241 udata/core/dataset/models.py:589
292
+ #: udata/core/dataservices/models.py:241 udata/core/dataset/models.py:593
293
293
  #: udata/mongo/datetime_fields.py:60
294
294
  msgid "Creation date"
295
295
  msgstr "تاريخ الإنشاء"
296
296
 
297
- #: udata/core/dataservices/models.py:247 udata/core/dataset/models.py:594
297
+ #: udata/core/dataservices/models.py:247 udata/core/dataset/models.py:598
298
298
  #: udata/mongo/datetime_fields.py:66
299
299
  msgid "Last modification date"
300
300
  msgstr "تاريخ التعديل الأخير"
@@ -459,23 +459,23 @@ msgstr "الملف الذي تم تحميله"
459
459
  msgid "Remote file"
460
460
  msgstr "ملف بعيد"
461
461
 
462
- #: udata/core/dataset/forms.py:33
462
+ #: udata/core/dataset/forms.py:34
463
463
  msgid "Checksum value"
464
464
  msgstr ""
465
465
 
466
- #: udata/core/dataset/forms.py:44
466
+ #: udata/core/dataset/forms.py:45
467
467
  msgid "URL of the schema"
468
468
  msgstr ""
469
469
 
470
- #: udata/core/dataset/forms.py:45
470
+ #: udata/core/dataset/forms.py:46
471
471
  msgid "Name of the schema"
472
472
  msgstr ""
473
473
 
474
- #: udata/core/dataset/forms.py:46
474
+ #: udata/core/dataset/forms.py:47
475
475
  msgid "Version of the schema"
476
476
  msgstr ""
477
477
 
478
- #: udata/core/dataset/forms.py:65 udata/core/dataset/forms.py:146
478
+ #: udata/core/dataset/forms.py:66 udata/core/dataset/forms.py:147
479
479
  #: udata/core/discussions/forms.py:14 udata/core/discussions/forms.py:25
480
480
  #: udata/core/site/forms.py:12 udata/templates/mail/discussion_closed.html:26
481
481
  #: udata/templates/mail/new_discussion.html:25
@@ -483,119 +483,127 @@ msgstr ""
483
483
  msgid "Title"
484
484
  msgstr "عنوان"
485
485
 
486
- #: udata/core/dataset/forms.py:68 udata/core/dataset/forms.py:150
486
+ #: udata/core/dataset/forms.py:69 udata/core/dataset/forms.py:151
487
487
  #: udata/core/jobs/forms.py:28 udata/core/organization/forms.py:50
488
488
  #: udata/core/topic/forms.py:17 udata/harvest/forms.py:80
489
489
  msgid "Description"
490
490
  msgstr "وصف"
491
491
 
492
- #: udata/core/dataset/forms.py:71
492
+ #: udata/core/dataset/forms.py:72
493
493
  msgid "File type"
494
494
  msgstr ""
495
495
 
496
- #: udata/core/dataset/forms.py:75
496
+ #: udata/core/dataset/forms.py:76
497
497
  msgid "Whether the resource is an uploaded file, a remote file or an API"
498
498
  msgstr "إذا كان المورد ملف تم تحميله أو ملف بعيد أو واجهة برمجة تطبيقات"
499
499
 
500
- #: udata/core/dataset/forms.py:78
500
+ #: udata/core/dataset/forms.py:79
501
501
  msgid "Type"
502
502
  msgstr "نوع"
503
503
 
504
- #: udata/core/dataset/forms.py:82
504
+ #: udata/core/dataset/forms.py:83
505
505
  msgid "Resource type (documentation, API...)"
506
506
  msgstr ""
507
507
 
508
- #: udata/core/dataset/forms.py:84 udata/harvest/forms.py:82
508
+ #: udata/core/dataset/forms.py:85 udata/harvest/forms.py:82
509
509
  msgid "URL"
510
510
  msgstr "عنوان إليكتروني"
511
511
 
512
- #: udata/core/dataset/forms.py:86
512
+ #: udata/core/dataset/forms.py:87
513
513
  msgid "Format"
514
514
  msgstr "شكل"
515
515
 
516
- #: udata/core/dataset/forms.py:91
516
+ #: udata/core/dataset/forms.py:92
517
517
  msgid "Mime type"
518
518
  msgstr "نوع الـMime"
519
519
 
520
- #: udata/core/dataset/forms.py:92
520
+ #: udata/core/dataset/forms.py:93
521
521
  msgid "The mime type associated to the extension. (ex: text/plain)"
522
522
  msgstr ""
523
523
 
524
- #: udata/core/dataset/forms.py:95
524
+ #: udata/core/dataset/forms.py:96
525
525
  msgid "Size"
526
526
  msgstr "حجم"
527
527
 
528
- #: udata/core/dataset/forms.py:95
528
+ #: udata/core/dataset/forms.py:96
529
529
  msgid "The file size in bytes"
530
530
  msgstr "حجم الملف بالبايت"
531
531
 
532
- #: udata/core/dataset/forms.py:114
532
+ #: udata/core/dataset/forms.py:115
533
533
  msgid "Related dataset"
534
534
  msgstr "مجموعة البيانات متعلقة"
535
535
 
536
- #: udata/core/dataset/forms.py:138 udata/tests/api/test_datasets_api.py:1041
536
+ #: udata/core/dataset/forms.py:139 udata/tests/api/test_datasets_api.py:1037
537
537
  msgid "Wrong contact point id or contact point ownership mismatch"
538
538
  msgstr ""
539
539
 
540
- #: udata/core/dataset/forms.py:148 udata/core/organization/forms.py:48
540
+ #: udata/core/dataset/forms.py:149 udata/core/organization/forms.py:48
541
541
  msgid "Acronym"
542
542
  msgstr "اختصار"
543
543
 
544
- #: udata/core/dataset/forms.py:148
544
+ #: udata/core/dataset/forms.py:149
545
545
  msgid "An optional acronym"
546
546
  msgstr ""
547
547
 
548
- #: udata/core/dataset/forms.py:152
548
+ #: udata/core/dataset/forms.py:153
549
549
  msgid "The details about the dataset (collection process, specifics...)."
550
550
  msgstr "تفاصيل حول مجموعة البيانات (عملية الجمع، تفاصيل ...)."
551
551
 
552
- #: udata/core/dataset/forms.py:154
552
+ #: udata/core/dataset/forms.py:156
553
+ msgid "Short description"
554
+ msgstr ""
555
+
556
+ #: udata/core/dataset/forms.py:158
557
+ msgid "A short description of the dataset."
558
+ msgstr ""
559
+
560
+ #: udata/core/dataset/forms.py:160
553
561
  msgid "License"
554
562
  msgstr "رخصة"
555
563
 
556
- #: udata/core/dataset/forms.py:156
564
+ #: udata/core/dataset/forms.py:162
557
565
  msgid "Update frequency"
558
566
  msgstr "تردد التحديث"
559
567
 
560
- #: udata/core/dataset/forms.py:161
568
+ #: udata/core/dataset/forms.py:167
561
569
  msgid "The frequency at which data are updated."
562
570
  msgstr "تردد تحديث البيانات."
563
571
 
564
- #: udata/core/dataset/forms.py:163
572
+ #: udata/core/dataset/forms.py:169
565
573
  msgid "Expected frequency date"
566
574
  msgstr "تاريخ التردد المتوقع"
567
575
 
568
- #: udata/core/dataset/forms.py:167
576
+ #: udata/core/dataset/forms.py:173
569
577
  msgid "Temporal coverage"
570
578
  msgstr "التغطية الزمنية"
571
579
 
572
- #: udata/core/dataset/forms.py:167
580
+ #: udata/core/dataset/forms.py:173
573
581
  msgid "The period covered by the data"
574
582
  msgstr "الفترة التي تغطيها البيانات."
575
583
 
576
- #: udata/core/dataset/forms.py:170 udata/core/spatial/forms.py:85
584
+ #: udata/core/dataset/forms.py:176 udata/core/spatial/forms.py:85
577
585
  #: udata/core/topic/forms.py:23
578
586
  msgid "Spatial coverage"
579
587
  msgstr "التغطية المكانية"
580
588
 
581
- #: udata/core/dataset/forms.py:170 udata/core/topic/forms.py:23
589
+ #: udata/core/dataset/forms.py:176 udata/core/topic/forms.py:23
582
590
  msgid "The geographical area covered by the data."
583
591
  msgstr "المنطقة الجغرافية التي تغطيها البيانات."
584
592
 
585
- #: udata/core/dataset/forms.py:172 udata/core/post/forms.py:26
593
+ #: udata/core/dataset/forms.py:178 udata/core/post/forms.py:26
586
594
  #: udata/core/site/forms.py:13 udata/core/topic/forms.py:26
587
595
  msgid "Tags"
588
596
  msgstr "علامات"
589
597
 
590
- #: udata/core/dataset/forms.py:172
598
+ #: udata/core/dataset/forms.py:178
591
599
  msgid "Some taxonomy keywords"
592
600
  msgstr "بعض الكلمات الرئيسية للتصنيف"
593
601
 
594
- #: udata/core/dataset/forms.py:174 udata/core/topic/forms.py:27
602
+ #: udata/core/dataset/forms.py:180 udata/core/topic/forms.py:27
595
603
  msgid "Private"
596
604
  msgstr "خاص"
597
605
 
598
- #: udata/core/dataset/forms.py:175
606
+ #: udata/core/dataset/forms.py:181
599
607
  msgid "Restrict the dataset visibility to you or your organization only."
600
608
  msgstr "قم بتقييد رؤية البيانات لك أو لمؤسستك فقط."
601
609
 
@@ -603,36 +611,36 @@ msgstr "قم بتقييد رؤية البيانات لك أو لمؤسستك ف
603
611
  msgid "Pivotal data"
604
612
  msgstr "بيانات محورية"
605
613
 
606
- #: udata/core/dataset/models.py:139
614
+ #: udata/core/dataset/models.py:142
607
615
  msgid "A schema must contains a name or an URL when a version is provided."
608
616
  msgstr ""
609
617
 
610
- #: udata/core/dataset/models.py:171 udata/tests/api/test_datasets_api.py:1137
611
- #: udata/tests/api/test_datasets_api.py:1148
618
+ #: udata/core/dataset/models.py:174 udata/tests/api/test_datasets_api.py:1133
619
+ #: udata/tests/api/test_datasets_api.py:1144
612
620
  #, python-brace-format
613
621
  msgid "Schema name \"{schema}\" is not an allowed value. Allowed values: {values}"
614
622
  msgstr ""
615
623
 
616
- #: udata/core/dataset/models.py:190 udata/tests/api/test_datasets_api.py:1160
624
+ #: udata/core/dataset/models.py:193 udata/tests/api/test_datasets_api.py:1156
617
625
  #, python-brace-format
618
626
  msgid "Version \"{version}\" is not an allowed value for the schema \"{name}\". Allowed versions: {values}"
619
627
  msgstr ""
620
628
 
621
- #: udata/core/dataset/models.py:467 udata/core/dataset/rdf.py:567
629
+ #: udata/core/dataset/models.py:470 udata/core/dataset/rdf.py:567
622
630
  #: udata/tests/dataset/test_dataset_rdf.py:709
623
631
  #: udata/tests/dataset/test_dataset_rdf.py:722
624
632
  msgid "Nameless resource"
625
633
  msgstr "مورد مجهول"
626
634
 
627
- #: udata/core/dataset/models.py:568
635
+ #: udata/core/dataset/models.py:572
628
636
  msgid "Future date of update"
629
637
  msgstr "تاريخ التحديث في المستقبل"
630
638
 
631
- #: udata/core/dataset/models.py:600
639
+ #: udata/core/dataset/models.py:604
632
640
  msgid "Last update of the dataset resources"
633
641
  msgstr ""
634
642
 
635
- #: udata/core/dataset/models.py:653
643
+ #: udata/core/dataset/models.py:659
636
644
  msgid "dataset"
637
645
  msgstr "مجموعة البيانات"
638
646
 
@@ -720,17 +728,17 @@ msgid "Refused"
720
728
  msgstr "مرفوض"
721
729
 
722
730
  #: udata/core/organization/forms.py:25
723
- #: udata/tests/api/test_organizations_api.py:159
731
+ #: udata/tests/api/test_organizations_api.py:164
724
732
  msgid "A siret number is made of 14 digits"
725
733
  msgstr ""
726
734
 
727
735
  #: udata/core/organization/forms.py:36
728
- #: udata/tests/api/test_organizations_api.py:171
736
+ #: udata/tests/api/test_organizations_api.py:176
729
737
  msgid "A siret number is only made of digits"
730
738
  msgstr ""
731
739
 
732
740
  #: udata/core/organization/forms.py:39
733
- #: udata/tests/api/test_organizations_api.py:165
741
+ #: udata/tests/api/test_organizations_api.py:170
734
742
  msgid "Invalid Siret number"
735
743
  msgstr ""
736
744
 
@@ -940,7 +948,7 @@ msgstr "تصور"
940
948
  msgid "Connected device"
941
949
  msgstr "جهاز متصل"
942
950
 
943
- #: udata/core/reuse/constants.py:15 udata/tests/reuse/test_reuse_model.py:108
951
+ #: udata/core/reuse/constants.py:15 udata/tests/reuse/test_reuse_model.py:110
944
952
  msgid "Health"
945
953
  msgstr ""
946
954
 
@@ -1317,11 +1325,11 @@ msgstr "تم تخطيه"
1317
1325
  msgid "Archived"
1318
1326
  msgstr ""
1319
1327
 
1320
- #: udata/harvest/backends/dcat.py:338
1328
+ #: udata/harvest/backends/dcat.py:414
1321
1329
  msgid "Remote URL prefix"
1322
1330
  msgstr ""
1323
1331
 
1324
- #: udata/harvest/backends/dcat.py:341
1332
+ #: udata/harvest/backends/dcat.py:417
1325
1333
  msgid "A prefix used to build the remote URL of the harvested items."
1326
1334
  msgstr ""
1327
1335
 
Binary file