From 4d0a43a4c6e7567f1ff6b5014ccabca5cf111b83 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Tue, 28 Jan 2014 14:06:40 -0500 Subject: [PATCH] API server /collections/uuid/provenance endpoint works. --- .../arvados/v1/collections_controller.rb | 24 ++++++++--------- services/api/app/models/arvados_model.rb | 27 +++++++++++++++++++ 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/services/api/app/controllers/arvados/v1/collections_controller.rb b/services/api/app/controllers/arvados/v1/collections_controller.rb index 918d499521..48544a2b20 100644 --- a/services/api/app/controllers/arvados/v1/collections_controller.rb +++ b/services/api/app/controllers/arvados/v1/collections_controller.rb @@ -92,8 +92,8 @@ class Arvados::V1::CollectionsController < ApplicationController if m # uuid is a collection uuid = m - Collection.where(uuid:"uuid").each do |c| - visited[uuid] = c + Collection.where(uuid: uuid).each do |c| + visited[uuid] = c.as_api_response end Job.where(output: uuid).each do |job| @@ -105,32 +105,32 @@ class Arvados::V1::CollectionsController < ApplicationController end else - visited[uuid] = true - # uuid is something else - rsc = ArvadosBase::resource_class_for_uuid uuid - + rsc = ArvadosModel::resource_class_for_uuid uuid if rsc == Job Job.where(uuid: uuid).each do |job| - visited[uuid] = job + visited[uuid] = job.as_api_response script_param_edges(visited, job, "", job.script_parameters) end + elsif rsc != nil + rsc.where(uuid: uuid).each do |r| + visited[uuid] = r.as_api_response + end end end Link.where(head_uuid: uuid, link_class: "provenance").each do |link| + visited[link.uuid] = link.as_api_response generate_provenance_edges(visited, link.tail_uuid) end #puts "finished #{uuid}" - - gr end - def provenance(id) + def provenance visited = {} - generate_provenance_edges(visited, id[:uuid]) - visited + generate_provenance_edges(visited, @object[:uuid]) + render json: visited end diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index 2999b52713..69eae92c00 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -1,3 +1,4 @@ +require 'assign_uuid' class ArvadosModel < ActiveRecord::Base self.abstract_class = true @@ -140,4 +141,30 @@ class ArvadosModel < ActiveRecord::Base end end end + + def self.resource_class_for_uuid(uuid) + if uuid.is_a? ArvadosModel + return uuid.class + end + unless uuid.is_a? String + return nil + end + if uuid.match /^[0-9a-f]{32}(\+[^,]+)*(,[0-9a-f]{32}(\+[^,]+)*)*$/ + return Collection + end + resource_class = nil + + Rails.application.eager_load! + uuid.match /^[0-9a-z]{5}-([0-9a-z]{5})-[0-9a-z]{15}$/ do |re| + ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |k| + if k.respond_to?(:uuid_prefix) + if k.uuid_prefix == re[1] + return k + end + end + end + end + nil + end + end -- 2.39.5