def ckan_url_is_url():
    url = faker.unique_url()
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'url': url
    }
    return data, {'url': url}
def empty_extras():
    return {
        'name':
        faker.unique_string(),
        'title':
        faker.sentence(),
        'notes':
        faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [
            {
                'key': 'none',
                'value': None
            },
            {
                'key': 'blank',
                'value': ''
            },
            {
                'key': 'spaces',
                'value': '  '
            },
        ]
    }
def minimal():
    resource_url = faker.unique_url()
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': resource_url
        }],
    }
    return data, {'resource_url': resource_url}
def package_factory(ckan, **kwargs):
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
    }
    data.update(kwargs)
    response = ckan.action('package_create', data)
    return response['result']
def frequency_as_exact_match():
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'frequency',
            'value': 'daily'
        }]
    }
    return data, {'expected': 'daily'}
def frequency_as_rdf_uri():
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'frequency',
            'value': 'http://purl.org/cld/freq/daily'
        }]
    }
    return data, {'expected': 'daily'}
def frequency_as_unknown_value():
    value = 'unkowwn-value'
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'frequency',
            'value': value
        }]
    }
    return data, {'expected': value}
def spatial_uri():
    spatial = 'http://www.geonames.org/2111964'
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'spatial-uri',
            'value': spatial
        }]
    }
    return data, {'spatial': spatial}
def unknown_spatial_text():
    spatial = 'Somewhere'
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'spatial-text',
            'value': spatial
        }]
    }
    return data, {'spatial': spatial}
def spatial_geom_multipolygon():
    multipolygon = faker.multipolygon()
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'spatial',
            'value': json.dumps(multipolygon)
        }]
    }
    return data, {'multipolygon': multipolygon}
def known_spatial_text_slug(app):
    with app.app_context():
        zone = GeoZoneFactory(validity=None)
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'spatial-text',
            'value': zone.slug
        }]
    }
    return data, {'zone': zone}
def multiple_known_spatial_text(app):
    name = faker.word()
    with app.app_context():
        GeoZoneFactory.create_batch(2, name=name, validity=None)
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'resources': [{
            'url': faker.unique_url()
        }],
        'extras': [{
            'key': 'spatial-text',
            'value': name
        }]
    }
    return data, {'name': name}
def all_metadata():
    resource_data = {
        'name': faker.sentence(),
        'description': faker.paragraph(),
        'url': faker.unique_url(),
        'mimetype': faker.mime_type(),
        'format': faker.file_extension(),
    }
    data = {
        'name': faker.unique_string(),
        'title': faker.sentence(),
        'notes': faker.paragraph(),
        'tags': [{
            'name': faker.unique_string()
        } for _ in range(3)],
        'resources': [resource_data],
    }
    return data, {'resource_data': resource_data}