universe: python: Update to 0.2

Update some API references that had fallen out of use.

Notably this no longer ran, since docker.#Run now asks for an "input" not an "image," alpine.#Image became alpine.#Build and you have to reference its output.

Remove a FIXME -- now copies the inline script to the container as a file rather than executing it with python -c.

Add tests

Signed-off-by: Adam Smith <adamsmith@nottheeconomist.com>
This commit is contained in:
Adam Smith 2022-04-04 21:26:17 -07:00 committed by Adam Smith
parent a717ec0734
commit 80d73bc5cb
No known key found for this signature in database
GPG Key ID: 2ABA83702C3D3EDB
4 changed files with 94 additions and 7 deletions

View File

@ -2,28 +2,60 @@
package python package python
import ( import (
"universe.dagger.io/docker" "dagger.io/dagger"
"dagger.io/dagger/core"
"universe.dagger.io/docker"
"universe.dagger.io/alpine" "universe.dagger.io/alpine"
) )
// Run a python script in a container // Run a python script in a container
#Run: { #Run: {
// Contents of the python script // Contents of the python script
script: string script: {
// A directory containing one or more bash scripts
directory: dagger.#FS
// Name of the file to execute
filename: string
_directory: directory
_filename: filename
} | {
// Script contents
contents: string
_filename: "run.py"
_write: core.#WriteFile & {
input: dagger.#Scratch
path: _filename
"contents": contents
}
_directory: _write.output
}
// arguments to the script
args: [...string]
// where to mount the script inside the container
_mountpoint: "/run/python"
// FIXME: don't pass the script as argument: write to filesystme instead
docker.#Run & { docker.#Run & {
command: { command: {
name: "python" name: "python3"
flags: "-c": script "args": ["\(_mountpoint)/\(script._filename)"] + args
} }
// As a convenience, image defaults to a ready-to-use python environment // As a convenience, image defaults to a ready-to-use python environment
image: docker.#Image | *_defaultImage input: docker.#Image | *_defaultImage.output
_defaultImage: alpine.#Image & { _defaultImage: alpine.#Build & {
packages: python: version: "3" packages: python: version: "3"
} }
mounts: "Python script": {
contents: script._directory
dest: _mountpoint
}
} }
} }

View File

@ -0,0 +1,2 @@
with open('out.txt', 'w') as f:
f.write("Hello, world\n")

View File

@ -0,0 +1,9 @@
setup() {
load '../../bats_helpers'
common_setup
}
@test "python" {
dagger "do" -p ./test.cue test
}

View File

@ -0,0 +1,44 @@
package python
import (
"dagger.io/dagger"
"dagger.io/dagger/core"
"universe.dagger.io/python"
)
dagger.#Plan & {
actions: test: {
// Run a script from source directory + filename
runFile: {
dir: _load.output
_load: core.#Source & {
path: "./data"
include: ["*.py"]
}
run: python.#Run & {
export: files: "/out.txt": _
script: {
directory: dir
filename: "helloworld.py"
}
}
output: run.export.files."/out.txt" & "Hello, world\n"
}
// Run a script from string
runString: {
run: python.#Run & {
export: files: "/output.txt": _
script: contents: #"""
with open("output.txt", 'w') as f:
f.write("Hello, inlined world!\n")
"""#
}
output: run.export.files."/output.txt" & "Hello, inlined world!\n"
}
}
}