def migrate(self): """ Adds any missing columns to the database table for Archival by checking the schema and adding those that are missing. If you wish to add a column, add the column name and sql statement to MIGRATIONS_ADD which will check that the column is not present before running the query. If you wish to modify or delete a column, add the column name and query to the MIGRATIONS_MODIFY which only runs if the column does exist. """ from ckan import model MIGRATIONS_ADD = OrderedDict({ "etag": "ALTER TABLE archival ADD COLUMN etag character varying", "last_modified": "ALTER TABLE archival ADD COLUMN last_modified character varying" }) MIGRATIONS_MODIFY = OrderedDict({}) q = "select column_name from INFORMATION_SCHEMA.COLUMNS where table_name = 'archival';" current_cols = list([m[0] for m in model.Session.execute(q)]) for k, v in MIGRATIONS_ADD.iteritems(): if not k in current_cols: self.log.info(u"Adding column '{0}'".format(k)) self.log.info(u"Executing '{0}'".format(v)) model.Session.execute(v) model.Session.commit() for k, v in MIGRATIONS_MODIFY.iteritems(): if k in current_cols: self.log.info(u"Removing column '{0}'".format(k)) self.log.info(u"Executing '{0}'".format(v)) model.Session.execute(v) model.Session.commit() self.log.info("Migrations complete")
def migrate(self): """ Adds any missing columns to the database table for Archival by checking the schema and adding those that are missing. If you wish to add a column, add the column name and sql statement to MIGRATIONS_ADD which will check that the column is not present before running the query. If you wish to modify or delete a column, add the column name and query to the MIGRATIONS_MODIFY which only runs if the column does exist. """ from ckan import model MIGRATIONS_ADD = OrderedDict({ "etag": "ALTER TABLE archival ADD COLUMN etag character varying", "last_modified": "ALTER TABLE archival ADD COLUMN last_modified character varying" }) MIGRATIONS_MODIFY = OrderedDict({ }) q = "select column_name from INFORMATION_SCHEMA.COLUMNS where table_name = 'archival';" current_cols = list([m[0] for m in model.Session.execute(q)]) for k, v in MIGRATIONS_ADD.iteritems(): if not k in current_cols: self.log.info(u"Adding column '{0}'".format(k)) self.log.info(u"Executing '{0}'".format(v)) model.Session.execute(v) model.Session.commit() for k, v in MIGRATIONS_MODIFY.iteritems(): if k in current_cols: self.log.info(u"Removing column '{0}'".format(k)) self.log.info(u"Executing '{0}'".format(v)) model.Session.execute(v) model.Session.commit() self.log.info("Migrations complete")
'QA status "error" should have been in JSON format, but found: "%s" %s', task_status_error, e) package_data[ 'reason'] = 'Could not display reason due to a system error' package_data['openness_score'] = row.task_status_value package_data['openness_score_reason'] = package_data[ 'reason'] # deprecated package_data['last_updated'] = row.task_status_last_updated data[row.package_name] = package_data # Sort the results by openness_score asc so we can see the worst # results first data = OrderedDict( sorted(data.iteritems(), key=lambda x: x[1]['openness_score'])) return { 'publisher_name': organisation_name, 'publisher_title': organisation_title, 'data': data.values() } def feedback_report(publisher, include_sub_publishers=False, include_published=False, use_cache=False): """ For the publisher provided (and optionally for sub-publishers) this function will generate a report on the feedback for that publisher.
try: package_data.update(json.loads(row.task_status_error)) except ValueError, e: log.error('QA status "error" should have been in JSON format, but found: "%s" %s', task_status_error, e) package_data['reason'] = 'Could not display reason due to a system error' package_data['openness_score'] = row.task_status_value package_data['openness_score_reason'] = package_data['reason'] # deprecated package_data['last_updated'] = row.task_status_last_updated data[row.package_name] = package_data # Sort the results by openness_score asc so we can see the worst # results first data = OrderedDict(sorted(data.iteritems(), key=lambda x: x[1]['openness_score'])) return {'publisher_name': organisation_name, 'publisher_title': organisation_title, 'data': data.values()} def feedback_report(publisher, include_sub_publishers=False, include_published=False, use_cache=False): """ For the publisher provided (and optionally for sub-publishers) this function will generate a report on the feedback for that publisher. """ import collections import datetime import ckan.lib.helpers as helpers
try: package_data.update(json.loads(row.task_status_error)) except ValueError, e: log.error('QA status "error" should have been in JSON format, but found: "%s" %s', task_status_error, e) package_data["reason"] = "Could not display reason due to a system error" package_data["openness_score"] = row.task_status_value package_data["openness_score_reason"] = package_data["reason"] # deprecated package_data["last_updated"] = row.task_status_last_updated data[row.package_name] = package_data # Sort the results by openness_score asc so we can see the worst # results first data = OrderedDict(sorted(data.iteritems(), key=lambda x: x[1]["openness_score"])) return {"publisher_name": organisation_name, "publisher_title": organisation_title, "data": data.values()} def feedback_report(publisher, include_sub_publishers=False, include_published=False, use_cache=False): """ For the publisher provided (and optionally for sub-publishers) this function will generate a report on the feedback for that publisher. """ import collections import datetime import ckan.lib.helpers as helpers from ckanext.dgu.lib.publisher import go_down_tree from ckanext.dgu.model.feedback import Feedback from operator import itemgetter