Extract some functions

portnov [2009-02-22 21:37:12]
Extract some functions
Filename
configtemplate.py
jintest.py
templates.py
diff --git a/configtemplate.py b/configtemplate.py
new file mode 100644
index 0000000..7819c82
--- /dev/null
+++ b/configtemplate.py
@@ -0,0 +1,35 @@
+from lxml import etree
+
+def read_template(path):
+    class ConfigTemplate(object):
+        def __init__(self,**kwargs):
+            for k,v in kwargs.items():
+                if hasattr(self,k):
+                    setattr(self,k,v)
+                else:
+                    raise AttributeError, "%s config has no attribute %s" % (self.__class__.__name__, k)
+
+        def __call__(self,**kwargs):
+            cfg = ConfigTemplate()
+            d = dir(self)
+            for k in d:
+                if not k.startswith('_'):
+                    v = getattr(self,k)
+                    setattr(cfg,k,v)
+            for k,v in kwargs.items():
+                if k in d:
+                    setattr(cfg,k,v)
+                else:
+                    raise AttributeError, "%s config has no attribute %s" % (self.__class__.__name__, k)
+            return cfg
+
+    xmldata = etree.parse(path).getroot()
+    name = xmldata.attrib['name']
+    for node in xmldata:
+        if node.text:
+            setattr(ConfigTemplate, node.attrib['name'], node.text)
+        else:
+            setattr(ConfigTemplate, node.attrib['name'], '')
+    ConfigTemplate.__name__ = name
+
+    return ConfigTemplate
diff --git a/jintest.py b/jintest.py
index 7b4e90c..2d743a9 100755
--- a/jintest.py
+++ b/jintest.py
@@ -1,12 +1,13 @@
 #!/usr/bin/python

+import time
 import signal
 from copy import copy
-from lxml import etree
-from jinja2 import Template

 import xmlserialize as xml
 import discovery
+from templates import do_render
+from configtemplate import read_template

 def on_sigint(signum, frame):
     print "Got SIGINT"
@@ -21,13 +22,16 @@ class Service(object):
         self.port = 0
         self.proto = ''
         self.stype = ''
-        self.hostname = ''
+        self.name = ''

     def uri(self):
         if self.port:
             return "%s:%s" % (self.ip, self.port)
         else:
             return self.ip
+
+    def __repr__(self):
+        return "<Service %s on %s:%s>" % (self.name,self.ip,self.port)

 class Host(object):
     def __init__(self):
@@ -43,52 +47,17 @@ class ZeroconfListener(object):
         svc.ip = addr
         svc.port = port
         services[sname] = svc
+        print "services[%s] = %s" % (sname, svc)

 listener = ZeroconfListener()
-browser = discovery.Browser(args=('_ssh._tcp','_pulse-server._tcp'))
+browser = discovery.Browser(args=('_ssh._tcp','_pulse-server._tcp','_nameserver._udp'))
 browser.set_listener(listener)
 browser.start()

-def read_template(path):
-    class ConfigTemplate(object):
-        def __init__(self,**kwargs):
-            for k,v in kwargs.items():
-                if hasattr(self,k):
-                    setattr(self,k,v)
-                else:
-                    raise AttributeError, "%s config has no attribute %s" % (self.__class__.__name__, k)
-
-        def __call__(self,**kwargs):
-            cfg = ConfigTemplate()
-            d = dir(self)
-            for k in d:
-                if not k.startswith('_'):
-                    v = getattr(self,k)
-                    setattr(cfg,k,v)
-            for k,v in kwargs.items():
-                if k in d:
-                    setattr(cfg,k,v)
-                else:
-                    raise AttributeError, "%s config has no attribute %s" % (self.__class__.__name__, k)
-            return cfg
-
-    xmldata = etree.parse(path).getroot()
-    name = xmldata.attrib['name']
-    for node in xmldata:
-        if node.text:
-            setattr(ConfigTemplate, node.attrib['name'], node.text)
-        else:
-            setattr(ConfigTemplate, node.attrib['name'], '')
-    ConfigTemplate.__name__ = name
-
-    return ConfigTemplate
-
 services = {}
 services['proxy'] = Service()
 services['proxy'].ip = '192.168.32.3'
 services['proxy'].port = 3128
-services['dns'] =  Service()
-services['dns'].ip = '192.168.32.2'
 services['gateway'] = Service()
 services['gateway'].ip = '192.168.32.1'

@@ -96,11 +65,10 @@ machine = Host()
 machine.ip = '192.168.1.2'
 machine.hostname = 'portnov'

-def do_render(conf):
-    return Template(xml.serialize(conf)).render(services=services,machine=machine)
+time.sleep(5)

 system = read_template('configs/templates/system.xml')
-scfg = system(proxy='{{services.proxy.ip}}:{{services.proxy.port}}')
+scfg = system(proxy='{{services.proxy.uri}}')
 print "First config:"
 print do_render(scfg)

diff --git a/templates.py b/templates.py
new file mode 100644
index 0000000..714d820
--- /dev/null
+++ b/templates.py
@@ -0,0 +1,6 @@
+
+from jinja2 import Template
+
+def do_render(conf):
+    return Template(xml.serialize(conf)).render(services=services,machine=machine)
+
ViewGit