Skip to content

Commit

Permalink
feat: let SILO decide on the default minProportions in mutations endp…
Browse files Browse the repository at this point in the history
  • Loading branch information
fengelniederhammer authored and JonasKellerer committed Aug 30, 2023
1 parent 30882c8 commit d559147
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,13 @@ import org.genspectrum.lapis.logging.RequestContext
import org.genspectrum.lapis.model.SiloQueryModel
import org.genspectrum.lapis.request.AminoAcidMutation
import org.genspectrum.lapis.request.CommonSequenceFilters
import org.genspectrum.lapis.request.DEFAULT_MIN_PROPORTION
import org.genspectrum.lapis.request.MutationProportionsRequest
import org.genspectrum.lapis.request.NucleotideMutation
import org.genspectrum.lapis.request.OrderByField
import org.genspectrum.lapis.request.SequenceFiltersRequestWithFields
import org.genspectrum.lapis.response.AggregationData
import org.genspectrum.lapis.response.DetailsData
import org.genspectrum.lapis.response.MutationData
import org.genspectrum.lapis.silo.DetailsData
import org.genspectrum.lapis.silo.MutationType
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.GetMapping
Expand Down Expand Up @@ -298,8 +296,7 @@ class LapisController(
@RequestParam(required = false)
@Parameter(schema = Schema(ref = "#/components/schemas/$AMINO_ACID_MUTATIONS_SCHEMA"))
aminoAcidMutations: List<AminoAcidMutation>?,
@RequestParam(defaultValue = DEFAULT_MIN_PROPORTION.toString())
minProportion: Double,
@RequestParam minProportion: Double?,
@Parameter(
schema = Schema(ref = "#/components/schemas/$ORDER_BY_FIELDS_SCHEMA"),
description = "The fields of the response to order by.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,11 @@ import com.fasterxml.jackson.databind.node.NumericNode
import org.genspectrum.lapis.controller.MIN_PROPORTION_PROPERTY
import org.springframework.boot.jackson.JsonComponent

const val DEFAULT_MIN_PROPORTION = 0.05

data class MutationProportionsRequest(
override val sequenceFilters: Map<String, String>,
override val nucleotideMutations: List<NucleotideMutation>,
override val aaMutations: List<AminoAcidMutation>,
val minProportion: Double,
val minProportion: Double? = null,
override val orderByFields: List<OrderByField> = emptyList(),
override val limit: Int? = null,
override val offset: Int? = null,
Expand All @@ -28,7 +26,7 @@ class MutationProportionsRequestDeserializer : JsonDeserializer<MutationProporti
val codec = jsonParser.codec

val minProportion = when (val minProportionNode = node.get(MIN_PROPORTION_PROPERTY)) {
null, is NullNode -> DEFAULT_MIN_PROPORTION
null, is NullNode -> null
is NumericNode -> minProportionNode.doubleValue()

else -> throw IllegalArgumentException("minProportion must be a number")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ enum class MutationType {
Nucleotide,

@JsonProperty("AminoAcidMutations")
AminoAcid
AminoAcid,
}

sealed class SiloFilterExpression(val type: String)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,23 +168,23 @@ class LapisControllerTest(@Autowired val mockMvc: MockMvc) {
.andExpect(jsonPath("\$.data[0].age").value(42))
}

@ParameterizedTest(name = "GET {0} without explicit minProportion defaults to 5 percent")
@ParameterizedTest(name = "GET {0} without explicit minProportion")
@MethodSource("getMutationEndpointTypes")
fun `GET mutations without explicit minProportion defaults to 5 percent`(
fun `GET mutations without explicit minProportion`(
endpoint: String,
mutationType: MutationType,
) {
every {
siloQueryModelMock.computeMutationProportions(
mutationProportionsRequest(
mapOf("country" to "Switzerland"),
0.05,
null,
),
mutationType,
)
} returns listOf(someMutationProportion())

mockMvc.perform(get("${endpoint}?country=Switzerland"))
mockMvc.perform(get("$endpoint?country=Switzerland"))
.andExpect(status().isOk)
.andExpect(jsonPath("\$.data[0].position").value("the mutation"))
.andExpect(jsonPath("\$.data[0].proportion").value(0.5))
Expand All @@ -208,24 +208,24 @@ class LapisControllerTest(@Autowired val mockMvc: MockMvc) {
)
} returns listOf(someMutationProportion())

mockMvc.perform(get("${endpoint}?country=Switzerland&minProportion=0.3"))
mockMvc.perform(get("$endpoint?country=Switzerland&minProportion=0.3"))
.andExpect(status().isOk)
.andExpect(jsonPath("\$.data[0].position").value("the mutation"))
.andExpect(jsonPath("\$.data[0].proportion").value(0.5))
.andExpect(jsonPath("\$.data[0].count").value(42))
}

@ParameterizedTest(name = "POST {0} without explicit minProportion defaults to 5 percent")
@ParameterizedTest(name = "POST {0} without explicit minProportion")
@MethodSource("getMutationEndpointTypes")
fun `POST mutations without explicit minProportion defaults to 5 percent`(
fun `POST mutations without explicit minProportion`(
endpoint: String,
mutationType: MutationType,
) {
every {
siloQueryModelMock.computeMutationProportions(
mutationProportionsRequest(
mapOf("country" to "Switzerland"),
0.05,
null,
),
mutationType,
)
Expand Down Expand Up @@ -375,7 +375,7 @@ class LapisControllerTest(@Autowired val mockMvc: MockMvc) {
emptyList(),
)

private fun mutationProportionsRequest(sequenceFilters: Map<String, String>, minProportion: Double) =
private fun mutationProportionsRequest(sequenceFilters: Map<String, String>, minProportion: Double?) =
MutationProportionsRequest(
sequenceFilters,
emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class MutationProportionsRequestTest {
"country": "Switzerland"
}
""",
MutationProportionsRequest(mapOf("country" to "Switzerland"), emptyList(), emptyList(), 0.05),
MutationProportionsRequest(mapOf("country" to "Switzerland"), emptyList(), emptyList()),
),
Arguments.of(
"""
Expand All @@ -61,7 +61,6 @@ class MutationProportionsRequestTest {
emptyMap(),
listOf(NucleotideMutation(null, 1, "-"), NucleotideMutation(null, 23062, "T")),
emptyList(),
0.05,
),
),
Arguments.of(
Expand All @@ -74,7 +73,6 @@ class MutationProportionsRequestTest {
emptyMap(),
emptyList(),
listOf(AminoAcidMutation("S", 501, "Y"), AminoAcidMutation("ORF1b", 12, null)),
0.05,
),
),
Arguments.of(
Expand All @@ -91,14 +89,14 @@ class MutationProportionsRequestTest {
"accessKey": "some access key"
}
""",
MutationProportionsRequest(emptyMap(), emptyList(), emptyList(), 0.05),
MutationProportionsRequest(emptyMap(), emptyList(), emptyList()),
),
Arguments.of(
"""
{
}
""",
MutationProportionsRequest(emptyMap(), emptyList(), emptyList(), 0.05),
MutationProportionsRequest(emptyMap(), emptyList(), emptyList()),
),
)

Expand Down

0 comments on commit d559147

Please sign in to comment.