Skip to content
代码片段 群组 项目
提交 a9bd4c5b 编辑于 作者: Eduardo Bonet's avatar Eduardo Bonet
浏览文件

Creates Ml::ModelVersion on package creation

When a package of type ml_model_package is created through the api,
creates also a companion Ml::ModelVersion

Changelog: added
FeatureFlag: model_registry
上级 eb443dc0
No related branches found
No related tags found
无相关合并请求
......@@ -19,8 +19,8 @@ class ModelVersion < ApplicationRecord
delegate :name, to: :model
class << self
def find_or_create(model, version, package)
create_with(package: package).find_or_create_by(project: model.project, model: model, version: version)
def find_or_create!(model, version, package)
create_with(package: package).find_or_create_by!(project: model.project, model: model, version: version)
end
end
......
......@@ -12,7 +12,7 @@ def initialize(project, params = {})
def execute
model = Ml::FindOrCreateModelService.new(project, name).execute
Ml::ModelVersion.find_or_create(model, version, package)
Ml::ModelVersion.find_or_create!(model, version, package)
end
private
......
......@@ -5,7 +5,10 @@ module MlModel
class CreatePackageFileService < BaseService
def execute
::Packages::Package.transaction do
create_package_file(find_or_create_package)
package = find_or_create_package
find_or_create_model_version(package)
create_package_file(package)
end
end
......@@ -30,6 +33,16 @@ def find_or_create_package
package
end
def find_or_create_model_version(package)
model_version_params = {
model_name: package.name,
version: package.version,
package: package
}
Ml::FindOrCreateModelVersionService.new(project, model_version_params).execute
end
def create_package_file(package)
file_params = {
file: params[:file],
......
......@@ -88,13 +88,13 @@
end
end
describe '.find_or_create' do
describe '#find_or_create!' do
let_it_be(:existing_model_version) { create(:ml_model_versions, model: model, version: 'abc') }
let(:version) { existing_model_version.version }
let(:package) { nil }
subject(:find_or_create) { described_class.find_or_create(model, version, package) }
subject(:find_or_create) { described_class.find_or_create!(model, version, package) }
context 'if model version exists' do
it 'returns the model version', :aggregate_failures do
......
......@@ -41,19 +41,22 @@
.to change { project.packages.ml_model.count }.by(1)
.and change { Packages::PackageFile.count }.by(1)
.and change { Packages::PackageFileBuildInfo.count }.by(0)
.and change { Ml::ModelVersion.count }.by(1)
new_model = project.packages.ml_model.last
package_file = new_model.package_files.last
new_model_version = Ml::ModelVersion.last
aggregate_failures do
expect(new_model.name).to eq('new_model')
expect(new_model.version).to eq('1.0.0')
expect(new_model.status).to eq('default')
expect(package_file.package).to eq(new_model)
expect(package_file.file_name).to eq(file_name)
expect(package_file.size).to eq(file.size)
expect(package_file.file_sha256).to eq(sha256)
end
expect(new_model.name).to eq('new_model')
expect(new_model.version).to eq('1.0.0')
expect(new_model.status).to eq('default')
expect(package_file.package).to eq(new_model)
expect(package_file.file_name).to eq(file_name)
expect(package_file.size).to eq(file.size)
expect(package_file.file_sha256).to eq(sha256)
expect(new_model_version.name).to eq('new_model')
expect(new_model_version.version).to eq('1.0.0')
expect(new_model_version.package).to eq(new_model)
end
end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册