annotate engine/python/fife/extensions/serializers/simplexml.py @ 697:ecaa4d98f05f tip

Abstracted the GUI code and refactored the GUIChan-specific code into its own module. * Most of the GUIChan code has been refactored into its own gui/guichan module. However, references to the GuiFont class still persist in the Engine and GuiManager code and these will need further refactoring. * GuiManager is now an abstract base class which specific implementations (e.g. GUIChan) should subclass. * The GUIChan GUI code is now a concrete implementation of GuiManager, most of which is in the new GuiChanGuiManager class. * The GUI code in the Console class has been refactored out of the Console and into the GUIChan module as its own GuiChanConsoleWidget class. The rest of the Console class related to executing commands was left largely unchanged. * Existing client code may need to downcast the GuiManager pointer received from FIFE::Engine::getGuiManager() to GuiChanGuiManager, since not all functionality is represented in the GuiManager abstract base class. Python client code can use the new GuiChanGuiManager.castTo static method for this purpose.
author M. George Hansen <technopolitica@gmail.com>
date Sat, 18 Jun 2011 00:28:40 -1000
parents 567d53c1c010
children
rev   line source
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
1 # -*- coding: utf-8 -*-
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
2
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
3 # ####################################################################
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
4 # Copyright (C) 2005-2010 by the FIFE team
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
5 # http://www.fifengine.net
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
6 # This file is part of FIFE.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
7 #
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
8 # FIFE is free software; you can redistribute it and/or
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
9 # modify it under the terms of the GNU Lesser General Public
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
10 # License as published by the Free Software Foundation; either
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
11 # version 2.1 of the License, or (at your option) any later version.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
12 #
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
13 # This library is distributed in the hope that it will be useful,
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
16 # Lesser General Public License for more details.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
17 #
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
18 # You should have received a copy of the GNU Lesser General Public
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
19 # License along with this library; if not, write to the
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
20 # Free Software Foundation, Inc.,
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
21 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
22 # ####################################################################
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
23
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
24 import os
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
25 from StringIO import StringIO
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
26
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
27 from fife.extensions.serializers import ET, SerializerError, InvalidFormat, NotFound
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
28
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
29
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
30 EMPTY_XML_FILE="""\
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
31 <?xml version='1.0' encoding='UTF-8'?>
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
32 <Settings>
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
33
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
34 </Settings>
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
35 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
36
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
37 class SimpleSerializer(object):
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
38 """
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
39 Use this as a base class for custom setting loaders/savers to use with the Setting class.
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
40 """
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
41
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
42 def __init__(self, filename=None):
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
43 pass
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
44
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
45 def get(self, module, name, defaultValue=None):
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
46 pass
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
47
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
48 def set(self, module, name, value, extra_attrs={}):
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
49 pass
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
50
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
51 def load(self, filename=None):
614
567d53c1c010 Added the ability to specify the default settings filename. Also added the serializer get property.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 612
diff changeset
52 """
567d53c1c010 Added the ability to specify the default settings filename. Also added the serializer get property.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 612
diff changeset
53 @note: If the filename specified is empty this function MUST initialize an empty settings
567d53c1c010 Added the ability to specify the default settings filename. Also added the serializer get property.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 612
diff changeset
54 file in whatever format you need.
567d53c1c010 Added the ability to specify the default settings filename. Also added the serializer get property.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 612
diff changeset
55 """
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
56 pass
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
57
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
58 def save(self, filename=None):
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
59 pass
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
60
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
61
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
62 class SimpleXMLSerializer(SimpleSerializer):
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
63 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
64 This class is a simple interface to get and store data in XML files.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
65
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
66 Usage::
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
67 from fife.extensions.serializers.simplexml import SimpleXMLSerializer
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
68 serializer = SimpleXMLSerializer(filename="somefile.xml")
596
0bbe6e8ad9c8 - corrected example in docstring
chewie@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 569
diff changeset
69 serializer.set("module_name", "variable_name", "value")
0bbe6e8ad9c8 - corrected example in docstring
chewie@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 569
diff changeset
70 somevariable = serializer.get("module_name", "variable_name", "default_value")
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
71 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
72 def __init__(self, filename=None):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
73 self._file = filename
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
74 self._tree = None
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
75 self._root_element = None
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
76
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
77 self._initialized = False
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
78
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
79 def load(self, filename=None):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
80 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
81 Loads the XML file into memory and validates it.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
82
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
83 Raises a SerializerError exception if the file is not specified.
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
84
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
85 @param filename: The file to load
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
86 @type filename: C{str}
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
87
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
88 @note: If the file does not exist it will automatically create a blank file for you.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
89 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
90 if filename:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
91 self._file = filename
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
92
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
93 if not self._file:
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
94 raise SerializerError("Cannot load file or create file. No filename specified!")
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
95
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
96 if not os.path.exists(self._file):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
97 self._tree = ET.parse(StringIO(EMPTY_XML_FILE))
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
98 self._tree.write(self._file, 'UTF-8')
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
99 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
100 self._tree = ET.parse(self._file)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
101
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
102 self._root_element = self._tree.getroot()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
103 self._validateTree()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
104
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
105 def save(self, filename=None):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
106 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
107 Saves the XML file.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
108
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
109 @param filename: The file to save
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
110 @type filename: C{str}
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
111
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
112 @note: This Overwrites the file if it exists.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
113 """
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
114 if not self._initialized:
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
115 self.load()
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
116 self._initialized = True
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
117
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
118 if filename:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
119 savefile = filename
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
120 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
121 savefile = self._file
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
122
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
123 if not savefile:
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
124 raise SerializerError("Cannot save file. No filename specified!")
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
125
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
126 """ Writes the settings to file """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
127 self._indent(self._root_element)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
128 self._tree.write(savefile, 'UTF-8')
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
129
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
130
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
131 def get(self, module, name, defaultValue=None):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
132 """ Gets the value of a specified variable
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
133
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
134 @param module: Name of the module to get the variable from
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
135 @param name: Variable name
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
136 @param defaultValue: Specifies the default value to return if the variable is not found
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
137 @type defaultValue: C{str} or C{unicode} or C{int} or C{float} or C{bool} or C{list} or C{dict}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
138 """
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
139 if not self._initialized:
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
140 self.load()
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
141 self._initialized = True
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
142
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
143 if not isinstance(name, str) and not isinstance(name, unicode):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
144 raise AttributeError("SimpleXMLSerializer.get(): Invalid type for name argument.")
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
145
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
146 moduleTree = self._getModuleTree(module)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
147 element = None
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
148 for e in moduleTree.getchildren():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
149 if e.tag == "Setting" and e.get("name", "") == name:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
150 element = e
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
151 break
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
152 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
153 return defaultValue
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
154
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
155 e_value = element.text
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
156 e_strip = element.get("strip", "1").strip().lower()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
157 e_type = str(element.get("type", "str")).strip()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
158
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
159 if e_value is None:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
160 return defaultValue
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
161
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
162 # Strip value
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
163 if e_strip == "" or e_strip == "false" or e_strip == "no" or e_strip == "0":
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
164 e_strip = False
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
165 else: e_strip = True
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
166
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
167 if e_type == "str" or e_type == "unicode":
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
168 if e_strip: e_value = e_value.strip()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
169 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
170 e_value = e_value.strip()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
171
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
172 # Return value
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
173 if e_type == 'int':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
174 return int(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
175 elif e_type == 'float':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
176 return float(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
177 elif e_type == 'bool':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
178 e_value = e_value.lower()
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
179 if e_value == "" or e_value == "false" or e_value == "no" or e_value == "0":
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
180 return False
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
181 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
182 return True
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
183 elif e_type == 'str':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
184 return str(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
185 elif e_type == 'unicode':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
186 return unicode(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
187 elif e_type == 'list':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
188 return self._deserializeList(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
189 elif e_type == 'dict':
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
190 return self._deserializeDict(e_value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
191
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
192 def set(self, module, name, value, extra_attrs={}):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
193 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
194 Sets a variable to specified value.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
195
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
196 @param module: Module where the variable should be set
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
197 @param name: Name of the variable
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
198 @param value: Value to assign to the variable
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
199 @type value: C{str} or C{unicode} or C{int} or C{float} or C{bool} or C{list} or C{dict}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
200 @param extra_attrs: Extra attributes to be stored in the XML-file
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
201 @type extra_attrs: C{dict}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
202 """
612
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
203 if not self._initialized:
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
204 self.load()
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
205 self._initialized = True
867aad1c01cd Added the ability to use a custom serializer with the fife.Setting class.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 596
diff changeset
206
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
207 if not isinstance(name, str) and not isinstance(name, unicode):
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
208 raise AttributeError("SimpleXMLSerializer.set(): Invalid type for name argument.")
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
209
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
210 moduleTree = self._getModuleTree(module)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
211 e_type = "str"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
212
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
213 if isinstance(value, bool): # This must be before int
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
214 e_type = "bool"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
215 value = str(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
216 elif isinstance(value, int):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
217 e_type = "int"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
218 value = str(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
219 elif isinstance(value, float):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
220 e_type = "float"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
221 value = str(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
222 elif isinstance(value, unicode):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
223 e_type = "unicode"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
224 value = unicode(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
225 elif isinstance(value, list):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
226 e_type = "list"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
227 value = self._serializeList(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
228 elif isinstance(value, dict):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
229 e_type = "dict"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
230 value = self._serializeDict(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
231 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
232 e_type = "str"
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
233 value = str(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
234
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
235 for e in moduleTree.getchildren():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
236 if e.tag != "Setting": continue
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
237 if e.get("name", "") == name:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
238 e.text = value
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
239 break
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
240 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
241 attrs = {"name":name, "type":e_type}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
242 for k in extra_attrs:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
243 if k not in attrs:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
244 attrs[k] = extra_args[k]
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
245 elm = ET.SubElement(moduleTree, "Setting", attrs)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
246 elm.text = value
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
247
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
248 def _validateTree(self):
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
249 """
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
250 Iterates the XML tree and prints warning when an invalid tag is found.
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
251
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
252 Raises an InvalidFormat exception if there is a format error.
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
253 """
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
254 for c in self._root_element.getchildren():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
255 if c.tag != "Module":
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
256 raise InvalidFormat("Invalid tag in " + self._file + ". Expected Module, got: " + c.tag)
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
257 elif c.get("name", "") == "":
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
258 raise InvalidFormat("Invalid tag in " + self._file + ". Module name is empty.")
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
259 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
260 for e in c.getchildren():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
261 if e.tag != "Setting":
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
262 raise InvalidFormat("Invalid tag in " + self._file + " in module: " + c.tag + ". Expected Setting, got: " + e.tag)
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
263 elif c.get("name", "") == "":
569
466d76db9701 Some small code cleanups in the extensions.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 568
diff changeset
264 raise InvalidFormat("Invalid tag in " + self._file + " in module: " + c.tag + ". Setting name is empty" + e.tag)
568
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
265
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
266 def _getModuleTree(self, module):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
267 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
268 Returns a module element from the XML tree. If no module with the specified
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
269 name exists, a new element will be created.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
270
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
271 @param module: The module to get from the settings tree
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
272 @type module: C{string}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
273 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
274 if not isinstance(module, str) and not isinstance(module, unicode):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
275 raise AttributeError("Settings:_getModuleTree: Invalid type for module argument.")
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
276
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
277 for c in self._root_element.getchildren():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
278 if c.tag == "Module" and c.get("name", "") == module:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
279 return c
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
280
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
281 # Create module
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
282 return ET.SubElement(self._root_element, "Module", {"name":module})
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
283
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
284 def _indent(self, elem, level=0):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
285 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
286 Adds whitespace, so the resulting XML-file is properly indented.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
287 Shamelessly stolen from http://effbot.org/zone/element-lib.htm
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
288 """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
289 i = "\n" + level*" "
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
290 if len(elem):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
291 if not elem.text or not elem.text.strip():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
292 elem.text = i + " "
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
293 if not elem.tail or not elem.tail.strip():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
294 elem.tail = i
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
295 for elem in elem:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
296 self._indent(elem, level+1)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
297 if not elem.tail or not elem.tail.strip():
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
298 elem.tail = i
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
299 else:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
300 if level and (not elem.tail or not elem.tail.strip()):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
301 elem.tail = i
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
302
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
303 # FIXME:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
304 # These serialization functions are not reliable at all
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
305 # This will only serialize the first level of a dict or list
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
306 # It will not check the types nor the content for conflicts.
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
307 # Perhaps we should add a small serialization library?
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
308 def _serializeList(self, list):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
309 """ Serializes a list, so it can be stored in a text file """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
310 return " ; ".join(list)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
311
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
312 def _deserializeList(self, string):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
313 """ Deserializes a list back into a list object """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
314 return string.split(" ; ")
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
315
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
316 def _serializeDict(self, dict):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
317 """ Serializes a list, so it can be stored in a text file """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
318 serial = ""
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
319 for key in dict:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
320 value = dict[key]
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
321 if serial != "": serial += " ; "
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
322 serial += str(key)+" : "+str(value)
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
323
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
324 return serial
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
325
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
326 def _deserializeDict(self, serial):
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
327 """ Deserializes a list back into a dict object """
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
328 dict = {}
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
329 items = serial.split(" ; ")
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
330 for i in items:
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
331 kv_pair = i.split(" : ")
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
332 dict[kv_pair[0]] = kv_pair[1]
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
333 return dict
bfbf329e1da8 Forgot to add the simplexml.py file in my last commit.
prock@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
334