From cfd8818e1aba9326091aa5d3c3d58506a8cf17de Mon Sep 17 00:00:00 2001 From: Jean-Christophe Savard Date: Thu, 02 Apr 2009 20:32:41 +0000 Subject: Core : (LP Bug 341760 and 345394) Added data bundling interfaces in bundler.py File tutoserialize.py is obsolete --- (limited to 'src/sugar/tutorius/temp.py') 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 +# +# 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 -- cgit v0.9.1