Helpviewer/Passwords/PasswordWriter.py

changeset 1685
7640d5500966
child 1686
bd756cb42d5b
equal deleted inserted replaced
1683:ef9a9e86269e 1685:7640d5500966
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class to write login data files.
8 """
9
10 from PyQt4.QtCore import QXmlStreamWriter, QIODevice, QFile
11
12
13 class PasswordWriter(QXmlStreamWriter):
14 """
15 Class implementing a writer object to generate login data files.
16 """
17 def __init__(self):
18 """
19 Constructor
20 """
21 super().__init__()
22
23 self.setAutoFormatting(True)
24
25 def write(self, fileNameOrDevice, logins, forms, nevers):
26 """
27 Public method to write an login data file.
28
29 @param fileNameOrDevice name of the file to write (string)
30 or device to write to (QIODevice)
31 @param logins dictionary with login data (user name, password)
32 @param forms list of forms data (list of LoginForm)
33 @param nevers list of URLs to never store data for (list of strings)
34 """
35 if isinstance(fileNameOrDevice, QIODevice):
36 f = fileNameOrDevice
37 else:
38 f = QFile(fileNameOrDevice)
39 if (not logins and not forms and not nevers) or not f.open(QFile.WriteOnly):
40 return False
41
42 self.setDevice(f)
43 return self.__write(logins, forms, nevers)
44
45 def __write(self, logins, forms, nevers):
46 """
47 Private method to write an login data file.
48
49 @param logins dictionary with login data (user name, password)
50 @param forms list of forms data (list of LoginForm)
51 @param nevers list of URLs to never store data for (list of strings)
52 """
53 self.writeStartDocument()
54 self.writeDTD("<!DOCTYPE passwords>")
55 self.writeStartElement("Password")
56 self.writeAttribute("version", "1.0")
57
58 if logins:
59 self.__writeLogins(logins)
60 if forms:
61 self.__writeForms(forms)
62 if nevers:
63 self.__writeNevers(nevers)
64
65 self.writeEndDocument()
66 return True
67
68 def __writeLogins(self, logins):
69 """
70 Private method to write the login data.
71
72 @param logins dictionary with login data (user name, password)
73 """
74 self.writeStartElement("Logins")
75 for key, login in logins.items():
76 self.writeEmptyElement("Login")
77 self.writeAttribute("key", key)
78 self.writeAttribute("user", login[0])
79 self.writeAttribute("password", login[1])
80 self.writeEndElement()
81
82 def __writeForms(self, forms):
83 """
84 Private method to write forms data.
85
86 @param forms list of forms data (list of LoginForm)
87 """
88 self.writeStartElement("Forms")
89 for key, form in forms.items():
90 self.writeStartElement("Form")
91 self.writeAttribute("key", key)
92 self.writeAttribute("url", form.url.toString())
93 self.writeAttribute("name", form.name)
94 self.writeAttribute("password", "yes" if form.hasAPassword else "no")
95 if form.elements:
96 self.writeStartElement("Elements")
97 for element in form.elements:
98 self.writeEmptyElement("Element")
99 self.writeAttribute("name", element[0])
100 self.writeAttribute("value", element[1])
101 self.writeEndElement()
102 self.writeEndElement()
103 self.writeEndElement()
104
105 def __writeNevers(self, nevers):
106 """
107 Private method to write the URLs never to store login data for.
108
109 @param nevers list of URLs to never store data for (list of strings)
110 """
111 self.writeStartElement("Nevers")
112 for never in nevers:
113 self.writeEmptyElement("Never")
114 self.writeAttribute("url", never)
115 self.writeEndElement()

eric ide

mercurial