Ensure steps and schedules can be created in empty jobs. Fixes #1878

pull/3/head
Dave Page 2016-10-21 16:00:23 +01:00
parent e6d018c44f
commit ef0d26c294
5 changed files with 66 additions and 43 deletions

View File

@ -219,8 +219,8 @@ class JobScheduleView(PGChildNodeView):
res = []
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jscid = jscid,
jid = jid
jscid=jscid,
jid=jid
)
status, result = self.conn.execute_2darray(sql)
@ -298,13 +298,22 @@ class JobScheduleView(PGChildNodeView):
jid: Job ID
"""
data = {}
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
if request.args:
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
else:
data = json.loads(request.data.decode())
# convert python list literal to postgres array literal.
data['jscminutes'] = data['jscminutes'].replace("[", "{").replace("]", "}")
data['jschours'] = data['jschours'].replace("[", "{").replace("]", "}")
data['jscweekdays'] = data['jscweekdays'].replace("[", "{").replace("]", "}")
data['jscmonthdays'] = data['jscmonthdays'].replace("[", "{").replace("]", "}")
data['jscmonths'] = data['jscmonths'].replace("[", "{").replace("]", "}")
sql = render_template(
"/".join([self.template_path, 'create.sql']),
@ -327,8 +336,8 @@ class JobScheduleView(PGChildNodeView):
self.conn.execute_void('END')
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jscid = res,
jid = jid
jscid=res,
jid=jid
)
status, res = self.conn.execute_2darray(sql)
@ -357,17 +366,36 @@ class JobScheduleView(PGChildNodeView):
jscid: JobSchedule ID
"""
data = {}
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
if request.args:
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
else:
data = json.loads(request.data.decode())
# convert python list literal to postgres array literal.
if 'jscminutes' in data:
data['jscminutes'] = data['jscminutes'].replace("[", "{").replace("]", "}")
if 'jschours' in data:
data['jschours'] = data['jschours'].replace("[", "{").replace("]", "}")
if 'jscweekdays' in data:
data['jscweekdays'] = data['jscweekdays'].replace("[", "{").replace("]", "}")
if 'jscmonthdays' in data:
data['jscmonthdays'] = data['jscmonthdays'].replace("[", "{").replace("]", "}")
if 'jscmonths' in data:
data['jscmonths'] = data['jscmonths'].replace("[", "{").replace("]", "}")
sql = render_template(
"/".join([self.template_path, 'update.sql']),
jid=jid,
jscid=jscid,
data=data
)
@ -378,8 +406,8 @@ class JobScheduleView(PGChildNodeView):
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jscid = jscid,
jid = jid
jscid=jscid,
jid=jid
)
status, res = self.conn.execute_2darray(sql)

View File

@ -184,7 +184,7 @@ function($, _, S, pgAdmin, moment, pgBrowser, Alertify, Backform) {
parent_type: 'pga_job',
type: 'pga_schedule',
dialogHelp: '{{ url_for('help.static', filename='pgagent_jobs.html') }}',
hasSQL: false,
hasSQL: true,
hasDepends: false,
hasStatistics: false,
canDrop: function(node) {

View File

@ -232,8 +232,8 @@ SELECT EXISTS(
res = []
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jstid = jstid,
jid = jid
jstid=jstid,
jid=jid
)
status, result = self.conn.execute_2darray(sql)
@ -315,13 +315,16 @@ SELECT EXISTS(
jid: Job ID
"""
data = {}
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
if request.args:
for k, v in request.args.items():
try:
data[k] = json.loads(
v.decode('utf-8') if hasattr(v, 'decode') else v
)
except ValueError:
data[k] = v
else:
data = json.loads(request.data.decode())
sql = render_template(
"/".join([self.template_path, 'create.sql']),
@ -337,8 +340,8 @@ SELECT EXISTS(
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jstid = res,
jid = jid
jstid=res,
jid=jid
)
status, res = self.conn.execute_2darray(sql)
@ -417,8 +420,8 @@ SELECT EXISTS(
sql = render_template(
"/".join([self.template_path, 'nodes.sql']),
jstid = jstid,
jid = jid
jstid=jstid,
jid=jid
)
status, res = self.conn.execute_2darray(sql)

View File

@ -23,7 +23,7 @@ INSERT INTO pgagent.pga_schedule(
{{ data.jscmonthdays|qtLiteral }}::boolean[],
-- Months
{{ data.jscmonths|qtLiteral }}::boolean[]
) RETURNING jscid INTO scid;{% if 'jscexceptions' in data %}
) RETURNING jscid {% if not jid %}INTO scid;{% endif %}{% if 'jscexceptions' in data %}
{% for exc in data.jscexceptions %}
{{ EXCEPTIONS.INSERT(None, exc) }}{% endfor %}{% endif %}

View File

@ -1,10 +1,2 @@
{% import 'macros/pga_schedule.macros' as SCHEDULE %}
DO $$
DECLARE
jscid integer;
BEGIN
{{ SCHEDULE.INSERT(jid, data) }}
END
$$ LANGUAGE 'plpgsql';{% if fetch_id %}
{{ SCHEDULE.FETCH_CURRENT() }}{% endif %}