Example #1
0
def test_delete(requireMocking):
    # add test sample
    tm = TableManager()
    table = tm.get_tracking_table()
    table.put_item(
        Item={
            "id": "test-to-delete",
            "experiment": "unknown",
            "sample": "test-to-delete",
            "status": [{
                "time": 1524772162698,
                "value": "PROCESSING"
            }]
        })

    # check it's there
    result = get.get({"pathParameters": {"sample": "test-to-delete"}}, {})

    assert json.loads(result['body'])["id"] == "test-to-delete"

    # call deletion
    result = delete.delete({"pathParameters": {
        "sample": "test-to-delete"
    }}, {})

    # assert test data is gone
    assert result['statusCode'] == 204
    assert get.get({"pathParameters": {
        "sample": "test-to-delete"
    }}, {})['statusCode'] == 404
Example #2
0
def delete(events, context):
    """deletes the specific element from the storage"""

    logger.info("received event: " + json.dumps(events, indent=2))

    if 'pathParameters' in events:
        if 'sample' in events['pathParameters']:
            tm = TableManager()
            table = tm.get_tracking_table()

            result = table.query(KeyConditionExpression=Key('id').eq(
                events['pathParameters']['sample']))

            logger.info("found result to delete: %s" % result)

            if 'Items' in result and len(result['Items']) > 0:
                result = json.dumps(result['Items'][0], use_decimal=True)
                result = json.loads(result, use_decimal=True)

                # create a response when sample is found
                table.delete_item(Key={
                    'id': result['id'],
                    'sample': result['id']
                })
                return {
                    'statusCode': 204,
                    'headers': __HTTP_HEADERS__,
                    'isBase64Encoded': False,
                    'body': ''
                }
            else:
                # create a response when sample is not found
                return {
                    'statusCode': 404,
                    'headers': __HTTP_HEADERS__,
                    'isBase64Encoded': False,
                    'body': json.dumps({"error": "sample not found"})
                }
        else:
            return {
                'statusCode': 422,
                'headers': __HTTP_HEADERS__,
                'isBase64Encoded': False,
                'body': json.dumps({"error": "sample name is not provided!"})
            }
    else:
        return {
            'statusCode':
            404,
            'headers':
            __HTTP_HEADERS__,
            'isBase64Encoded':
            False,
            'body':
            json.dumps({
                "error":
                "not supported, need's be called from a http event!"
            })
        }
Example #3
0
def test_get(requireMocking):
    # store data
    tm = TableManager()
    table = tm.get_tracking_table()
    table.put_item(Item={
        "id": "test",
        "experiment": "unknown",
        "sample": "test",
        "status": [{"time": 1524772162698, "value": "processing"}]
    })

    # process data
    result = get.get({
        "pathParameters": {
            "sample": "test"
        }
    }, {})

    assert 200 == result['statusCode']
    assert 'body' in result
    assert "test" == json.loads(result['body'])["id"]
Example #4
0
def test_get_with_fileHandle(requireMocking):
    # store data
    tm = TableManager()
    table = tm.get_tracking_table()
    table.put_item(Item={
        "id": "test",
        "experiment": "unknown",
        "sample": "test",
        "status": [{"time": 1524772162698, "value": "PROCESSING", "fileHandle": "test.mzml"}]
    })

    # process data
    result = get.get({
        "pathParameters": {
            "sample": "test"
        }
    }, {})

    assert 200 == result['statusCode']
    assert 'body' in result
    assert 'test' == json.loads(result['body'])['id']
    assert 'test.mzml' == json.loads(result['body'])['status'][0]['fileHandle']
Example #5
0
def get(events, context):
    """returns the specific sample from the storage"""

    if 'pathParameters' in events:
        if 'sample' in events['pathParameters']:
            tm = TableManager()
            table = tm.get_tracking_table()

            result = table.query(
                KeyConditionExpression=Key('id').eq(events['pathParameters']['sample'])
            )

            if 'Items' in result and len(result['Items']) > 0:
                # create a response when sample is found
                return {
                    "statusCode": 200,
                    "headers": __HTTP_HEADERS__,
                    "body": json.dumps(result['Items'][0])
                }
            else:
                # create a response when sample is not found
                return {
                    "statusCode": 404,
                    "headers": __HTTP_HEADERS__,
                    "body": json.dumps({"error": "sample not found"})
                }
        else:
            return {
                "statusCode": 422,
                "headers": __HTTP_HEADERS__,
                "body": json.dumps({"error": "sample name is not provided!"})
            }
    else:
        return {
            "statusCode": 404,
            "headers": __HTTP_HEADERS__,
            "body": json.dumps({"error": "not supported, need's be called from a http event!"})
        }
Example #6
0
def test_sync_currently_processing(requireMocking, mocked_10_sample_job):
    tm = TableManager()

    for i in range(0, 10):
        tracking.create({'body': json.dumps(
            {
                "job": "12345",
                "sample": "abc_{}".format(i),
                "state": SCHEDULED
            }
        )}, {})

        assert load_job_samples_with_states("12345")['abc_{}'.format(i)] == "scheduled"
        # dummy stasis data which need to be in the system for this test to pass
        tm.get_tracking_table().put_item(Item=
        {
            "experiment": "12345",
            "id": "abc_{}".format(i),
            "sample": "abc_{}".format(i),
            "status": [
                {
                    "fileHandle": "abc_{}.d".format(i),
                    "priority": 1,
                    "time": 1563307359163,
                    "value": "entered"
                },
                {
                    "fileHandle": "abc_{}.d".format(i),
                    "priority": 100,
                    "time": 1563307360393,
                    "value": "acquired"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 200,
                    "time": 1563307361543,
                    "value": "converted"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 300,
                    "time": 1563330092360,
                    "value": "scheduled"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 410,
                    "time": 1563330183632,
                    "value": "deconvoluted"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 420,
                    "time": 1563330184868,
                    "value": "corrected"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 430,
                    "time": 1563330189108,
                    "value": "annotated"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 440,
                    "time": 1563330190650,
                    "value": "quantified"
                },
                {
                    "fileHandle": "abc_{}.mzml".format(i),
                    "priority": 450,
                    "time": 1563330244348,
                    "value": "replaced"
                }
            ]
        }
        )

    calculate_job_state(job="12345")

    assert all(value == str(REPLACED) for value in load_job_samples_with_states("12345").values())