2012-03-26 10 views
0

Ich bin neu bei den meisten davon, also vergib mir, wenn ich etwas wirklich Dummes mache. Der folgende Code ist ein einfacher Twisted xmlrpc-Server, der Dateiinformationen zurückgeben soll. Es funktioniert gut, außer dass die Funktion xmlrpc_hash für jede Datei das gleiche Ergebnis liefert. Beispiel unter dem Code. Jede Hilfe wäre großartig!Python-Hash-Funktion als Twisted xmlrpc Klasse Ausgabe hat für jede Datei?

from twisted.web import xmlrpc, server 
import os 

class rfi(xmlrpc.XMLRPC): 
    """ 
    rfi - Remote File Info server 
    """ 

    def xmlrpc_echo(self, x): 
     """ 
     Return all passed args as a test 
     """ 
     return x 

    def xmlrpc_location(self): 
     """ 
     Return current directory name 
     """ 
     return os.getcwd() 

    def xmlrpc_ls(self, path): 
     """ 
     Run ls on the path 
     """ 
     result = [] 
     listing = os.listdir(path) 
     for l in listing: 
      result.append(l) 
     return result 

    def xmlrpc_stat(self, path): 
     """ 
     Stat the path 
     """ 
     result = str(os.stat(path)) 
     return result 

    def xmlrpc_hash(self, path): 
     """ 
     Hash the path 
     """ 
     from hashlib import sha1 
     if os.path.isfile(path): 
      f = open(path,'rb') 
      h = sha1() 
      block_size = 2**20 
      f.close() 
      return h.hexdigest() 
     else: 
      return 'Not a file' 

if __name__ == '__main__': 
    from twisted.internet import reactor 
    r = rfi() 
    reactor.listenTCP(7081, server.Site(r)) 
    reactor.run() 

Beispiel Ausgabe:

import xmlrpclib 
s = xmlrpclib.Server('http://localhost:7081/') 
s.hash('file_1.txt') 
'da39a3ee5e6b4b0d3255bfef95601890afd80709' 
s.hash('file_2.txt') 
'da39a3ee5e6b4b0d3255bfef95601890afd80709' 
+1

Voting als auch lokalisierte zu schließen, weil „Diese Frage ist unwahrscheinlich, dass jemals Hilfe für zukünftige Besucher; es ist nur relevant für ... eine knappe Situation, die nicht allgemein für die weltweite Zielgruppe des Internets gilt. "Versuchen Sie in Zukunft, nur die minimale Menge an Code zu posten, die für die Wiederherstellung Ihres Problems erforderlich ist. –

+0

Punkt, aber in meiner Verteidigung war ich nicht sicher, ob es das verdrehte Objekt oder die Hash-Funktion war, die das Problem war – MFB

+0

Natürlich - keine Sorgen. Ich weiß nur, dass es einfacher ist, Fragen mit einem höheren Signal-Rausch-Verhältnis zu beantworten, sie werden eher zukünftigen Besuchern helfen und (zumindest in meiner Erfahrung) finde ich oft die Lösung für mein Problem, wenn ich das Problem eingrenzen möchte Code, der fehlerhaft ist. –

Antwort

2

Dies ist, weil Sie eigentlich nie das Hash-Objekt zu aktualisieren:

from hashlib import sha1 
    if os.path.isfile(path): 
     f = open(path,'rb') 
     h = sha1() 
     h.update(f.read()) # You're missing this line 
     f.close() 
     return h.hexdigest() 
    else: 
     return 'Not a file' 
+0

ah ja, danke für deine Hilfe trotz deines vorherigen Kommentars – MFB