WebBrowser/Passwords/PasswordWriter.py

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

eric ide

mercurial