Skip to content
This repository has been archived by the owner on Nov 29, 2024. It is now read-only.

Commit

Permalink
Merge pull request #369 from h2oai/add-scoring-media-endpoint
Browse files Browse the repository at this point in the history
Add scoring media endpoint
  • Loading branch information
jackjii79 authored Jul 3, 2023
2 parents 3fe42f9 + c0c691c commit dd54700
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ai.h2o.mojos.deploy.local.rest.config;

import ai.h2o.mojos.deploy.local.rest.converter.MultipartConverter;
import ai.h2o.mojos.deploy.local.rest.converter.ScoreMediaRequestConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new MultipartConverter());
registry.addConverter(new ScoreMediaRequestConverter());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ai.h2o.mojos.deploy.local.rest.controller;

import ai.h2o.mojos.deploy.common.rest.v1exp.api.ModelApi;
import ai.h2o.mojos.deploy.common.rest.v1exp.model.ScoreMediaRequest;
import ai.h2o.mojos.deploy.common.rest.v1exp.model.ScoreResponse;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.server.ResponseStatusException;

@Controller
public class ModelsMediaController implements ModelApi {
private static final Logger log = LoggerFactory.getLogger(ModelsMediaController.class);

@Override
public ResponseEntity<ScoreResponse> getMediaScore(
ScoreMediaRequest request, List<Resource> files) {
log.info("Got score media request");
throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED,
"score media files is not implemented");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ai.h2o.mojos.deploy.local.rest.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

public class MultipartConverter implements Converter<MultipartFile, Resource> {

@Override
public Resource convert(MultipartFile source) {
return source.getResource();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ai.h2o.mojos.deploy.local.rest.converter;

import ai.h2o.mojos.deploy.common.rest.v1exp.model.ScoreMediaRequest;
import com.google.gson.Gson;
import org.springframework.core.convert.converter.Converter;

public class ScoreMediaRequestConverter implements Converter<String, ScoreMediaRequest> {

@Override
public ScoreMediaRequest convert(String input) {
return new Gson().fromJson(input, ScoreMediaRequest.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import ai.h2o.mojos.deploy.common.rest.model.Model;
import ai.h2o.mojos.deploy.common.rest.model.ScoreRequest;
import ai.h2o.mojos.deploy.common.rest.model.ScoreResponse;
import ai.h2o.mojos.deploy.common.rest.v1exp.model.ScoreMediaRequest;
import ai.h2o.mojos.deploy.common.transform.MojoScorer;
import ai.h2o.mojos.deploy.common.transform.SampleRequestBuilder;
import ai.h2o.mojos.deploy.common.transform.ShapleyLoadOption;
Expand All @@ -20,6 +21,7 @@

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand All @@ -32,6 +34,7 @@
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.server.ResponseStatusException;
Expand Down Expand Up @@ -187,4 +190,21 @@ void verifyScore_Fails_ReturnsException() {
assertEquals(HttpStatus.SERVICE_UNAVAILABLE, ((ResponseStatusException) ex).getStatus());
}
}

@Test
void verifyScoreMedia_ReturnsUnimplemented() {
// Given
ScoreMediaRequest request = mock(ScoreMediaRequest.class);
List<Resource> files = new ArrayList<>();
ModelsMediaController controller = new ModelsMediaController();

// When & Then
try {
controller.getMediaScore(request, files);
fail("exception is expected, but fail to raise");
} catch (Exception ex) {
assertTrue(ex instanceof ResponseStatusException);
assertEquals(HttpStatus.NOT_IMPLEMENTED, ((ResponseStatusException) ex).getStatus());
}
}
}

0 comments on commit dd54700

Please sign in to comment.