udata 9.0.1.dev29390__py2.py3-none-any.whl → 9.0.1.dev29431__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/harvest/api.py CHANGED
@@ -31,6 +31,13 @@ error_fields = api.model('HarvestError', {
31
31
  'details': fields.String(description='Optional details (ie. stacktrace)'),
32
32
  })
33
33
 
34
+
35
+ log_fields = api.model('HarvestError', {
36
+ 'level': fields.String(required=True),
37
+ 'message': fields.String(required=True),
38
+ })
39
+
40
+
34
41
  item_fields = api.model('HarvestItem', {
35
42
  'remote_id': fields.String(description='The item remote ID to process',
36
43
  required=True),
@@ -46,6 +53,8 @@ item_fields = api.model('HarvestItem', {
46
53
  'ended': fields.ISODateTime(description='The item end date'),
47
54
  'errors': fields.List(fields.Nested(error_fields),
48
55
  description='The item errors'),
56
+ 'logs': fields.List(fields.Nested(log_fields),
57
+ description='The item logs'),
49
58
  'args': fields.List(fields.String,
50
59
  description='The item positional arguments',
51
60
  default=[]),
@@ -2,7 +2,7 @@ import logging
2
2
  import traceback
3
3
 
4
4
  from datetime import datetime, date, timedelta
5
- from typing import Optional
5
+ from typing import List, Optional
6
6
  from uuid import UUID
7
7
 
8
8
  import requests
@@ -15,7 +15,7 @@ from udata.models import Dataset
15
15
  from udata.utils import safe_unicode
16
16
 
17
17
  from ..exceptions import HarvestException, HarvestSkipException, HarvestValidationError
18
- from ..models import HarvestItem, HarvestJob, HarvestError, archive_harvested_dataset
18
+ from ..models import HarvestItem, HarvestJob, HarvestError, HarvestLog, archive_harvested_dataset
19
19
  from ..signals import before_harvest_job, after_harvest_job
20
20
 
21
21
  log = logging.getLogger(__name__)
@@ -185,10 +185,13 @@ class BaseBackend(object):
185
185
  self.job.items.append(item)
186
186
  self.save_job()
187
187
 
188
+ log_catcher = LogCatcher()
189
+
188
190
  try:
189
191
  if not remote_id:
190
192
  raise HarvestSkipException("missing identifier")
191
193
 
194
+ current_app.logger.addHandler(log_catcher)
192
195
  dataset = self.inner_process_dataset(item, **kwargs)
193
196
 
194
197
  # Use `item.remote_id` because `inner_process_dataset` could have modified it.
@@ -220,7 +223,9 @@ class BaseBackend(object):
220
223
  error = HarvestError(message=safe_unicode(e), details=traceback.format_exc())
221
224
  item.errors.append(error)
222
225
  finally:
226
+ current_app.logger.removeHandler(log_catcher)
223
227
  item.ended = datetime.utcnow()
228
+ item.logs = [HarvestLog(level=record.levelname, message=record.getMessage()) for record in log_catcher.records]
224
229
  self.save_job()
225
230
 
226
231
  def is_done(self) -> bool:
@@ -342,4 +347,15 @@ class BaseBackend(object):
342
347
  msg = str(error)
343
348
  errors.append(msg)
344
349
  msg = '\n- '.join(['Validation error:'] + errors)
345
- raise HarvestValidationError(msg)
350
+ raise HarvestValidationError(msg)
351
+
352
+
353
+ class LogCatcher(logging.Handler):
354
+ records: List[logging.LogRecord]
355
+
356
+ def __init__(self):
357
+ self.records = []
358
+ super().__init__()
359
+
360
+ def emit(self, record):
361
+ self.records.append(record)
udata/harvest/models.py CHANGED
@@ -49,6 +49,9 @@ class HarvestError(db.EmbeddedDocument):
49
49
  message = db.StringField()
50
50
  details = db.StringField()
51
51
 
52
+ class HarvestLog(db.EmbeddedDocument):
53
+ level = db.StringField()
54
+ message = db.StringField()
52
55
 
53
56
  class HarvestItem(db.EmbeddedDocument):
54
57
  remote_id = db.StringField()
@@ -59,6 +62,7 @@ class HarvestItem(db.EmbeddedDocument):
59
62
  started = db.DateTimeField()
60
63
  ended = db.DateTimeField()
61
64
  errors = db.ListField(db.EmbeddedDocumentField(HarvestError))
65
+ logs = db.ListField(db.EmbeddedDocumentField(HarvestLog), default=[])
62
66
  args = db.ListField(db.StringField())
63
67
  kwargs = db.DictField()
64
68
 
@@ -1,3 +1,3 @@
1
1
  webpackJsonp([18,31],{887:function(e,t,o){var s,a;s=o(1469),a=o(1566),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},985:function(e,t,o){var s,a;o(1001),s=o(993),a=o(998),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},986:function(e,t,o){var s,a;s=o(992),a=o(997),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},992:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=300,s=5e3;t.default={name:"alert-box",data:function(){return{closing:!1}},props:{alert:Object},computed:{closable:function(){return void 0===this.alert.closable||this.alert.closable},classes:function classes(){var classes={"alert-dismissable":this.closable,in:!this.closing};return classes["alert-"+(this.alert.type||"success")]=!0,classes},details:function(){if(this.alert&&this.alert.details)return this.alert.details.replace(/\n/g,"<br/>")}},methods:{close:function(){var e=this;this.closing=!0,setTimeout(function(){e.$dispatch("notify:close",e.alert)},o)}},ready:function(){var e=this;this.alert.autoclose&&setTimeout(function(){e.$dispatch("notify:close",e.alert)},s)}}},993:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"box",props:{title:String,icon:null,boxclass:{type:String,default:""},bodyclass:{type:String,default:""},footerclass:{type:String,default:""},loading:Boolean,footer:null}}},994:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(986),a=_interopRequireDefault(s);t.default={name:"notification-zone",components:{Alert:a.default}}},995:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".box .box-tools>*{float:right}.box .box-tools .text-muted{color:#777!important}.box .box-tools .box-search{width:180px;display:inline-block}.box .box-tools .box-search input:focus{box-shadow:none;border-color:transparent!important}.box .box-tools .box-search .btn,.box .box-tools .box-search input[type=text]{box-shadow:none;background-color:#fbfbfb;border:1px solid #fbfbfb}.box .box-tools .box-search .btn:focus,.box .box-tools .box-search input[type=text]:focus{background-color:#fff;color:#666}.box .box-tools .box-search .btn:focus+.input-group-btn .btn,.box .box-tools .box-search input[type=text]:focus+.input-group-btn .btn{background-color:#fff;border-left-color:#fff;color:#666}.box .box-tools .box-search>*{border-top:1px solid #eee;border-bottom:1px solid #eee}.box .box-tools .box-search>:first-child{border-left:1px solid #eee}.box .box-tools .box-search>:last-child{border-right:1px solid #eee}.box .box-tools .btn-box-tool{font-size:14px;padding:6px 8px}.box .box-tools .btn-group{vertical-align:inherit}.box form{margin:10px}","",{version:3,sources:["/./js/components/containers/box.vue"],names:[],mappings:"AAAA,kBAAkB,WAAW,CAAC,4BAA4B,oBAAqB,CAAC,4BAA4B,YAAY,oBAAoB,CAAC,wCAAwC,gBAAgB,kCAAmC,CAAC,8EAAgF,gBAAgB,yBAAyB,wBAAwB,CAAC,0FAA4F,sBAAsB,UAAU,CAAC,sIAAwI,sBAAsB,uBAAuB,UAAU,CAAC,8BAA8B,0BAA0B,4BAA4B,CAAC,yCAA0C,0BAA0B,CAAC,wCAAyC,2BAA2B,CAAC,8BAA8B,eAAe,eAAe,CAAC,2BAA2B,sBAAsB,CAAC,UAAU,WAAW,CAAC",file:"box.vue",sourcesContent:['.box .box-tools>*{float:right}.box .box-tools .text-muted{color:#777 !important}.box .box-tools .box-search{width:180px;display:inline-block}.box .box-tools .box-search input:focus{box-shadow:none;border-color:transparent !important}.box .box-tools .box-search input[type="text"],.box .box-tools .box-search .btn{box-shadow:none;background-color:#fbfbfb;border:1px solid #fbfbfb}.box .box-tools .box-search input[type="text"]:focus,.box .box-tools .box-search .btn:focus{background-color:#fff;color:#666}.box .box-tools .box-search input[type="text"]:focus+.input-group-btn .btn,.box .box-tools .box-search .btn:focus+.input-group-btn .btn{background-color:#fff;border-left-color:#fff;color:#666}.box .box-tools .box-search>*{border-top:1px solid #eee;border-bottom:1px solid #eee}.box .box-tools .box-search>*:first-child{border-left:1px solid #eee}.box .box-tools .box-search>*:last-child{border-right:1px solid #eee}.box .box-tools .btn-box-tool{font-size:14px;padding:6px 8px}.box .box-tools .btn-group{vertical-align:inherit}.box form{margin:10px}'],sourceRoot:"webpack://"}])},996:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".notification-zone{padding:15px 15px 0;position:fixed;right:15px;bottom:15px;width:350px;z-index:10000}.notification-zone .alert:last-child{margin-bottom:0}.notification-zone .alert:not(:last-child){margin-bottom:5px}","",{version:3,sources:["/./js/components/notification-zone.vue"],names:[],mappings:"AAAA,mBAAmB,oBAAoB,eAAe,WAAW,YAAY,YAAY,aAAa,CAAC,qCAAqC,eAAe,CAAC,2CAA2C,iBAAiB,CAAC",file:"notification-zone.vue",sourcesContent:[".notification-zone{padding:15px 15px 0;position:fixed;right:15px;bottom:15px;width:350px;z-index:10000}.notification-zone .alert:last-child{margin-bottom:0}.notification-zone .alert:not(:last-child){margin-bottom:5px}"],sourceRoot:"webpack://"}])},997:function(e,t){e.exports=' <div class="alert fade" :class=classes> <button type=button class=close aria-hidden=true @click=close>×</button> <h4> <span class="icon fa fa-{{alert.icon || \'check\'}}"></span> {{alert.title}} </h4> {{{ details }}} </div> '},998:function(e,t){e.exports=' <div class="box {{ boxclass }}"> <header class=box-header v-show="title || icon"> <i v-show=icon class="fa fa-{{icon}}"></i> <h3 class=box-title>{{title}}</h3> <div class=box-tools> <slot name=tools></slot> </div> </header> <div class="box-body {{bodyclass}}"> <slot></slot> </div> <div class=overlay v-show=loading> <span class="fa fa-refresh fa-spin"></span> </div> <div class="box-footer clearfix {{footerclass}}" v-show=footer> <slot name=footer></slot> </div> </div> '},999:function(e,t){e.exports=' <div v-show="$root.notifications && $root.notifications.length > 0" class=notification-zone> <alert v-for="n in $root.notifications" :alert=n></alert> </div> '},1e3:function(e,t,o){var s,a;o(1002),s=o(994),a=o(999),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1001:function(e,t,o){var s=o(995);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1002:function(e,t,o){var s=o(996);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1039:function(e,t,o){var s,a;o(1181),s=o(1117),a=o(1158),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1078:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1e3),a=_interopRequireDefault(s);t.default={name:"layout",props:{title:String,subtitle:String,page:String,actions:{type:Array,default:function(){return[]}},badges:Array},components:{NotificationZone:a.default},computed:{menu_actions:function(){if(this.actions&&this.actions.length>1)return this.actions}}}},1079:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".content-header h1 a{color:#000}.content-header h1 a .fa{font-size:.4em}","",{version:3,sources:["/./js/components/layout.vue"],names:[],mappings:"AAAA,qBAAqB,UAAW,CAAC,yBAAyB,cAAc,CAAC",file:"layout.vue",sourcesContent:[".content-header h1 a{color:black}.content-header h1 a .fa{font-size:.4em}"],sourceRoot:"webpack://"}])},1080:function(e,t){e.exports=' <div class=content-wrapper> <router-view></router-view> <section class=content-header> <div class="btn-group btn-group-sm btn-actions pull-right clearfix"> <div v-if=menu_actions class="btn-group btn-group-sm" role=group> <button type=button class="btn btn-info dropdown-toggle" data-toggle=dropdown> {{_(\'Edit\')}} <span class=caret></span> </button> <ul class="dropdown-menu dropdown-menu-right" role=menu> <li v-for="action in menu_actions" :role="action.divider ? \'separator\' : false" :class="{ \'divider\': action.divider }"> <a class=pointer v-if=!action.divider @click=action.method> <span v-if=action.icon class="fa fa-fw fa-{{action.icon}}"></span> {{action.label}} </a> </li> </ul> </div> </div> <h1> <a v-if=page :href=page :title="_(\'See on the site\')"> {{ title }} <span class="fa fa-external-link"></span> </a> <span v-if=!page>{{title}}</span> <small v-if=subtitle>{{subtitle}}</small> <small v-if=badges> <span v-for="badge in badges" class="label label-{{badge.class}}">{{badge.label}}</span> </small> </h1> </section> <notification-zone></notification-zone> <section class=content> <slot></slot> </section> </div> '},1081:function(e,t,o){var s,a;o(1082),s=o(1078),a=o(1080),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1082:function(e,t,o){var s=o(1079);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1098:function(e,t,o){function webpackContext(e){return o(webpackContextResolve(e))}function webpackContextResolve(e){return s[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var s={"./avatar.vue":1161,"./date.vue":1162,"./datetime.vue":1163,"./deletable-text.vue":1164,"./label.vue":1165,"./metric.vue":1166,"./playpause.vue":1167,"./progress-bars.vue":1168,"./since.vue":1169,"./text.vue":1170,"./thumbnail.vue":1171,"./timeago.vue":1172,"./visibility.vue":1173};webpackContext.keys=function(){return Object.keys(s)},webpackContext.resolve=webpackContextResolve,e.exports=webpackContext,webpackContext.id=1098},1101:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(57),a=(_interopRequireDefault(s),o(314)),i=_interopRequireDefault(a);t.default={name:"datatable-cell",default:"",props:{field:Object,item:Object},computed:{value:function(){if(!this.field||!this.item)return this.$options.default;if(this.field.key)if(i.default.isFunction(this.field.key))t=this.field.key(this.item);else for(var e=this.field.key.split("."),t=this.item,o=0;o<e.length;o++){var s=e[o];if(!t||!t.hasOwnProperty(s)){t=null;break}t=t[s]}else t=this.item;return t||this.$options.default}}}},1102:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={attached:function(){this.$el.closest("td").classList.add("avatar-cell")}}},1103:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-date"}},1104:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-datetime"}},1105:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-deletable-text"}},1106:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-label",filters:{format:function(e){return this.field.hasOwnProperty("label_func")?this.field.label_func(e):e},color:function(e){return this.field.hasOwnProperty("label_type")?this.field.label_type(e):"default"}},computed:{labels:function(){return this.value instanceof Array?this.value:[this.value]}}}},1107:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-metric",default:0}},1108:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-playpause",default:!1}},1109:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-progress-bars",computed:{progress_class:function(){return this.value<1/3?"danger":this.value<2/3?"warning":this.value<.9?"primary":"success"}}}},1110:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-since"}},1111:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-text"}},1112:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(101),a=_interopRequireDefault(s);t.default={attached:function(){this.$el.closest("td").classList.add("thumbnail-cell")},computed:{src:function(){return this.value?this.value:this.field.placeholder?a.default.getFor(this.field.placeholder):a.default.generic}}}},1113:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"datatable-cell-timeago"}},1114:function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var s=o(133),a={deleted:{label:(0,s._)("Deleted"),type:"danger"},archived:{label:(0,s._)("Archived"),type:"warning"},private:{label:(0,s._)("Private"),type:"info"},public:{label:(0,s._)("Public"),type:"success"}};t.default={name:"datatable-cell-visibility",computed:{status:function(){if(this.item)return this.item.deleted?a.deleted:this.item.archived?a.archived:this.item.private?a.private:a.public}}}},1115:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(200),a=_interopRequireDefault(s),i=o(57),r=_interopRequireDefault(i),n=o(1160),l=_interopRequireDefault(n);t.default={name:"datatable-row",props:{item:Object,fields:Array,selected:{type:Boolean,default:!1}},created:function(){var e=!0,t=!1,o=void 0;try{for(var s,i=(0,a.default)(this.fields);!(e=(s=i.next()).done);e=!0){var r=s.value;this.load_cell(r.type||"text")}}catch(n){t=!0,o=n}finally{try{!e&&i.return&&i.return()}finally{if(t)throw o}}},methods:{item_click:function(e){this.$dispatch("datatable:item:click",e)},load_cell:function(e){if(!this.$options.components.hasOwnProperty(e)){var t=o(1098)("./"+e+".vue");t.hasOwnProperty("mixins")||(t.mixins=[]),l.default in t.mixins||t.mixins.push(l.default),this.$options.components[e]=r.default.extend(t)}}}}},1116:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1174),a=_interopRequireDefault(s);t.default={name:"datatable",components:{Row:a.default},props:{p:Object,fields:Array,track:{type:null,default:"id"}},data:function(){return{selected:null}},computed:{remote:function(){return this.p&&this.p.serverside},trackBy:function(){return this.track||""}},events:{"datatable:item:click":function(e){return this.selected=e,!0}},methods:{header_click:function(e){e.sort&&this.p.sort(this.sort_for(e))},sort_for:function(e){return this.remote?e.sort:e.key},classes_for:function(e){var t={pointer:Boolean(e.sort)},o=e.align||"left";return t["text-"+o]=!0,t},sort_classes_for:function(e){var t={};return this.p.sorted!=this.sort_for(e)?t["fa-sort"]=!0:this.p.reversed?this.p.reversed&&(t["fa-sort-desc"]=!0):t["fa-sort-asc"]=!0,t}},filters:{thwidth:function(e){switch(e){case void 0:return"";case 0:return 0;default:return e+5}}}}},1117:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(985),a=_interopRequireDefault(s),i=o(1175),r=_interopRequireDefault(i),n=o(1176),l=_interopRequireDefault(n);t.default={name:"datatable-widget",components:{Box:a.default,Datatable:r.default,PaginationWidget:l.default},data:function(){return{search_query:null,selected:null}},computed:{has_footer_children:function(){return this.$els.footer_container&&this.$els.footer_container.children.length},show_footer:function(){return this.p&&this.p.pages>1||this.has_footer_children},boxclasses:function(){return["datatable-widget",this.tint?"box-"+this.tint:"box-solid",this.boxclass].join(" ")}},props:{p:Object,title:String,icon:String,fields:Array,boxclass:String,tint:String,empty:String,loading:{type:Boolean,default:void 0},track:{type:null,default:"id"},downloads:{type:Array,default:function(){return[]}}},methods:{search:function(){this.p.search(this.search_query)}},watch:{search_query:function(e){this.p.search(e)}}}},1118:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=2;t.default={name:"pagination-widget",props:{p:Object},computed:{start:function(){return this.p?this.p.page<=o?1:this.p.page-o:-1},end:function(){return this.p?this.p.page+o>this.p.pages?this.p.pages:this.p.page+o:-1},range:function(){var e=this;return isNaN(this.start)||isNaN(this.end)||this.start>=this.end?[]:Array.apply(0,Array(this.end+1-this.start)).map(function(t,o){return o+e.start})}}}},1135:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".datatable td.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0}","",{version:3,sources:["/./js/components/datatable/cell.vue"],names:[],mappings:"AAAA,uBAAuB,mBAAmB,gBAAgB,uBAAuB,WAAW,CAAC",file:"cell.vue",sourcesContent:[".datatable td.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0}"],sourceRoot:"webpack://"}])},1136:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".datatable td.avatar-cell{padding:3px}","",{version:3,sources:["/./js/components/datatable/cells/avatar.vue"],names:[],mappings:"AAAA,0BAA0B,WAAW,CAAC",file:"avatar.vue",sourcesContent:[".datatable td.avatar-cell{padding:3px}"],sourceRoot:"webpack://"}])},1137:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".datatable td.thumbnail-cell{padding:3px}","",{version:3,sources:["/./js/components/datatable/cells/thumbnail.vue"],names:[],mappings:"AAAA,6BAA6B,WAAW,CAAC",file:"thumbnail.vue",sourcesContent:[".datatable td.thumbnail-cell{padding:3px}"],sourceRoot:"webpack://"}])},1138:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".datatable th{white-space:nowrap}","",{version:3,sources:["/./js/components/datatable/table.vue"],names:[],mappings:"AAAA,cAAc,kBAAkB,CAAC",file:"table.vue",sourcesContent:[".datatable th{white-space:nowrap}"],sourceRoot:"webpack://"}])},1139:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".datatable-widget .datatable-header>.row{width:100%}","",{version:3,sources:["/./js/components/datatable/widget.vue"],names:[],mappings:"AAAA,yCAAyC,UAAU,CAAC",file:"widget.vue",sourcesContent:[".datatable-widget .datatable-header>.row{width:100%}"],sourceRoot:"webpack://"}])},1140:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".label{margin:1px}","",{version:3,sources:["/./js/components/datatable/cells/label.vue"],names:[],mappings:"AACA,OACI,UAAY,CACf",file:"label.vue",sourcesContent:["\n.label {\n margin: 1px;\n}\n"],sourceRoot:"webpack://"}])},1143:function(e,t){e.exports=' <img :src="value | avatar_url field.width" :width=field.width :height=field.width /> '},1144:function(e,t){e.exports=' <time :datetime="value | dt YYYY-MM-DD">{{value | dt L}}</time> '},1145:function(e,t){e.exports=" <time :datetime=value>{{value | dt L LT}}</time> "},1146:function(e,t){e.exports=" <del v-if=item.deleted :title=\"_('This item has been deleted')\" :datetime=item.deleted>{{value}}</del> <span v-else>{{value}}</span> "},1147:function(e,t){e.exports=' <span v-for="label in labels" class="label label-{{label | color}}"> {{label | format}} </span> '},1148:function(e,t){e.exports=" <span class=badge :class=\"{\n 'bg-green': value > 0,\n 'bg-red': value == 0\n }\">{{value}}</span> "},1149:function(e,t){e.exports=" <i class=\"fa fa-fw fa-{{value ? 'play' : 'stop'}} text-{{value ? 'green' : 'red'}}\"></i> "},1150:function(e,t){e.exports=' <div class="progress progress-sm"> <span class="progress-bar progress-bar-{{ progress_class }}" :style="{width: value * 100 + \'%\'}" :title="_(\'Score:\') + \' \' + value * 100"> </span> </div> '},1151:function(e,t){e.exports=" <time :datetime=value>{{value | since}}</time> "},1152:function(e,t){e.exports="<span>{{value}}</span>"},1153:function(e,t){e.exports=" <img :src=src :width=field.width :height=field.width /> "},1154:function(e,t){e.exports=" <time :datetime=value class=timeago>{{value | timeago}}</time> "},1155:function(e,t){e.exports=' <span class="label label-{{ status.type }}">{{ status.label }}</span> '},1156:function(e,t){e.exports=" <tr class=pointer :class=\"{ 'active': selected }\" @click=item_click(item)> <td v-for=\"field in fields\" track-by=key :class=\"{\n 'text-center': field.align === 'center',\n 'text-left': field.align === 'left',\n 'text-right': field.align === 'right',\n 'ellipsis': field.ellipsis\n }\"> <component :is=\"field.type || 'text'\" :item=item :field=field> </component> </td> </tr> "},1157:function(e,t){e.exports=' <table class="table table-hover datatable"> <thead> <tr> <th v-for="field in fields" :class=classes_for(field) @click=header_click(field) :width="field.width | thwidth"> {{field.label}} <span class="fa fa-fw" v-if=field.sort :class=sort_classes_for(field)></span> </th> </tr> </thead> <tbody> <tr v-for="item in p.data" :track-by=trackBy is=row :item=item :fields=fields :selected="item === selected"> </tr> </tbody> </table> '},1158:function(e,t){e.exports=' <div> <box :title=title :icon=icon :boxclass=boxclasses bodyclass="table-responsive no-padding" footerclass="text-center clearfix" :loading="loading !== undefined ? loading : p.loading" :footer=show_footer> <aside slot=tools> <div class=btn-group v-show=downloads.length> <button type=button class="btn btn-box-tool dropdown-toggle" data-toggle=dropdown aria-expanded=false> <span class="fa fa-download"></span> </button> <ul class=dropdown-menu role=menu> <li v-for="download in downloads"> <a :href=download.url>{{download.label}}</a> </li> </ul> </div> <div class=box-search v-if=p.has_search> <div class=input-group> <input type=text class="form-control input-sm pull-right" style="width: 150px" :placeholder="_(\'Search\')" v-model=search_query debounce=500 @keyup.enter=search> <div class=input-group-btn> <button class="btn btn-sm btn-flat" @click=search> <i class="fa fa-search"></i> </button> </div> </div> </div> </aside> <header class=datatable-header> <slot name=header></slot> </header> <datatable v-if=p.has_data :p=p :fields=fields :track=track> </datatable> <div class="text-center lead" v-if=!p.has_data> {{ empty || _(\'No data\')}} </div> <footer slot=footer> <div :class="{ \'pull-right\': p.pages > 1 }" v-el:footer_container> <slot name=footer></slot> </div> <pagination-widget :p=p></pagination-widget> </footer> </box> </div> '},1159:function(e,t){e.exports=' <ul class="pagination pagination-sm no-margin" v-show="p && p.pages > 1"> <li :class="{ \'disabled\': !p || p.page == 1 }"> <a :title="_(\'First page\')" class=pointer @click=p.go_to_page(1)> &laquo; </a> </li> <li :class="{ \'disabled\': !p || p.page == 1 }"> <a :title="_(\'Previous page\')" class=pointer @click=p.previousPage()> &lsaquo; </a> </li> <li v-for="current in range" :class="{ \'active\': current == p.page }"> <a @click=p.go_to_page(current) class=pointer>{{ current }}</a> </li> <li :class="{ \'disabled\': !p || p.page == p.pages }"> <a :title="_(\'Next page\')" class=pointer @click=p.nextPage()> &rsaquo; </a> </li> <li :class="{ \'disabled\': !p || p.page == p.pages }"> <a :title="_(\'Last page\')" class=pointer @click=p.go_to_page(p.pages)> &raquo; </a> </li> </ul> '},1160:function(e,t,o){var s,a;o(1177),s=o(1101),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1161:function(e,t,o){var s,a;o(1178),s=o(1102),a=o(1143),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1162:function(e,t,o){var s,a;s=o(1103),a=o(1144),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1163:function(e,t,o){var s,a;s=o(1104),a=o(1145),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1164:function(e,t,o){var s,a;s=o(1105),a=o(1146),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1165:function(e,t,o){var s,a;o(1182),s=o(1106),a=o(1147),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1166:function(e,t,o){var s,a;s=o(1107),a=o(1148),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1167:function(e,t,o){var s,a;s=o(1108),a=o(1149),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1168:function(e,t,o){var s,a;s=o(1109),a=o(1150),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1169:function(e,t,o){var s,a;s=o(1110),a=o(1151),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1170:function(e,t,o){var s,a;s=o(1111),a=o(1152),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1171:function(e,t,o){var s,a;o(1179),s=o(1112),a=o(1153),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1172:function(e,t,o){var s,a;s=o(1113),a=o(1154),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1173:function(e,t,o){var s,a;s=o(1114),a=o(1155),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1174:function(e,t,o){var s,a;s=o(1115),a=o(1156),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1175:function(e,t,o){var s,a;o(1180),s=o(1116),a=o(1157),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1176:function(e,t,o){var s,a;s=o(1118),a=o(1159),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1177:function(e,t,o){var s=o(1135);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1178:function(e,t,o){var s=o(1136);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1179:function(e,t,o){var s=o(1137);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1180:function(e,t,o){var s=o(1138);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1181:function(e,t,o){var s=o(1139);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1182:function(e,t,o){var s=o(1140);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1187:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.HarvestSource=t.VALIDATION_STATUS_I18N=t.VALIDATION_STATUS_CLASSES=void 0;var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(46),l=_interopRequireDefault(n),u=o(27),d=_interopRequireDefault(u),c=o(26),p=_interopRequireDefault(c),f=o(39),b=o(133),h=o(19),v=_interopRequireDefault(h),x=(t.VALIDATION_STATUS_CLASSES={pending:"default",accepted:"success",refused:"danger"},t.VALIDATION_STATUS_I18N={pending:(0,b._)("Pending"),accepted:(0,b._)("Accepted"),refused:(0,b._)("Refused")},t.HarvestSource=function(e){function HarvestSource(){return(0,r.default)(this,HarvestSource),(0,d.default)(this,(HarvestSource.__proto__||(0,a.default)(HarvestSource)).apply(this,arguments))}return(0,p.default)(HarvestSource,e),(0,l.default)(HarvestSource,[{key:"fetch",value:function(e){return e=e||this.id||this.slug,this.loading=!0,e?this.$api("harvest.get_harvest_source",{ident:e},this.on_fetched):v.default.error("Unable to fetch HarvestSource: no identifier specified"),this}},{key:"save",value:function(e){return this.id?this.update(this,e):(this.loading=!0,void this.$api("harvest.create_harvest_source",{payload:this},this.on_fetched,this.on_error(e)))}},{key:"update",value:function(e,t){this.loading=!0,this.$api("harvest.update_harvest_source",{ident:this.id,payload:e},this.on_fetched,this.on_error(t))}}]),HarvestSource}(f.Model));t.default=x},1199:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.HarvestJob=t.STATUS_I18N=t.STATUS_CLASSES=void 0;var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(46),l=_interopRequireDefault(n),u=o(27),d=_interopRequireDefault(u),c=o(26),p=_interopRequireDefault(c),f=o(39),b=o(19),h=_interopRequireDefault(b),v=o(133),x=(t.STATUS_CLASSES={pending:"default",initializing:"primary",initialized:"info",processing:"info",done:"success","done-errors":"warning",failed:"danger",deleted:"danger"},t.STATUS_I18N={pending:(0,v._)("Pending"),initializing:(0,v._)("Initializing"),initialized:(0,v._)("Initialized"),processing:(0,v._)("Processing"),done:(0,v._)("Done"),"done-errors":(0,v._)("Done with errors"),failed:(0,v._)("Failed"),deleted:(0,v._)("Deleted")},t.HarvestJob=function(e){function HarvestJob(){return(0,r.default)(this,HarvestJob),(0,d.default)(this,(HarvestJob.__proto__||(0,a.default)(HarvestJob)).apply(this,arguments))}return(0,p.default)(HarvestJob,e),(0,l.default)(HarvestJob,[{key:"fetch",value:function(){return this.id?(this.loading=!0,this.$api("harvest.get_harvest_job",{ident:this.id},this.on_fetched)):h.default.error("Unable to fetch Job"),this}}]),HarvestJob}(f.Model));t.default=x},1300:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.harvest_backends=t.HarvestBackends=void 0;var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(27),l=_interopRequireDefault(n),u=o(26),d=_interopRequireDefault(u),c=o(39),p=t.HarvestBackends=function(e){function HarvestBackends(e){(0,r.default)(this,HarvestBackends);var t=(0,l.default)(this,(HarvestBackends.__proto__||(0,a.default)(HarvestBackends)).call(this,e));return t.$options.ns="harvest",t.$options.fetch="harvest_backends",t}return(0,d.default)(HarvestBackends,e),HarvestBackends}(c.List),f=t.harvest_backends=(new p).fetch();t.default=f},1302:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.STATUS_I18N=t.STATUS_CLASSES=void 0;var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(27),l=_interopRequireDefault(n),u=o(26),d=_interopRequireDefault(u),c=o(39),p=o(19),f=(_interopRequireDefault(p),
2
- o(133)),b=(t.STATUS_CLASSES={pending:"default",started:"info",done:"success",failed:"danger",skipped:"warning",archived:"warning"},t.STATUS_I18N={pending:(0,f._)("Pending"),started:(0,f._)("Started"),done:(0,f._)("Done"),failed:(0,f._)("Failed"),skipped:(0,f._)("Skipped"),archived:(0,f._)("Archived")},function(e){function HarvestItem(){return(0,r.default)(this,HarvestItem),(0,l.default)(this,(HarvestItem.__proto__||(0,a.default)(HarvestItem)).apply(this,arguments))}return(0,d.default)(HarvestItem,e),HarvestItem}(c.Model));t.default=b},1322:function(e,t,o){var s,a;s=o(1335),a=o(1359),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1334:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1302),a=o(318),i=_interopRequireDefault(a),r=o(323),n=_interopRequireDefault(r);t.default={components:{Modal:i.default,DatasetCard:n.default},props:{item:Object},events:{"dataset:clicked":function(e){document.location=e.page}},filters:{statusClass:function(e){return s.STATUS_CLASSES[e]},statusI18n:function(e){return s.STATUS_I18N[e]}}}},1335:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1199),a=o(1302),i=o(39),r=o(1039),n=_interopRequireDefault(r);t.default={name:"JobDetails",props:{job:s.HarvestJob,loading:{type:Boolean,default:void 0},empty:String,withSlot:{type:Boolean,default:!1}},components:{Datatable:n.default},data:function(){return{fields:[{label:this._("Remote ID"),key:"remote_id",sort:"remote_id",ellipsis:!0},{label:this._("Status"),key:"status",sort:"status",type:"label",width:100,label_type:function(e){return a.STATUS_CLASSES[e]},label_func:function(e){return a.STATUS_I18N[e]}}],p:new i.PageList({data:this.job.items})}},computed:{title:function(){return this.job.id?"Job "+this.job.id:"Job"}},events:{"datatable:item:click":function(e){this.$dispatch("harvest:job:item:selected",e)}},filters:{statusClass:function(e){return s.STATUS_CLASSES[e]||""},statusI18n:function(e){return s.STATUS_I18N[e]},count:function(e,t){return e?e.filter(function(e){return e.status===t}).length:"-"}},watch:{"job.items":function(e){this.p=new i.PageList({data:e})}}}},1336:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(1300),r=(_interopRequireDefault(i),o(1199)),n=_interopRequireDefault(r),l=o(1187),u=_interopRequireDefault(l),d=o(1322),c=_interopRequireDefault(d);t.default={name:"HarvestPreviewView",components:{JobWidget:c.default},props:{source:{type:Object,default:function(){return new u.default}},fromConfig:{type:Boolean,default:!1}},data:function(){return{job:new n.default,loading:!1}},computed:{empty:function(){return this.job.created?this._("No item found"):" "}},methods:{preview:function(){this.loading=!0,this.fromConfig?a.default.harvest.preview_harvest_source_config({payload:this.source},this.onPreviewFetch,this.$root.handleApiError):a.default.harvest.preview_harvest_source({ident:this.source.id},this.onPreviewFetch,this.$root.handleApiError)},onPreviewFetch:function(e){this.job.on_fetched(e),this.loading=!1}}}},1349:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".job-item-modal .modal-footer{text-align:center!important}","",{version:3,sources:["/./js/components/harvest/item.vue"],names:[],mappings:"AAAA,8BAA8B,2BAA4B,CAAC",file:"item.vue",sourcesContent:[".job-item-modal .modal-footer{text-align:center !important}"],sourceRoot:"webpack://"}])},1358:function(e,t){e.exports=" <modal class=job-item-modal v-ref:modal :class=\"{\n 'modal-success': item.status === 'done',\n 'modal-danger': item.status === 'failed',\n 'modal-warning': item.status === 'skipped'\n }\"> <div class=modal-body> <dl class=clearfix> <dt>{{ _('Remote ID') }}</dt> <dd>{{ item.remote_id }}</dd> <dt>{{ _('Started at') }}</dt> <dd>{{ item.started | dt }}</dd> <dt>{{ _('Ended at') }}</dt> <dd>{{ item.ended | dt }}</dd> <dt>{{ _('Status') }}</dt> <dd><span class=\"label label-{{ item.status | statusClass }}\">{{ item.status | statusI18n }}</span></dd> <dt v-if=item.dataset>{{ _('Dataset') }}</dt> <dd v-if=item.dataset> <dataset-card class=col-xs-12 clickable v-if=item.dataset.id :datasetid=item.dataset.id> </dataset-card> <dataset-card class=col-xs-12 clickable v-if=!item.dataset.id :dataset=item.dataset> </dataset-card> </dd> <dt v-if=item.errors.length>{{ _('Errors') }}</dt> <dd v-if=item.errors.length> <div v-for=\"error in item.errors\"> {{{error.message | markdown}}} <pre>{{error.details}}</pre> </div> </dd> </dl> </div> <footer class=modal-footer> <button type=button class=\"btn btn-outline btn-flat pointer\" @click=$refs.modal.close> {{ _('Close') }} </button> </footer> </modal> "},1359:function(e,t){e.exports=' <div> <datatable icon=cog :title=title bodyclass="table-responsive no-padding" :p=p :track=false :loading="loading !== undefined ? loading : job.loading" :fields=fields track=remote_id :empty=empty :tint="job.status | statusClass"> <div class=row slot=header> <div class=col-xs-12 :class="{\'col-lg-6\': job.created}" v-show=withSlot> <slot></slot> </div> <dl class="dl-horizontal col-xs-12" :class="{\'col-lg-6\': withSlot}" v-show=job.created> <dt>{{ _(\'Created at\') }}</dt> <dd>{{ job.created | dt }}</dd> <dt>{{ _(\'Ended at\') }}</dt> <dd>{{ job.ended | dt }}</dd> <dt>{{ _(\'Status\') }}</dt> <dd><span class="label label-{{ job.status | statusClass }}">{{ job.status | statusI18n }}</span></dd> <dt v-if="job.errors && job.errors.length">{{ _(\'Errors\') }}</dt> <dd v-if="job.errors && job.errors.length"> <div v-for="error in job.errors"> <p><strong>{{{error.message | markdown}}}</strong></p> <div v-if=error.details> <code><pre>{{error.details}}</pre></code> </div> </div> </dd> <dt v-if="job.items && job.items.length">{{ _(\'Items\') }}</dt> <dd v-if="job.items && job.items.length"> <span class=text-warning v-tooltip tooltip-placement=top :title="_(\'Number of skipped items\')">{{job.items | count \'skipped\'}}</span> / <span class=text-warning v-tooltip tooltip-placement=top :title="_(\'Number of archived items\')">{{job.items | count \'archived\'}}</span> / <span class=text-danger v-tooltip tooltip-placement=top :title="_(\'Number of failed items\')">{{job.items | count \'failed\'}}</span> / <span class=text-green v-tooltip tooltip-placement=top :title="_(\'Number of succeed items\')">{{job.items | count \'done\'}}</span> / <strong>{{job.items.length}}</strong> </dd> </dl> </div> </datatable> </div> '},1360:function(e,t){e.exports=' <div> <job-widget :job=job :loading=loading :empty=empty with-slot> <div class=text-center> <button class="btn btn-primary btn-flat" @click=preview> <span class="fa fa-cog"></span> {{ _(\'Preview\') }} </button> </div> </job-widget> </div> '},1376:function(e,t,o){var s,a;o(1390),s=o(1334),a=o(1358),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1377:function(e,t,o){var s,a;s=o(1336),a=o(1360),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1390:function(e,t,o){var s=o(1349);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1395:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(27),l=_interopRequireDefault(n),u=o(26),d=_interopRequireDefault(u),c=o(39),p=o(19),f=(_interopRequireDefault(p),function(e){function HarvestJobPage(e){(0,r.default)(this,HarvestJobPage);var t=(0,l.default)(this,(HarvestJobPage.__proto__||(0,a.default)(HarvestJobPage)).call(this,e));return t.$options.ns="harvest",t.$options.fetch="list_harvest_jobs",t}return(0,d.default)(HarvestJobPage,e),HarvestJobPage}(c.ModelPage));t.default=f},1430:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(318),r=_interopRequireDefault(i);t.default={components:{Modal:r.default},props:{source:Object},methods:{confirm:function(){var e=this;a.default.harvest.delete_harvest_source({ident:this.source.id},function(t){e.source.fetch(),e.$refs.modal.close()},this.$root.handleApiError)}}}},1432:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1199),a=o(1039),i=_interopRequireDefault(a),r=o(1395),n=_interopRequireDefault(r),l=["id","created","status"],u=20;t.default={components:{Datatable:i.default},props:{source:Object,current:null},data:function(){return{AVATAR_SIZE:u,title:this._("Jobs"),jobs:new n.default({query:{page_size:10},mask:l}),fields:[{label:this._("Date"),key:"created",sort:"created",type:"datetime"},{label:this._("Status"),key:"status",type:"label",label_type:function(e){return s.STATUS_CLASSES[e]},label_func:function(e){return s.STATUS_I18N[e]}}]}},events:{"datatable:item:click":function(e){return this.$dispatch("harvest:job:selected",e),!0}},watch:{"source.id":function(e){e&&this.jobs.fetch({ident:e})}}}},1433:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(318),r=_interopRequireDefault(i);t.default={components:{Modal:r.default},props:{source:Object},data:function(){return{comment:null}},methods:{validate:function(){this.perform_validation("accepted")},reject:function(){this.perform_validation("refused")},perform_validation:function(e){var t=this;return"refused"!==e||this.comment?(this.$els.group.className.replace("has-error",""),!this.$els.group.className.indexOf("has-success")>=0&&(this.$els.group.className+=" has-success"),void a.default.harvest.validate_harvest_source({ident:this.source.id,payload:{state:e,comment:this.comment}},function(e){t.source.on_fetched(e),t.$refs.modal.close()},this.$root.handleApiError)):(this.$els.group.className.replace("has-success",""),void(!this.$els.group.className.indexOf("has-error")>=0&&(this.$els.group.className+=" has-error")))}}}},1469:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1187),a=_interopRequireDefault(s),i=o(1199),r=_interopRequireDefault(i),n=o(1376),l=_interopRequireDefault(n),u=o(57),d=(_interopRequireDefault(u),o(1377)),c=_interopRequireDefault(d),p=o(1611),f=_interopRequireDefault(p),b=o(1322),h=_interopRequireDefault(b),v=o(1081),x=_interopRequireDefault(v),_=["id","name","url","owner","organization","backend","validation{state}","schedule","deleted"];t.default={name:"HarvestSourceView",components:{Preview:c.default,SourceWidget:f.default,JobWidget:h.default,Layout:x.default},data:function(){return{source:new a.default({mask:_}),current_job:null,current_item:null}},computed:{is_validation_pending:function(){return this.source&&this.source.validation&&"pending"===this.source.validation.state},should_validate:function(){return this.is_validation_pending&&this.$root.me.is_admin},display_warning:function(){return this.is_validation_pending&&!this.$root.me.is_admin},badges:function(){return this.source&&this.source.deleted?[{class:"danger",label:this._("Deleted")}]:[]},actions:function actions(){var actions=[{label:this._("Edit"),icon:"pencil",method:this.edit}];return this.$root.me.is_admin&&actions.push({label:this._("Scheduling"),icon:"history",method:this.schedule},{divider:!0}),actions.push({label:this._("Delete"),icon:"trash",method:this.confirm_delete}),actions}},events:{"harvest:job:selected":function(e){return this.current_job=new r.default({data:e}).fetch(),!0},"harvest:job:item:selected":function(e){return this.current_item=e,this.$root.$modal(l.default,{item:e}),!0}},methods:{edit:function(){this.$go({name:"harvester-edit",params:{oid:this.source.id}})},confirm_delete:function(){this.$root.$modal(o(1610),{source:this.source})},validate_source:function(){this.$root.$modal(o(1612),{source:this.source})},schedule:function(){this.$go({name:"harvester-schedule",params:{oid:this.source.id}})}},route:{data:function(){this.source.fetch(this.$route.params.oid)}}}},1527:function(e,t){e.exports=' <modal :title="_(\'Confirm deletion\')" class="modal-danger harvest-delete-modal" v-ref:modal> <div class=modal-body> <p class="lead text-center"> {{ _(\'You are about to delete this harvest source\') }} </p> <p class="lead text-center"> {{ _(\'Are you sure?\') }} </p> </div> <footer class="modal-footer text-center"> <button type=button class="btn btn-danger btn-flat pull-left" @click=$refs.modal.close> {{ _(\'Cancel\') }} </button> <button type=button class="btn btn-warning btn-flat" @click=confirm> {{ _(\'Confirm\') }} </button> </footer> </modal> '},1529:function(e,t){e.exports=" <div> <datatable :title=\"source.name || ''\" icon=tasks boxclass=harvest-jobs-widget :fields=fields :p=jobs :loading=\"source.loading || jobs.loading\" :empty=\"_('No job yet')\"> <header slot=header> {{{ source.description | markdown }}} <dl class=dl-horizontal> <dt v-if=source.owner>{{ _('Owner') }}</dt> <dd v-if=source.owner> <a v-link=\"{name:'user', params: {oid: source.owner.id}}\" :title=\"source.owner | display\"> <img class=avatar :src=\"source.owner | avatar_url AVATAR_SIZE\" :alt=\"source.owner | display\" :width=AVATAR_SIZE :height=AVATAR_SIZE> {{ source.owner | display }} </a> </dd> <dt v-if=source.organization>{{ _('Organization') }}</dt> <dd v-if=source.organization> <a v-link=\"{name:'organization', params: {oid: source.organization.id}}\" :title=\"source.organization | display\"> <img class=avatar :src=\"source.organization | logo_url AVATAR_SIZE\" :alt=\"source.organization | display\" :width=AVATAR_SIZE :height=AVATAR_SIZE> {{ source.organization | display }} </a> </dd> <dt>{{ _('Backend') }}</dt> <dd>{{ source.backend }}</dd> <dt>{{ _('URL') }}</dt> <dd>{{ source.url }}</dd> <dt>{{ _('Scheduling') }}</dt> <dd v-if=source.schedule>{{ source.schedule }}</dd> <dd v-else>{{ _('Not scheduled') }}</dd> <dt>{{ _('Jobs') }}</dt> <dd>{{ jobs.total }}</dd> </dl> </header> </datatable> </div> "},1530:function(e,t){e.exports=" <modal v-ref:modal :title=\"_('Harvest source validation')\" class=\"modal-info harvest-delete-modal\"> <div class=modal-body> <p> {{ _('You are about to validate (or not) this harvest source.') }} {{ _('It means that this source will be harvested regulary.') }} </p> <form role=form> <div class=form-group v-el:group> <label>{{ _('Reason') }}</label> <textarea class=form-control rows=3 v-el:comment :placeholder=\"_('Explain your validation')\" v-model=comment>\n </textarea> </div> </form></div> <footer class=\"modal-footer text-center\"> <button type=button class=\"btn btn-success btn-flat pull-left\" @click=validate> {{ _('Validate') }} </button> <button type=button class=\"btn btn-danger btn-flat\" @click=reject> {{ _('Reject') }} </button> </footer> </modal> "},1566:function(e,t){e.exports=" <div> <layout :title=\"source.name || ''\" :subtitle=\"source.backend || ''\" :actions=actions :badges=badges> <div class=\"alert alert-info\" v-if=should_validate> <div class=\"btn-toolbar pull-right\"> <div class=btn-group> <button class=\"btn btn-danger btn-xs\" @click=confirm_delete>{{ _('Delete') }}</button> </div> <div class=btn-group> <button class=\"btn btn-primary btn-xs\" @click=validate_source>{{ _('Validate') }}</button> </div> </div> {{ _('This harvest source has not been validated') }} </div> <div class=\"alert alert-warning\" v-if=display_warning> {{ _('This harvest source has not been validated') }} </div> <div class=row> <source-widget :source=source :class=\"{\n 'col-xs-12': !current_job,\n 'col-md-4': current_job,\n }\"> </source-widget> <job-widget v-if=current_job :job=current_job class=col-md-8> </job-widget> </div> <div class=row v-if=should_validate> <preview class=col-xs-12 :source=source></preview> </div> </layout> </div> "},1610:function(e,t,o){var s,a;s=o(1430),a=o(1527),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1611:function(e,t,o){var s,a;s=o(1432),a=o(1529),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1612:function(e,t,o){var s,a;s=o(1433),a=o(1530),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)}});
3
- //# sourceMappingURL=18.ad41fb75ac4226e1f3ce.js.map
2
+ o(133)),b=(t.STATUS_CLASSES={pending:"default",started:"info",done:"success",failed:"danger",skipped:"warning",archived:"warning"},t.STATUS_I18N={pending:(0,f._)("Pending"),started:(0,f._)("Started"),done:(0,f._)("Done"),failed:(0,f._)("Failed"),skipped:(0,f._)("Skipped"),archived:(0,f._)("Archived")},function(e){function HarvestItem(){return(0,r.default)(this,HarvestItem),(0,l.default)(this,(HarvestItem.__proto__||(0,a.default)(HarvestItem)).apply(this,arguments))}return(0,d.default)(HarvestItem,e),HarvestItem}(c.Model));t.default=b},1322:function(e,t,o){var s,a;s=o(1335),a=o(1359),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1334:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1302),a=o(318),i=_interopRequireDefault(a),r=o(323),n=_interopRequireDefault(r);t.default={components:{Modal:i.default,DatasetCard:n.default},props:{item:Object},events:{"dataset:clicked":function(e){document.location=e.page}},filters:{statusClass:function(e){return s.STATUS_CLASSES[e]},statusI18n:function(e){return s.STATUS_I18N[e]}}}},1335:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1199),a=o(1302),i=o(39),r=o(1039),n=_interopRequireDefault(r);t.default={name:"JobDetails",props:{job:s.HarvestJob,loading:{type:Boolean,default:void 0},empty:String,withSlot:{type:Boolean,default:!1}},components:{Datatable:n.default},data:function(){var e=this;return{fields:[{label:this._("Remote ID"),key:"remote_id",sort:"remote_id",ellipsis:!0},{label:this._("Logs"),key:function(t){return t.logs.length?t.logs.length+" "+e._("logs"):""},width:80},{label:this._("Status"),key:"status",sort:"status",type:"label",width:100,label_type:function(e){return a.STATUS_CLASSES[e]},label_func:function(e){return a.STATUS_I18N[e]}}],p:new i.PageList({data:this.job.items})}},computed:{title:function(){return this.job.id?"Job "+this.job.id:"Job"}},events:{"datatable:item:click":function(e){this.$dispatch("harvest:job:item:selected",e)}},filters:{statusClass:function(e){return s.STATUS_CLASSES[e]||""},statusI18n:function(e){return s.STATUS_I18N[e]},count:function(e,t){return e?e.filter(function(e){return e.status===t}).length:"-"}},watch:{"job.items":function(e){this.p=new i.PageList({data:e})}}}},1336:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(1300),r=(_interopRequireDefault(i),o(1199)),n=_interopRequireDefault(r),l=o(1187),u=_interopRequireDefault(l),d=o(1322),c=_interopRequireDefault(d);t.default={name:"HarvestPreviewView",components:{JobWidget:c.default},props:{source:{type:Object,default:function(){return new u.default}},fromConfig:{type:Boolean,default:!1}},data:function(){return{job:new n.default,loading:!1}},computed:{empty:function(){return this.job.created?this._("No item found"):" "}},methods:{preview:function(){this.loading=!0,this.fromConfig?a.default.harvest.preview_harvest_source_config({payload:this.source},this.onPreviewFetch,this.$root.handleApiError):a.default.harvest.preview_harvest_source({ident:this.source.id},this.onPreviewFetch,this.$root.handleApiError)},onPreviewFetch:function(e){this.job.on_fetched(e),this.loading=!1}}}},1349:function(e,t,o){t=e.exports=o(37)(),t.push([e.id,".job-item-modal .modal-footer{text-align:center!important}","",{version:3,sources:["/./js/components/harvest/item.vue"],names:[],mappings:"AAAA,8BAA8B,2BAA4B,CAAC",file:"item.vue",sourcesContent:[".job-item-modal .modal-footer{text-align:center !important}"],sourceRoot:"webpack://"}])},1358:function(e,t){e.exports=" <modal class=job-item-modal v-ref:modal :class=\"{\n 'modal-success': item.status === 'done',\n 'modal-danger': item.status === 'failed',\n 'modal-warning': item.status === 'skipped'\n }\"> <div class=modal-body> <dl class=clearfix> <dt>{{ _('Remote ID') }}</dt> <dd>{{ item.remote_id }}</dd> <dt>{{ _('Started at') }}</dt> <dd>{{ item.started | dt }}</dd> <dt>{{ _('Ended at') }}</dt> <dd>{{ item.ended | dt }}</dd> <dt>{{ _('Status') }}</dt> <dd><span class=\"label label-{{ item.status | statusClass }}\">{{ item.status | statusI18n }}</span></dd> <dt v-if=item.dataset>{{ _('Dataset') }}</dt> <dd v-if=item.dataset> <dataset-card class=col-xs-12 clickable v-if=item.dataset.id :datasetid=item.dataset.id> </dataset-card> <dataset-card class=col-xs-12 clickable v-if=!item.dataset.id :dataset=item.dataset> </dataset-card> </dd> <dt v-if=item.errors.length>{{ _('Errors') }}</dt> <dd v-if=item.errors.length> <div v-for=\"error in item.errors\"> {{{error.message | markdown}}} <pre>{{error.details}}</pre> </div> </dd> <dt v-if=item.logs.length>{{ _('Logs') }}</dt> <dd v-if=item.logs.length> <div v-for=\"log in item.logs\"> {{log.level}} <div>{{log.message}}</div> </div> </dd> </dl> </div> <footer class=modal-footer> <button type=button class=\"btn btn-outline btn-flat pointer\" @click=$refs.modal.close> {{ _('Close') }} </button> </footer> </modal> "},1359:function(e,t){e.exports=' <div> <datatable icon=cog :title=title bodyclass="table-responsive no-padding" :p=p :track=false :loading="loading !== undefined ? loading : job.loading" :fields=fields track=remote_id :empty=empty :tint="job.status | statusClass"> <div class=row slot=header> <div class=col-xs-12 :class="{\'col-lg-6\': job.created}" v-show=withSlot> <slot></slot> </div> <dl class="dl-horizontal col-xs-12" :class="{\'col-lg-6\': withSlot}" v-show=job.created> <dt>{{ _(\'Created at\') }}</dt> <dd>{{ job.created | dt }}</dd> <dt>{{ _(\'Ended at\') }}</dt> <dd>{{ job.ended | dt }}</dd> <dt>{{ _(\'Status\') }}</dt> <dd><span class="label label-{{ job.status | statusClass }}">{{ job.status | statusI18n }}</span></dd> <dt v-if="job.errors && job.errors.length">{{ _(\'Errors\') }}</dt> <dd v-if="job.errors && job.errors.length"> <div v-for="error in job.errors"> <p><strong>{{{error.message | markdown}}}</strong></p> <div v-if=error.details> <code><pre>{{error.details}}</pre></code> </div> </div> </dd> <dt v-if="job.items && job.items.length">{{ _(\'Items\') }}</dt> <dd v-if="job.items && job.items.length"> <span class=text-warning v-tooltip tooltip-placement=top :title="_(\'Number of skipped items\')">{{job.items | count \'skipped\'}}</span> / <span class=text-warning v-tooltip tooltip-placement=top :title="_(\'Number of archived items\')">{{job.items | count \'archived\'}}</span> / <span class=text-danger v-tooltip tooltip-placement=top :title="_(\'Number of failed items\')">{{job.items | count \'failed\'}}</span> / <span class=text-green v-tooltip tooltip-placement=top :title="_(\'Number of succeed items\')">{{job.items | count \'done\'}}</span> / <strong>{{job.items.length}}</strong> </dd> </dl> </div> </datatable> </div> '},1360:function(e,t){e.exports=' <div> <job-widget :job=job :loading=loading :empty=empty with-slot> <div class=text-center> <button class="btn btn-primary btn-flat" @click=preview> <span class="fa fa-cog"></span> {{ _(\'Preview\') }} </button> </div> </job-widget> </div> '},1376:function(e,t,o){var s,a;o(1390),s=o(1334),a=o(1358),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1377:function(e,t,o){var s,a;s=o(1336),a=o(1360),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1390:function(e,t,o){var s=o(1349);"string"==typeof s&&(s=[[e.id,s,""]]);o(38)(s,{sourceMap:!0});s.locals&&(e.exports=s.locals)},1395:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(21),a=_interopRequireDefault(s),i=o(20),r=_interopRequireDefault(i),n=o(27),l=_interopRequireDefault(n),u=o(26),d=_interopRequireDefault(u),c=o(39),p=o(19),f=(_interopRequireDefault(p),function(e){function HarvestJobPage(e){(0,r.default)(this,HarvestJobPage);var t=(0,l.default)(this,(HarvestJobPage.__proto__||(0,a.default)(HarvestJobPage)).call(this,e));return t.$options.ns="harvest",t.$options.fetch="list_harvest_jobs",t}return(0,d.default)(HarvestJobPage,e),HarvestJobPage}(c.ModelPage));t.default=f},1430:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(318),r=_interopRequireDefault(i);t.default={components:{Modal:r.default},props:{source:Object},methods:{confirm:function(){var e=this;a.default.harvest.delete_harvest_source({ident:this.source.id},function(t){e.source.fetch(),e.$refs.modal.close()},this.$root.handleApiError)}}}},1432:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1199),a=o(1039),i=_interopRequireDefault(a),r=o(1395),n=_interopRequireDefault(r),l=["id","created","status"],u=20;t.default={components:{Datatable:i.default},props:{source:Object,current:null},data:function(){return{AVATAR_SIZE:u,title:this._("Jobs"),jobs:new n.default({query:{page_size:10},mask:l}),fields:[{label:this._("Date"),key:"created",sort:"created",type:"datetime"},{label:this._("Status"),key:"status",type:"label",label_type:function(e){return s.STATUS_CLASSES[e]},label_func:function(e){return s.STATUS_I18N[e]}}]}},events:{"datatable:item:click":function(e){return this.$dispatch("harvest:job:selected",e),!0}},watch:{"source.id":function(e){e&&this.jobs.fetch({ident:e})}}}},1433:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(99),a=_interopRequireDefault(s),i=o(318),r=_interopRequireDefault(i);t.default={components:{Modal:r.default},props:{source:Object},data:function(){return{comment:null}},methods:{validate:function(){this.perform_validation("accepted")},reject:function(){this.perform_validation("refused")},perform_validation:function(e){var t=this;return"refused"!==e||this.comment?(this.$els.group.className.replace("has-error",""),!this.$els.group.className.indexOf("has-success")>=0&&(this.$els.group.className+=" has-success"),void a.default.harvest.validate_harvest_source({ident:this.source.id,payload:{state:e,comment:this.comment}},function(e){t.source.on_fetched(e),t.$refs.modal.close()},this.$root.handleApiError)):(this.$els.group.className.replace("has-success",""),void(!this.$els.group.className.indexOf("has-error")>=0&&(this.$els.group.className+=" has-error")))}}}},1469:function(e,t,o){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var s=o(1187),a=_interopRequireDefault(s),i=o(1199),r=_interopRequireDefault(i),n=o(1376),l=_interopRequireDefault(n),u=o(57),d=(_interopRequireDefault(u),o(1377)),c=_interopRequireDefault(d),p=o(1611),f=_interopRequireDefault(p),b=o(1322),h=_interopRequireDefault(b),v=o(1081),x=_interopRequireDefault(v),_=["id","name","url","owner","organization","backend","validation{state}","schedule","deleted"];t.default={name:"HarvestSourceView",components:{Preview:c.default,SourceWidget:f.default,JobWidget:h.default,Layout:x.default},data:function(){return{source:new a.default({mask:_}),current_job:null,current_item:null}},computed:{is_validation_pending:function(){return this.source&&this.source.validation&&"pending"===this.source.validation.state},should_validate:function(){return this.is_validation_pending&&this.$root.me.is_admin},display_warning:function(){return this.is_validation_pending&&!this.$root.me.is_admin},badges:function(){return this.source&&this.source.deleted?[{class:"danger",label:this._("Deleted")}]:[]},actions:function actions(){var actions=[{label:this._("Edit"),icon:"pencil",method:this.edit}];return this.$root.me.is_admin&&actions.push({label:this._("Scheduling"),icon:"history",method:this.schedule},{divider:!0}),actions.push({label:this._("Delete"),icon:"trash",method:this.confirm_delete}),actions}},events:{"harvest:job:selected":function(e){return this.current_job=new r.default({data:e}).fetch(),!0},"harvest:job:item:selected":function(e){return this.current_item=e,this.$root.$modal(l.default,{item:e}),!0}},methods:{edit:function(){this.$go({name:"harvester-edit",params:{oid:this.source.id}})},confirm_delete:function(){this.$root.$modal(o(1610),{source:this.source})},validate_source:function(){this.$root.$modal(o(1612),{source:this.source})},schedule:function(){this.$go({name:"harvester-schedule",params:{oid:this.source.id}})}},route:{data:function(){this.source.fetch(this.$route.params.oid)}}}},1527:function(e,t){e.exports=' <modal :title="_(\'Confirm deletion\')" class="modal-danger harvest-delete-modal" v-ref:modal> <div class=modal-body> <p class="lead text-center"> {{ _(\'You are about to delete this harvest source\') }} </p> <p class="lead text-center"> {{ _(\'Are you sure?\') }} </p> </div> <footer class="modal-footer text-center"> <button type=button class="btn btn-danger btn-flat pull-left" @click=$refs.modal.close> {{ _(\'Cancel\') }} </button> <button type=button class="btn btn-warning btn-flat" @click=confirm> {{ _(\'Confirm\') }} </button> </footer> </modal> '},1529:function(e,t){e.exports=" <div> <datatable :title=\"source.name || ''\" icon=tasks boxclass=harvest-jobs-widget :fields=fields :p=jobs :loading=\"source.loading || jobs.loading\" :empty=\"_('No job yet')\"> <header slot=header> {{{ source.description | markdown }}} <dl class=dl-horizontal> <dt v-if=source.owner>{{ _('Owner') }}</dt> <dd v-if=source.owner> <a v-link=\"{name:'user', params: {oid: source.owner.id}}\" :title=\"source.owner | display\"> <img class=avatar :src=\"source.owner | avatar_url AVATAR_SIZE\" :alt=\"source.owner | display\" :width=AVATAR_SIZE :height=AVATAR_SIZE> {{ source.owner | display }} </a> </dd> <dt v-if=source.organization>{{ _('Organization') }}</dt> <dd v-if=source.organization> <a v-link=\"{name:'organization', params: {oid: source.organization.id}}\" :title=\"source.organization | display\"> <img class=avatar :src=\"source.organization | logo_url AVATAR_SIZE\" :alt=\"source.organization | display\" :width=AVATAR_SIZE :height=AVATAR_SIZE> {{ source.organization | display }} </a> </dd> <dt>{{ _('Backend') }}</dt> <dd>{{ source.backend }}</dd> <dt>{{ _('URL') }}</dt> <dd>{{ source.url }}</dd> <dt>{{ _('Scheduling') }}</dt> <dd v-if=source.schedule>{{ source.schedule }}</dd> <dd v-else>{{ _('Not scheduled') }}</dd> <dt>{{ _('Jobs') }}</dt> <dd>{{ jobs.total }}</dd> </dl> </header> </datatable> </div> "},1530:function(e,t){e.exports=" <modal v-ref:modal :title=\"_('Harvest source validation')\" class=\"modal-info harvest-delete-modal\"> <div class=modal-body> <p> {{ _('You are about to validate (or not) this harvest source.') }} {{ _('It means that this source will be harvested regulary.') }} </p> <form role=form> <div class=form-group v-el:group> <label>{{ _('Reason') }}</label> <textarea class=form-control rows=3 v-el:comment :placeholder=\"_('Explain your validation')\" v-model=comment>\n </textarea> </div> </form></div> <footer class=\"modal-footer text-center\"> <button type=button class=\"btn btn-success btn-flat pull-left\" @click=validate> {{ _('Validate') }} </button> <button type=button class=\"btn btn-danger btn-flat\" @click=reject> {{ _('Reject') }} </button> </footer> </modal> "},1566:function(e,t){e.exports=" <div> <layout :title=\"source.name || ''\" :subtitle=\"source.backend || ''\" :actions=actions :badges=badges> <div class=\"alert alert-info\" v-if=should_validate> <div class=\"btn-toolbar pull-right\"> <div class=btn-group> <button class=\"btn btn-danger btn-xs\" @click=confirm_delete>{{ _('Delete') }}</button> </div> <div class=btn-group> <button class=\"btn btn-primary btn-xs\" @click=validate_source>{{ _('Validate') }}</button> </div> </div> {{ _('This harvest source has not been validated') }} </div> <div class=\"alert alert-warning\" v-if=display_warning> {{ _('This harvest source has not been validated') }} </div> <div class=row> <source-widget :source=source :class=\"{\n 'col-xs-12': !current_job,\n 'col-md-4': current_job,\n }\"> </source-widget> <job-widget v-if=current_job :job=current_job class=col-md-8> </job-widget> </div> <div class=row v-if=should_validate> <preview class=col-xs-12 :source=source></preview> </div> </layout> </div> "},1610:function(e,t,o){var s,a;s=o(1430),a=o(1527),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1611:function(e,t,o){var s,a;s=o(1432),a=o(1529),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)},1612:function(e,t,o){var s,a;s=o(1433),a=o(1530),e.exports=s||{},e.exports.__esModule&&(e.exports=e.exports.default),a&&(("function"==typeof e.exports?e.exports.options||(e.exports.options={}):e.exports).template=a)}});
3
+ //# sourceMappingURL=18.134a90750da131794993.js.map