Skip to content

Commit

Permalink
Tidy up some common code
Browse files Browse the repository at this point in the history
  • Loading branch information
mark-saeon committed Nov 22, 2018
1 parent cc8e7ee commit 2e9e99e
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 53 deletions.
73 changes: 73 additions & 0 deletions ckanext/metadata/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# encoding: utf-8

from ckan import model
from ckanext.metadata import model as model_ext

METADATA_VALIDATION_ACTIVITY_TYPE = u'metadata validation'
METADATA_WORKFLOW_ACTIVITY_TYPE = u'metadata workflow'

model_info = {
'organization': {
'desc': u'Organization',
'model': model.Group,
'rev_model': model.GroupRevision,
'table': model.group_table,
'rev_table': model.group_revision_table,
},
'infrastructure': {
'desc': u'Infrastructure',
'model': model.Group,
'rev_model': model.GroupRevision,
'table': model.group_table,
'rev_table': model.group_revision_table,
},
'metadata_collection': {
'desc': u'Metadata Collection',
'model': model.Group,
'rev_model': model.GroupRevision,
'table': model.group_table,
'rev_table': model.group_revision_table,
},
'metadata_record': {
'desc': u'Metadata Record',
'model': model.Package,
'rev_model': model.PackageRevision,
'table': model.package_table,
'rev_table': model.package_revision_table,
},
'metadata_schema': {
'desc': u'Metadata Schema',
'model': model_ext.MetadataSchema,
'rev_model': model_ext.MetadataSchemaRevision,
'table': model_ext.metadata_schema_table,
'rev_table': model_ext.metadata_schema_revision_table,
},
'metadata_standard': {
'desc': u'Metadata Standard',
'model': model_ext.MetadataStandard,
'rev_model': model_ext.MetadataStandardRevision,
'table': model_ext.metadata_standard_table,
'rev_table': model_ext.metadata_standard_revision_table,
},
'workflow_state': {
'desc': u'Workflow State',
'model': model_ext.WorkflowState,
'rev_model': model_ext.WorkflowStateRevision,
'table': model_ext.workflow_state_table,
'rev_table': model_ext.workflow_state_revision_table,
},
'workflow_transition': {
'desc': u'Workflow Transition',
'model': model_ext.WorkflowTransition,
'rev_model': model_ext.WorkflowTransitionRevision,
'table': model_ext.workflow_transition_table,
'rev_table': model_ext.workflow_transition_revision_table,
},
'metadata_json_attr_map': {
'desc': u'Metadata JSON Attribute Map',
'model': model_ext.MetadataJSONAttrMap,
'rev_model': model_ext.MetadataJSONAttrMapRevision,
'table': model_ext.metadata_json_attr_map_table,
'rev_table': model_ext.metadata_json_attr_map_revision_table,
},
}
23 changes: 11 additions & 12 deletions ckanext/metadata/lib/dictization/model_dictize.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import ckan.plugins.toolkit as tk
import ckan.lib.dictization as d
import ckan.lib.dictization.model_dictize as ckan_model_dictize
import ckanext.metadata.model as ckanext_model
from ckanext.metadata.common import model_info


def metadata_record_dictize(pkg, context):
Expand Down Expand Up @@ -74,31 +74,30 @@ def metadata_record_activity_dictize(activity, context):


def metadata_schema_dictize(metadata_schema, context):
return _object_dictize(metadata_schema, ckanext_model.MetadataSchema, ckanext_model.MetadataSchemaRevision,
ckanext_model.metadata_schema_revision_table, context)
return _object_dictize('metadata_schema', metadata_schema, context)


def metadata_standard_dictize(metadata_standard, context):
return _object_dictize(metadata_standard, ckanext_model.MetadataStandard, ckanext_model.MetadataStandardRevision,
ckanext_model.metadata_standard_revision_table, context)
return _object_dictize('metadata_standard', metadata_standard, context)


def workflow_state_dictize(workflow_state, context):
return _object_dictize(workflow_state, ckanext_model.WorkflowState, ckanext_model.WorkflowStateRevision,
ckanext_model.workflow_state_revision_table, context)
return _object_dictize('workflow_state', workflow_state, context)


def workflow_transition_dictize(workflow_transition, context):
return _object_dictize(workflow_transition, ckanext_model.WorkflowTransition, ckanext_model.WorkflowTransitionRevision,
ckanext_model.workflow_transition_revision_table, context)
return _object_dictize('workflow_transition', workflow_transition, context)


def metadata_json_attr_map_dictize(metadata_json_attr_map, context):
return _object_dictize(metadata_json_attr_map, ckanext_model.MetadataJSONAttrMap, ckanext_model.MetadataJSONAttrMapRevision,
ckanext_model.metadata_json_attr_map_revision_table, context)
return _object_dictize('metadata_json_attr_map', metadata_json_attr_map, context)


def _object_dictize(obj, model_class, rev_model_class, rev_table, context):
def _object_dictize(model_name, obj, context):
model_class = model_info[model_name]['model']
rev_model_class = model_info[model_name]['rev_model']
rev_table = model_info[model_name]['rev_table']

is_latest_revision = not(context.get('revision_id') or context.get('revision_date'))
execute = _execute if is_latest_revision else _execute_with_revision
if is_latest_revision:
Expand Down
22 changes: 10 additions & 12 deletions ckanext/metadata/lib/dictization/model_save.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import ckan.authz as authz
import ckan.lib.dictization as d
import ckan.plugins.toolkit as tk
import ckanext.metadata.model as ckanext_model
from ckan.common import _
from ckanext.metadata.common import model_info


def metadata_record_collection_membership_save(metadata_collection_id, context):
Expand Down Expand Up @@ -176,31 +176,29 @@ def metadata_record_infrastructure_list_save(infrastructure_dicts, context):


def metadata_schema_dict_save(metadata_schema_dict, context):
return _object_dict_save(metadata_schema_dict, 'metadata_schema', ckanext_model.MetadataSchema,
ckanext_model.metadata_schema_table, context)
return _object_dict_save('metadata_schema', metadata_schema_dict, context)


def metadata_standard_dict_save(metadata_standard_dict, context):
return _object_dict_save(metadata_standard_dict, 'metadata_standard', ckanext_model.MetadataStandard,
ckanext_model.metadata_standard_table, context)
return _object_dict_save('metadata_standard', metadata_standard_dict, context)


def workflow_state_dict_save(workflow_state_dict, context):
return _object_dict_save(workflow_state_dict, 'workflow_state', ckanext_model.WorkflowState,
ckanext_model.workflow_state_table, context)
return _object_dict_save('workflow_state', workflow_state_dict, context)


def workflow_transition_dict_save(workflow_transition_dict, context):
return _object_dict_save(workflow_transition_dict, 'workflow_transition', ckanext_model.WorkflowTransition,
ckanext_model.workflow_transition_table, context)
return _object_dict_save('workflow_transition', workflow_transition_dict, context)


def metadata_json_attr_map_dict_save(metadata_json_attr_map_dict, context):
return _object_dict_save(metadata_json_attr_map_dict, 'metadata_json_attr_map', ckanext_model.MetadataJSONAttrMap,
ckanext_model.metadata_json_attr_map_table, context)
return _object_dict_save('metadata_json_attr_map', metadata_json_attr_map_dict, context)


def _object_dict_save(object_dict, model_name, model_class, table, context):
def _object_dict_save(model_name, object_dict, context):
model_class = model_info[model_name]['model']
table = model_info[model_name]['table']

session = context['session']
obj = context.get(model_name)
if obj:
Expand Down
19 changes: 0 additions & 19 deletions ckanext/metadata/logic/__init__.py
Original file line number Diff line number Diff line change
@@ -1,19 +0,0 @@
# encoding: utf-8

import ckan.model as ckan_model
import ckanext.metadata.model as ckanext_model

METADATA_VALIDATION_ACTIVITY_TYPE = u'metadata validation'
METADATA_WORKFLOW_ACTIVITY_TYPE = u'metadata workflow'

model_map = {
'organization': {'class': ckan_model.Group, 'desc': u'Organization'},
'infrastructure': {'class': ckan_model.Group, 'desc': u'Infrastructure'},
'metadata_collection': {'class': ckan_model.Group, 'desc': u'Metadata Collection'},
'metadata_record': {'class': ckan_model.Package, 'desc': u'Metadata Record'},
'metadata_schema': {'class': ckanext_model.MetadataSchema, 'desc': u'Metadata Schema'},
'metadata_standard': {'class': ckanext_model.MetadataStandard, 'desc': u'Metadata Standard'},
'workflow_state': {'class': ckanext_model.WorkflowState, 'desc': u'Workflow State'},
'workflow_transition': {'class': ckanext_model.WorkflowTransition, 'desc': u'Workflow Transition'},
'metadata_json_attr_map': {'class': ckanext_model.MetadataJSONAttrMap, 'desc': u'Metadata JSON Attribute Map'},
}
3 changes: 2 additions & 1 deletion ckanext/metadata/logic/action/get.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

import ckan.plugins.toolkit as tk
from ckan.common import _
from ckanext.metadata.logic import schema, METADATA_VALIDATION_ACTIVITY_TYPE, METADATA_WORKFLOW_ACTIVITY_TYPE
from ckanext.metadata.logic import schema
from ckanext.metadata.common import METADATA_VALIDATION_ACTIVITY_TYPE, METADATA_WORKFLOW_ACTIVITY_TYPE
from ckanext.metadata.logic.metadata_validator import MetadataValidator
from ckanext.metadata.logic.workflow_validator import WorkflowValidator
from ckanext.metadata.lib.dictization import model_dictize
Expand Down
3 changes: 2 additions & 1 deletion ckanext/metadata/logic/action/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

import ckan.plugins.toolkit as tk
from ckan.common import _
from ckanext.metadata.logic import schema, METADATA_VALIDATION_ACTIVITY_TYPE, METADATA_WORKFLOW_ACTIVITY_TYPE
from ckanext.metadata.logic import schema
from ckanext.metadata.common import METADATA_VALIDATION_ACTIVITY_TYPE, METADATA_WORKFLOW_ACTIVITY_TYPE
from ckanext.metadata.lib.dictization import model_save
import ckanext.metadata.model as ckanext_model
from ckanext.metadata.logic.metadata_validator import MetadataValidator
Expand Down
16 changes: 8 additions & 8 deletions ckanext/metadata/logic/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import ckan.lib.navl.dictization_functions as df
import ckanext.metadata.model as ckanext_model
from ckanext.metadata.logic.json_validator import JSONValidator
from ckanext.metadata.logic import model_map
from ckanext.metadata.common import model_info

convert_to_extras = tk.get_validator('convert_to_extras')

Expand Down Expand Up @@ -199,8 +199,8 @@ def object_name_validator(model_name):
"""
Checks that the supplied object name is not already in use for the given model.
"""
model_class = model_map[model_name]['class']
model_desc = model_map[model_name]['desc']
model_class = model_info[model_name]['model']
model_desc = model_info[model_name]['desc']

def callable_(key, data, errors, context):
session = context['session']
Expand All @@ -221,8 +221,8 @@ def object_exists(model_name):
"""
Checks that an object exists and is not deleted, and converts name to id if applicable.
"""
model_class = model_map[model_name]['class']
model_desc = model_map[model_name]['desc']
model_class = model_info[model_name]['model']
model_desc = model_info[model_name]['desc']

def callable_(key, data, errors, context):
object_id_or_name = data.get(key)
Expand All @@ -244,8 +244,8 @@ def object_does_not_exist(model_name):
"""
Checks that an object id/name is not already in use.
"""
model_class = model_map[model_name]['class']
model_desc = model_map[model_name]['desc']
model_class = model_info[model_name]['model']
model_desc = model_info[model_name]['desc']

def callable_(key, data, errors, context):
object_id_or_name = data.get(key)
Expand All @@ -267,7 +267,7 @@ def convert_id_to_name(model_name):
If True, the object id is converted to name; if False (the default) the id is left unaltered.
"""
convert_nested_ids_to_names = tk.asbool(config.get('ckan.metadata.convert_nested_ids_to_names', False))
model_class = model_map[model_name]['class']
model_class = model_info[model_name]['model']

def callable_(key, data, errors, context):
if convert_nested_ids_to_names:
Expand Down

0 comments on commit 2e9e99e

Please sign in to comment.