summaryrefslogtreecommitdiff
path: root/modules/language/python/module/python.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-03-16 23:50:39 +0100
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-03-16 23:50:39 +0100
commit2050e8565493ca0491ae4b4c44764eda56626427 (patch)
tree404cda14abdb2ff4a847955dc6780c41ba8663f4 /modules/language/python/module/python.scm
parentb740e34851938e6e9c8b1e80cf5ffd52164aa2b0 (diff)
os module now compiles
Diffstat (limited to 'modules/language/python/module/python.scm')
-rw-r--r--modules/language/python/module/python.scm59
1 files changed, 57 insertions, 2 deletions
diff --git a/modules/language/python/module/python.scm b/modules/language/python/module/python.scm
index 8264fee..093d03e 100644
--- a/modules/language/python/module/python.scm
+++ b/modules/language/python/module/python.scm
@@ -42,13 +42,18 @@
#:export (print repr complex float int str
set all any bin callable reversed
chr classmethod staticmethod
- divmod enumerate filter
+ divmod enumerate filter open
getattr hasattr hex isinstance issubclass
iter map sum id input oct ord pow super
sorted zip))
(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
+(define (path-it path)
+ (aif it (ref path '__fspath__)
+ (it)
+ path))
+
(define print
(case-lambda
(() ((@ (guile) format) #t "~%"))
@@ -246,6 +251,56 @@
(begin
(yield (reverse r))
(lp))))))))))
-
+
+(define DEFAULT_BUFFER_SIZE 4096)
+(def (open path
+ (= mode "r")
+ (= buffering -1 )
+ (= encoding None)
+ (= errors None)
+ (= newline None)
+ (= closefd #t)
+ (= opener None))
+
+ (define modelist (string->list mode))
+ (define path (path-it path))
+ (define (clean ch l)
+ (filter (lambda (c) (not (eq? ch c))) l))
+ (let ((port (if (number? path)
+ (begin
+ (if (member #\a modelist)
+ (seek path 0 SEEK_END))
+ (if (member #\x modelist)
+ (error "cannot use mode 'x' for fd input"))
+ (cond
+ ((member #\r modelist)
+ (fdes->inport path))
+ ((member #\w modelist)
+ (fdes->outport path))))
+ (begin
+ (if (member #\x modelist)
+ (if (file-exists? path)
+ (raise OSError "mode='x' and file exists")
+ (set mode (list->string
+ (clean #\x modelist)))))
+ ((@ (guile) open-file) (path-it path) mode)))))
+
+ (case buffering
+ ((-1)
+ (setvbuf port 'block DEFAULT_BUFFER_SIZE))
+ ((0)
+ (setvbuf port 'none))
+ ((1)
+ (setvbuf port 'line))
+ (else
+ (setvbuf port 'block buffering)))
+
+ port))
+
+
+
+
+
+