[Zope-Checkins] CVS: Zope/lib/python/ZServer - datatypes.py:1.4

Fred L. Drake, Jr. fred at zope.com
Mon Apr 26 15:44:47 EDT 2004


Update of /cvs-repository/Zope/lib/python/ZServer
In directory cvs.zope.org:/tmp/cvs-serv26903

Modified Files:
	datatypes.py 
Log Message:
Medusa wants the IP number, not the actual hostname, so give it that
way.  We do more work up front, but this makes the pieces go together
more cleanly in the end since expectations aren't fudged.


=== Zope/lib/python/ZServer/datatypes.py 1.3 => 1.4 ===
--- Zope/lib/python/ZServer/datatypes.py:1.3	Wed Oct  1 13:23:03 2003
+++ Zope/lib/python/ZServer/datatypes.py	Mon Apr 26 15:44:45 2004
@@ -16,8 +16,31 @@
 Each server type is represented by a ServerFactory instance.
 """
 
+import socket
+
+
+_default_host_info = None
+
+def get_default_host_info():
+    global _default_host_info
+    if _default_host_info is None:
+        hostname = socket.gethostname()
+        try:
+            ip = socket.gethostbyname(hostname)
+        except socket.error:
+            hostname = 'localhost'
+            ip = socket.gethostbyname(hostname)
+        try:
+            hostname = socket.gethostbyaddr(ip)[0]
+        except socket.error:
+            hostname = ip
+        _default_host_info = hostname, ip
+    return _default_host_info
+
+
 class ServerFactory:
     def __init__(self, address=None):
+        self.ip = None
         if address is None:
             self.host = None
             self.port = None
@@ -26,17 +49,24 @@
 
     def prepare(self, defaulthost=None, dnsresolver=None,
                 module=None, env=None, portbase=None):
-        if defaulthost is not None:
-            self._set_default_host(defaulthost)
+        if defaulthost:
+            hostname = defaulthost
+            ip = socket.gethostbyname(hostname)
+        else:
+            hostname, ip = get_default_host_info()
+        if not self.host:
+            self._set_default_host(hostname, ip)
+        else:
+            self.ip = socket.gethostbyname(self.host)
         self.dnsresolver = dnsresolver
         self.module = module
         self.cgienv = env
         if portbase and self.port is not None:
             self.port += portbase
 
-    def _set_default_host(self, host):
-        if not self.host:
-            self.host = host
+    def _set_default_host(self, host, ip):
+        self.host = host
+        self.ip = ip
 
     def servertype(self):
         s = self.__class__.__name__
@@ -64,7 +94,7 @@
         handler._force_connection_close = self.force_connection_close
         if self.webdav_source_clients:
             handler.set_webdav_source_clients(self.webdav_source_clients)
-        server = HTTPServer.zhttp_server(ip=self.host, port=self.port,
+        server = HTTPServer.zhttp_server(ip=self.ip, port=self.port,
                                          resolver=self.dnsresolver,
                                          logger_object=access_logger)
         server.install_handler(handler)
@@ -88,7 +118,7 @@
     def create(self):
         from ZServer.AccessLogger import access_logger
         from ZServer.FTPServer import FTPServer
-        return FTPServer(ip=self.host, port=self.port,
+        return FTPServer(ip=self.ip, hostname=self.host, port=self.port,
                          module=self.module, resolver=self.dnsresolver,
                          logger_object=access_logger)
 
@@ -119,14 +149,14 @@
         ServerFactory.__init__(self, address)
         self.path = path
 
-    def _set_default_host(self, host):
+    def _set_default_host(self, host, ip):
         if self.path is None:
-            ServerFactory._set_default_host(self, host)
+            ServerFactory._set_default_host(self, host, ip)
 
     def create(self):
         from ZServer.AccessLogger import access_logger
         from ZServer.FCGIServer import FCGIServer
-        return FCGIServer(ip=self.host, port=self.port,
+        return FCGIServer(ip=self.ip, port=self.port,
                           socket_file=self.path,
                           module=self.module, resolver=self.dnsresolver,
                           logger_object=access_logger)
@@ -167,4 +197,4 @@
 
     def create(self):
         from ZServer.ICPServer import ICPServer
-        return ICPServer(self.host, self.port)
+        return ICPServer(self.ip, self.port)




More information about the Zope-Checkins mailing list