def fetch_data(self, storage):
        self.logger.info("Fetching data from Ckan at {0}".format(self.url))
        client = CkanHighlevelClient(
            self.url, api_key=self.conf.get('api_key'))

        for dataset in client.iter_datasets():
            self.logger.info("Dataset: {0}".format(dataset.id))
            storage.set_object('dataset', dataset.id, dataset.serialize())

        for group in client.iter_groups():
            self.logger.info("Group: {0}".format(group.name))
            storage.set_object('group', group.name, group.serialize())

        for organization in client.iter_organizations():
            self.logger.info("Organization: {0}".format(organization.name))
            storage.set_object('organization', organization.name,
                               organization.serialize())
def download_and_print_ckan_datasets(ckan_url):
    """
    Download and print datasets from ckan
    """

    client = CkanHighlevelClient(ckan_url)

    logger = logging.getLogger('ckan_crawl_demo')
    logger.info('Starting function')

    total = len(client.list_datasets())
    current_app.report_progress(None, 0, total)

    for cnt, dataset in enumerate(client.iter_datasets()):
        logger.debug(repr(dataset))
        current_app.report_progress(None, cnt + 1, total)

    return total