@@ -512,6 +614,7 @@
ThisPage.methods.newProfile = function() {
this.editingProfile = {}
this.editingConsumer = null
+ this.editingWatcherKwargs = false
this.editingProfileKey = null
this.editingProfileWatcherSpec = null
@@ -523,6 +626,7 @@
this.editingProfileWatcherConsumesSelf = false
this.editingProfileEnabled = true
this.editingProfilePendingConsumers = []
+ this.editingProfilePendingWatcherKwargs = []
this.editProfileShowDialog = true
this.$nextTick(() => {
@@ -533,6 +637,7 @@
ThisPage.methods.editProfile = function(row) {
this.editingProfile = row
this.editingConsumer = null
+ this.editingWatcherKwargs = false
this.editingProfileKey = row.key
this.editingProfileWatcherSpec = row.watcher_spec
@@ -544,6 +649,16 @@
this.editingProfileWatcherConsumesSelf = row.watcher_consumes_self
this.editingProfileEnabled = row.enabled
+ this.editingProfilePendingWatcherKwargs = []
+ for (let kwarg of row.watcher_kwargs_data) {
+ let pending = {
+ original_key: kwarg.key,
+ key: kwarg.key,
+ value: kwarg.value,
+ }
+ this.editingProfilePendingWatcherKwargs.push(pending)
+ }
+
this.editingProfilePendingConsumers = []
for (let consumer of row.consumers_data) {
let pending = {
@@ -563,6 +678,46 @@
this.editProfileShowDialog = true
}
+ ThisPageData.editingWatcherKwargs = false
+ ThisPageData.editingProfilePendingWatcherKwargs = []
+ ThisPageData.editingWatcherKwarg = null
+ ThisPageData.editingWatcherKwargKey = null
+ ThisPageData.editingWatcherKwargValue = null
+
+ ThisPage.methods.newWatcherKwarg = function() {
+ this.editingWatcherKwargKey = null
+ this.editingWatcherKwargValue = null
+ this.editingWatcherKwarg = {key: null, value: null}
+ this.$nextTick(() => {
+ this.$refs.watcherKwargKey.focus()
+ })
+ }
+
+ ThisPage.methods.editProfileWatcherKwarg = function(row) {
+ this.editingWatcherKwargKey = row.key
+ this.editingWatcherKwargValue = row.value
+ this.editingWatcherKwarg = row
+ }
+
+ ThisPage.methods.updateWatcherKwarg = function() {
+ let pending = this.editingWatcherKwarg
+ let isNew = !pending.key
+
+ pending.key = this.editingWatcherKwargKey
+ pending.value = this.editingWatcherKwargValue
+
+ if (isNew) {
+ this.editingProfilePendingWatcherKwargs.push(pending)
+ }
+
+ this.editingWatcherKwarg = null
+ }
+
+ ThisPage.methods.deleteProfileWatcherKwarg = function(row) {
+ let i = this.editingProfilePendingWatcherKwargs.indexOf(row)
+ this.editingProfilePendingWatcherKwargs.splice(i, 1)
+ }
+
ThisPage.methods.findOriginalConsumer = function(key) {
for (let consumer of this.editingProfile.consumers_data) {
if (consumer.key == key) {
@@ -590,11 +745,39 @@
row.enabled = this.editingProfileEnabled
// track which keys still belong (persistent)
- let persistent = []
+ let persistentWatcherKwargs = []
+
+ // transfer pending data to profile watcher kwargs
+ for (let pending of this.editingProfilePendingWatcherKwargs) {
+ persistentWatcherKwargs.push(pending.key)
+ if (pending.original_key) {
+ let kwarg = this.findOriginalWatcherKwarg(pending.original_key)
+ kwarg.key = pending.key
+ kwarg.value = pending.value
+ } else {
+ row.watcher_kwargs_data.push(pending)
+ }
+ }
+
+ // remove any kwargs not being persisted
+ let removeWatcherKwargs = []
+ for (let kwarg of row.watcher_kwargs_data) {
+ let i = persistentWatcherKwargs.indexOf(kwarg.key)
+ if (i < 0) {
+ removeWatcherKwargs.push(kwarg)
+ }
+ }
+ for (let kwarg of removeWatcherKwargs) {
+ let i = row.watcher_kwargs_data.indexOf(kwarg)
+ row.watcher_kwargs_data.splice(i, 1)
+ }
+
+ // track which keys still belong (persistent)
+ let persistentConsumers = []
// transfer pending data to profile consumers
for (let pending of this.editingProfilePendingConsumers) {
- persistent.push(pending.key)
+ persistentConsumers.push(pending.key)
if (pending.original_key) {
let consumer = this.findOriginalConsumer(pending.original_key)
consumer.key = pending.key
@@ -611,14 +794,14 @@
}
// remove any consumers not being persisted
- let remove = []
+ let removeConsumers = []
for (let consumer of row.consumers_data) {
- let i = persistent.indexOf(consumer.key)
+ let i = persistentConsumers.indexOf(consumer.key)
if (i < 0) {
- remove.push(consumer)
+ removeConsumers.push(consumer)
}
}
- for (let consumer of remove) {
+ for (let consumer of removeConsumers) {
let i = row.consumers_data.indexOf(consumer)
row.consumers_data.splice(i, 1)
}
diff --git a/tailbone/views/asgi/__init__.py b/tailbone/views/asgi/__init__.py
index 68300a44..d0c12d9c 100644
--- a/tailbone/views/asgi/__init__.py
+++ b/tailbone/views/asgi/__init__.py
@@ -86,10 +86,10 @@ class WebsocketView(object):
# use given db session, or make a new one
with app.short_session(config=self.rattail_config,
- session=session):
+ session=session) as s:
# load user proper
- return session.query(model.User).get(user_uuid)
+ return s.query(model.User).get(user_uuid)
def get_user_session(self, scope):
settings = self.registry.settings
diff --git a/tailbone/views/datasync.py b/tailbone/views/datasync.py
index 0f198795..c40d6aa2 100644
--- a/tailbone/views/datasync.py
+++ b/tailbone/views/datasync.py
@@ -202,6 +202,9 @@ class DataSyncThreadView(MasterView):
'watcher_retry_delay': profile.watcher.retry_delay,
'watcher_default_runas': profile.watcher.default_runas,
'watcher_consumes_self': profile.watcher.consumes_self,
+ 'watcher_kwargs_data': [{'key': key,
+ 'value': profile.watcher_kwargs[key]}
+ for key in sorted(profile.watcher_kwargs)],
# 'notes': None, # TODO
'enabled': profile.enabled,
}
@@ -227,8 +230,7 @@ class DataSyncThreadView(MasterView):
return {
'profiles': profiles,
'profiles_data': profiles_data,
- 'use_profile_settings': self.rattail_config.getbool(
- 'rattail.datasync', 'use_profile_settings'),
+ 'use_profile_settings': self.datasync_handler.should_use_profile_settings(),
'supervisor_process_name': self.rattail_config.get(
'rattail.datasync', 'supervisor_process_name'),
'restart_command': self.rattail_config.get(
@@ -265,6 +267,13 @@ class DataSyncThreadView(MasterView):
'value': profile['watcher_default_runas']},
])
+ for kwarg in profile['watcher_kwargs_data']:
+ settings.append({
+ 'name': 'rattail.datasync.{}.watcher.kwarg.{}'.format(
+ pkey, kwarg['key']),
+ 'value': kwarg['value'],
+ })
+
consumers = []
if profile['watcher_consumes_self']:
consumers = ['self']
@@ -298,11 +307,13 @@ class DataSyncThreadView(MasterView):
settings.append({'name': 'rattail.datasync.watch',
'value': ', '.join(watch)})
- settings.append({'name': 'rattail.datasync.supervisor_process_name',
- 'value': data['supervisor_process_name']})
+ if data['supervisor_process_name']:
+ settings.append({'name': 'rattail.datasync.supervisor_process_name',
+ 'value': data['supervisor_process_name']})
- settings.append({'name': 'tailbone.datasync.restart',
- 'value': data['restart_command']})
+ if data['restart_command']:
+ settings.append({'name': 'tailbone.datasync.restart',
+ 'value': data['restart_command']})
return settings