[Twisted-Python] Some beginner	questions	about	"twisted.names.client" and ".tac" environment
    Jesus Cea 
    jcea at argo.es
       
    Sun Dec 18 08:16:06 MST 2005
    
    
  
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jean-Paul Calderone wrote:
> You want to tie your application logic to a Service subclass.  To start
> with, I'd try something like this, in dns3.py:
The very same error :-(.
My code for "dns3.tac":
=====
from twisted.application import service
application = service.Application("DNS test")
import sys
sys.path=["."]+sys.path
from dns3 import DomainResolver
DomainResolver().setServiceParent(application)
=====
My code for "dns3.py":
=====
class resolucion(object) :
  def __init__(self,dominio) :
    global myResolver
    d = myResolver.lookupMailExchange(dominio,timeout=(1,))
    d.addCallbacks(self._cbMailExchange, self._ebMailExchange)
    self.dominio=dominio
  def _cbMailExchange(self,results):
    # Callback for MX query
    global aun_pendientes
    aun_pendientes-=1
    if not aun_pendientes :
      import time
      print "OK",time.time()-t
      #return
      from twisted.internet import reactor
      reactor.stop()
      return
    if not len(pendientes) :
      return
    resolucion(pendientes.pop())
    from twisted.names import dns
    for i in results[0] :
      n=i.payload.name
      tipo=i.payload.TYPE
      if tipo==dns.MX :
        return
        p=i.payload.preference
        print n,p,
        for j in results[2] :
          if n==j.name :
            print j.payload.dottedQuad(),"(%d)" %j.ttl
            break
        else :
          print "???"
      elif tipo==dns.CNAME :
        redirigidos.append((self.dominio,i.payload.name))
  def _ebMailExchange(self,failure):
    # Error callback for MX query
    global aun_pendientes
    aun_pendientes-=1
    if not aun_pendientes :
      import time
      print "ERROR",time.time()-t
      #return
      from twisted.internet import reactor
      reactor.stop()
      return
    if not len(pendientes) :
      return
    resolucion(pendientes.pop())
    print "XXX",self.dominio
    print 'Lookup failed:'
    failure.printTraceback()
from twisted.application import service
class DomainResolver(service.Service):
  def startService(self) :
    global pendientes,redirigidos,aun_pendientes,t,myResolver
    from twisted.names import client
    myResolver=client.Resolver(servers=[('127.0.0.1', 53)])
    import time
    t=time.time()
    pendientes=[]
    redirigidos=[]
    f=open("z1")
    for i in f :
      pendientes.append(i.split()[0])
    f.close()
    aun_pendientes=len(pendientes)
    concurrencia=1
    for i in pendientes[:concurrencia] :
      resolucion(i)
    pendientes=pendientes[concurrencia:]
=====
> This will delay the execution of your startup code until twistd is
> totally ready and the reactor is fully initialized.
Done, but not working :-(
[... DNS timeouts ...]
> Okay, it sounds like you know what you're doing here :)
I like to think so };-)
> I think the current caching resolver was a step in the wrong direction. 
> A cache should probably *wrap* another resolver, not whatever weird
> thing it is doing now.
I agree. Perhaps a subclass of the network DNS resolver could be fine.
So we could have a "client" class and a "cachingClient" one.
In any case, current code simply doesn't cache anything, but eats CPU
cycles.
> If you write such a thing, it'd be great if you could submit it for
> inclusion :)
I'm not familiar enough with Twisted internal, yet, to try.
Nevertheless, I would suggest an optional parameter in the caching
resolver constructor, pointing to a callable object to resolve misses.
Sort of. Code changes would be minimal...
[... about differenciatiing DNS misses from RR misses...]
> I think flags like this are ugly hacks as well.  I completely agree that
> subclass/override is not a great way to get this functionality, but I'd
> like to think of a cleaner way to offer the new feature while still
> maintaining backwards compatibility.
Keep me informed :-p
> Try the service class I used above.  If you still see the exception, it
> may indicate a bug in Twisted's UDP support.  If this case, could you
> attach the new version of the whole program?  I'll take a closer look
> and see if I can nail down the exact cause.
Not working. Same exception. Code posted.
Thanks a lot for your help, Jean Paul. Greatly appreciated.
- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQCVAwUBQ6V9Nplgi5GaxT1NAQKAOwP9H251Jjvd/kNPJf7R+S9faHN9YFcSBluL
YgBleuECDUG5WvJV2O+ZJwkHr05+qQ4qGzD13ydWnxdNCG1UMgWmIJ+TNfu2hOKN
L+rQmNKIUKuPFTOHA+tACYqJaE9rkkcJumR7FON81kNJdEShs52aNUlnc1Q6A9IB
iFyfaa9jcVI=
=V82G
-----END PGP SIGNATURE-----
    
    
More information about the Twisted-Python
mailing list