def test_ckan_dataset_resources():
    dataset = CkanDataset({
        'name': 'example-dataset',
    })
    assert dataset.is_modified() is False

    # By asking for resources, a copy will be made,
    # but the two items should match..
    assert isinstance(dataset.resources, ResourcesList)
    assert len(dataset.resources) == 0
    assert dataset.is_modified() is False

    # Resources can be passed as normal objects and
    # will be converted to CkanResource() objects.
    dataset.resources = [
        {'name': 'resource-1'},
        {'name': 'resource-2'},
    ]

    # Make sure type conversions have been applied
    assert isinstance(dataset.resources, ResourcesList)
    for item in dataset.resources:
        assert isinstance(item, CkanResource)

    # Make sure dataset is marked as modified
    assert dataset.is_modified() is True

    # We allow comparison to plain objects
    assert dataset.resources == [
        {'name': 'resource-1'},
        {'name': 'resource-2'},
    ]

    # Or to the actual types used internally, of course
    assert dataset.resources == ResourcesList([
        CkanResource({'name': 'resource-1'}),
        CkanResource({'name': 'resource-2'}),
    ])

    # Do some tests for object serialization
    serialized = dataset.serialize()

    assert isinstance(serialized['resources'], list)
    assert len(serialized['resources']) == 2

    assert isinstance(serialized['resources'][0], dict)
    assert serialized['resources'][0]['name'] == 'resource-1'

    assert isinstance(serialized['resources'][1], dict)
    assert serialized['resources'][1]['name'] == 'resource-2'

    # Serialized data must be json-serializable
    json.dumps(serialized)
예제 #2
0
def test_ckan_dataset_resources():
    dataset = CkanDataset({
        'name': 'example-dataset',
    })
    assert dataset.is_modified() is False

    # By asking for resources, a copy will be made,
    # but the two items should match..
    assert isinstance(dataset.resources, ResourcesList)
    assert len(dataset.resources) == 0
    assert dataset.is_modified() is False

    # Resources can be passed as normal objects and
    # will be converted to CkanResource() objects.
    dataset.resources = [
        {
            'name': 'resource-1'
        },
        {
            'name': 'resource-2'
        },
    ]

    # Make sure type conversions have been applied
    assert isinstance(dataset.resources, ResourcesList)
    for item in dataset.resources:
        assert isinstance(item, CkanResource)

    # Make sure dataset is marked as modified
    assert dataset.is_modified() is True

    # We allow comparison to plain objects
    assert dataset.resources == [
        {
            'name': 'resource-1'
        },
        {
            'name': 'resource-2'
        },
    ]

    # Or to the actual types used internally, of course
    assert dataset.resources == ResourcesList([
        CkanResource({'name': 'resource-1'}),
        CkanResource({'name': 'resource-2'}),
    ])

    # Do some tests for object serialization
    serialized = dataset.serialize()

    assert isinstance(serialized['resources'], list)
    assert len(serialized['resources']) == 2

    assert isinstance(serialized['resources'][0], dict)
    assert serialized['resources'][0]['name'] == 'resource-1'

    assert isinstance(serialized['resources'][1], dict)
    assert serialized['resources'][1]['name'] == 'resource-2'

    # Serialized data must be json-serializable
    json.dumps(serialized)
예제 #3
0
def test_ckandataset_resources_update():
    def _typecheck_resources(resources):
        assert isinstance(resources, ResourcesList)
        for item in resources:
            assert isinstance(item, CkanResource)

    dataset = CkanDataset({
        'name':
        'example-dataset',
        'resources': [
            {
                'name': 'resource-1'
            },
            {
                'name': 'resource-2'
            },
        ]
    })
    assert dataset.is_modified() is False
    assert dataset.resources == [
        {
            'name': 'resource-1'
        },
        {
            'name': 'resource-2'
        },
    ]

    # Getting should not affect is_modified(), although
    # it is manipulating things internally..
    assert dataset.is_modified() is False

    dataset.resources.append({'name': 'resource-3'})
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {
            'name': 'resource-1'
        },
        {
            'name': 'resource-2'
        },
        {
            'name': 'resource-3'
        },
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources.insert(0, {'name': 'resource-0'})
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {
            'name': 'resource-0'
        },
        {
            'name': 'resource-1'
        },
        {
            'name': 'resource-2'
        },
        {
            'name': 'resource-3'
        },
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources[2] = {'name': 'RESOURCE-2'}
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {
            'name': 'resource-0'
        },
        {
            'name': 'resource-1'
        },
        {
            'name': 'RESOURCE-2'
        },
        {
            'name': 'resource-3'
        },
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources = [{'name': 'Hello'}]
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {
            'name': 'Hello'
        },
    ]
    _typecheck_resources(dataset.resources)

    # "Contains" test is successful as fields left to
    # default values just get ignored during comparison.
    assert {'name': 'Hello'} in dataset.resources
    # assert {'name': 'WTF'} not in dataset.resources
    assert {'name': 'WTF, seriously'} not in dataset.resources
def test_ckandataset_resources_update():
    def _typecheck_resources(resources):
        assert isinstance(resources, ResourcesList)
        for item in resources:
            assert isinstance(item, CkanResource)

    dataset = CkanDataset({
        'name': 'example-dataset',
        'resources': [
            {'name': 'resource-1'},
            {'name': 'resource-2'},
        ]
    })
    assert dataset.is_modified() is False
    assert dataset.resources == [
        {'name': 'resource-1'},
        {'name': 'resource-2'},
    ]

    # Getting should not affect is_modified(), although
    # it is manipulating things internally..
    assert dataset.is_modified() is False

    dataset.resources.append({'name': 'resource-3'})
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {'name': 'resource-1'},
        {'name': 'resource-2'},
        {'name': 'resource-3'},
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources.insert(0, {'name': 'resource-0'})
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {'name': 'resource-0'},
        {'name': 'resource-1'},
        {'name': 'resource-2'},
        {'name': 'resource-3'},
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources[2] = {'name': 'RESOURCE-2'}
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {'name': 'resource-0'},
        {'name': 'resource-1'},
        {'name': 'RESOURCE-2'},
        {'name': 'resource-3'},
    ]
    _typecheck_resources(dataset.resources)

    dataset.resources = [{'name': 'Hello'}]
    assert dataset.is_modified() is True
    assert dataset.resources == [
        {'name': 'Hello'},
    ]
    _typecheck_resources(dataset.resources)

    # "Contains" test is successful as fields left to
    # default values just get ignored during comparison.
    assert {'name': 'Hello'} in dataset.resources
    # assert {'name': 'WTF'} not in dataset.resources
    assert {'name': 'WTF, seriously'} not in dataset.resources