Skip to content

Commit 81fa7fb

Browse files
committed
Add rule.disabled support
1 parent 1678dff commit 81fa7fb

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

api/jobs/rules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ def get_rules_for_container(db, container):
267267
return get_rules_for_container(db, project)
268268
else:
269269
# Assume container is a project, or a collection (which currently cannot have a rules property)
270-
result = list(db.project_rules.find({'project_id': str(container['_id'])}))
270+
result = list(db.project_rules.find({'project_id': str(container['_id']), 'disabled': {'$ne': True}}))
271271

272272
if not result:
273273
return []

raml/schemas/definitions/rule.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,21 @@
3232
"alg": { "type": "string" },
3333
"name": { "type": "string" },
3434
"any": { "$ref": "#/definitions/rule-items" },
35-
"all": { "$ref": "#/definitions/rule-items" }
35+
"all": { "$ref": "#/definitions/rule-items" },
36+
"disabled": { "type": "boolean" }
3637
},
3738
"additionalProperties": false
3839
},
3940

4041
"rule-output": {
4142
"type": "object",
4243
"properties": {
43-
"_id": { "type": "string" },
44-
"alg": { "type": "string" },
45-
"name": { "type": "string" },
46-
"any": { "$ref": "#/definitions/rule-items" },
47-
"all": { "$ref": "#/definitions/rule-items" }
44+
"_id": { "type": "string" },
45+
"alg": { "type": "string" },
46+
"name": { "type": "string" },
47+
"any": { "$ref": "#/definitions/rule-items" },
48+
"all": { "$ref": "#/definitions/rule-items" },
49+
"disabled": { "type": "boolean" }
4850
}
4951
}
5052
}

tests/integration_tests/python/test_rules.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,41 @@ def test_rules(randstr, data_builder, file_form, as_root, as_admin, with_user, a
439439
assert r.ok
440440

441441
# TODO add and test 'new-style' rules
442+
443+
444+
def test_disabled_rules(randstr, data_builder, api_db, as_admin, file_form):
445+
# Create gear, project and *disabled* rule triggering on any csv (once enabled)
446+
gear_name = randstr()
447+
gear = data_builder.create_gear(gear={'name': gear_name, 'version': '0.0.1'})
448+
project = data_builder.create_project()
449+
r = as_admin.post('/projects/' + project + '/rules', json={
450+
'alg': gear_name,
451+
'name': 'csv-job-trigger-rule',
452+
'any': [],
453+
'all': [{'type': 'file.type', 'value': 'tabular data'}],
454+
'disabled': True,
455+
})
456+
assert r.ok
457+
rule = r.json()['_id']
458+
459+
# Upload 1st file (while rule is disabled)
460+
r = as_admin.post('/projects/' + project + '/files', files=file_form('test1.csv'))
461+
assert r.ok
462+
463+
# Verify that no jobs were created
464+
gear_jobs = [job for job in api_db.jobs.find({'gear_id': gear})]
465+
assert len(gear_jobs) == 0
466+
467+
# Enable rule
468+
r = as_admin.put('/projects/' + project + '/rules/' + rule, json={'disabled': False})
469+
assert r.ok
470+
471+
# Upload 1st file (rule is now enabled)
472+
r = as_admin.post('/projects/' + project + '/files', files=file_form('test2.csv'))
473+
assert r.ok
474+
475+
# Verify that a job was created
476+
gear_jobs = [job for job in api_db.jobs.find({'gear_id': gear})]
477+
assert len(gear_jobs) == 1
478+
assert len(gear_jobs[0]['inputs']) == 1
479+
assert gear_jobs[0]['inputs'][0]['name'] == 'test2.csv'

0 commit comments

Comments
 (0)