Forum Twisted Python

Document Actions
Rubriques : 6   Réponses : 12  

Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant.

Tout message hors sujet sera supprimé, pour le bien de tous.
Les messages à caractère publicitaires ne sont pas autorisés non plus.

Sujet Créateur Réponses Dernière modification
Mauvaise intallation de Twisted ?
Bonsoir Je voudrais porter un projet basé sur Scrapy de windows à unix (debian) J'ai donc installé Twisted et les composants demandés. Comme ça: [code]aptitude install python-twisted[/code] idem avec les autres no problèmme jusque là Je lance le setup.py de Scrapy idem toujours pas de soucis Mais quand je crée un projet j'ai ça [code]/usr/local/bin# scrapy-ctl.py startproject test Traceback (most recent call last): File "/usr/local/bin/scrapy-ctl.py", line 3, in from scrapy.command.cmdline import execute File "/usr/local/lib/python2.5/site-packages/scrapy/command/cmdline.py", line 9, in from scrapy import log File "/usr/local/lib/python2.5/site-packages/scrapy/log.py", line 9, in from twisted.python import log ImportError: No module named twisted.python /usr/local/bin#[/code] Est-ce que j'aurai loupé l'installation de twisted ? une piste? Merci pour votre aide.
ornythorink 6 03/06/2010 09:10
AuthenticatingTelnetProtocol pour créer un serveur Telnet

Bonjour,

Je suis nouveau sur ce forum. J'espère y trouver de l'aide et dans la mesure du possible pouvoir aider les autres ...

J'ai déjà réussi à créer un serveur telnet pour windows en python. Celui-ci à la particularité de pourvoir démarrer des programmes graphiques s'affichant sur l'écran du serveur. (Ex: si le client tape "notepad" dans sa console, le programme notepad s'affichera sur le bureau windows du serveur). Mon serveur à presque tout ce qu'il me faut sauf l'authentification par login/mot de passe.

Je me suis inspiré du code source "simplecred.py" que l'on trouve à [url href="http://books.google.be/books?id=sUviL0XxgMEC&pg=PA88&lpg=PA88&dq=simplecred.py&source=bl&ots=c3lbxazei5&sig=mQt1vuUJw7cbGCNf5mwhsrBsfz4&hl=fr&ei=C2KKSsnnAZnbjQekuoRd&sa=X&oi=book_result&ct=result&resnum=5#v=onepage&q=simplecred.py&f=false"]cette adresse[/url] (livre O'Relly Twisted network programming essentials).

J'ai essayé d'utiliser "AuthenticatingTelnetProtocol" mais je n'y arrive pas. Le serveur démarre mais donne un message d'erreur lorsque l'on essaye de s'y connecter.

Voici le code de mon serveur avec authentification et plus bas le message d'eeur dans la console du serveur:

[code] from zope.interface import Interface, implements

from twisted.internet.protocol import ServerFactory, Protocol from twisted.conch.telnet import AuthenticatingTelnetProtocol, StatefulTelnetProtocol, ITelnetProtocol

from twisted.cred import portal, checkers, credentials, error as credError from twisted.protocols import basic from twisted.internet import protocol, reactor, defer from zope.interface import Interface, implements

class PasswordDictChecker(object): implements(checkers.ICredentialsChecker) credentialInterfaces = (credentials.IUsernamePassword,) ## credentialInterfaces = (ITelnetProtocol,)

def __init__(self, passwords): "passwords: a dict-like object mapping usernames to passwords" print "DEBUG - PasswordDictChecker - __init__" self.passwords = passwords print "DEBUG - PasswordDictChecker - self.passwords", self.passwords

def requestAvatarId(self, credentials): print "DEBUG - PasswordDictChecker - requestAvatarId - credentials", credentials username = credentials.username if self.passwords.has_key(username): if credentials.password == self.passwords[username]: return defer.succeed(username) else: return defer.fail( credError.UnauthorizedLogin("Bad password")) else: return defer.fail( credError.UnauthorizedLogin("No such user"))

class INamedUserAvatar(Interface): "should have attributes username and fullname" print "DEBUG - INamedUserAvatar :", Interface

class NamedUserAvatar: implements(INamedUserAvatar) def __init__(self, username, fullname): self.username = username self.fullname = fullname print "DEBUG - NamedUserAvatar - __init__ :", username, fullname

class INamedUserAvatar2(ITelnetProtocol): "should have attributes username and fullname" #print "DEBUG - INamedUserAvatar :", Interface

class NamedUserAvatar2: implements(INamedUserAvatar2) def __init__(self, username, fullname): self.username = username self.fullname = fullname print "DEBUG - NamedUserAvatar - __init__ :", username, fullname

class TestRealm: print "DEBUG - class TestRealm" implements(portal.IRealm) print "DEBUG - class TestRealm - after implements"

def __init__(self, users): print "DEBUG - class TestRealm - __init__ users", users self.users = users

def requestAvatar(self, avatarId, mind, interfaces): print "DEBUG - class TestRealm - requestAvatar" print "interfaces", interfaces if INamedUserAvatar in interfaces: print "DEBUG: requestAvatar - avatarId :", avatarId print "DEBUG: requestAvatar - self.users[avatarId] :", self.users[avatarId] fullname = self.users[avatarId] logout = lambda: None print "DEBUG: INamedUserAvatar :",INamedUserAvatar print "DEBUG: NamedUserAvatar(avatarId, fullname) :", NamedUserAvatar(avatarId, fullname) return (INamedUserAvatar, NamedUserAvatar(avatarId, fullname),

logout) elif INamedUserAvatar2 in interfaces: print "DEBUG2: requestAvatar - avatarId :", avatarId print "DEBUG2: requestAvatar - self.users[avatarId] :", self.users[avatarId] fullname = self.users[avatarId] logout = lambda: None print "DEBUG2: INamedUserAvatar :",ITelnetProtocol print "DEBUG2: NamedUserAvatar(avatarId, fullname) :", TelnetProtocol(avatarId, fullname) return (INamedUserAvatar2, NamedUserAvatar2(avatarId, fullname), logout) else: print "DEBUG: requestAvatar - requestAvatar -else :", avatarId raise KeyError("None of the requested interfaces is supported")

class LoginTestProtocol(AuthenticatingTelnetProtocol): print "DEBUG: LoginTestProtocol"

class LoginTestFactory(protocol.ServerFactory): protocol = LoginTestProtocol

def __init__(self, portal): print "DEBUG: LoginTestFactory - __init__ - portal:" self.portal = portal print "DEBUG: LoginTestFactory - __init__ - portal after", repr(self.portal)

users = { 'admin': Admin User, 'user1': Joe Smith, 'user2': Bob King, }

passwords = { 'admin': aaa, 'user1': bbb, 'user2': ccc }

if __name__ == "__main__": p = portal.Portal(TestRealm(users)) p.registerChecker(PasswordDictChecker(passwords)) factory = LoginTestFactory(p) reactor.listenTCP(2323, factory) reactor.run( ) [/code]

et voici le message d'erreur s'affichant dans la console du serveur [code] D:\workspace\Twisted_example>Telnet_Server_with_auth.py DEBUG - INamedUserAvatar : DEBUG - class TestRealm DEBUG - class TestRealm - after implements DEBUG: LoginTestProtocol DEBUG - class TestRealm - __init__ users {'admin': Admin User, 'user2': Bob King, 'user1': 'Joe Smith'} DEBUG - PasswordDictChecker - __init__ DEBUG - PasswordDictChecker - self.passwords {'admin': aaa, 'user2': ccc, 'user1': 'bbb'} DEBUG: LoginTestFactory - __init__ - portal: DEBUG: LoginTestFactory - __init__ - portal after Traceback (most recent call last): File "C:\Python25\lib\site-packages\twisted\python\log.py", line 69, in callWithContext return context.call({ILogContext: newCtx}, func, args, kw) File "C:\Python25\lib\site-packages\twisted\python\context.py", line 59, in callWithContext return self.currentContext().callWithContext(ctx, func, args, *kw) File "C:\Python25\lib\site-packages\twisted\python\context.py", line 37, in callWithContext return func(args,**kw) File "C:\Python25\lib\site-packages\twisted\internet\selectreactor.py", line 146, in _doReadOrWrite why = getattr(selectable, method)() --- --- File "C:\Python25\lib\site-packages\twisted\internet\tcp.py", line 932, in doRead protocol = self.factory.buildProtocol(self._buildAddr(addr)) File "C:\Python25\lib\site-packages\twisted\internet\protocol.py", line 98, in buildProtocol p = self.protocol() exceptions.TypeError: __init__() takes exactly 2 arguments (1 given) [/code]

Cela fait maintenant deux semaine que j'essaye de l'intéger mais je cromprends pas pourquoi cela ne fonctionne pas.

Si quelqu'un pouvait me dire comment faire ...

Merci d'avance

Philippe

filoupython 1 18/08/2009 10:32
Transfert de fichier

Bonjours tout le monde,

Je voudrais programmer un petit logiciel (un client et un serveur en réalité) avec Twisted, qui permet l'envoie de données d'un ordinateur à un autre, à la façon des clients de messagerie, ou des logiciels p2p.

Je précise que je ne connais pas grand chose à la programmation réseau, c'est d'ailleurs ma principale motivation à faire ce programme.

Donc ma question est très simple: comment réaliser ça avec Twisted ?

Pour l'instant, j'ai fait quelques "expérimentations", qui fonctionnent (j'ai la documentation en ligne de Twistedmatrix), ce qui donne comme protocoles :

Pour le client:
[code]
class ClientProtocolTest(protocol.Protocol):
def connectionMade(self):
print "Début du transfert..."
fichier=open('a_envoyer.txt','rb')
self.transport.write(fichier.read())
fichier.close()
self.transport.loseConnection()
[/code]

Et pour le serveur:
[code]
class ServeurProtocolTest(basic.LineReceiver):
def dataReceived(self, data):
print 'reception en cours...'
fichier=open('reception.txt','w')
fichier.write(data)
fichier.close()
print 'fini.'
[/code]

Bon, ça marche (c'est déjà pas mal), mais je ne sais pas ce que ça vaut.

Donc plusieurs questions :
Est-ce la bonne méthode pour transférer des fichiers. Ca marche sur un fichier texte pas très lourd, mais est-ce que ça marchera pour des gros fichiers de plusieurs Mo ? J'ai essayé avec un fichier binaire de 12Mo mais ça n'a pas l'air de marcher: il affiche plein de "reception en cours"/"fini" mais semble se bloquer, et le fichier obtenu fait 4.2Ko.

Faut-il alors le découper en plusieurs envoies ?
Et dans ce cas deux questions : qu'elle est la taille appropriée des paquets ?
Comment faire ça avec Twisted ? faut il envoyer un paquet, puis déconnecter (self.transport.loseConnection()) puis se reconnecter avec le protocole Factory, envoyer un autre paquet et ainsi de suite ?

Et enfin, je ne sais pas quelle est la différence entre dataReceived, et RawdataReceveid, lequel faut-il utiliser ?

Enfin bref, si vous pouviez éclairer ma lanterne :-)
Ou me rediriger vers de la documentation en ligne.

Merci !
PNprog

PNprog 1 27/06/2007 17:51
pb twisted sous unix

salut.
G un pb avec mon application utilisant twisted.
En fait kan je demande à twisted de se connecter à une adresse:port, il rentre bien dans la factory(ClientFactory) mais ne génère pas l'instance(Protocol)(en fait il le fait mais seulement après un crtl-C !). Cela ne se produit que sur un environnement UNIX que ce soit en TCP ou en socket UNIX. En revanche c impeccable sous win.

merci

brouss 3 11/09/2006 17:38
push producer
Bonjour, je viens enfin de trouver ce qu'il me faut aprés bcps bcps de recherche il faut le dire ... Situation: J'ai un client qui envoie un fichier J'ai un autre client qui le reçois Au milieu un serveur twisted ... Le but du jeu (si ont peu appelé ca) est d'envoyer le fichier par petit bout de 1024 via sockets vers le serveur qui lui redirige ce socket vers l'autre socket du client qui doit recevoir le fichier. J'ai donc trouvé "push producer", dont dans la documentation se trouve cette MAGNIFIQUE ligne : "For example, a proxy which forwards incoming bytes from one socket to another outgoing socket might be implemented using a push producer" Source: http://twistedmatrix.com/projects/core/documentation/howto/producers.html Le problème est que je comprends pas comment je peux m'y prendre ... Si quelqu'un pouvait juste m'éclairer, me conseiller, me guider, car je coince a ce niveau (rien de plus sur le net pour satisfaire mon soucis). Merci beaucoups aux personnes qui prendrons la peine de lire ce message et d'y répondre :(
chmod666 0 06/08/2006 15:19
Problème d'import

Salut a tous ! J'essaye d'installer BAlazar (un jeu qui necessite python) et j'ai la version 2.4. Normalement je devrai tout avoir, mais quand je lance le jeu, il me met ca comme message d'erreur :

File "/usr/lib/python2.4/site-packages/tofu/__init__.py", line 101, in ?
import twisted.internet.selectreactor
ImportError: No module named selectreactor


J'ai mis ca dans ce sujet, je crois que ca a rapport avec twisted (je suis newbie :D )
Voila, je suis sous linux (mandriva 2005), j'ai cherché si je pouvais télécharger ce module sur internet, mais j'ai rien trouvé !
Merci de votre aide ! ;)

adele 1 31/07/2006 17:28
Python.org : Le site officiel du langage Python.
Zope.org : Le site web officiel de Zope.
Daily Python-URL : Actus de l'univers Python.
Tribute to Zyons : Zyons notre ami et membre fondateur de l'Afpy, nous quittait en 2005.