def test_get_package_total_downloads(self):
        dataset = create_dataset()
        dataset_id = dataset['id']
        resource = factories.Resource(package_id=dataset_id,
                                      url='http://google.com')
        resource2 = factories.Resource(package_id=dataset_id,
                                       url='http://google.com')

        increment_downloads(resource['id'])
        increment_downloads(resource2['id'])

        result = helpers.get_package_total_downloads(dataset_id)
        assert result == 2
    def test_update_package_stats(self):
        dataset = create_dataset()
        test_file = StringIO.StringIO()
        test_file.write('''
        "info": {
            "title": "BC Data Catalogue API",
            "description": "This API provides information about datasets in the BC Data Catalogue.",
            "termsOfService": "http://www.data.gov.bc.ca/local/dbc/docs/license/API_Terms_of_Use.pdf",
            "contact": {
                "name": "Data BC",
                "url": "http://data.gov.bc.ca/",
                "email": ""
            },
            "license": {
                "name": "Open Government License - British Columbia",
                "url": "http://www.data.gov.bc.ca/local/dbc/docs/license/OGL-vbc2.0.pdf"
            },
            "version": "3.0.0"
        }
        ''')
        test_resource = FakeFileStorage(test_file, 'test.json')

        resource = factories.Resource(package_id=dataset['id'],
                                      url='http://www.google.com',
                                      upload=test_resource)

        increment_downloads(resource['id'])
        increment_downloads(resource['id'])

        actions.update_package_stats(dataset['id'])

        solr_base_url = config['solr_url']
        url = '{0}/select?q=*:*&fq=id:{1}&wt=json'.format(
            solr_base_url, dataset['id'])

        result = requests.get(url)
        response = result.json().get('response')

        assert response.get('numFound') == 1
        assert response.get('docs')[0].get(
            'extras_total_downloads') == '000000000000000000000002'
        assert response.get('docs')[0].get(
            'extras_file_size') == '000000000000000000000669'
Example #3
0
def increment_downloads_for_resource(context, data_dict):
    """ This function will increment the total downloads for a resource
    :param resource_id: the id from the resource
    :type resource_id: str
    :returns: message that the action was successful
    :rtype: str

    """
    resource_id = data_dict.get('resource_id')
    increment_downloads(resource_id)
    # Also, update the stats in dataset indexed metadata
    try:
        resource = get_action('resource_show')({'ignore_auth': True}, {'id': resource_id})
        increment_total_downloads_solr(resource['package_id'])
    except Exception as e:
        log.debug(e)
        import traceback
        traceback.print_exc()

    return 'success'
    def test_get_resource_stats(self):
        dataset = create_dataset()
        resource = factories.Resource(package_id=dataset['id'],
                                      url='http://google.com')
        resource_id = resource['id']

        increment_downloads(resource_id)
        increment_downloads(resource_id)
        increment_downloads(resource_id)

        result = helpers.get_resource_stats(resource_id)
        assert result['downloads'] == 3
    def test_get_package_stats(self):
        dataset = create_dataset()
        test_file = StringIO.StringIO()
        test_file.write('''
        "info": {
            "title": "BC Data Catalogue API",
            "description": "This API provides information about datasets in the BC Data Catalogue.",
            "termsOfService": "http://www.data.gov.bc.ca/local/dbc/docs/license/API_Terms_of_Use.pdf",
            "contact": {
                "name": "Data BC",
                "url": "http://data.gov.bc.ca/",
                "email": ""
            },
            "license": {
                "name": "Open Government License - British Columbia",
                "url": "http://www.data.gov.bc.ca/local/dbc/docs/license/OGL-vbc2.0.pdf"
            },
            "version": "3.0.0"
        }
        ''')
        test_resource = FakeFileStorage(test_file, 'test.json')

        resource = factories.Resource(package_id=dataset['id'],
                                      url='http://www.google.com',
                                      upload=test_resource)
        resource2 = factories.Resource(package_id=dataset['id'],
                                       url='http://www.yahoo.com')

        increment_downloads(resource['id'])
        increment_downloads(resource['id'])
        increment_downloads(resource2['id'])

        result = actions.get_package_stats(dataset['id'])

        assert result['file_size'] == 669
        assert result['total_downloads'] == 3
Example #6
0
    except Exception, ex:
        log.error('An error occured while preparing zip archive. Error: %s' % ex)
        raise

    zip_id = file_name
    try:
        package = toolkit.get_action('package_show')({}, {'id': package_id})
        package_name = package['name']

        zip_id += '::{name}'.format(name=package_name)
    except:
        pass

    if resourceArchived:
        for resource_id in resource_ids:
            increment_downloads(resource_id)
        return {'zip_id': zip_id}

    os.remove(file_path)

    return {'zip_id': None}


def safe_override(action):
    """Decorator for save override of standard CKAN actions.
    When overriding CKAN actions you must be aware of the extensions
    order and whether some other extension have already registered the action.

    When decorated with this decorator, you can provide a chained implementation
    for the given action withour checking if there are prior extensions or just
    the CKAN core action.