Skip to content

Commit

Permalink
feat(pace-183): allow the option to specify an absolute path (#221)
Browse files Browse the repository at this point in the history
  • Loading branch information
trietsch committed Feb 26, 2024
1 parent d4dcc0c commit 8fd940e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
16 changes: 13 additions & 3 deletions dbt/src/main/kotlin/com/getstrm/pace/dbt/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,31 @@ package com.getstrm.pace.dbt
import com.fasterxml.jackson.databind.ObjectMapper
import java.io.File
import java.io.FileNotFoundException
import java.nio.file.Paths
import kotlin.system.exitProcess

fun main() {
fun main(args: Array<String>) {
val basePath = if (args.isEmpty()) {
Paths.get("").toAbsolutePath().toString()
} else if (args.size == 1) {
args[0]
} else {
println("Either provide 0 arguments or an absolute path to the dbt project directory.")
exitProcess(1)
}

System.setProperty("org.jooq.no-logo", "true")
System.setProperty("org.jooq.no-tips", "true")

// Note! Working dir when running this must be the root of the desired dbt project!
try {
val manifestJson =
File("target/manifest.json").readText().let { ObjectMapper().readTree(it) }
File("$basePath/target/manifest.json").readText().let { ObjectMapper().readTree(it) }

val dataPolicies = ManifestParser.createDataPolicies(manifestJson)
dataPolicies.forEach { (policy, sourceModel, violations) ->
if (violations.isEmpty()) {
ModelWriter(policy, sourceModel).write()
ModelWriter(policy, sourceModel, basePath).write()
} else {
println(
"Skipping policy for source model ${sourceModel.originalFilePath} due to violations: $violations"
Expand Down
4 changes: 2 additions & 2 deletions dbt/src/main/kotlin/com/getstrm/pace/dbt/ModelWriter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import build.buf.gen.getstrm.pace.api.entities.v1alpha.DataPolicy
import java.io.File
import org.jetbrains.annotations.VisibleForTesting

class ModelWriter(private val policy: DataPolicy, private val sourceModel: DbtModel) {
class ModelWriter(private val policy: DataPolicy, private val sourceModel: DbtModel, private val basePath: String) {

fun write() {
// Todo: take global transforms into account
val viewGenerator = ViewGeneratorFactory.create(policy, sourceModel)
viewGenerator.toSelectStatement(inlineParameters = true).forEach { (target, query) ->
val targetFilePath = targetFilePath(target)
val targetFilePath = "$basePath/${targetFilePath(target)}"
val file = File(targetFilePath)
val header = ModelHeaderRenderer(sourceModel, target).render()
file.writeText("$header\n$query\n")
Expand Down
4 changes: 2 additions & 2 deletions dbt/src/test/kotlin/com/getstrm/pace/dbt/ModelWriterTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class ModelWriterTest {
)
}
}
val writer = ModelWriter(dataPolicy {}, sourceModel)
val writer = ModelWriter(dataPolicy {}, sourceModel, "")

// When
val filePath = writer.targetFilePath(target)
Expand Down Expand Up @@ -62,7 +62,7 @@ class ModelWriterTest {
)
}
}
val writer = ModelWriter(dataPolicy {}, sourceModel)
val writer = ModelWriter(dataPolicy {}, sourceModel, "")

// When
val filePath = writer.targetFilePath(target)
Expand Down

0 comments on commit 8fd940e

Please sign in to comment.