Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/tutorius/temp.py
diff options
context:
space:
mode:
authorJean-Christophe Savard <savard.jean.christophe@gmail.com>2009-04-02 20:32:41 (GMT)
committer Jean-Christophe Savard <savard.jean.christophe@gmail.com>2009-04-16 19:09:27 (GMT)
commitf6523a5d023ce81d54852c7109d383f1016696af (patch)
tree8dc6b036096e3f0ad1046bc69f77681e99f27800 /src/sugar/tutorius/temp.py
parenteb03421c5dd132fb79ac12a436efefbfb0287544 (diff)
Core : (LP Bug 341760 and 345394)
Added data bundling interfaces in bundler.py File tutoserialize.py is obsolete
Diffstat (limited to 'src/sugar/tutorius/temp.py')
-rw-r--r--src/sugar/tutorius/temp.py176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/sugar/tutorius/temp.py b/src/sugar/tutorius/temp.py
new file mode 100644
index 0000000..f9ca9db
--- /dev/null
+++ b/src/sugar/tutorius/temp.py
@@ -0,0 +1,176 @@
+# Copyright (C) 2009, Tutorius.org
+# Copyright (C) 2009, Jean-Christophe Savard <savard.jean.christophe@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+"""
+This module contains all the data handling class of Tutorius
+"""
+
+import logging
+import linecache
+import os
+
+from sugar.tutorius import gtkutils, overlayer
+from sugar.tutorius.core import Tutorial, State, FiniteStateMachine
+from sugar.tutorius.actions import DialogMessage, OnceWrapper, BubbleMessage
+from sugar.tutorius.filters import GtkWidgetEventFilter, TimerEvent
+
+class TutorialStore:
+
+ def list_avaible_tutorials(self, activity_name):
+ """
+ Recuperate the list of all tutorials present on disk for a
+ given activity.
+ """
+ # TODO : Temp path; decide how .tml files will be distrribued in file
+ # architecture
+
+ path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
+ logging.debug("*********** Path of /data/ folder of activity : " + path)
+
+ # Create /data/ folder if no exists
+ if not os.path.exists(path):
+ os.mkdir(path)
+ logging.debug("************* Creating data folder")
+
+ tutoKeyName = {}
+
+ # iterate for each .tml file in the activity /data folder
+ for file_name in os.listdir(path):
+
+ if file_name.endswith(".tml"):
+ logging.debug("************** .tml file found : " + file_name)
+
+ # TODO : Filter for just current activity files
+ # (design convention and/or filter xxxxx.yyyyyy key ? )
+
+ # Get the key line (always 1st line of .tml file)
+ key_line = linecache.getline(path + file_name, 1)
+ key_line = key_line.split("\n")[0]
+ # Get the name line (always 2nd line of .tml file)
+ name_line = linecache.getline(path + file_name, 2)
+ name_line = name_line.split("\n")[0]
+ # Create dictionary
+ tutoKeyName[key_line.split("--KEY::")[1]] = \
+ name_line.split("--NAME::")[1]
+
+
+## tutoKeyName = {}
+## tutoKeyName["Writus.CopyPasteStyle"] = "Copy-paste and style"
+
+ return tutoKeyName
+
+
+
+class Serializer:
+ """
+ Class that provide serializing and deserializing of the FSM
+ used in the tutorials to/from disk.
+ """
+
+ def save_fsm(self,fsm):
+ """
+ Save fsm to disk.
+ """
+ NotImplementedError
+
+ def load_fsm(self, guid):
+ """
+ Load fsm from disk.
+ """
+ NotImplementedError
+
+class XMLSerializer(Serializer):
+ """
+ Class that provide serializing and deserializing of the FSM
+ used in the tutorials to/from a xml file.
+ """
+
+ def save_fsm(self,fsm):
+ """
+ Save fsm to .xml file
+ """
+ path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
+ logging.debug("************ Path of /data/ folder of activity : " \
+ + path)
+ logging.debug("************ User key = " + key)
+
+ # iterate for each .tml file in the activity /data folder
+ for file_name in os.listdir(path):
+
+ if file_name.endswith(".tml"):
+
+ logging.debug("************ found .tml file : " + file_name)
+ key_line = linecache.getline(path + file_name, 1)
+ key_line = key_line.split("\n")[0]
+ fileKey = key_line.split("--KEY::")[1]
+ logging.debug("************ fileKey = " + fileKey)
+ if key == fileKey:
+ logging.debug("************ Key : " + key + \
+ " = fileKey : " + fileKey)
+ tml = file(path + file_name, "r")
+ str = tml.read()
+ pick = str.split("--PICKLE::")[1]
+
+ fsm = pickle.loads(pick)
+ tuto = {key:Tutorial(key,fsm)}
+
+ return tuto
+
+
+ def load_fsm(self, guid):
+ """
+ Load fsm from xml file who .ini file guid match argument guid.
+ """
+
+ path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
+ # Create /data/ folder if no exists
+ if not os.path.exists(path):
+ os.mkdir(path)
+ logging.debug("************* Creating data folder")
+
+ # Save the dictionnary to .tml file
+ tutoSave = file(path + filename + ".tml", 'w')
+ str = "--KEY::" + key + "\n--NAME::" + name + "\n--PICKLE::" + \
+ pickle.dumps(fsm,0)
+ tutoSave.write(str)
+ tutoSave.close()
+
+
+class TutorialBundler:
+ """
+ This class provide the various data handling methods useable by the tutorial
+ editor.
+ """
+
+ def write_metadata_file(data):
+ """
+ Write metadata to a .ini file.
+ """
+ NotImplementedError
+
+ def write_fsm(fsm):
+ """
+ Write fsm to disk.
+ """
+ NotImplementedError
+
+ def add_resources(typename, file):
+ """
+ Add ressources to metadata.
+ """
+ NotImplementedError \ No newline at end of file