From 6a0bfae931e78f636413cbcfe9ecab60f4463e2c Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Tue, 2 Feb 2021 12:09:44 +0300 Subject: [PATCH] minor data refactor --- .github/workflows/build.yml | 20 +++--- .github/workflows/publish.yml | 70 +++++++++---------- .../hep/dataforge/actions/ReduceAction.kt | 2 +- .../hep/dataforge/data/DataSetBuilder.kt | 10 +-- .../kotlin/hep/dataforge/data/GroupRule.kt | 34 +++------ .../hep/dataforge/data/StaticDataTree.kt | 4 +- .../kotlin/hep/dataforge/data/dataFilter.kt | 2 - .../kotlin/hep/dataforge/data/ActionsTest.kt | 2 +- .../hep/dataforge/data/DataTreeBuilderTest.kt | 26 +++++-- .../workspace/DataPropagationTest.kt | 2 +- .../hep/dataforge/workspace/FileDataTest.kt | 4 +- .../workspace/SimpleWorkspaceTest.kt | 2 +- 12 files changed, 89 insertions(+), 89 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e780ac7e..6a362884 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,6 @@ name: Gradle build -on: [push] +on: [ push ] jobs: build: @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew build + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with Gradle + run: ./gradlew build diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0d472b1b..0fbf9c1e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,40 +1,40 @@ name: Bintray Publish on: - release: - types: - - created + release: + types: + - created jobs: - build-on-windows: - runs-on: windows-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Gradle clean - run: ./gradlew clean - - name: Gradle build - run: ./gradlew build - - name: Run release task - run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }} - build-on-macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Gradle clean - run: ./gradlew clean - - name: Gradle build - run: ./gradlew build - - name: Run release task - run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }} + build-on-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Gradle clean + run: ./gradlew clean + - name: Gradle build + run: ./gradlew build + - name: Run release task + run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }} + build-on-macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Gradle clean + run: ./gradlew clean + - name: Gradle build + run: ./gradlew build + - name: Run release task + run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }} diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/actions/ReduceAction.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/actions/ReduceAction.kt index 7bc4ab07..505b8040 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/actions/ReduceAction.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/actions/ReduceAction.kt @@ -39,7 +39,7 @@ public class ReduceGroupBuilder( */ public fun byValue(tag: String, defaultTag: String = "@default", action: JoinGroup.() -> Unit) { groupRules += { node -> - GroupRule.byValue(scope, tag, defaultTag).gather(inputType, node).map { + GroupRule.byMetaValue(scope, tag, defaultTag).gather(inputType, node).map { JoinGroup(it.key, it.value).apply(action) } } diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt index 2451dc33..f001c4ad 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt @@ -88,7 +88,7 @@ public suspend fun DataSetBuilder.emit(data: NamedData) { /** * Produce lazy [Data] and emit it into the [DataSetBuilder] */ -public suspend inline fun DataSetBuilder.emitLazy( +public suspend inline fun DataSetBuilder.produce( name: String, meta: Meta = Meta.EMPTY, noinline producer: suspend () -> T, @@ -97,7 +97,7 @@ public suspend inline fun DataSetBuilder.emitLazy( emit(name, data) } -public suspend inline fun DataSetBuilder.emitLazy( +public suspend inline fun DataSetBuilder.produce( name: Name, meta: Meta = Meta.EMPTY, noinline producer: suspend () -> T, @@ -109,13 +109,13 @@ public suspend inline fun DataSetBuilder.emitLazy( /** * Emit a static data with the fixed value */ -public suspend fun DataSetBuilder.emitStatic(name: String, data: T, meta: Meta = Meta.EMPTY): Unit = +public suspend fun DataSetBuilder.static(name: String, data: T, meta: Meta = Meta.EMPTY): Unit = emit(name, Data.static(data, meta)) -public suspend fun DataSetBuilder.emitStatic(name: Name, data: T, meta: Meta = Meta.EMPTY): Unit = +public suspend fun DataSetBuilder.static(name: Name, data: T, meta: Meta = Meta.EMPTY): Unit = emit(name, Data.static(data, meta)) -public suspend fun DataSetBuilder.emitStatic( +public suspend fun DataSetBuilder.static( name: String, data: T, metaBuilder: MetaBuilder.() -> Unit, diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/GroupRule.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/GroupRule.kt index 41e1de53..414fa17e 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/GroupRule.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/GroupRule.kt @@ -19,6 +19,7 @@ import hep.dataforge.meta.get import hep.dataforge.meta.string import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch import kotlin.reflect.KClass public interface GroupRule { @@ -33,7 +34,7 @@ public interface GroupRule { * @param defaultTagValue * @return */ - public fun byValue( + public fun byMetaValue( scope: CoroutineScope, key: String, defaultTagValue: String, @@ -50,31 +51,16 @@ public interface GroupRule { map.getOrPut(tagValue) { ActiveDataTree(dataType) }.emit(data.name, data.data) } + scope.launch { + set.updates.collect { name -> + val data = set.getData(name) + val tagValue = data?.meta[key]?.string ?: defaultTagValue + map.getOrPut(tagValue) { ActiveDataTree(dataType) }.emit(name, data) + } + } + return map } } - - - // @ValueDef(key = "byValue", required = true, info = "The name of annotation value by which grouping should be made") -// @ValueDef( -// key = "defaultValue", -// def = "default", -// info = "Default value which should be used for content in which the grouping value is not presented" -// ) -// public fun byMeta(scope: CoroutineScope, config: Meta): GroupRule { -// //TODO expand grouping options -// return config["byValue"]?.string?.let { -// byValue( -// scope, -// it, -// config["defaultValue"]?.string ?: "default" -// ) -// } ?: object : GroupRule { -// override suspend fun gather( -// dataType: KClass, -// source: DataSource, -// ): Map> = mapOf("" to source) -// } -// } } } diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/StaticDataTree.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/StaticDataTree.kt index 05cd85de..4741a464 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/StaticDataTree.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/StaticDataTree.kt @@ -2,7 +2,7 @@ package hep.dataforge.data import hep.dataforge.names.* import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.collect import kotlin.reflect.KClass @PublishedApi @@ -22,7 +22,7 @@ internal class StaticDataTree( } } - fun getOrCreateNode(name: Name): StaticDataTree = when (name.length) { + private fun getOrCreateNode(name: Name): StaticDataTree = when (name.length) { 0 -> this 1 -> { val itemName = name.firstOrNull()!! diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/dataFilter.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/dataFilter.kt index 4d500587..aff59e61 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/dataFilter.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/dataFilter.kt @@ -32,7 +32,6 @@ public fun DataSet.filter( } } - /** * Generate a wrapper data set with a given name prefix appended to all names */ @@ -48,7 +47,6 @@ else object : ActiveDataSet { override val updates: Flow get() = this@withNamePrefix.updates.map { prefix + it } } - /** * Get a subset of data starting with a given [branchName] */ diff --git a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt index 453dd2f1..81049612 100644 --- a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt +++ b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt @@ -14,7 +14,7 @@ class ActionsTest { val data: DataTree = runBlocking { DataTree { repeat(10) { - emitStatic(it.toString(), it) + static(it.toString(), it) } } } diff --git a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt index 55ed1523..cf34cbb8 100644 --- a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt +++ b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt @@ -8,6 +8,22 @@ import kotlin.test.assertEquals internal class DataTreeBuilderTest { + @Test + fun testTreeBuild() = runBlocking { + val node = DataTree { + "primary" put { + static("a", "a") + static("b", "b") + } + static("c.d", "c.d") + static("c.f", "c.f") + } + assertEquals("a", node.getData("primary.a")?.value()) + assertEquals("b", node.getData("primary.b")?.value()) + assertEquals("c.d", node.getData("c.d")?.value()) + assertEquals("c.f", node.getData("c.f")?.value()) + } + @Test fun testDataUpdate() = runBlocking { val updateData: DataTree = DataTree { @@ -18,11 +34,11 @@ internal class DataTreeBuilderTest { } val node = DataTree { - emit("primary") { - emitStatic("a", "a") - emitStatic("b", "b") + "primary" put { + static("a", "a") + static("b", "b") } - emitStatic("root", "root") + static("root", "root") populate(updateData) } @@ -40,7 +56,7 @@ internal class DataTreeBuilderTest { updateJob = launch { repeat(10) { delay(10) - emitStatic("value", it) + static("value", it) } delay(10) } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt index 16c1460b..3b70ed5e 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt @@ -49,7 +49,7 @@ class DataPropagationTest { runBlocking { data { repeat(100) { - emitStatic("myData[$it]", it) + static("myData[$it]", it) } } } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt index 50a4bd0d..e089e448 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt @@ -23,11 +23,11 @@ class FileDataTest { val dataNode = runBlocking { DataTree { emit("dir") { - emitStatic("a", "Some string") { + static("a", "Some string") { "content" put "Some string" } } - emitStatic("b", "root data") + static("b", "root data") meta { "content" put "This is root meta node" } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt index c81621b9..b6bc9a1c 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt @@ -56,7 +56,7 @@ class SimpleWorkspaceTest { data { repeat(100) { - emitStatic("myData[$it]", it) + static("myData[$it]", it) } }