def package_relationship_create(context, data_dict): '''Create a relationship between two datasets (packages). You must be authorized to edit both the subject and the object datasets. :param subject: the id or name of the dataset that is the subject of the relationship :type subject: string :param object: the id or name of the dataset that is the object of the relationship :param type: the type of the relationship, one of ``'depends_on'``, ``'dependency_of'``, ``'derives_from'``, ``'has_derivation'``, ``'links_to'``, ``'linked_from'``, ``'child_of'`` or ``'parent_of'`` :type type: string :param comment: a comment about the relationship (optional) :type comment: string :returns: the newly created package relationship :rtype: dictionary ''' model = context['model'] user = context['user'] schema = context.get( 'schema') or ckan.logic.schema.default_create_relationship_schema() api = context.get('api_version') ref_package_by = 'id' if api == 2 else 'name' id, id2, rel_type = _get_or_bust(data_dict, ['subject', 'object', 'type']) comment = data_dict.get('comment', u'') pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('Subject package %r was not found.' % id) if not pkg2: return NotFound('Object package %r was not found.' % id2) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) _check_access('package_relationship_create', context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % ( pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() context['relationship'] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): model = context['model'] user = context['user'] id = data_dict["id"] id2 = data_dict["id2"] rel_type = data_dict["rel"] api = context.get('api_version') or '1' ref_package_by = 'id' if api == '2' else 'name' # Create a Package Relationship. pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('First package named in address was not found.') if not pkg2: return NotFound('Second package named in address was not found.') check_access('package_relationship_create', context, data_dict) ##FIXME should have schema comment = data_dict.get('comment', u'') existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % ( pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): '''Create a relationship between two datasets (packages). You must be authorized to edit both the subject and the object datasets. :param subject: the id or name of the dataset that is the subject of the relationship :type subject: string :param object: the id or name of the dataset that is the object of the relationship :param type: the type of the relationship, one of ``'depends_on'``, ``'dependency_of'``, ``'derives_from'``, ``'has_derivation'``, ``'links_to'``, ``'linked_from'``, ``'child_of'`` or ``'parent_of'`` :type type: string :param comment: a comment about the relationship (optional) :type comment: string :returns: the newly created package relationship :rtype: dictionary ''' model = context['model'] user = context['user'] schema = context.get('schema') or ckan.logic.schema.default_create_relationship_schema() api = context.get('api_version') ref_package_by = 'id' if api == 2 else 'name' id, id2, rel_type = _get_or_bust(data_dict, ['subject', 'object', 'type']) comment = data_dict.get('comment', u'') pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('Subject package %r was not found.' % id) if not pkg2: return NotFound('Object package %r was not found.' % id2) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, _error_summary(errors)) _check_access('package_relationship_create', context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % (pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() context['relationship'] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): model = context['model'] user = context['user'] id = data_dict["id"] id2 = data_dict["id2"] rel_type = data_dict["rel"] api = context.get('api_version') or '1' ref_package_by = 'id' if api == '2' else 'name' # Create a Package Relationship. pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('First package named in address was not found.') if not pkg2: return NotFound('Second package named in address was not found.') check_access('package_relationship_create', context, data_dict) ##FIXME should have schema comment = data_dict.get('comment', u'') existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % (pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): """Create a relationship between two datasets (packages). You must be authorized to edit both the subject and the object datasets. :param subject: the id or name of the dataset that is the subject of the relationship :type subject: string :param object: the id or name of the dataset that is the object of the relationship :param type: the type of the relationship, one of ``'depends_on'``, ``'dependency_of'``, ``'derives_from'``, ``'has_derivation'``, ``'links_to'``, ``'linked_from'``, ``'child_of'`` or ``'parent_of'`` :type type: string :param comment: a comment about the relationship (optional) :type comment: string :returns: the newly created package relationship :rtype: dictionary """ model = context["model"] user = context["user"] schema = context.get("schema") or ckan.logic.schema.default_create_relationship_schema() api = context.get("api_version") ref_package_by = "id" if api == 2 else "name" id, id2, rel_type = _get_or_bust(data_dict, ["subject", "object", "type"]) comment = data_dict.get("comment", u"") pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound("Subject package %r was not found." % id) if not pkg2: return NotFound("Object package %r was not found." % id2) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) _check_access("package_relationship_create", context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u"REST API: Create package relationship: %s %s %s") % (pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get("defer_commit"): model.repo.commit_and_remove() context["relationship"] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): model = context['model'] user = context['user'] schema = context.get( 'schema') or ckan.logic.schema.default_create_relationship_schema() api = context.get('api_version') or '1' ref_package_by = 'id' if api == '2' else 'name' id = data_dict['subject'] id2 = data_dict['object'] rel_type = data_dict['type'] comment = data_dict.get('comment', u'') pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('Subject package %r was not found.' % id) if not pkg2: return NotFound('Object package %r was not found.' % id2) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, error_summary(errors)) check_access('package_relationship_create', context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % ( pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() context['relationship'] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): model = context['model'] user = context['user'] schema = context.get('schema') or ckan.logic.schema.default_create_relationship_schema() api = context.get('api_version') or '1' ref_package_by = 'id' if api == '2' else 'name' id = data_dict['subject'] id2 = data_dict['object'] rel_type = data_dict['type'] comment = data_dict.get('comment', u'') pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound('Subject package %r was not found.' % id) if not pkg2: return NotFound('Object package %r was not found.' % id2) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, error_summary(errors)) check_access('package_relationship_create', context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u'REST API: Create package relationship: %s %s %s') % (pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get('defer_commit'): model.repo.commit_and_remove() context['relationship'] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts
def package_relationship_create(context, data_dict): model = context["model"] user = context["user"] schema = context.get("schema") or ckan.logic.schema.default_create_relationship_schema() api = context.get("api_version") ref_package_by = "id" if api == 2 else "name" id = data_dict["subject"] id2 = data_dict["object"] rel_type = data_dict["type"] comment = data_dict.get("comment", u"") pkg1 = model.Package.get(id) pkg2 = model.Package.get(id2) if not pkg1: raise NotFound("Subject package %r was not found." % id) if not pkg2: return NotFound("Object package %r was not found." % id2) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, error_summary(errors)) check_access("package_relationship_create", context, data_dict) # Create a Package Relationship. existing_rels = pkg1.get_relationships_with(pkg2, rel_type) if existing_rels: return _update_package_relationship(existing_rels[0], comment, context) rev = model.repo.new_revision() rev.author = user rev.message = _(u"REST API: Create package relationship: %s %s %s") % (pkg1, rel_type, pkg2) rel = pkg1.add_relationship(rel_type, pkg2, comment=comment) if not context.get("defer_commit"): model.repo.commit_and_remove() context["relationship"] = rel relationship_dicts = rel.as_dict(ref_package_by=ref_package_by) return relationship_dicts