Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 31 additions & 26 deletions ckanext/validation/controller.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,44 @@
# encoding: utf-8

from ckantoolkit import (
BaseController, c, NotAuthorized, ObjectNotFound,
import ckan.plugins.toolkit as toolkit
from ckan.plugins.toolkit import (
c, NotAuthorized, ObjectNotFound,
abort, _, render, get_action)


class ValidationController(BaseController):
def validation(resource_id):
try:
validation = get_action(u'resource_validation_show')(
{u'user': c.user},
{u'resource_id': resource_id})

def validation(self, resource_id):
resource = get_action(u'resource_show')(
{u'user': c.user},
{u'id': resource_id})

try:
validation = get_action(u'resource_validation_show')(
{u'user': c.user},
{u'resource_id': resource_id})
dataset = get_action(u'package_show')(
{u'user': c.user},
{u'id': resource[u'package_id']})

resource = get_action(u'resource_show')(
{u'user': c.user},
{u'id': resource_id})
# Needed for core resource templates
c.package = c.pkg_dict = dataset
c.resource = resource

dataset = get_action(u'package_show')(
{u'user': c.user},
{u'id': resource[u'package_id']})
return render(u'validation/validation_read.html', extra_vars={
u'validation': validation,
u'resource': resource,
u'dataset': dataset,
})

# Needed for core resource templates
c.package = c.pkg_dict = dataset
c.resource = resource
except NotAuthorized:
abort(403, _(u'Unauthorized to read this validation report'))
except ObjectNotFound:

return render(u'validation/validation_read.html', extra_vars={
u'validation': validation,
u'resource': resource,
u'dataset': dataset,
})
abort(404, _(u'No validation report exists for this resource'))

except NotAuthorized:
abort(403, _(u'Unauthorized to read this validation report'))
except ObjectNotFound:
if not toolkit.check_ckan_version(u'2.9'):

abort(404, _(u'No validation report exists for this resource'))
class ValidationController(toolkit.BaseController):

def validation(self, resource_id):
return validation(resource_id)
4 changes: 2 additions & 2 deletions ckanext/validation/logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ def resource_create(context, data_dict):
context['use_cache'] = False
t.get_action('package_update')(context, pkg_dict)
context.pop('defer_commit')
except t.ValidationError, e:
except t.ValidationError as e:
try:
raise t.ValidationError(e.error_dict['resources'][-1])
except (KeyError, IndexError):
Expand Down Expand Up @@ -588,7 +588,7 @@ def resource_update(context, data_dict):
context['use_cache'] = False
updated_pkg_dict = t.get_action('package_update')(context, pkg_dict)
context.pop('defer_commit')
except t.ValidationError, e:
except t.ValidationError as e:
try:
raise t.ValidationError(e.error_dict['resources'][-1])
except (KeyError, IndexError):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import json

import ckan.plugins as p
import ckantoolkit as t
import ckan.plugins.toolkit as toolkit

from ckanext.validation import settings
from ckanext.validation.model import tables_exist
Expand Down Expand Up @@ -37,10 +37,17 @@
log = logging.getLogger(__name__)


if toolkit.check_ckan_version(u'2.9'):
from ckanext.validation.plugin.flask_plugin import MixinPlugin
ckan_29_or_higher = True
else:
from ckanext.validation.plugin.pylons_plugin import MixinPlugin
ckan_29_or_higher = False


class ValidationPlugin(p.SingletonPlugin):
p.implements(p.IConfigurer)
p.implements(p.IActions)
p.implements(p.IRoutes, inherit=True)
p.implements(p.IAuthFunctions)
p.implements(p.IResourceController, inherit=True)
p.implements(p.IPackageController, inherit=True)
Expand All @@ -50,18 +57,18 @@ class ValidationPlugin(p.SingletonPlugin):
# IConfigurer

def update_config(self, config_):
if not tables_exist():
log.critical(u'''
The validation extension requires a database setup. Please run the following
to create the database tables:
paster --plugin=ckanext-validation validation init-db
''')
else:
log.debug(u'Validation tables exist')

t.add_template_directory(config_, u'templates')
t.add_public_directory(config_, u'public')
t.add_resource(u'fanstatic', 'ckanext-validation')
# if not tables_exist():
# log.critical(u'''
#The validation extension requires a database setup. Please run the following
#to create the database tables:
# paster --plugin=ckanext-validation validation init-db
#''')
# else:
# log.debug(u'Validation tables exist')

toolkit.add_template_directory(config_, u'../templates')
toolkit.add_public_directory(config_, u',,.public')
toolkit.add_resource(u'../fanstatic', 'ckanext-validation')

# IRoutes

Expand Down
36 changes: 36 additions & 0 deletions ckanext/validation/plugin/flask_plugin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

from flask import Blueprint

import ckan.plugins as plugins
from ckanext.validation.controller import validation
from ckanext.validation.model import create_tables, tables_exist

class MixinPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IBlueprint)
plugins.implements(plugins.IClick)

def get_commands(self):
import click

@click.group("validation")
@click.command("init-db")
def init_db():
if tables_exist():
click.echo("Validation tables already exist")
sys.exit(0)

create_tables()

click.echo("Validation tables created")

return [init_db]


def get_blueprint(self):
blueprint = Blueprint('validation', __name__)
blueprint.add_url_rule("/dataset/{id}/resource/{resource_id}/validation", view_func=validation, endpoint='validation_read', methods=['GET'])
return blueprint
17 changes: 17 additions & 0 deletions ckanext/validation/plugin/pylons_plugin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ckan.plugins as plugins

class MixinPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IRoutes, inherit=True)

def before_map(self, map_):
controller = u'ckanext.validation.controller:ValidationController'

map_.connect(
u'validation_read',
u'/dataset/{id}/resource/{resource_id}/validation',
controller=controller, action=u'validation')

return map_