Hast Du beide Programme in der gleichen Konsole gestartet? Wenn man beide in unterschiedlichen startet, sieht man schneller wer da mit Ausnahmen um sich wirft.

Code: Alles auswählen
def listAllKeys(self):
for key in keys.itervalues():
return key.algo, key.key, key.hashval, key.name, key.host
Code: Alles auswählen
print server.listAllKeys()
Code: Alles auswählen
def test(self):
return self._shelve.keys()
Hi dankegut!dankegut hat geschrieben:Fault: <Fault 1: "exceptions.TypeError:cannot marshal <class '__main__.Key'> objects">
Code: Alles auswählen
def listAllKeys(self):
tmp = ''
for key in keys.itervalues():
tmp += str([key.algo, key.key, key.hashval, key.name, key.host]) + "\n"
bintmp = xmlrpclib.Binary(tmp)
return bintmp
Code: Alles auswählen
def create_dbstructure(self):
"""
Erstellt die Tabellen
"""
cur = self.cur
conn = self.conn
# keys-Tabelle erstellen, falls noch nicht erstellt.
sql = """
SELECT name FROM sqlite_master
WHERE (type = 'table') AND (name = 'keys')
"""
cur.execute(sql)
if not self.cur.fetchone():
# Die Tabelle existiert noch nicht. Sie kann erstellt werden.
sql = """
CREATE TABLE keys (
key TEXT PRIMARY KEY NOT NULL,
algo TEXT,
name TEXT,
hashval TEXT
)
"""
cur.execute(sql)
# Index(e) erstellen
sql = """
SELECT name FROM sqlite_master
WHERE (type = 'index') AND (name = 'i_keys_algo')
"""
cur.execute(sql)
if not cur.fetchone():
sql = "CREATE INDEX i_keys_algo ON keys (algo)"
cur.execute(sql)
conn.commit()
Code: Alles auswählen
def create_dbstructure(self):
"""
Erstellt die Tabellen
"""
cur = self.cur
conn = self.conn
# Erstellt die Tabelle falls sie noch nicht existiert.
# Dies wird durch die Abfrage IF EXIST erreicht die glücklicherweise
# auch in SQLite funktioniert :)
sql = """
CREATE TABLE IF NOT EXISTS keys (
key TEXT PRIMARY KEY NOT NULL,
algo TEXT,
name TEXT,
hashval TEXT
)
"""
cur.execute(sql)
# Index(e) erstellen
sql = """
SELECT name FROM sqlite_master
WHERE (type = 'index') AND (name = 'i_keys_algo')
"""
cur.execute(sql)
if not cur.fetchone():
sql = "CREATE INDEX i_keys_algo ON keys (algo)"
cur.execute(sql)
conn.commit()
Hi XtraNine!XtraNine hat geschrieben:Ich würde das nicht so umständlich machen sondern gleich ein "IF EXIST" einbauen.
Wünsch dir eine gute BesserungPS: Und jetzt gehe ich wieder ins Bett, meine Grippe ausschlafen.
jens hat geschrieben:Und die harten Jungs, erzeugen einfach die Tabelle und fangen den Fehler, wenn diese schon existiert, mit try-except ab
Code: Alles auswählen
try:
filelist = self.get_filedata()
except Exception, e:
if not "doesn't exist" in str(e):
raise Exception(e)
self.page_msg.red("Error: %s" % e)
else:
self.create_table()
Code: Alles auswählen
def receiveKey(self, key):
# check if key exists
for k in keys.itervalues():
if k.key == key:
key = keys.get_key(key)
return key.algo, key.key, key.hashval, key.name, key.host
else:
return "Key not found"
Code: Alles auswählen
File "client.py", line 59, in run
print server.sendKey(key1)
Code: Alles auswählen
def sendKey(self, key_dict):
# check algorithm type
if key_dict["algo"] == "RSA":
# check if name/key already exists
for key in keys.itervalues():
if key.name == key_dict["name"]:
return "Name already exists"
else:
# save key if it doesn't exist
keys.set_rsa_key(key_dict["algo"],key_dict["key"],key_dict["hashval"],key_dict["name"],key_dict["host"])
return "successfully saved RSA Key"
if key_dict["algo"] == "ElGamal":
for k in keys.itervalues():
if k.name == key_dict["name"]:
return "Name already exists"
else:
keys.set_elgamal_key(key_dict["algo"], key_dict["key1"], key_dict["key2"],
key_dict["key3"], key_dict["hashval"], key_dict["name"], key_dict["host"])
return "successfully saved ElGamal Key"
else:
return "No valid Key"
Code: Alles auswählen
def send_key(self, key_dict):
algo_map = { 'RSA': (keys.set_rsa_key, ('algo', 'key', 'hashval',
'name', 'host')),
'ElGamal': (keys.set_elgamal_key, ('algo', 'key1', 'key2',
'key3', 'hashval',
'name', 'host')) }
algo_name = key_dict['algo']
if algo_name in algo_map:
name = key_dict['name']
for key in keys.itervalues():
if key.name == name and key.algo == algo_name:
return 'Name already exists'
set_func, attr_names = algo_map[algo_name]
set_func(*[key_dict[attr_name] for attr_name in attr_names])
return 'Successfully saved %s key' % algo_name
else:
return 'No valid Key'
Modul(e) im Interpretierer importieren und die Funktionen alle mal per Hand austesten und/oder Doctests und/oder Unit-Tests schreiben.dankegut hat geschrieben:vielleicht wer ne idee?