changeset 6:b653b7beec1a

moved Boxes from server module to box module
author Atul Varma <avarma@mozilla.com>
date Mon, 31 May 2010 10:53:21 -0700
parents ebeab25bca50
children f2fef5bb0396
files example.py sjsbox/box.py sjsbox/server.py tests/test_box.py tests/test_server.py
diffstat 5 files changed, 83 insertions(+), 81 deletions(-) [+]
line wrap: on
line diff
--- a/example.py	Mon May 31 10:29:25 2010 -0700
+++ b/example.py	Mon May 31 10:53:21 2010 -0700
@@ -4,12 +4,15 @@
 
 import sjsbox.server
 import sjsbox.fs
+import sjsbox.box
 
 if __name__ == '__main__':
+    logging.basicConfig(level=logging.DEBUG)
+
     directory = sjsbox.fs.Dir(os.path.abspath('./boxes'))
-    logging.basicConfig(level=logging.DEBUG)
-    boxes = sjsbox.server.Boxes(directory)
+    boxes = sjsbox.box.Boxes(directory)
     app = sjsbox.server.App(boxes)
+
     port = 8000
     httpd = make_server('', port, app)
     print "serving on port %d" % port
--- a/sjsbox/box.py	Mon May 31 10:29:25 2010 -0700
+++ b/sjsbox/box.py	Mon May 31 10:53:21 2010 -0700
@@ -57,3 +57,43 @@
             logging.info('child process shut down: %s' % self.file)
         self.child_pipe = None
         self.child = None
+
+class Boxes(object):
+    def __init__(self, directory, boxfactory=BoxParent):
+        self.boxfactory = boxfactory
+        self.dir = directory
+        self.boxes = {}
+        self.box_mtimes = {}
+        self.update()
+
+    def shutdown(self):
+        for box in self.boxes.itervalues():
+            box.shutdown()
+
+    def update(self):
+        visited = {}
+        for f in self.dir:
+            boxname = f.name.rsplit('.', 1)[0]
+            if boxname not in self.boxes:
+                logging.info('creating box %s' % boxname)
+                self.box_mtimes[boxname] = f.mtime
+                self.boxes[boxname] = self.boxfactory(f)
+            else:
+                box_mtime = f.mtime
+                if box_mtime > self.box_mtimes[boxname]:
+                    self.box_mtimes[boxname] = box_mtime
+                    self.boxes[boxname].restart()
+                    logging.info('updated box %s' % boxname)
+            visited[boxname] = True
+        to_destroy = [boxname for boxname in self.boxes
+                      if boxname not in visited]
+        for boxname in to_destroy:
+            logging.info('destroying box %s' % boxname)
+            self.boxes[boxname].shutdown()
+            del self.boxes[boxname]
+
+    def __contains__(self, name):
+        return name in self.boxes
+
+    def __getitem__(self, name):
+        return self.boxes[name]
--- a/sjsbox/server.py	Mon May 31 10:29:25 2010 -0700
+++ b/sjsbox/server.py	Mon May 31 10:53:21 2010 -0700
@@ -5,48 +5,6 @@
 except ImportError:
     import simplejson as json
 
-from sjsbox.box import BoxParent
-
-class Boxes(object):
-    def __init__(self, directory, boxfactory=BoxParent):
-        self.boxfactory = boxfactory
-        self.dir = directory
-        self.boxes = {}
-        self.box_mtimes = {}
-        self.update()
-
-    def shutdown(self):
-        for box in self.boxes.itervalues():
-            box.shutdown()
-
-    def update(self):
-        visited = {}
-        for f in self.dir:
-            boxname = f.name.rsplit('.', 1)[0]
-            if boxname not in self.boxes:
-                logging.info('creating box %s' % boxname)
-                self.box_mtimes[boxname] = f.mtime
-                self.boxes[boxname] = self.boxfactory(f)
-            else:
-                box_mtime = f.mtime
-                if box_mtime > self.box_mtimes[boxname]:
-                    self.box_mtimes[boxname] = box_mtime
-                    self.boxes[boxname].restart()
-                    logging.info('updated box %s' % boxname)
-            visited[boxname] = True
-        to_destroy = [boxname for boxname in self.boxes
-                      if boxname not in visited]
-        for boxname in to_destroy:
-            logging.info('destroying box %s' % boxname)
-            self.boxes[boxname].shutdown()
-            del self.boxes[boxname]
-
-    def __contains__(self, name):
-        return name in self.boxes
-
-    def __getitem__(self, name):
-        return self.boxes[name]
-
 class App(object):
     JSON_TYPE = 'text/plain'
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_box.py	Mon May 31 10:53:21 2010 -0700
@@ -0,0 +1,38 @@
+import unittest
+
+import sjsbox.box
+from sjsbox.bunch import Bunch
+
+class BoxesTests(unittest.TestCase):
+    def setUp(self):
+        self.foo = Bunch(
+            mtime = 0,
+            name = 'foo.js',
+            contents = 'function handle() { return 404; }'
+            )
+        self.dir = [self.foo]
+        self.boxes = sjsbox.box.Boxes(self.dir)
+        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
+                         404)
+
+    def tearDown(self):
+        self.boxes.shutdown()
+
+    def test_contains_works(self):
+        self.assertTrue('foo' in self.boxes)
+
+    def test_update_works(self):
+        self.boxes.update()
+        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
+                         404)
+
+        self.foo.mtime = 1
+        self.foo.contents = 'function handle() { return "yo"; }';
+        self.boxes.update()
+        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
+                         u'yo')
+
+    def test_remove_works(self):
+        self.dir[:] = []
+        self.boxes.update()
+        self.assertFalse('foo' in self.boxes)
--- a/tests/test_server.py	Mon May 31 10:29:25 2010 -0700
+++ b/tests/test_server.py	Mon May 31 10:53:21 2010 -0700
@@ -1,41 +1,4 @@
-import unittest
-
 import sjsbox.server
-from sjsbox.bunch import Bunch
-
-class BoxesTests(unittest.TestCase):
-    def setUp(self):
-        self.foo = Bunch(
-            mtime = 0,
-            name = 'foo.js',
-            contents = 'function handle() { return 404; }'
-            )
-        self.dir = [self.foo]
-        self.boxes = sjsbox.server.Boxes(self.dir)
-        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
-                         404)
-
-    def tearDown(self):
-        self.boxes.shutdown()
-
-    def test_contains_works(self):
-        self.assertTrue('foo' in self.boxes)
-
-    def test_update_works(self):
-        self.boxes.update()
-        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
-                         404)
-
-        self.foo.mtime = 1
-        self.foo.contents = 'function handle() { return "yo"; }';
-        self.boxes.update()
-        self.assertEqual(self.boxes['foo'].handle('GET', '/'),
-                         u'yo')
-
-    def test_remove_works(self):
-        self.dir[:] = []
-        self.boxes.update()
-        self.assertFalse('foo' in self.boxes)
 
 def test_app():
     sjsbox.server.App(None)