From 2079480cdeb6e104972f991d25b13bd5e96b0000 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Fri, 29 Apr 2022 17:00:27 -0300 Subject: [PATCH] feat: add file writing --- examples/files/.gitignore | 5 +++++ examples/files/build.sh | 5 +++++ examples/files/src/Files.fsproj | 16 ++++++++++++++++ examples/files/src/Program.fs | 6 ++++++ src/stdlib/Builtins.fs | 24 ++++++------------------ test.txt | 1 + test/TestBuiltins.fs | 5 +++++ 7 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 examples/files/.gitignore create mode 100755 examples/files/build.sh create mode 100644 examples/files/src/Files.fsproj create mode 100644 examples/files/src/Program.fs create mode 100644 test.txt diff --git a/examples/files/.gitignore b/examples/files/.gitignore new file mode 100644 index 0000000..f3de5f3 --- /dev/null +++ b/examples/files/.gitignore @@ -0,0 +1,5 @@ +*.py +fable_modules/ +obj/ +bin/ +src/text.txt \ No newline at end of file diff --git a/examples/files/build.sh b/examples/files/build.sh new file mode 100755 index 0000000..df0f3cb --- /dev/null +++ b/examples/files/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh +set -eux +dotnet fable-py src/Files.fsproj --outDir ./src +chmod +x src/program.py +python3 src/program.py diff --git a/examples/files/src/Files.fsproj b/examples/files/src/Files.fsproj new file mode 100644 index 0000000..b485d5e --- /dev/null +++ b/examples/files/src/Files.fsproj @@ -0,0 +1,16 @@ + + + + Exe + net6.0 + + + + + + + + + + + diff --git a/examples/files/src/Program.fs b/examples/files/src/Program.fs new file mode 100644 index 0000000..cc6919d --- /dev/null +++ b/examples/files/src/Program.fs @@ -0,0 +1,6 @@ +open Fable.Python.Builtins + +builtins.``open``(StringPath "test.txt", OpenTextMode.Write).write("Hello World, from Fable.Python! :)") + +let openFile = builtins.``open``(StringPath "test.txt", OpenTextMode.Read) +builtins.print(openFile.read()) diff --git a/src/stdlib/Builtins.fs b/src/stdlib/Builtins.fs index 72469d3..c2c2ecd 100644 --- a/src/stdlib/Builtins.fs +++ b/src/stdlib/Builtins.fs @@ -10,13 +10,14 @@ open Fable.Core type TextIOBase = abstract read : unit -> string abstract read : __size: int -> string + abstract write : string -> unit type TextIOWrapper = inherit IDisposable inherit TextIOBase [] -type OpenTextModeUpdating = +type OpenTextMode = | [] ReadUpdate | [] UpdateRead | [] ReadTextUpdate @@ -49,15 +50,6 @@ type OpenTextModeUpdating = | [] TextCreateUpdate | [] TextUpdateCreate | [] UpdateTextCreate - -[] -type OpenTextModeReading = - | [] Read - | [] ReadText - | [] TextRead - -[] -type OpenTextModeWriting = | [] Write | [] WriteText | [] TextWrite @@ -67,13 +59,9 @@ type OpenTextModeWriting = | [] Create | [] CreateText | [] TextCreate - -[] -type OpenTextMode = - | OpenTextModeUpdating - | OpenTextModeWriting - | OpenTextModeReading - + | [] Read + | [] ReadText + | [] TextRead [] type _OpenFile = @@ -133,4 +121,4 @@ let builtins: IExports = nativeOnly let __name__: string = nativeOnly /// Python print function. Takes a single argument, so can be used with e.g string interpolation. -let print obj = builtins.print obj +let print obj = builtins.print obj \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..48b83b8 --- /dev/null +++ b/test.txt @@ -0,0 +1 @@ +ABC \ No newline at end of file diff --git a/test/TestBuiltins.fs b/test/TestBuiltins.fs index f0988e7..397ead4 100644 --- a/test/TestBuiltins.fs +++ b/test/TestBuiltins.fs @@ -8,4 +8,9 @@ let ``test print works`` () = let result = builtins.print "Hello, world!" result |> equal () +[] +let ``test write works`` () = + let result = builtins.``open``(StringPath "test.txt", OpenTextMode.OpenTextModeWriting.Read) + result.write "ABC" |> equal () + let ``test __name__ works`` () = __name__ |> equal "test_builtins"