From 582d1c6f0be332ad4cb9f421bea5c2be56a12408 Mon Sep 17 00:00:00 2001 From: Stefan Israelsson Tampe Date: Fri, 24 Aug 2018 22:23:23 +0200 Subject: socket.py --- modules/language/python/module.scm | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'modules/language/python/module.scm') diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm index 51270c2..8e705a8 100644 --- a/modules/language/python/module.scm +++ b/modules/language/python/module.scm @@ -8,6 +8,7 @@ #:use-module (language python try) #:use-module (language python dir) #:use-module (language python list) + #:use-module (language python dict) #:export (Module private public import __import__ modules)) (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y))) @@ -238,10 +239,34 @@ (apply f l)) (apply f l))) -(define modules (make-hash-table)) +(define-python-class ms (dict) + (define __getitem__ + (lambda (self k) + (if (string? k) + (aif it (py-get (slot-ref self 't) k #f) + it + (let* ((l (map string->symbol (string-split k #\.))) + (pth (cons* 'language 'python 'module l))) + (Module (reverse pth) (reverse l)))) + (pylist-ref (slot-ref self 't) k)))) + + (define get + (lambda* (self k #:optional (e #f)) + (if (string? k) + (aif it (py-get (slot-ref self 't) k #f) + it + (let* ((l (map string->symbol (string-split k #\.))) + (pth (cons* 'language 'python 'module l))) + (Module (reverse pth) (reverse l)))) + (py-get (slot-ref self 't) k e))))) + + + +(define modules (ms)) (define (__import__ x) (let ((x (py-get modules x #f))) (if x (values) (let ((e (Module x))) - (pylist-set! modules x e))))) + (pylist-set! modules x e) + e)))) -- cgit v1.2.3